Skip to content

Cannot save regridder when providing precomputed_weights #433

Open
@rhyspoulton

Description

@rhyspoulton

🐛 Bug Report

I am attempting to save a regridder created using the ESMFBilinearRegridder and providing precomputed_weights, but I am enountering the following error when calling save_regridder(regridder, 'saved_regridder.nc'):

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[226], line 2
      1 regridder = esmf_regrid.schemes.ESMFBilinearRegridder(src_gl_cube, tar_gl_cube, precomputed_weights = combined_weights, mdtol=1)
----> 2 save_regridder(regridder, "saved_comb_regridder.nc")
      3 print(regridder.regridder.esmf_version)

File ~/.conda/envs/iris-esmf-regrid/lib/python3.12/site-packages/esmf_regrid/experimental/io.py:270, in save_regridder(rg, filename)
    267 for cube in cube_list:
    268     cube.attributes = attributes
--> 270 iris.fileformats.netcdf.save(cube_list, filename)
...
File ~/.conda/envs/iris-esmf-regrid/lib/python3.12/site-packages/iris/fileformats/netcdf/saver.py:271, in _setncattr(variable, name, attribute)
    269 assert hasattr(variable, "THREAD_SAFE_FLAG")
    270 attribute = _bytes_if_ascii(attribute)
--> 271 return variable.setncattr(name, attribute)

File src/netCDF4/_netCDF4.pyx:3087, in netCDF4._netCDF4.Dataset.setncattr()

File src/netCDF4/_netCDF4.pyx:1888, in netCDF4._netCDF4._set_att()

TypeError: illegal data type for attribute b'ESMF_version', must be one of dict_keys(['S1', 'i1', 'u1', 'i2', 'u2', 'i4', 'u4', 'i8', 'u8', 'f4', 'f8']), got O

And if print out the I print out the emsf_version from the regridder, I can see that is None which is causing the issue with saving:

In  [1]: regridder = esmf_regrid.schemes.ESMFBilinearRegridder(src_cube, tar_cube, precomputed_weights = weights)

In  [2]: regridder.regridder.esmf_version
Out [2]: None

How To Reproduce

Steps to reproduce the behaviour:

Call the save_regridder with a regridder that has precomputed_weight supplied e.g.:

# Create the regridder
regridder = esmf_regrid.schemes.ESMFBilinearRegridder(src_cube, tar_cube, precomputed_weights = weights)

# save the regridder
save_regridder(regridder, 'saved_regridder.nc')

Expected behaviour

No error encountered

Environment

  • OS: Linux
  • esmf_regrid version: 0.11.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    New: IssueHighlight a new community raised "generic" issueType: Bug

    Type

    No type

    Projects

    • Status

      No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions