Skip to content
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

pymt problems in Python > 3.9 #167

Open
Volk3rJ opened this issue Mar 14, 2024 · 2 comments
Open

pymt problems in Python > 3.9 #167

Volk3rJ opened this issue Mar 14, 2024 · 2 comments

Comments

@Volk3rJ
Copy link

Volk3rJ commented Mar 14, 2024

I am having problems trying to get pymt to run in Python version > 3.9 (on Linux).

I installed the pymt stable release via conda install in a Python 3.12 environment. Importing the module does not result in an error but it's clearly not working:

Python 3.12.2 | packaged by conda-forge | (main, Feb 16 2024, 20:50:58) [GCC 12.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymt
>>> for model in pymt.MODELS:
...     print(model)
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'pymt' has no attribute 'MODELS'
>>>

When I do the same in a Python 3.9 environment, it seems to work fine:

Python 3.9.18 | packaged by conda-forge | (main, Dec 23 2023, 16:33:10)
[GCC 12.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymt
>>> for model in pymt.MODELS:
...     print(model)
...
Cem
Waves
Child
Hydrotrend
FrostNumber
Ku
KuEnhanced
Avulsion
Plume
Sedflux3D
Subside

Is there a way to get this to work in Python 3.12 (or 3.11)?

@mdpiper
Copy link
Member

mdpiper commented Mar 21, 2024

@Volk3rJ We haven't built a conda package for Python 3.12 yet. What you're getting is likely an old (v1.0.0) pure Python version of pymt. We've been working through our maintenance backlog recently and pymt is on our list of things to triage and update.

Python 3.11 will work (we have a conda package for it); also, building pymt from source will work.

@aufdenkampe
Copy link

aufdenkampe commented Apr 17, 2024

@mdpiper, thanks for these suggestions, and also for your work on:

Here's a bit more info to help you/us collectively solve the challenge.

In your response to this issue:

You described that you need to update pymt because it's:

  1. not built for Python 3.12, and
  2. incompatible with recent changes to gimli.units.

I addressed both of those issues as I've been working through your new examples now (temporarily) at https://babelizer.readthedocs.io/en/mdpiper-add-cxx-example/.

Using this environment.yml file, I succeeded at building a conda environment for both Mac and Windows with:

- python=3.11
- pymt=1.3.1
- gimli.units=0.3.1 
    # Before reorg (https://github.com/mcflugen/gimli/pull/18) 
    # to prevent import error with pymt=1.3.1

That cleared the gimli.units import error, but then led to this error:

>>> from pymt.models import HeatC
Traceback (most recent call last):
  File "/Users/aaufdenkampe/miniconda3/envs/wrap-all/lib/python3.11/site-packages/model_metadata/modelmetadata.py", line 69, in __init__
    param = parameter_from_dict(params[name]).as_dict()
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/aaufdenkampe/miniconda3/envs/wrap-all/lib/python3.11/site-packages/model_metadata/model_parameter.py", line 160, in parameter_from_dict
    return IntParameter(value, **kwds)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/aaufdenkampe/miniconda3/envs/wrap-all/lib/python3.11/site-packages/model_metadata/model_parameter.py", line 386, in __init__
    raise ValueError(
ValueError: value must be either an int or a string that can be converted to an int (3650.0)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/aaufdenkampe/miniconda3/envs/wrap-all/lib/python3.11/site-packages/pymt/__init__.py", line 6, in <module>
    MODELS = ModelCollection()
             ^^^^^^^^^^^^^^^^^
  File "/Users/aaufdenkampe/miniconda3/envs/wrap-all/lib/python3.11/site-packages/pymt/model_collection.py", line 22, in __new__
    models.append(ModelCollection.load_entry_point(entry_point))
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/aaufdenkampe/miniconda3/envs/wrap-all/lib/python3.11/site-packages/pymt/model_collection.py", line 69, in load_entry_point
    Model = bmi_factory(model)
            ^^^^^^^^^^^^^^^^^^
  File "/Users/aaufdenkampe/miniconda3/envs/wrap-all/lib/python3.11/site-packages/pymt/framework/bmi_bridge.py", line 778, in bmi_factory
    class BmiWrapper(BmiCap):
  File "/Users/aaufdenkampe/miniconda3/envs/wrap-all/lib/python3.11/site-packages/pymt/framework/bmi_bridge.py", line 780, in BmiWrapper
    __doc__ = bmi_docstring(cls)
              ^^^^^^^^^^^^^^^^^^
  File "/Users/aaufdenkampe/miniconda3/envs/wrap-all/lib/python3.11/site-packages/pymt/framework/bmi_docstring.py", line 103, in bmi_docstring
    meta = ModelMetadata.from_obj(plugin)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/aaufdenkampe/miniconda3/envs/wrap-all/lib/python3.11/site-packages/model_metadata/modelmetadata.py", line 84, in from_obj
    return cls(ModelMetadata.find(obj))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/aaufdenkampe/miniconda3/envs/wrap-all/lib/python3.11/site-packages/model_metadata/modelmetadata.py", line 71, in __init__
    raise ValueError(f"{name}: unable to load parameter")
ValueError: run_duration: unable to load parameter

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants