Plotting Issue with Run JEDI-FV3 in a Container

This post is to report a possible bug related to plotting when going through the Tutorial “Run JEDI-FV3 in a Container” running on a server running CentOS:
https://jointcenterforsatellitedataassimilation-jedi-docs.readthedocs-hosted.com/en/latest/learning/tutorials/level1/run-jedi.html

The error occurred here during Step 4: View the Increment. Here is the error:

Blockquote
Singularity> fv3jedi_plot_field.x --inputfile=3denvar.latlon.20180415_000000z.nc4 --fieldname=T --layer=50

Opening 3denvar.latlon.20180415_000000z.nc4 for reading
Grid dimensions 96 x 49 x 64
Reading layer 50 from field T
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to ‘/tmp/runtime-mjmurphy’
Saving figure as 3denvar.latlon.20180415_000000z_T_layer-50.png

/usr/local/miniconda3/lib/python3.8/site-packages/cartopy/io/init.py:260: DownloadWarning: Downloading: https://naciscdn.org/naturalearth/110m/physical/ne_110m_coastline.zip
warnings.warn(‘Downloading: {}’.format(url), DownloadWarning)
Traceback (most recent call last):
File “/usr/local/miniconda3/lib/python3.8/urllib/request.py”, line 1350, in do_open
h.request(req.get_method(), req.selector, req.data, headers,
File “/usr/local/miniconda3/lib/python3.8/http/client.py”, line 1255, in request
self._send_request(method, url, body, headers, encode_chunked)
File “/usr/local/miniconda3/lib/python3.8/http/client.py”, line 1301, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File “/usr/local/miniconda3/lib/python3.8/http/client.py”, line 1250, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File “/usr/local/miniconda3/lib/python3.8/http/client.py”, line 1010, in _send_output
self.send(msg)
File “/usr/local/miniconda3/lib/python3.8/http/client.py”, line 950, in send
self.connect()
File “/usr/local/miniconda3/lib/python3.8/http/client.py”, line 1417, in connect
super().connect()
File “/usr/local/miniconda3/lib/python3.8/http/client.py”, line 921, in connect
self.sock = self._create_connection(
File “/usr/local/miniconda3/lib/python3.8/socket.py”, line 787, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File “/usr/local/miniconda3/lib/python3.8/socket.py”, line 918, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/opt/jedi/build/bin/fv3jedi_plot_field.x”, line 141, in
main()
File “/usr/local/miniconda3/lib/python3.8/site-packages/click/core.py”, line 1137, in call
return self.main(*args, **kwargs)
File “/usr/local/miniconda3/lib/python3.8/site-packages/click/core.py”, line 1062, in main
rv = self.invoke(ctx)
File “/usr/local/miniconda3/lib/python3.8/site-packages/click/core.py”, line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File “/usr/local/miniconda3/lib/python3.8/site-packages/click/core.py”, line 763, in invoke
return __callback(*args, **kwargs)
File “/opt/jedi/build/bin/fv3jedi_plot_field.x”, line 133, in main
plt.savefig(outfile)
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/pyplot.py”, line 859, in savefig
res = fig.savefig(*args, **kwargs)
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/figure.py”, line 2311, in savefig
self.canvas.print_figure(fname, **kwargs)
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/backends/backend_qt5agg.py”, line 81, in print_figure
super().print_figure(*args, **kwargs)
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/backend_bases.py”, line 2210, in print_figure
result = print_method(
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/backend_bases.py”, line 1639, in wrapper
return func(*args, **kwargs)
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py”, line 509, in print_png
FigureCanvasAgg.draw(self)
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py”, line 407, in draw
self.figure.draw(self.renderer)
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/artist.py”, line 41, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/figure.py”, line 1863, in draw
mimage._draw_list_compositing_images(
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/image.py”, line 131, in _draw_list_compositing_images
a.draw(renderer)
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/artist.py”, line 41, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File “/usr/local/miniconda3/lib/python3.8/site-packages/cartopy/mpl/geoaxes.py”, line 479, in draw
return matplotlib.axes.Axes.draw(self, renderer=renderer, **kwargs)
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/artist.py”, line 41, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/cbook/deprecation.py”, line 411, in wrapper
return func(*inner_args, **inner_kwargs)
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/axes/_base.py”, line 2747, in draw
mimage._draw_list_compositing_images(renderer, self, artists)
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/image.py”, line 131, in _draw_list_compositing_images
a.draw(renderer)
File “/usr/local/miniconda3/lib/python3.8/site-packages/matplotlib/artist.py”, line 41, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File “/usr/local/miniconda3/lib/python3.8/site-packages/cartopy/mpl/feature_artist.py”, line 155, in draw
geoms = self._feature.intersecting_geometries(extent)
File “/usr/local/miniconda3/lib/python3.8/site-packages/cartopy/feature/init.py”, line 302, in intersecting_geometries
return super(NaturalEarthFeature, self).intersecting_geometries(extent)
File “/usr/local/miniconda3/lib/python3.8/site-packages/cartopy/feature/init.py”, line 110, in intersecting_geometries
return (geom for geom in self.geometries() if
File “/usr/local/miniconda3/lib/python3.8/site-packages/cartopy/feature/init.py”, line 284, in geometries
path = shapereader.natural_earth(resolution=self.scale,
File “/usr/local/miniconda3/lib/python3.8/site-packages/cartopy/io/shapereader.py”, line 295, in natural_earth
return ne_downloader.path(format_dict)
File “/usr/local/miniconda3/lib/python3.8/site-packages/cartopy/io/init.py”, line 222, in path
result_path = self.acquire_resource(target_path, format_dict)
File “/usr/local/miniconda3/lib/python3.8/site-packages/cartopy/io/shapereader.py”, line 350, in acquire_resource
shapefile_online = self._urlopen(url)
File “/usr/local/miniconda3/lib/python3.8/site-packages/cartopy/io/init.py”, line 261, in _urlopen
return urlopen(url)
File “/usr/local/miniconda3/lib/python3.8/urllib/request.py”, line 222, in urlopen
return opener.open(url, data, timeout)
File “/usr/local/miniconda3/lib/python3.8/urllib/request.py”, line 525, in open
response = self._open(req, data)
File “/usr/local/miniconda3/lib/python3.8/urllib/request.py”, line 542, in _open
result = self._call_chain(self.handle_open, protocol, protocol +
File “/usr/local/miniconda3/lib/python3.8/urllib/request.py”, line 502, in _call_chain
result = func(*args)
File “/usr/local/miniconda3/lib/python3.8/urllib/request.py”, line 1393, in https_open
return self.do_open(http.client.HTTPSConnection, req,
File “/usr/local/miniconda3/lib/python3.8/urllib/request.py”, line 1353, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in name resolution>

Thanks @mjm - yes, we noticed this too and it is due to an update of the python plotting package cartopy. Cartopy downloads coastline data from the web but as of the most recent version of cartopy (0.20.0), they changed the url of that data.

We will fix this in the tutorial container soon after we sort out another, unrelated issue. But in the mean time you can fix it by downloading the data manually as described below.

The solution:

first get the following file:

wget https://naturalearth.s3.amazonaws.com/110m_physical/ne_110m_coastline.zip

Unzip ne_110m_coastline.zip

Copy/move the entire contents of ne_110m_coastline directory (not the directory itself) to this location in your home directory (note this is outside the container but visible from inside): ~/.local/share/cartopy/shapefiles/natural_earth/physical/ .

see here for further information

1 Like