Skip to content

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

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

Inconsistent parsing of longitudes across cpu architectures #3392

Closed
stackjohn opened this issue Feb 11, 2024 · 1 comment
Closed

Inconsistent parsing of longitudes across cpu architectures #3392

stackjohn opened this issue Feb 11, 2024 · 1 comment
Labels
Type: Bug Something is not working like it should

Comments

@stackjohn
Copy link

What went wrong?

Hello, thank you once again for metpy.

I'm seeing some strangeness when parsing grib2 files across architectures. I'm not sure what the expected behaviour should be, or how to make it consistent.
For example, lets say I have the following test file, with an example grib2 file I found to help demonstrate:

import xarray as xr
import subprocess
import requests

url = 'https://github.com/SciTools/iris-test-data/raw/master/test_data/GRIB/global_t/global.grib2'
r = requests.get(url, allow_redirects=True)
open('global.grib2', 'wb').write(r.content)


command_one = f'wgrib2 global.grib2 -new_grid_winds earth -new_grid latlon 257:104:1.0 27:52:1 globalone.grib2'
subprocess.run(command_one, shell=True, check=True)
#Diplay grid from wgrib2 point of view
command_grid_1 = f'wgrib2 -grid globalone.grib2'
subprocess.run(command_grid_1, shell=True, check=True)

command_two = f'wgrib2 global.grib2 -new_grid_winds earth -new_grid latlon 258:104:1.0 27:52:1 globaltwo.grib2'
subprocess.run(command_two, shell=True, check=True)
#Diplay grid from wgrib2 point of view
command_grid_2 = f'wgrib2 -grid globaltwo.grib2'
subprocess.run(command_grid_2, shell=True, check=True)

command_three = f'wgrib2 global.grib2 -new_grid_winds earth -new_grid latlon 259:104:1.0 27:52:1.0 globalthree.grib2'
subprocess.run(command_three, shell=True, check=True)
#Diplay grid from wgrib2 point of view
command_grid_3 = f'wgrib2 -grid globalthree.grib2'
subprocess.run(command_grid_3, shell=True, check=True)


ds1 = xr.open_dataset(
    'globalone.grib2'  # , chunks={"time": 100, "latitude": 100, "longitude": 100}
)

ds2 = xr.open_dataset(
    'globaltwo.grib2'  # , chunks={"time": 100, "latitude": 100, "longitude": 100}
)
ds3 = xr.open_dataset(
    'globalthree.grib2'  # , chunks={"time": 100, "latitude": 100, "longitude": 100}
)

data1 = ds1.metpy.parse_cf()
data2 = ds2.metpy.parse_cf()
data3 = ds3.metpy.parse_cf()
print(data1.longitude)
print(data2.longitude)
print(data3.longitude)
Output on an Apple M2
$ 1:0:d=1998030603:TMP:1000 mb:-28587-6477 hour ave fcst:
1:0:grid_template=0:winds(N/S):
	lat-lon grid:(104 x 52) units 1e-06 input WE:SN output WE:SN res 48
	lat 27.000000 to 78.000000 by 1.000000
	lon 257.000000 to 0.000000 by 1.000000 #points=5408
1:0:d=1998030603:TMP:1000 mb:-28587-6477 hour ave fcst:
1:0:grid_template=0:winds(N/S):
	lat-lon grid:(104 x 52) units 1e-06 input WE:SN output WE:SN res 48
	lat 27.000000 to 78.000000 by 1.000000
	lon 258.000000 to 1.000000 by 1.000000 #points=5408
1:0:d=1998030603:TMP:1000 mb:-28587-6477 hour ave fcst:
1:0:grid_template=0:winds(N/S):
	lat-lon grid:(104 x 52) units 1e-06 input WE:SN output WE:SN res 48
	lat 27.000000 to 78.000000 by 1.000000
	lon 259.000000 to 2.000000 by 1.000000 #points=5408
test.py:40: UserWarning: More than one time coordinate present for variable  "t".
  data1 = ds1.metpy.parse_cf()
test.py:41: UserWarning: More than one time coordinate present for variable  "t".
  data2 = ds2.metpy.parse_cf()
test.py:42: UserWarning: More than one time coordinate present for variable  "t".
  data3 = ds3.metpy.parse_cf()

array([  0., 257., 258., 259., 260., 261., 262., 263., 264., 265., 266., 267.,
       268., 269., 270., 271., 272., 273., 274., 275., 276., 277., 278., 279.,
       280., 281., 282., 283., 284., 285., 286., 287., 288., 289., 290., 291.,
       292., 293., 294., 295., 296., 297., 298., 299., 300., 301., 302., 303.,
       304., 305., 306., 307., 308., 309., 310., 311., 312., 313., 314., 315.,
       316., 317., 318., 319., 320., 321., 322., 323., 324., 325., 326., 327.,
       328., 329., 330., 331., 332., 333., 334., 335., 336., 337., 338., 339.,
       340., 341., 342., 343., 344., 345., 346., 347., 348., 349., 350., 351.,
       352., 353., 354., 355., 356., 357., 358., 359.])
Coordinates:
    time           datetime64[ns] ...
    step           timedelta64[ns] ...
    isobaricInhPa  float64 ...
  * longitude      (longitude) float64 0.0 257.0 258.0 ... 357.0 358.0 359.0
    valid_time     datetime64[ns] ...
    metpy_crs      object Projection: latitude_longitude
Attributes:
    units:          degrees_east
    standard_name:  longitude
    long_name:      longitude
    _metpy_axis:    x,longitude

array([  1., 258., 259., 260., 261., 262., 263., 264., 265., 266., 267., 268.,
       269., 270., 271., 272., 273., 274., 275., 276., 277., 278., 279., 280.,
       281., 282., 283., 284., 285., 286., 287., 288., 289., 290., 291., 292.,
       293., 294., 295., 296., 297., 298., 299., 300., 301., 302., 303., 304.,
       305., 306., 307., 308., 309., 310., 311., 312., 313., 314., 315., 316.,
       317., 318., 319., 320., 321., 322., 323., 324., 325., 326., 327., 328.,
       329., 330., 331., 332., 333., 334., 335., 336., 337., 338., 339., 340.,
       341., 342., 343., 344., 345., 346., 347., 348., 349., 350., 351., 352.,
       353., 354., 355., 356., 357., 358., 359., 360.])
Coordinates:
    time           datetime64[ns] ...
    step           timedelta64[ns] ...
    isobaricInhPa  float64 ...
  * longitude      (longitude) float64 1.0 258.0 259.0 ... 358.0 359.0 360.0
    valid_time     datetime64[ns] ...
    metpy_crs      object Projection: latitude_longitude
Attributes:
    units:          degrees_east
    standard_name:  longitude
    long_name:      longitude
    _metpy_axis:    x,longitude

array([-101., -100.,  -99.,  -98.,  -97.,  -96.,  -95.,  -94.,  -93.,  -92.,
        -91.,  -90.,  -89.,  -88.,  -87.,  -86.,  -85.,  -84.,  -83.,  -82.,
        -81.,  -80.,  -79.,  -78.,  -77.,  -76.,  -75.,  -74.,  -73.,  -72.,
        -71.,  -70.,  -69.,  -68.,  -67.,  -66.,  -65.,  -64.,  -63.,  -62.,
        -61.,  -60.,  -59.,  -58.,  -57.,  -56.,  -55.,  -54.,  -53.,  -52.,
        -51.,  -50.,  -49.,  -48.,  -47.,  -46.,  -45.,  -44.,  -43.,  -42.,
        -41.,  -40.,  -39.,  -38.,  -37.,  -36.,  -35.,  -34.,  -33.,  -32.,
        -31.,  -30.,  -29.,  -28.,  -27.,  -26.,  -25.,  -24.,  -23.,  -22.,
        -21.,  -20.,  -19.,  -18.,  -17.,  -16.,  -15.,  -14.,  -13.,  -12.,
        -11.,  -10.,   -9.,   -8.,   -7.,   -6.,   -5.,   -4.,   -3.,   -2.,
         -1.,    0.,    1.,    2.])
Coordinates:
    time           datetime64[ns] ...
    step           timedelta64[ns] ...
    isobaricInhPa  float64 ...
  * longitude      (longitude) float64 -101.0 -100.0 -99.0 -98.0 ... 0.0 1.0 2.0
    valid_time     datetime64[ns] ...
    metpy_crs      object Projection: latitude_longitude
Attributes:
    units:          degrees_east
    standard_name:  longitude
    long_name:      longitude
    _metpy_axis:    x,longitude
Output on an x86_64
$ 
1:0:d=1998030603:TMP:1000 mb:-28587-6477 hour ave fcst:
1:0:grid_template=0:winds(N/S):
	lat-lon grid:(104 x 52) units 1e-06 input WE:SN output WE:SN res 48
	lat 27.000000 to 78.000000 by 1.000000
	lon 257.000000 to 0.000000 by 1.000000 #points=5408
1:0:d=1998030603:TMP:1000 mb:-28587-6477 hour ave fcst:
1:0:grid_template=0:winds(N/S):
	lat-lon grid:(104 x 52) units 1e-06 input WE:SN output WE:SN res 48
	lat 27.000000 to 78.000000 by 1.000000
	lon 258.000000 to 1.000000 by 1.000000 #points=5408
1:0:d=1998030603:TMP:1000 mb:-28587-6477 hour ave fcst:
1:0:grid_template=0:winds(N/S):
	lat-lon grid:(104 x 52) units 1e-06 input WE:SN output WE:SN res 48
	lat 27.000000 to 78.000000 by 1.000000
	lon 259.000000 to 2.000000 by 1.000000 #points=5408
python3.11/site-packages/gribapi/__init__.py:23: UserWarning: ecCodes 2.31.0 or higher is recommended. You are running version 2.16.0
  warnings.warn(
metpy_plots_pi/test.py:40: UserWarning: More than one time coordinate present for variable  "t".
  data1 = ds1.metpy.parse_cf()
metpy_plots_pi/test.py:41: UserWarning: More than one time coordinate present for variable  "t".
  data2 = ds2.metpy.parse_cf()
metpy_plots_pi/test.py:42: UserWarning: More than one time coordinate present for variable  "t".
  data3 = ds3.metpy.parse_cf()

array([257., 258., 259., 260., 261., 262., 263., 264., 265., 266., 267., 268.,
       269., 270., 271., 272., 273., 274., 275., 276., 277., 278., 279., 280.,
       281., 282., 283., 284., 285., 286., 287., 288., 289., 290., 291., 292.,
       293., 294., 295., 296., 297., 298., 299., 300., 301., 302., 303., 304.,
       305., 306., 307., 308., 309., 310., 311., 312., 313., 314., 315., 316.,
       317., 318., 319., 320., 321., 322., 323., 324., 325., 326., 327., 328.,
       329., 330., 331., 332., 333., 334., 335., 336., 337., 338., 339., 340.,
       341., 342., 343., 344., 345., 346., 347., 348., 349., 350., 351., 352.,
       353., 354., 355., 356., 357., 358., 359., 360.])
Coordinates:
    time           datetime64[ns] ...
    step           timedelta64[ns] ...
    isobaricInhPa  float64 ...
  * longitude      (longitude) float64 257.0 258.0 259.0 ... 358.0 359.0 360.0
    valid_time     datetime64[ns] ...
    metpy_crs      object Projection: latitude_longitude
Attributes:
    units:          degrees_east
    standard_name:  longitude
    long_name:      longitude
    _metpy_axis:    x,longitude

array([258., 259., 260., 261., 262., 263., 264., 265., 266., 267., 268., 269.,
       270., 271., 272., 273., 274., 275., 276., 277., 278., 279., 280., 281.,
       282., 283., 284., 285., 286., 287., 288., 289., 290., 291., 292., 293.,
       294., 295., 296., 297., 298., 299., 300., 301., 302., 303., 304., 305.,
       306., 307., 308., 309., 310., 311., 312., 313., 314., 315., 316., 317.,
       318., 319., 320., 321., 322., 323., 324., 325., 326., 327., 328., 329.,
       330., 331., 332., 333., 334., 335., 336., 337., 338., 339., 340., 341.,
       342., 343., 344., 345., 346., 347., 348., 349., 350., 351., 352., 353.,
       354., 355., 356., 357., 358., 359., 360., 361.])
Coordinates:
    time           datetime64[ns] ...
    step           timedelta64[ns] ...
    isobaricInhPa  float64 ...
  * longitude      (longitude) float64 258.0 259.0 260.0 ... 359.0 360.0 361.0
    valid_time     datetime64[ns] ...
    metpy_crs      object Projection: latitude_longitude
Attributes:
    units:          degrees_east
    standard_name:  longitude
    long_name:      longitude
    _metpy_axis:    x,longitude

array([-101., -100.,  -99.,  -98.,  -97.,  -96.,  -95.,  -94.,  -93.,  -92.,
        -91.,  -90.,  -89.,  -88.,  -87.,  -86.,  -85.,  -84.,  -83.,  -82.,
        -81.,  -80.,  -79.,  -78.,  -77.,  -76.,  -75.,  -74.,  -73.,  -72.,
        -71.,  -70.,  -69.,  -68.,  -67.,  -66.,  -65.,  -64.,  -63.,  -62.,
        -61.,  -60.,  -59.,  -58.,  -57.,  -56.,  -55.,  -54.,  -53.,  -52.,
        -51.,  -50.,  -49.,  -48.,  -47.,  -46.,  -45.,  -44.,  -43.,  -42.,
        -41.,  -40.,  -39.,  -38.,  -37.,  -36.,  -35.,  -34.,  -33.,  -32.,
        -31.,  -30.,  -29.,  -28.,  -27.,  -26.,  -25.,  -24.,  -23.,  -22.,
        -21.,  -20.,  -19.,  -18.,  -17.,  -16.,  -15.,  -14.,  -13.,  -12.,
        -11.,  -10.,   -9.,   -8.,   -7.,   -6.,   -5.,   -4.,   -3.,   -2.,
         -1.,    0.,    1.,    2.])
Coordinates:
    time           datetime64[ns] ...
    step           timedelta64[ns] ...
    isobaricInhPa  float64 ...
  * longitude      (longitude) float64 -101.0 -100.0 -99.0 -98.0 ... 0.0 1.0 2.0
    valid_time     datetime64[ns] ...
    metpy_crs      object Projection: latitude_longitude
Attributes:
    units:          degrees_east
    standard_name:  longitude
    long_name:      longitude
    _metpy_axis:    x,longitude

Of the three examples, the third produces the same long array on both machines.

array([-101., -100.,  -99.,  -98.,  -97.,  -96.,  -95.,  -94.,  -93.,  -92.,
        -91.,  -90.,  -89.,  -88.,  -87.,  -86.,  -85.,  -84.,  -83.,  -82.,
        -81.,  -80.,  -79.,  -78.,  -77.,  -76.,  -75.,  -74.,  -73.,  -72.,
        -71.,  -70.,  -69.,  -68.,  -67.,  -66.,  -65.,  -64.,  -63.,  -62.,
        -61.,  -60.,  -59.,  -58.,  -57.,  -56.,  -55.,  -54.,  -53.,  -52.,
        -51.,  -50.,  -49.,  -48.,  -47.,  -46.,  -45.,  -44.,  -43.,  -42.,
        -41.,  -40.,  -39.,  -38.,  -37.,  -36.,  -35.,  -34.,  -33.,  -32.,
        -31.,  -30.,  -29.,  -28.,  -27.,  -26.,  -25.,  -24.,  -23.,  -22.,
        -21.,  -20.,  -19.,  -18.,  -17.,  -16.,  -15.,  -14.,  -13.,  -12.,
        -11.,  -10.,   -9.,   -8.,   -7.,   -6.,   -5.,   -4.,   -3.,   -2.,
         -1.,    0.,    1.,    2.])

First array differs however:
M2:

<xarray.DataArray 'longitude' (longitude: 104)>
array([  0., 257., 258., 259., 260., 261., 262., 263., 264., 265., 266., 267.,
       268., 269., 270., 271., 272., 273., 274., 275., 276., 277., 278., 279.,
       280., 281., 282., 283., 284., 285., 286., 287., 288., 289., 290., 291.,
       292., 293., 294., 295., 296., 297., 298., 299., 300., 301., 302., 303.,
       304., 305., 306., 307., 308., 309., 310., 311., 312., 313., 314., 315.,
       316., 317., 318., 319., 320., 321., 322., 323., 324., 325., 326., 327.,
       328., 329., 330., 331., 332., 333., 334., 335., 336., 337., 338., 339.,
       340., 341., 342., 343., 344., 345., 346., 347., 348., 349., 350., 351.,
       352., 353., 354., 355., 356., 357., 358., 359.])

x86_64

<xarray.DataArray 'longitude' (longitude: 104)>
array([257., 258., 259., 260., 261., 262., 263., 264., 265., 266., 267., 268.,
       269., 270., 271., 272., 273., 274., 275., 276., 277., 278., 279., 280.,
       281., 282., 283., 284., 285., 286., 287., 288., 289., 290., 291., 292.,
       293., 294., 295., 296., 297., 298., 299., 300., 301., 302., 303., 304.,
       305., 306., 307., 308., 309., 310., 311., 312., 313., 314., 315., 316.,
       317., 318., 319., 320., 321., 322., 323., 324., 325., 326., 327., 328.,
       329., 330., 331., 332., 333., 334., 335., 336., 337., 338., 339., 340.,
       341., 342., 343., 344., 345., 346., 347., 348., 349., 350., 351., 352.,
       353., 354., 355., 356., 357., 358., 359., 360.])

second array also differs:

M2

<xarray.DataArray 'longitude' (longitude: 104)>
array([  1., 258., 259., 260., 261., 262., 263., 264., 265., 266., 267., 268.,
       269., 270., 271., 272., 273., 274., 275., 276., 277., 278., 279., 280.,
       281., 282., 283., 284., 285., 286., 287., 288., 289., 290., 291., 292.,
       293., 294., 295., 296., 297., 298., 299., 300., 301., 302., 303., 304.,
       305., 306., 307., 308., 309., 310., 311., 312., 313., 314., 315., 316.,
       317., 318., 319., 320., 321., 322., 323., 324., 325., 326., 327., 328.,
       329., 330., 331., 332., 333., 334., 335., 336., 337., 338., 339., 340.,
       341., 342., 343., 344., 345., 346., 347., 348., 349., 350., 351., 352.,
       353., 354., 355., 356., 357., 358., 359., 360.])

x86_64

<xarray.DataArray 'longitude' (longitude: 104)>
array([258., 259., 260., 261., 262., 263., 264., 265., 266., 267., 268., 269.,
       270., 271., 272., 273., 274., 275., 276., 277., 278., 279., 280., 281.,
       282., 283., 284., 285., 286., 287., 288., 289., 290., 291., 292., 293.,
       294., 295., 296., 297., 298., 299., 300., 301., 302., 303., 304., 305.,
       306., 307., 308., 309., 310., 311., 312., 313., 314., 315., 316., 317.,
       318., 319., 320., 321., 322., 323., 324., 325., 326., 327., 328., 329.,
       330., 331., 332., 333., 334., 335., 336., 337., 338., 339., 340., 341.,
       342., 343., 344., 345., 346., 347., 348., 349., 350., 351., 352., 353.,
       354., 355., 356., 357., 358., 359., 360., 361.])

Which output is expected to be the "correct" one?

This difference results in very strange behaviour on the M2 (and raspberry pi, arm based as well) when trying to animate over the dateline (eg, slowly moving lon center from west to east, incrementing time, to create an animation). All of the image data appears to shift 1 degree to the right at the point the data flips. It seems fine on the x86_64 but not on an arm based machine.

Is there a way to ensure that the results are consistent across architectures?
Is there a way to always have metpy parse the data so that lat/lon is -180 to 180, or, always 0 to 360?

I will attach the pipenv graph outputs below:

M2
$ backcall==0.2.0
bokeh==3.3.4
├── contourpy [required: >=1, installed: 1.2.0]
│   └── numpy [required: >=1.20,<2.0, installed: 1.26.4]
├── Jinja2 [required: >=2.9, installed: 3.1.3]
│   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
├── numpy [required: >=1.16, installed: 1.26.4]
├── packaging [required: >=16.8, installed: 23.2]
├── pandas [required: >=1.2, installed: 2.2.0]
│   ├── numpy [required: >=1.23.2,<2, installed: 1.26.4]
│   ├── python-dateutil [required: >=2.8.2, installed: 2.8.2]
│   │   └── six [required: >=1.5, installed: 1.16.0]
│   ├── pytz [required: >=2020.1, installed: 2024.1]
│   └── tzdata [required: >=2022.7, installed: 2023.4]
├── pillow [required: >=7.1.0, installed: 10.2.0]
├── PyYAML [required: >=3.10, installed: 6.0.1]
├── tornado [required: >=5.1, installed: 6.4]
└── xyzservices [required: >=2021.09.1, installed: 2023.10.1]
Bottleneck==1.3.7
└── numpy [required: Any, installed: 1.26.4]
Cartopy==0.22.0
├── matplotlib [required: >=3.4, installed: 3.8.2]
│   ├── contourpy [required: >=1.0.1, installed: 1.2.0]
│   │   └── numpy [required: >=1.20,<2.0, installed: 1.26.4]
│   ├── cycler [required: >=0.10, installed: 0.12.1]
│   ├── fonttools [required: >=4.22.0, installed: 4.48.1]
│   ├── kiwisolver [required: >=1.3.1, installed: 1.4.5]
│   ├── numpy [required: >=1.21,<2, installed: 1.26.4]
│   ├── packaging [required: >=20.0, installed: 23.2]
│   ├── pillow [required: >=8, installed: 10.2.0]
│   ├── pyparsing [required: >=2.3.1, installed: 3.1.1]
│   └── python-dateutil [required: >=2.7, installed: 2.8.2]
│       └── six [required: >=1.5, installed: 1.16.0]
├── numpy [required: >=1.21, installed: 1.26.4]
├── packaging [required: >=20, installed: 23.2]
├── pyproj [required: >=3.1.0, installed: 3.6.1]
│   └── certifi [required: Any, installed: 2024.2.2]
├── pyshp [required: >=2.1, installed: 2.3.1]
└── shapely [required: >=1.7, installed: 2.0.2]
    └── numpy [required: >=1.14, installed: 1.26.4]
cfgrib==0.9.10.4
├── attrs [required: >=19.2, installed: 23.2.0]
├── click [required: Any, installed: 8.1.7]
├── eccodes [required: >=0.9.8, installed: 1.6.1]
│   ├── attrs [required: Any, installed: 23.2.0]
│   ├── cffi [required: Any, installed: 1.16.0]
│   │   └── pycparser [required: Any, installed: 2.21]
│   ├── findlibs [required: Any, installed: 0.0.5]
│   └── numpy [required: Any, installed: 1.26.4]
└── numpy [required: Any, installed: 1.26.4]
colour==0.1.5
distributed==2024.2.0
├── click [required: >=8.0, installed: 8.1.7]
├── cloudpickle [required: >=1.5.0, installed: 3.0.0]
├── dask [required: ==2024.2.0, installed: 2024.2.0]
│   ├── click [required: >=8.1, installed: 8.1.7]
│   ├── cloudpickle [required: >=1.5.0, installed: 3.0.0]
│   ├── fsspec [required: >=2021.09.0, installed: 2024.2.0]
│   ├── importlib-metadata [required: >=4.13.0, installed: 7.0.1]
│   │   └── zipp [required: >=0.5, installed: 3.17.0]
│   ├── packaging [required: >=20.0, installed: 23.2]
│   ├── partd [required: >=1.2.0, installed: 1.4.1]
│   │   ├── locket [required: Any, installed: 1.0.0]
│   │   └── toolz [required: Any, installed: 0.12.1]
│   ├── pyyaml [required: >=5.3.1, installed: 6.0.1]
│   └── toolz [required: >=0.10.0, installed: 0.12.1]
├── jinja2 [required: >=2.10.3, installed: 3.1.3]
│   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
├── locket [required: >=1.0.0, installed: 1.0.0]
├── msgpack [required: >=1.0.0, installed: 1.0.7]
├── packaging [required: >=20.0, installed: 23.2]
├── psutil [required: >=5.7.2, installed: 5.9.8]
├── pyyaml [required: >=5.3.1, installed: 6.0.1]
├── sortedcontainers [required: >=2.0.5, installed: 2.4.0]
├── tblib [required: >=1.6.0, installed: 3.0.0]
├── toolz [required: >=0.10.0, installed: 0.12.1]
├── tornado [required: >=6.0.4, installed: 6.4]
├── urllib3 [required: >=1.24.3, installed: 2.2.0]
└── zict [required: >=3.0.0, installed: 3.0.0]
flox==0.9.2
├── numpy [required: >=1.22, installed: 1.26.4]
├── numpy-groupies [required: >=0.9.19, installed: 0.10.2]
│   └── numpy [required: Any, installed: 1.26.4]
├── packaging [required: >=21.3, installed: 23.2]
├── pandas [required: >=1.5, installed: 2.2.0]
│   ├── numpy [required: >=1.23.2,<2, installed: 1.26.4]
│   ├── python-dateutil [required: >=2.8.2, installed: 2.8.2]
│   │   └── six [required: >=1.5, installed: 1.16.0]
│   ├── pytz [required: >=2020.1, installed: 2024.1]
│   └── tzdata [required: >=2022.7, installed: 2023.4]
├── scipy [required: >=1.9, installed: 1.12.0]
│   └── numpy [required: >=1.22.4,<1.29.0, installed: 1.26.4]
└── toolz [required: Any, installed: 0.12.1]
fqdn==1.5.1
h5netcdf==1.3.0
├── h5py [required: Any, installed: 3.10.0]
│   └── numpy [required: >=1.17.3, installed: 1.26.4]
└── packaging [required: Any, installed: 23.2]
imageio==2.33.1
├── numpy [required: Any, installed: 1.26.4]
└── pillow [required: >=8.3.2, installed: 10.2.0]
imageio-ffmpeg==0.4.9
└── setuptools [required: Any, installed: 69.0.3]
ipympl==0.9.3
├── ipython [required: <9, installed: 8.21.0]
│   ├── decorator [required: Any, installed: 5.1.1]
│   ├── jedi [required: >=0.16, installed: 0.19.1]
│   │   └── parso [required: >=0.8.3,<0.9.0, installed: 0.8.3]
│   ├── matplotlib-inline [required: Any, installed: 0.1.6]
│   │   └── traitlets [required: Any, installed: 5.14.1]
│   ├── pexpect [required: >4.3, installed: 4.9.0]
│   │   └── ptyprocess [required: >=0.5, installed: 0.7.0]
│   ├── prompt-toolkit [required: >=3.0.41,<3.1.0, installed: 3.0.43]
│   │   └── wcwidth [required: Any, installed: 0.2.13]
│   ├── pygments [required: >=2.4.0, installed: 2.17.2]
│   ├── stack-data [required: Any, installed: 0.6.3]
│   │   ├── asttokens [required: >=2.1.0, installed: 2.4.1]
│   │   │   └── six [required: >=1.12.0, installed: 1.16.0]
│   │   ├── executing [required: >=1.2.0, installed: 2.0.1]
│   │   └── pure-eval [required: Any, installed: 0.2.2]
│   └── traitlets [required: >=5, installed: 5.14.1]
├── ipython-genutils [required: Any, installed: 0.2.0]
├── ipywidgets [required: >=7.6.0,<9, installed: 8.1.2]
│   ├── comm [required: >=0.1.3, installed: 0.2.1]
│   │   └── traitlets [required: >=4, installed: 5.14.1]
│   ├── ipython [required: >=6.1.0, installed: 8.21.0]
│   │   ├── decorator [required: Any, installed: 5.1.1]
│   │   ├── jedi [required: >=0.16, installed: 0.19.1]
│   │   │   └── parso [required: >=0.8.3,<0.9.0, installed: 0.8.3]
│   │   ├── matplotlib-inline [required: Any, installed: 0.1.6]
│   │   │   └── traitlets [required: Any, installed: 5.14.1]
│   │   ├── pexpect [required: >4.3, installed: 4.9.0]
│   │   │   └── ptyprocess [required: >=0.5, installed: 0.7.0]
│   │   ├── prompt-toolkit [required: >=3.0.41,<3.1.0, installed: 3.0.43]
│   │   │   └── wcwidth [required: Any, installed: 0.2.13]
│   │   ├── pygments [required: >=2.4.0, installed: 2.17.2]
│   │   ├── stack-data [required: Any, installed: 0.6.3]
│   │   │   ├── asttokens [required: >=2.1.0, installed: 2.4.1]
│   │   │   │   └── six [required: >=1.12.0, installed: 1.16.0]
│   │   │   ├── executing [required: >=1.2.0, installed: 2.0.1]
│   │   │   └── pure-eval [required: Any, installed: 0.2.2]
│   │   └── traitlets [required: >=5, installed: 5.14.1]
│   ├── jupyterlab-widgets [required: ~=3.0.10, installed: 3.0.10]
│   ├── traitlets [required: >=4.3.1, installed: 5.14.1]
│   └── widgetsnbextension [required: ~=4.0.10, installed: 4.0.10]
├── matplotlib [required: >=3.4.0,<4, installed: 3.8.2]
│   ├── contourpy [required: >=1.0.1, installed: 1.2.0]
│   │   └── numpy [required: >=1.20,<2.0, installed: 1.26.4]
│   ├── cycler [required: >=0.10, installed: 0.12.1]
│   ├── fonttools [required: >=4.22.0, installed: 4.48.1]
│   ├── kiwisolver [required: >=1.3.1, installed: 1.4.5]
│   ├── numpy [required: >=1.21,<2, installed: 1.26.4]
│   ├── packaging [required: >=20.0, installed: 23.2]
│   ├── pillow [required: >=8, installed: 10.2.0]
│   ├── pyparsing [required: >=2.3.1, installed: 3.1.1]
│   └── python-dateutil [required: >=2.7, installed: 2.8.2]
│       └── six [required: >=1.5, installed: 1.16.0]
├── numpy [required: Any, installed: 1.26.4]
├── pillow [required: Any, installed: 10.2.0]
└── traitlets [required: <6, installed: 5.14.1]
isoduration==20.11.0
└── arrow [required: >=0.15.0, installed: 1.3.0]
    ├── python-dateutil [required: >=2.7.0, installed: 2.8.2]
    │   └── six [required: >=1.5, installed: 1.16.0]
    └── types-python-dateutil [required: >=2.8.10, installed: 2.8.19.20240106]
jsonpointer==2.4
lz4==4.3.3
MetPy==1.6.0
├── matplotlib [required: >=3.5.0, installed: 3.8.2]
│   ├── contourpy [required: >=1.0.1, installed: 1.2.0]
│   │   └── numpy [required: >=1.20,<2.0, installed: 1.26.4]
│   ├── cycler [required: >=0.10, installed: 0.12.1]
│   ├── fonttools [required: >=4.22.0, installed: 4.48.1]
│   ├── kiwisolver [required: >=1.3.1, installed: 1.4.5]
│   ├── numpy [required: >=1.21,<2, installed: 1.26.4]
│   ├── packaging [required: >=20.0, installed: 23.2]
│   ├── pillow [required: >=8, installed: 10.2.0]
│   ├── pyparsing [required: >=2.3.1, installed: 3.1.1]
│   └── python-dateutil [required: >=2.7, installed: 2.8.2]
│       └── six [required: >=1.5, installed: 1.16.0]
├── numpy [required: >=1.20.0, installed: 1.26.4]
├── pandas [required: >=1.4.0, installed: 2.2.0]
│   ├── numpy [required: >=1.23.2,<2, installed: 1.26.4]
│   ├── python-dateutil [required: >=2.8.2, installed: 2.8.2]
│   │   └── six [required: >=1.5, installed: 1.16.0]
│   ├── pytz [required: >=2020.1, installed: 2024.1]
│   └── tzdata [required: >=2022.7, installed: 2023.4]
├── pint [required: >=0.17, installed: 0.23]
│   └── typing-extensions [required: Any, installed: 4.9.0]
├── pooch [required: >=1.2.0, installed: 1.8.0]
│   ├── packaging [required: >=20.0, installed: 23.2]
│   ├── platformdirs [required: >=2.5.0, installed: 4.2.0]
│   └── requests [required: >=2.19.0, installed: 2.31.0]
│       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│       ├── idna [required: >=2.5,<4, installed: 3.6]
│       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
├── pyproj [required: >=3.0.0, installed: 3.6.1]
│   └── certifi [required: Any, installed: 2024.2.2]
├── scipy [required: >=1.8.0, installed: 1.12.0]
│   └── numpy [required: >=1.22.4,<1.29.0, installed: 1.26.4]
├── traitlets [required: >=5.0.5, installed: 5.14.1]
└── xarray [required: >=0.21.0, installed: 2024.1.1]
    ├── numpy [required: >=1.23, installed: 1.26.4]
    ├── packaging [required: >=22, installed: 23.2]
    └── pandas [required: >=1.5, installed: 2.2.0]
        ├── numpy [required: >=1.23.2,<2, installed: 1.26.4]
        ├── python-dateutil [required: >=2.8.2, installed: 2.8.2]
        │   └── six [required: >=1.5, installed: 1.16.0]
        ├── pytz [required: >=2020.1, installed: 2024.1]
        └── tzdata [required: >=2022.7, installed: 2023.4]
nc-time-axis==1.4.1
├── cftime [required: >=1.5, installed: 1.6.3]
│   └── numpy [required: >1.13.3, installed: 1.26.4]
├── matplotlib [required: Any, installed: 3.8.2]
│   ├── contourpy [required: >=1.0.1, installed: 1.2.0]
│   │   └── numpy [required: >=1.20,<2.0, installed: 1.26.4]
│   ├── cycler [required: >=0.10, installed: 0.12.1]
│   ├── fonttools [required: >=4.22.0, installed: 4.48.1]
│   ├── kiwisolver [required: >=1.3.1, installed: 1.4.5]
│   ├── numpy [required: >=1.21,<2, installed: 1.26.4]
│   ├── packaging [required: >=20.0, installed: 23.2]
│   ├── pillow [required: >=8, installed: 10.2.0]
│   ├── pyparsing [required: >=2.3.1, installed: 3.1.1]
│   └── python-dateutil [required: >=2.7, installed: 2.8.2]
│       └── six [required: >=1.5, installed: 1.16.0]
└── numpy [required: Any, installed: 1.26.4]
netCDF4==1.6.5
├── certifi [required: Any, installed: 2024.2.2]
├── cftime [required: Any, installed: 1.6.3]
│   └── numpy [required: >1.13.3, installed: 1.26.4]
└── numpy [required: Any, installed: 1.26.4]
numbagg==0.8.0
├── numba [required: Any, installed: 0.59.0]
│   ├── llvmlite [required: >=0.42.0dev0,<0.43, installed: 0.42.0]
│   └── numpy [required: >=1.22,<1.27, installed: 1.26.4]
└── numpy [required: Any, installed: 1.26.4]
opt-einsum==3.3.0
└── numpy [required: >=1.7, installed: 1.26.4]
pickleshare==0.7.5
pillar-youtube-upload==0.3.0
├── google-api-core [required: >=1.23.0, installed: 2.17.0]
│   ├── google-auth [required: >=2.14.1,<3.0.dev0, installed: 2.27.0]
│   │   ├── cachetools [required: >=2.0.0,<6.0, installed: 5.3.2]
│   │   ├── pyasn1-modules [required: >=0.2.1, installed: 0.3.0]
│   │   │   └── pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
│   │   └── rsa [required: >=3.1.4,<5, installed: 4.9]
│   │       └── pyasn1 [required: >=0.1.3, installed: 0.5.1]
│   ├── googleapis-common-protos [required: >=1.56.2,<2.0.dev0, installed: 1.62.0]
│   │   └── protobuf [required: >=3.19.5,<5.0.0.dev0,!=4.21.5,!=4.21.4,!=4.21.3,!=4.21.2,!=4.21.1,!=3.20.1,!=3.20.0, installed: 4.25.2]
│   ├── protobuf [required: >=3.19.5,<5.0.0.dev0,!=4.21.5,!=4.21.4,!=4.21.3,!=4.21.2,!=4.21.1,!=4.21.0,!=3.20.1,!=3.20.0, installed: 4.25.2]
│   └── requests [required: >=2.18.0,<3.0.0.dev0, installed: 2.31.0]
│       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│       ├── idna [required: >=2.5,<4, installed: 3.6]
│       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
├── google-api-python-client [required: >=1.12.5, installed: 2.117.0]
│   ├── google-api-core [required: >=1.31.5,<3.0.0.dev0,!=2.3.0,!=2.2.*,!=2.1.*,!=2.0.*, installed: 2.17.0]
│   │   ├── google-auth [required: >=2.14.1,<3.0.dev0, installed: 2.27.0]
│   │   │   ├── cachetools [required: >=2.0.0,<6.0, installed: 5.3.2]
│   │   │   ├── pyasn1-modules [required: >=0.2.1, installed: 0.3.0]
│   │   │   │   └── pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
│   │   │   └── rsa [required: >=3.1.4,<5, installed: 4.9]
│   │   │       └── pyasn1 [required: >=0.1.3, installed: 0.5.1]
│   │   ├── googleapis-common-protos [required: >=1.56.2,<2.0.dev0, installed: 1.62.0]
│   │   │   └── protobuf [required: >=3.19.5,<5.0.0.dev0,!=4.21.5,!=4.21.4,!=4.21.3,!=4.21.2,!=4.21.1,!=3.20.1,!=3.20.0, installed: 4.25.2]
│   │   ├── protobuf [required: >=3.19.5,<5.0.0.dev0,!=4.21.5,!=4.21.4,!=4.21.3,!=4.21.2,!=4.21.1,!=4.21.0,!=3.20.1,!=3.20.0, installed: 4.25.2]
│   │   └── requests [required: >=2.18.0,<3.0.0.dev0, installed: 2.31.0]
│   │       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │       ├── idna [required: >=2.5,<4, installed: 3.6]
│   │       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   ├── google-auth [required: >=1.19.0,<3.0.0.dev0, installed: 2.27.0]
│   │   ├── cachetools [required: >=2.0.0,<6.0, installed: 5.3.2]
│   │   ├── pyasn1-modules [required: >=0.2.1, installed: 0.3.0]
│   │   │   └── pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
│   │   └── rsa [required: >=3.1.4,<5, installed: 4.9]
│   │       └── pyasn1 [required: >=0.1.3, installed: 0.5.1]
│   ├── google-auth-httplib2 [required: >=0.1.0, installed: 0.2.0]
│   │   ├── google-auth [required: Any, installed: 2.27.0]
│   │   │   ├── cachetools [required: >=2.0.0,<6.0, installed: 5.3.2]
│   │   │   ├── pyasn1-modules [required: >=0.2.1, installed: 0.3.0]
│   │   │   │   └── pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
│   │   │   └── rsa [required: >=3.1.4,<5, installed: 4.9]
│   │   │       └── pyasn1 [required: >=0.1.3, installed: 0.5.1]
│   │   └── httplib2 [required: >=0.19.0, installed: 0.22.0]
│   │       └── pyparsing [required: >=2.4.2,<4,!=3.0.3,!=3.0.2,!=3.0.1,!=3.0.0, installed: 3.1.1]
│   ├── httplib2 [required: >=0.15.0,<1.dev0, installed: 0.22.0]
│   │   └── pyparsing [required: >=2.4.2,<4,!=3.0.3,!=3.0.2,!=3.0.1,!=3.0.0, installed: 3.1.1]
│   └── uritemplate [required: >=3.0.1,<5, installed: 4.1.1]
├── google-auth [required: >=1.22.1, installed: 2.27.0]
│   ├── cachetools [required: >=2.0.0,<6.0, installed: 5.3.2]
│   ├── pyasn1-modules [required: >=0.2.1, installed: 0.3.0]
│   │   └── pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
│   └── rsa [required: >=3.1.4,<5, installed: 4.9]
│       └── pyasn1 [required: >=0.1.3, installed: 0.5.1]
├── httplib2 [required: >=0.18.1, installed: 0.22.0]
│   └── pyparsing [required: >=2.4.2,<4,!=3.0.3,!=3.0.2,!=3.0.1,!=3.0.0, installed: 3.1.1]
└── oauth2client [required: >=4.1.3, installed: 4.1.3]
    ├── httplib2 [required: >=0.9.1, installed: 0.22.0]
    │   └── pyparsing [required: >=2.4.2,<4,!=3.0.3,!=3.0.2,!=3.0.1,!=3.0.0, installed: 3.1.1]
    ├── pyasn1 [required: >=0.1.7, installed: 0.5.1]
    ├── pyasn1-modules [required: >=0.0.5, installed: 0.3.0]
    │   └── pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
    ├── rsa [required: >=3.1.4, installed: 4.9]
    │   └── pyasn1 [required: >=0.1.3, installed: 0.5.1]
    └── six [required: >=1.6.1, installed: 1.16.0]
pyarrow==15.0.0
└── numpy [required: >=1.16.6,<2, installed: 1.26.4]
pyarrow-hotfix==0.6
seaborn==0.13.2
├── matplotlib [required: >=3.4,!=3.6.1, installed: 3.8.2]
│   ├── contourpy [required: >=1.0.1, installed: 1.2.0]
│   │   └── numpy [required: >=1.20,<2.0, installed: 1.26.4]
│   ├── cycler [required: >=0.10, installed: 0.12.1]
│   ├── fonttools [required: >=4.22.0, installed: 4.48.1]
│   ├── kiwisolver [required: >=1.3.1, installed: 1.4.5]
│   ├── numpy [required: >=1.21,<2, installed: 1.26.4]
│   ├── packaging [required: >=20.0, installed: 23.2]
│   ├── pillow [required: >=8, installed: 10.2.0]
│   ├── pyparsing [required: >=2.3.1, installed: 3.1.1]
│   └── python-dateutil [required: >=2.7, installed: 2.8.2]
│       └── six [required: >=1.5, installed: 1.16.0]
├── numpy [required: >=1.20,!=1.24.0, installed: 1.26.4]
└── pandas [required: >=1.2, installed: 2.2.0]
    ├── numpy [required: >=1.23.2,<2, installed: 1.26.4]
    ├── python-dateutil [required: >=2.8.2, installed: 2.8.2]
    │   └── six [required: >=1.5, installed: 1.16.0]
    ├── pytz [required: >=2020.1, installed: 2024.1]
    └── tzdata [required: >=2022.7, installed: 2023.4]
siphon==0.9
├── beautifulsoup4 [required: >=4.6, installed: 4.12.3]
│   └── soupsieve [required: >1.2, installed: 2.5]
├── numpy [required: >=1.8, installed: 1.26.4]
├── pandas [required: Any, installed: 2.2.0]
│   ├── numpy [required: >=1.23.2,<2, installed: 1.26.4]
│   ├── python-dateutil [required: >=2.8.2, installed: 2.8.2]
│   │   └── six [required: >=1.5, installed: 1.16.0]
│   ├── pytz [required: >=2020.1, installed: 2024.1]
│   └── tzdata [required: >=2022.7, installed: 2023.4]
├── protobuf [required: >=3.0.0a3, installed: 4.25.2]
└── requests [required: >=1.2, installed: 2.31.0]
    ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
    ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
    ├── idna [required: >=2.5,<4, installed: 3.6]
    └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
uri-template==1.3.0
webcolors==1.13
zarr==2.16.1
├── asciitree [required: Any, installed: 0.3.3]
├── fasteners [required: Any, installed: 0.19]
├── numcodecs [required: >=0.10.0, installed: 0.12.1]
│   └── numpy [required: >=1.7, installed: 1.26.4]
└── numpy [required: >=1.20,!=1.21.0, installed: 1.26.4]
x86_64
$ bokeh==3.3.4
  - contourpy [required: >=1, installed: 1.2.0]
    - numpy [required: >=1.20,<2.0, installed: 1.26.4]
  - Jinja2 [required: >=2.9, installed: 3.1.3]
    - MarkupSafe [required: >=2.0, installed: 2.1.5]
  - numpy [required: >=1.16, installed: 1.26.4]
  - packaging [required: >=16.8, installed: 23.2]
  - pandas [required: >=1.2, installed: 2.2.0]
    - numpy [required: >=1.23.2,<2, installed: 1.26.4]
    - python-dateutil [required: >=2.8.2, installed: 2.8.2]
      - six [required: >=1.5, installed: 1.16.0]
    - pytz [required: >=2020.1, installed: 2024.1]
    - tzdata [required: >=2022.7, installed: 2023.4]
  - pillow [required: >=7.1.0, installed: 10.2.0]
  - PyYAML [required: >=3.10, installed: 6.0.1]
  - tornado [required: >=5.1, installed: 6.4]
  - xyzservices [required: >=2021.09.1, installed: 2023.10.1]
Bottleneck==1.3.7
  - numpy [required: Any, installed: 1.26.4]
Cartopy==0.22.0
  - matplotlib [required: >=3.4, installed: 3.8.2]
    - contourpy [required: >=1.0.1, installed: 1.2.0]
      - numpy [required: >=1.20,<2.0, installed: 1.26.4]
    - cycler [required: >=0.10, installed: 0.12.1]
    - fonttools [required: >=4.22.0, installed: 4.48.1]
    - kiwisolver [required: >=1.3.1, installed: 1.4.5]
    - numpy [required: >=1.21,<2, installed: 1.26.4]
    - packaging [required: >=20.0, installed: 23.2]
    - pillow [required: >=8, installed: 10.2.0]
    - pyparsing [required: >=2.3.1, installed: 3.1.1]
    - python-dateutil [required: >=2.7, installed: 2.8.2]
      - six [required: >=1.5, installed: 1.16.0]
  - numpy [required: >=1.21, installed: 1.26.4]
  - packaging [required: >=20, installed: 23.2]
  - pyproj [required: >=3.1.0, installed: 3.6.1]
    - certifi [required: Any, installed: 2024.2.2]
  - pyshp [required: >=2.1, installed: 2.3.1]
  - shapely [required: >=1.7, installed: 2.0.2]
    - numpy [required: >=1.14, installed: 1.26.4]
cfgrib==0.9.10.4
  - attrs [required: >=19.2, installed: 23.2.0]
  - click [required: Any, installed: 8.1.7]
  - eccodes [required: >=0.9.8, installed: 1.6.1]
    - attrs [required: Any, installed: 23.2.0]
    - cffi [required: Any, installed: 1.16.0]
      - pycparser [required: Any, installed: 2.21]
    - findlibs [required: Any, installed: 0.0.5]
    - numpy [required: Any, installed: 1.26.4]
  - numpy [required: Any, installed: 1.26.4]
colour==0.1.5
distributed==2024.2.0
  - click [required: >=8.0, installed: 8.1.7]
  - cloudpickle [required: >=1.5.0, installed: 3.0.0]
  - dask [required: ==2024.2.0, installed: 2024.2.0]
    - click [required: >=8.1, installed: 8.1.7]
    - cloudpickle [required: >=1.5.0, installed: 3.0.0]
    - fsspec [required: >=2021.09.0, installed: 2024.2.0]
    - importlib-metadata [required: >=4.13.0, installed: 7.0.1]
      - zipp [required: >=0.5, installed: 3.17.0]
    - packaging [required: >=20.0, installed: 23.2]
    - partd [required: >=1.2.0, installed: 1.4.1]
      - locket [required: Any, installed: 1.0.0]
      - toolz [required: Any, installed: 0.12.1]
    - pyyaml [required: >=5.3.1, installed: 6.0.1]
    - toolz [required: >=0.10.0, installed: 0.12.1]
  - jinja2 [required: >=2.10.3, installed: 3.1.3]
    - MarkupSafe [required: >=2.0, installed: 2.1.5]
  - locket [required: >=1.0.0, installed: 1.0.0]
  - msgpack [required: >=1.0.0, installed: 1.0.7]
  - packaging [required: >=20.0, installed: 23.2]
  - psutil [required: >=5.7.2, installed: 5.9.8]
  - pyyaml [required: >=5.3.1, installed: 6.0.1]
  - sortedcontainers [required: >=2.0.5, installed: 2.4.0]
  - tblib [required: >=1.6.0, installed: 3.0.0]
  - toolz [required: >=0.10.0, installed: 0.12.1]
  - tornado [required: >=6.0.4, installed: 6.4]
  - urllib3 [required: >=1.24.3, installed: 2.2.0]
  - zict [required: >=3.0.0, installed: 3.0.0]
flox==0.9.2
  - numpy [required: >=1.22, installed: 1.26.4]
  - numpy-groupies [required: >=0.9.19, installed: 0.10.2]
    - numpy [required: Any, installed: 1.26.4]
  - packaging [required: >=21.3, installed: 23.2]
  - pandas [required: >=1.5, installed: 2.2.0]
    - numpy [required: >=1.23.2,<2, installed: 1.26.4]
    - python-dateutil [required: >=2.8.2, installed: 2.8.2]
      - six [required: >=1.5, installed: 1.16.0]
    - pytz [required: >=2020.1, installed: 2024.1]
    - tzdata [required: >=2022.7, installed: 2023.4]
  - scipy [required: >=1.9, installed: 1.12.0]
    - numpy [required: >=1.22.4,<1.29.0, installed: 1.26.4]
  - toolz [required: Any, installed: 0.12.1]
fqdn==1.5.1
h5netcdf==1.3.0
  - h5py [required: Any, installed: 3.10.0]
    - numpy [required: >=1.17.3, installed: 1.26.4]
  - packaging [required: Any, installed: 23.2]
imageio==2.33.1
  - numpy [required: Any, installed: 1.26.4]
  - pillow [required: >=8.3.2, installed: 10.2.0]
imageio-ffmpeg==0.4.9
  - setuptools [required: Any, installed: 69.0.3]
ipympl==0.9.3
  - ipython [required: <9, installed: 8.21.0]
    - decorator [required: Any, installed: 5.1.1]
    - jedi [required: >=0.16, installed: 0.19.1]
      - parso [required: >=0.8.3,<0.9.0, installed: 0.8.3]
    - matplotlib-inline [required: Any, installed: 0.1.6]
      - traitlets [required: Any, installed: 5.14.1]
    - pexpect [required: >4.3, installed: 4.9.0]
      - ptyprocess [required: >=0.5, installed: 0.7.0]
    - prompt-toolkit [required: >=3.0.41,<3.1.0, installed: 3.0.43]
      - wcwidth [required: Any, installed: 0.2.13]
    - pygments [required: >=2.4.0, installed: 2.17.2]
    - stack-data [required: Any, installed: 0.6.3]
      - asttokens [required: >=2.1.0, installed: 2.4.1]
        - six [required: >=1.12.0, installed: 1.16.0]
      - executing [required: >=1.2.0, installed: 2.0.1]
      - pure-eval [required: Any, installed: 0.2.2]
    - traitlets [required: >=5, installed: 5.14.1]
  - ipython-genutils [required: Any, installed: 0.2.0]
  - ipywidgets [required: >=7.6.0,<9, installed: 8.1.2]
    - comm [required: >=0.1.3, installed: 0.2.1]
      - traitlets [required: >=4, installed: 5.14.1]
    - ipython [required: >=6.1.0, installed: 8.21.0]
      - decorator [required: Any, installed: 5.1.1]
      - jedi [required: >=0.16, installed: 0.19.1]
        - parso [required: >=0.8.3,<0.9.0, installed: 0.8.3]
      - matplotlib-inline [required: Any, installed: 0.1.6]
        - traitlets [required: Any, installed: 5.14.1]
      - pexpect [required: >4.3, installed: 4.9.0]
        - ptyprocess [required: >=0.5, installed: 0.7.0]
      - prompt-toolkit [required: >=3.0.41,<3.1.0, installed: 3.0.43]
        - wcwidth [required: Any, installed: 0.2.13]
      - pygments [required: >=2.4.0, installed: 2.17.2]
      - stack-data [required: Any, installed: 0.6.3]
        - asttokens [required: >=2.1.0, installed: 2.4.1]
          - six [required: >=1.12.0, installed: 1.16.0]
        - executing [required: >=1.2.0, installed: 2.0.1]
        - pure-eval [required: Any, installed: 0.2.2]
      - traitlets [required: >=5, installed: 5.14.1]
    - jupyterlab-widgets [required: ~=3.0.10, installed: 3.0.10]
    - traitlets [required: >=4.3.1, installed: 5.14.1]
    - widgetsnbextension [required: ~=4.0.10, installed: 4.0.10]
  - matplotlib [required: >=3.4.0,<4, installed: 3.8.2]
    - contourpy [required: >=1.0.1, installed: 1.2.0]
      - numpy [required: >=1.20,<2.0, installed: 1.26.4]
    - cycler [required: >=0.10, installed: 0.12.1]
    - fonttools [required: >=4.22.0, installed: 4.48.1]
    - kiwisolver [required: >=1.3.1, installed: 1.4.5]
    - numpy [required: >=1.21,<2, installed: 1.26.4]
    - packaging [required: >=20.0, installed: 23.2]
    - pillow [required: >=8, installed: 10.2.0]
    - pyparsing [required: >=2.3.1, installed: 3.1.1]
    - python-dateutil [required: >=2.7, installed: 2.8.2]
      - six [required: >=1.5, installed: 1.16.0]
  - numpy [required: Any, installed: 1.26.4]
  - pillow [required: Any, installed: 10.2.0]
  - traitlets [required: <6, installed: 5.14.1]
isoduration==20.11.0
  - arrow [required: >=0.15.0, installed: 1.3.0]
    - python-dateutil [required: >=2.7.0, installed: 2.8.2]
      - six [required: >=1.5, installed: 1.16.0]
    - types-python-dateutil [required: >=2.8.10, installed: 2.8.19.20240106]
jsonpointer==2.4
lz4==4.3.3
MetPy==1.6.0
  - matplotlib [required: >=3.5.0, installed: 3.8.2]
    - contourpy [required: >=1.0.1, installed: 1.2.0]
      - numpy [required: >=1.20,<2.0, installed: 1.26.4]
    - cycler [required: >=0.10, installed: 0.12.1]
    - fonttools [required: >=4.22.0, installed: 4.48.1]
    - kiwisolver [required: >=1.3.1, installed: 1.4.5]
    - numpy [required: >=1.21,<2, installed: 1.26.4]
    - packaging [required: >=20.0, installed: 23.2]
    - pillow [required: >=8, installed: 10.2.0]
    - pyparsing [required: >=2.3.1, installed: 3.1.1]
    - python-dateutil [required: >=2.7, installed: 2.8.2]
      - six [required: >=1.5, installed: 1.16.0]
  - numpy [required: >=1.20.0, installed: 1.26.4]
  - pandas [required: >=1.4.0, installed: 2.2.0]
    - numpy [required: >=1.23.2,<2, installed: 1.26.4]
    - python-dateutil [required: >=2.8.2, installed: 2.8.2]
      - six [required: >=1.5, installed: 1.16.0]
    - pytz [required: >=2020.1, installed: 2024.1]
    - tzdata [required: >=2022.7, installed: 2023.4]
  - pint [required: >=0.17, installed: 0.23]
    - typing-extensions [required: Any, installed: 4.9.0]
  - pooch [required: >=1.2.0, installed: 1.8.0]
    - packaging [required: >=20.0, installed: 23.2]
    - platformdirs [required: >=2.5.0, installed: 4.2.0]
    - requests [required: >=2.19.0, installed: 2.31.0]
      - certifi [required: >=2017.4.17, installed: 2024.2.2]
      - charset-normalizer [required: >=2,<4, installed: 3.3.2]
      - idna [required: >=2.5,<4, installed: 3.6]
      - urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
  - pyproj [required: >=3.0.0, installed: 3.6.1]
    - certifi [required: Any, installed: 2024.2.2]
  - scipy [required: >=1.8.0, installed: 1.12.0]
    - numpy [required: >=1.22.4,<1.29.0, installed: 1.26.4]
  - traitlets [required: >=5.0.5, installed: 5.14.1]
  - xarray [required: >=0.21.0, installed: 2024.1.1]
    - numpy [required: >=1.23, installed: 1.26.4]
    - packaging [required: >=22, installed: 23.2]
    - pandas [required: >=1.5, installed: 2.2.0]
      - numpy [required: >=1.23.2,<2, installed: 1.26.4]
      - python-dateutil [required: >=2.8.2, installed: 2.8.2]
        - six [required: >=1.5, installed: 1.16.0]
      - pytz [required: >=2020.1, installed: 2024.1]
      - tzdata [required: >=2022.7, installed: 2023.4]
nc-time-axis==1.4.1
  - cftime [required: >=1.5, installed: 1.6.3]
    - numpy [required: >1.13.3, installed: 1.26.4]
  - matplotlib [required: Any, installed: 3.8.2]
    - contourpy [required: >=1.0.1, installed: 1.2.0]
      - numpy [required: >=1.20,<2.0, installed: 1.26.4]
    - cycler [required: >=0.10, installed: 0.12.1]
    - fonttools [required: >=4.22.0, installed: 4.48.1]
    - kiwisolver [required: >=1.3.1, installed: 1.4.5]
    - numpy [required: >=1.21,<2, installed: 1.26.4]
    - packaging [required: >=20.0, installed: 23.2]
    - pillow [required: >=8, installed: 10.2.0]
    - pyparsing [required: >=2.3.1, installed: 3.1.1]
    - python-dateutil [required: >=2.7, installed: 2.8.2]
      - six [required: >=1.5, installed: 1.16.0]
  - numpy [required: Any, installed: 1.26.4]
netCDF4==1.6.5
  - certifi [required: Any, installed: 2024.2.2]
  - cftime [required: Any, installed: 1.6.3]
    - numpy [required: >1.13.3, installed: 1.26.4]
  - numpy [required: Any, installed: 1.26.4]
numbagg==0.8.0
  - numba [required: Any, installed: 0.59.0]
    - llvmlite [required: >=0.42.0dev0,<0.43, installed: 0.42.0]
    - numpy [required: >=1.22,<1.27, installed: 1.26.4]
  - numpy [required: Any, installed: 1.26.4]
opt-einsum==3.3.0
  - numpy [required: >=1.7, installed: 1.26.4]
pillar-youtube-upload==0.3.0
  - google-api-core [required: >=1.23.0, installed: 2.17.0]
    - google-auth [required: >=2.14.1,<3.0.dev0, installed: 2.27.0]
      - cachetools [required: >=2.0.0,<6.0, installed: 5.3.2]
      - pyasn1-modules [required: >=0.2.1, installed: 0.3.0]
        - pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
      - rsa [required: >=3.1.4,<5, installed: 4.9]
        - pyasn1 [required: >=0.1.3, installed: 0.5.1]
    - googleapis-common-protos [required: >=1.56.2,<2.0.dev0, installed: 1.62.0]
      - protobuf [required: >=3.19.5,<5.0.0.dev0,!=4.21.5,!=4.21.4,!=4.21.3,!=4.21.2,!=4.21.1,!=3.20.1,!=3.20.0, installed: 4.25.2]
    - protobuf [required: >=3.19.5,<5.0.0.dev0,!=4.21.5,!=4.21.4,!=4.21.3,!=4.21.2,!=4.21.1,!=4.21.0,!=3.20.1,!=3.20.0, installed: 4.25.2]
    - requests [required: >=2.18.0,<3.0.0.dev0, installed: 2.31.0]
      - certifi [required: >=2017.4.17, installed: 2024.2.2]
      - charset-normalizer [required: >=2,<4, installed: 3.3.2]
      - idna [required: >=2.5,<4, installed: 3.6]
      - urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
  - google-api-python-client [required: >=1.12.5, installed: 2.117.0]
    - google-api-core [required: >=1.31.5,<3.0.0.dev0,!=2.3.0,!=2.2.*,!=2.1.*,!=2.0.*, installed: 2.17.0]
      - google-auth [required: >=2.14.1,<3.0.dev0, installed: 2.27.0]
        - cachetools [required: >=2.0.0,<6.0, installed: 5.3.2]
        - pyasn1-modules [required: >=0.2.1, installed: 0.3.0]
          - pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
        - rsa [required: >=3.1.4,<5, installed: 4.9]
          - pyasn1 [required: >=0.1.3, installed: 0.5.1]
      - googleapis-common-protos [required: >=1.56.2,<2.0.dev0, installed: 1.62.0]
        - protobuf [required: >=3.19.5,<5.0.0.dev0,!=4.21.5,!=4.21.4,!=4.21.3,!=4.21.2,!=4.21.1,!=3.20.1,!=3.20.0, installed: 4.25.2]
      - protobuf [required: >=3.19.5,<5.0.0.dev0,!=4.21.5,!=4.21.4,!=4.21.3,!=4.21.2,!=4.21.1,!=4.21.0,!=3.20.1,!=3.20.0, installed: 4.25.2]
      - requests [required: >=2.18.0,<3.0.0.dev0, installed: 2.31.0]
        - certifi [required: >=2017.4.17, installed: 2024.2.2]
        - charset-normalizer [required: >=2,<4, installed: 3.3.2]
        - idna [required: >=2.5,<4, installed: 3.6]
        - urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
    - google-auth [required: >=1.19.0,<3.0.0.dev0, installed: 2.27.0]
      - cachetools [required: >=2.0.0,<6.0, installed: 5.3.2]
      - pyasn1-modules [required: >=0.2.1, installed: 0.3.0]
        - pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
      - rsa [required: >=3.1.4,<5, installed: 4.9]
        - pyasn1 [required: >=0.1.3, installed: 0.5.1]
    - google-auth-httplib2 [required: >=0.1.0, installed: 0.2.0]
      - google-auth [required: Any, installed: 2.27.0]
        - cachetools [required: >=2.0.0,<6.0, installed: 5.3.2]
        - pyasn1-modules [required: >=0.2.1, installed: 0.3.0]
          - pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
        - rsa [required: >=3.1.4,<5, installed: 4.9]
          - pyasn1 [required: >=0.1.3, installed: 0.5.1]
      - httplib2 [required: >=0.19.0, installed: 0.22.0]
        - pyparsing [required: >=2.4.2,<4,!=3.0.3,!=3.0.2,!=3.0.1,!=3.0.0, installed: 3.1.1]
    - httplib2 [required: >=0.15.0,<1.dev0, installed: 0.22.0]
      - pyparsing [required: >=2.4.2,<4,!=3.0.3,!=3.0.2,!=3.0.1,!=3.0.0, installed: 3.1.1]
    - uritemplate [required: >=3.0.1,<5, installed: 4.1.1]
  - google-auth [required: >=1.22.1, installed: 2.27.0]
    - cachetools [required: >=2.0.0,<6.0, installed: 5.3.2]
    - pyasn1-modules [required: >=0.2.1, installed: 0.3.0]
      - pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
    - rsa [required: >=3.1.4,<5, installed: 4.9]
      - pyasn1 [required: >=0.1.3, installed: 0.5.1]
  - httplib2 [required: >=0.18.1, installed: 0.22.0]
    - pyparsing [required: >=2.4.2,<4,!=3.0.3,!=3.0.2,!=3.0.1,!=3.0.0, installed: 3.1.1]
  - oauth2client [required: >=4.1.3, installed: 4.1.3]
    - httplib2 [required: >=0.9.1, installed: 0.22.0]
      - pyparsing [required: >=2.4.2,<4,!=3.0.3,!=3.0.2,!=3.0.1,!=3.0.0, installed: 3.1.1]
    - pyasn1 [required: >=0.1.7, installed: 0.5.1]
    - pyasn1-modules [required: >=0.0.5, installed: 0.3.0]
      - pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
    - rsa [required: >=3.1.4, installed: 4.9]
      - pyasn1 [required: >=0.1.3, installed: 0.5.1]
    - six [required: >=1.6.1, installed: 1.16.0]
pyarrow==15.0.0
  - numpy [required: >=1.16.6,<2, installed: 1.26.4]
pyarrow-hotfix==0.6
seaborn==0.13.2
  - matplotlib [required: >=3.4,!=3.6.1, installed: 3.8.2]
    - contourpy [required: >=1.0.1, installed: 1.2.0]
      - numpy [required: >=1.20,<2.0, installed: 1.26.4]
    - cycler [required: >=0.10, installed: 0.12.1]
    - fonttools [required: >=4.22.0, installed: 4.48.1]
    - kiwisolver [required: >=1.3.1, installed: 1.4.5]
    - numpy [required: >=1.21,<2, installed: 1.26.4]
    - packaging [required: >=20.0, installed: 23.2]
    - pillow [required: >=8, installed: 10.2.0]
    - pyparsing [required: >=2.3.1, installed: 3.1.1]
    - python-dateutil [required: >=2.7, installed: 2.8.2]
      - six [required: >=1.5, installed: 1.16.0]
  - numpy [required: >=1.20,!=1.24.0, installed: 1.26.4]
  - pandas [required: >=1.2, installed: 2.2.0]
    - numpy [required: >=1.23.2,<2, installed: 1.26.4]
    - python-dateutil [required: >=2.8.2, installed: 2.8.2]
      - six [required: >=1.5, installed: 1.16.0]
    - pytz [required: >=2020.1, installed: 2024.1]
    - tzdata [required: >=2022.7, installed: 2023.4]
siphon==0.9
  - beautifulsoup4 [required: >=4.6, installed: 4.12.3]
    - soupsieve [required: >1.2, installed: 2.5]
  - numpy [required: >=1.8, installed: 1.26.4]
  - pandas [required: Any, installed: 2.2.0]
    - numpy [required: >=1.23.2,<2, installed: 1.26.4]
    - python-dateutil [required: >=2.8.2, installed: 2.8.2]
      - six [required: >=1.5, installed: 1.16.0]
    - pytz [required: >=2020.1, installed: 2024.1]
    - tzdata [required: >=2022.7, installed: 2023.4]
  - protobuf [required: >=3.0.0a3, installed: 4.25.2]
  - requests [required: >=1.2, installed: 2.31.0]
    - certifi [required: >=2017.4.17, installed: 2024.2.2]
    - charset-normalizer [required: >=2,<4, installed: 3.3.2]
    - idna [required: >=2.5,<4, installed: 3.6]
    - urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
uri-template==1.3.0
webcolors==1.13
zarr==2.16.1
  - asciitree [required: Any, installed: 0.3.3]
  - fasteners [required: Any, installed: 0.19]
  - numcodecs [required: >=0.10.0, installed: 0.12.1]
    - numpy [required: >=1.7, installed: 1.26.4]
  - numpy [required: >=1.20,!=1.21.0, installed: 1.26.4]

Thanks in advance for any help!

Operating System

Windows

Version

1.6

Python Version

3.11

Code to Reproduce

See above.

Errors, Traceback, and Logs

No response

@stackjohn stackjohn added the Type: Bug Something is not working like it should label Feb 11, 2024
@stackjohn
Copy link
Author

After a little more investigation it seems like this might be an issue with cfgrib.

Converting the files to NetCDF files with -netcdf seems to resolve it.

I'd be interested if anyone has any thoughts as to why this happens but feel free to close.

@Unidata Unidata locked and limited conversation to collaborators Feb 12, 2024
@dcamron dcamron converted this issue into discussion #3395 Feb 12, 2024

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Labels
Type: Bug Something is not working like it should
Projects
None yet
Development

No branches or pull requests

1 participant