-
Notifications
You must be signed in to change notification settings - Fork 224
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GMTDataArrayAccessor doesn't work for temporary files that have been sliced #524
Comments
Good spotting, this won't be specific to just Lines 114 to 115 in f401f85
There's 2 solutions I can see:
Which would you prefer? Or is there a third way to resolve this? |
We probably don't want to maintain a list of temporary files.
It sounds a good way, but how to trigger it? BTW, at least we need to check if the netCDF source exists in GMTDataArrayAccessor. |
Simply by calling
Yes, the error message could be improved, will see how best to do this in the PR. |
Do you mean the following code?
It's a little weird. |
I think just |
Perhaps we can add |
Ok, I'll try and do that tonight after dinner. |
Keep the issue open, since we don't really like the workaround. |
It still doesn't work for a slice of a grid. For example: In [1]: import pygmt
In [2]: grid = pygmt.grdcut("@earth_relief_01d", region="0/90/0/90")
In [3]: grid.gmt.registration
Out[3]: 1
In [4]: grid2 = grid[10:41,30:101]
In [5]: grid2
Out[5]:
<xarray.DataArray 'z' (lat: 31, lon: 60)>
array([[ 482. , 435. , 391.5, ..., -3402.5, -3340.5, -3281. ],
[ 731. , 571. , 393. , ..., -3303.5, -3228.5, -3176. ],
[ 543. , 490. , 395.5, ..., -3166.5, -3132. , -3066.5],
...,
[ 1312.5, 1136.5, 1058. , ..., 1514.5, 3121. , 3689.5],
[ 1104.5, 993.5, 1084.5, ..., 875.5, 815.5, 894.5],
[ 623. , 1156. , 1329. , ..., 861.5, 836. , 822. ]],
dtype=float32)
Coordinates:
* lon (lon) float64 30.5 31.5 32.5 33.5 34.5 ... 85.5 86.5 87.5 88.5 89.5
* lat (lat) float64 10.5 11.5 12.5 13.5 14.5 ... 36.5 37.5 38.5 39.5 40.5
Attributes:
long_name: elevation (m)
actual_range: [-5122. 5651.5]
In [6]: grid2.gmt.registration
grdinfo [ERROR]: File /var/folders/mz/d3wtwjtx4fg8qlds5lgt1c240000gn/T/pygmt-15alnpr7.nc was not found
grdinfo [ERROR]: Cannot find file /var/folders/mz/d3wtwjtx4fg8qlds5lgt1c240000gn/T/pygmt-15alnpr7.nc
grdinfo [ERROR]: Must specify one or more input files |
Can't say I didn't see this one coming. I'm tempted to go with Solution 2 "Don't delete the tempfile, maybe keep it somewhere while the session is still running." now, since there's no easy way for to transfer the registration/gtype info from the original Another option is to check explicitly if the |
The ultimate goal is to avoid temporary files. It's only possible if PyGMT supports GMT data types |
That's definitely a long term thing (for PyGMT > v0.3.0). Would need someone familiar with both Python and C I think, the new postdoc might the one to do it 😆 |
I'll need to do more investigation, but there's some discussion in Anyways, I think approving PR #873 and solving #870 is fine for now. But we'll see if users come up with problems down the line. |
Cross-referencing a related bug reported at https://forum.generic-mapping-tools.org/t/how-to-get-metadata-and-plot-grid-from-xarray-dataset/2010. In that case, an |
I ran into the following today when trying to use some data via OPeNDAP. The try/except strategy in the accessor leads to a successful figure, but gmt's error messages are confusing. If we are expecting the call to fail every once in a while and have a fall back, we could add Lines 30 to 39 in 951d30a
time = '2011-01-20T18:00:00'
param = 'vwnd'
level = 250
ds = xr.open_dataset(f'https://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis/pressure/{param}.{time[:4]}.nc').sel({'level': level, 'time': time})
fig = pygmt.Figure()
fig.grdimage(ds['vwnd'], frame=True, projection="H15c")
fig.show() Error messages:
|
For xarray.DataArray objects, currently PyGMT relies on the output of the See what GMT does at It seems GMT has its own logic to detect a netCDF file's grid registration. I think PyGMT should follow the same logic. It would be easier if GMT can provide an API function for this. |
Description of the problem
It may be a GMTDataArrayAccessor bug, or maybe we should update
grdcut()
to work with GMTDataArrayAccessor. The problem is that the temporary netCDF file is already deleted when GMTDataArrayAccessor tries to access it.Full code that generated the error
Full error message
System information
Please paste the output of
python -c "import pygmt; pygmt.show_versions()"
:The text was updated successfully, but these errors were encountered: