GMTDataArrayAccessor doesn't work for temporary files that have been sliced
See original GitHub issueDescription 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
import pygmt
grid = pygmt.grdcut("@earth_relief_01d", region=[30, 50, 60, 70])
print(grid)
print(grid.gmt.registration)
Full error message
<xarray.DataArray 'z' (lat: 10, lon: 20)>
array([[ 46. , -2.5, 0. , 42. , 150. , 220. , 172. , 147. ,
153.5, 159. , 177. , 172. , 165. , 137. , 144.5, 150. ,
119. , 142. , 131.5, 149.5],
[ 18.5, 19. , 80.5, 139. , 120.5, 33. , 54. , 202.5,
153. , 126. , 175. , 165.5, 69. , 180. , 147. , 147. ,
61. , 106. , 112.5, 147. ],
[ 125.5, 173. , 185. , 136.5, 70.5, 51.5, 158.5, 140. ,
142. , 97. , 139. , 133. , 58.5, 53.5, 109. , 171. ,
158. , 153. , 152. , 156. ],
[ 173.5, 223.5, 199.5, 130.5, 95. , 130.5, 170.5, 114. ,
51. , 80. , 78.5, 30.5, 82. , 129. , 137. , 126. ,
139. , 118. , 138.5, 148. ],
[ 216.5, 163. , 133. , 121. , 51.5, -7. , -18. , 65. ,
96. , 34.5, 19.5, 58.5, 78. , 42. , 69.5, 96.5,
82. , 155. , 132.5, 192.5],
[ 187. , 163.5, 123.5, 74.5, 12. , -50. , -177.5, -126. ,
-106.5, -37. , 94. , 101.5, 121.5, 28. , 38. , 64.5,
67. , 89. , 118.5, 154. ],
[ 169. , 137. , 63.5, -23. , -100. , 33. , 85. , 151. ,
179.5, 184.5, 60. , -34. , 1. , -8.5, 10. , 40.5,
31. , 33. , 76.5, 136.5],
[ 288. , 252. , 190. , 273. , 208.5, 231. , 191.5, 207.5,
233.5, 243. , 180.5, -38. , -27. , -10.5, 16.5, -18. ,
-28. , -31. , 89. , 59.5],
[ 157.5, 138.5, 234. , 218.5, 260.5, 214. , 235. , 171. ,
-49.5, -83. , -74. , -68. , -68. , -25. , 46.5, 16.5,
-43.5, -51. , -31. , -26.5],
[ 204.5, 145.5, 77.5, -152. , -122. , -178. , -187.5, -160.5,
-125.5, -144.5, -154. , -138. , -90.5, -65.5, -81. , -76.5,
-64.5, -46.5, -12. , -0.5]], dtype=float32)
Coordinates:
* lon (lon) float64 30.5 31.5 32.5 33.5 34.5 ... 45.5 46.5 47.5 48.5 49.5
* lat (lat) float64 60.5 61.5 62.5 63.5 64.5 65.5 66.5 67.5 68.5 69.5
Attributes:
long_name: elevation (m)
actual_range: [-187.5 288. ]
grdinfo [ERROR]: File /var/folders/mz/d3wtwjtx4fg8qlds5lgt1c240000gn/T/pygmt-6f1lhxvo.nc was not found
grdinfo [ERROR]: Cannot find file /var/folders/mz/d3wtwjtx4fg8qlds5lgt1c240000gn/T/pygmt-6f1lhxvo.nc
grdinfo [ERROR]: Must specify one or more input files
Traceback (most recent call last):
File "test.py", line 5, in <module>
print(grid.gmt.registration)
File "/Users/seisman/.anaconda/lib/python3.7/site-packages/xarray/core/extensions.py", line 36, in __get__
accessor_obj = self._accessor(obj)
File "/Users/seisman/Gits/gmt/pygmt/pygmt/modules.py", line 247, in __init__
int, grdinfo(self._source, C="n", o="10,11").split()
File "/Users/seisman/Gits/gmt/pygmt/pygmt/modules.py", line 51, in grdinfo
lib.call_module("grdinfo", arg_str)
File "/Users/seisman/Gits/gmt/pygmt/pygmt/clib/session.py", line 502, in call_module
module, status, self._error_message
pygmt.exceptions.GMTCLibError: Module 'grdinfo' failed with status code 71:
grdinfo [ERROR]: File /var/folders/mz/d3wtwjtx4fg8qlds5lgt1c240000gn/T/pygmt-6f1lhxvo.nc was not found
grdinfo [ERROR]: Cannot find file /var/folders/mz/d3wtwjtx4fg8qlds5lgt1c240000gn/T/pygmt-6f1lhxvo.nc
grdinfo [ERROR]: Must specify one or more input files
System information
Please paste the output of python -c "import pygmt; pygmt.show_versions()"
:
PyGMT information:
version: v0.1.2+11.g168c77c
System information:
python: 3.7.6 (default, Jan 8 2020, 13:42:34) [Clang 4.0.1 (tags/RELEASE_401/final)]
executable: /Users/seisman/.anaconda/bin/python
machine: Darwin-19.5.0-x86_64-i386-64bit
Dependency information:
numpy: 1.18.1
pandas: 1.0.1
xarray: 0.15.1
netCDF4: 1.5.3
packaging: 20.1
ghostscript: 9.52
gmt: 6.2.0_308386e_2020.07.11
GMT library information:
binary dir: /Users/seisman/.anaconda/bin
cores: 4
grid layout: rows
library path: /Users/seisman/local/GMT/lib/libgmt.dylib
padding: 2
plugin dir: /Users/seisman/local/GMT/lib/gmt/plugins
share dir: /Users/seisman/local/GMT/share
version: 6.2.0
Issue Analytics
- State:
- Created 3 years ago
- Comments:16 (16 by maintainers)
Top Results From Across the Web
Can't delete temporary files in Windows 10
Press the Windows key. Type cleanmgr.exe. Do NOT press Enter. Right-click the Disk Cleanup window at the top, then left-click Run as ...
Read more >How to Delete Temporary Files in Windows - Lifewire
Enter %temp% from Search/Run, and delete what's in there. Also empty the Recycle Bin. Alternatively, use a command line command.
Read more >Temporary Files - NSHipster
If you don't intend to keep the temporary file around, you can use the NSTemporaryDirectory() function to get a path to a temporary...
Read more >Temporary files during video export - FCP.co Forum
When I run the video rendering, I see the free space on my system ... New boarders will have their posts moderated -...
Read more >Working with Temporary Files and Directories in Go 1.11
For each of the cars we pull in, we'll want to create a temporary file with a unique name that we don't necessarily...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
For xarray.DataArray objects, currently PyGMT relies on the output of the
grdinfo
call to determine the registration and gtype. If the grdinfo fails, PyGMT fallbacks to the registration=0 and gtype=0.See what GMT does at https://github.com/GenericMappingTools/gmt/blob/e63b2590b68969908efc393d008a9d024617eed2/src/gmt_nc.c#L656.
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.
It still doesn’t work for a slice of a grid. For example: