From fd4756b521aece718a81c595f1f76c3cc147a76e Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Tue, 2 Apr 2024 13:36:39 -0600 Subject: [PATCH 01/25] Rename conda env file for C example --- docs/source/{environment.yml => environment-c.yml} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename docs/source/{environment.yml => environment-c.yml} (64%) diff --git a/docs/source/environment.yml b/docs/source/environment-c.yml similarity index 64% rename from docs/source/environment.yml rename to docs/source/environment-c.yml index 05796077..0e59a318 100644 --- a/docs/source/environment.yml +++ b/docs/source/environment-c.yml @@ -1,5 +1,5 @@ -# A conda environment file for the babelizer example -name: wrap +# A conda environment file for the babelizer C example +name: wrap-c channels: - conda-forge dependencies: From 2d132d26091d7a8923e3b22c42478dba95d83d45 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Tue, 2 Apr 2024 14:09:14 -0600 Subject: [PATCH 02/25] Match C example babel.toml with 'babelize sample-config' output --- docs/source/babel_heatc.toml | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/docs/source/babel_heatc.toml b/docs/source/babel_heatc.toml index c6f3786f..4054b80c 100644 --- a/docs/source/babel_heatc.toml +++ b/docs/source/babel_heatc.toml @@ -1,10 +1,13 @@ -[library] -[library.HeatModel] +# See https://babelizer.readthedocs.io/ for more information + +# Describe the library being wrapped. +[library.HeatC] language = "c" library = "bmiheatc" header = "bmi_heat.h" entry_point = "register_bmi_heat" +# Describe compiler options need to build the library being wrapped. [build] undef_macros = [] define_macros = [] @@ -13,17 +16,26 @@ library_dirs = [] include_dirs = [] extra_compile_args = [] +# Describe the newly wrapped package. [package] name = "pymt_heatc" -requirements = [""] +requirements = [] [info] github_username = "pymt-lab" package_author = "csdms" package_author_email = "csdms@colorado.edu" -package_license = "MIT" -summary = "PyMT plugin for the C heat model" +package_license = "MIT License" +summary = "PyMT component for the C heat model" [ci] -python_version = ["3.9"] -os = ["linux", "mac", "windows"] +python_version = [ + "3.10", + "3.11", + "3.12", +] +os = [ + "linux", + "mac", + "windows", +] From 3b433d60bcacb30e197bef6c7c437895d7abe812 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Tue, 2 Apr 2024 17:18:17 -0600 Subject: [PATCH 03/25] Update C example through babelizing --- docs/source/example.rst | 141 +++++++++++++++++----------------------- 1 file changed, 58 insertions(+), 83 deletions(-) diff --git a/docs/source/example.rst b/docs/source/example.rst index 78977ae9..90f37610 100644 --- a/docs/source/example.rst +++ b/docs/source/example.rst @@ -9,16 +9,14 @@ To simplify package management in the example, we'll use :term:`conda`. We'll also use :term:`git` to obtain the model source code. -This is a somewhat long example. -To break it up, -here are the steps we'll take: +Here are the steps we'll take to complete this example: #. Create a :term:`conda environment` that includes software to compile the model and wrap it with the *babelizer* #. Clone the `bmi-example-c`_ repository from GitHub and build the *heat* model from source #. Create a *babelizer* input file describing the *heat* model -#. Run the *babelizer* to generate Python bindings, then build the bindings +#. Run the *babelizer* to generate a Python package, then build and install the package #. Show the *heat* model running in Python through *pymt* Before we begin, @@ -26,18 +24,18 @@ create a directory to hold our work: .. code:: bash - $ mkdir build && cd build + mkdir example-c && cd example-c This directory is a starting point; we'll make new directories under it as we proceed through the example. In the end, -the directory structure under ``build`` should look like that in Figure 1. +the directory structure under ``example-c`` should look like that in Figure 1. .. figure:: _static/babelizer-bmi-example-c.png :align: center :alt: Directory structure after completing example - Figure 1: Directory structure after completing example. + Figure 1: Directory structure after completing the C example. Set up a conda environment -------------------------- @@ -45,17 +43,18 @@ Set up a conda environment Start by setting up a :term:`conda environment` that includes the *babelizer*, as well as a toolchain to build and install the model. The necessary packages are listed in the conda environment file -:download:`environment.yml`: +:download:`environment-c.yml`: -.. include:: environment.yml +.. include:: environment-c.yml :literal: -:download:`Download ` this file -and create the new environment with: +:download:`Download ` this file +and place it in the ``example-c`` directory you created above. +Create the new environment with: .. code:: bash - $ conda env create --file=environment.yml + conda env create --file environment-c.yml When this command completes, activate the environment @@ -63,25 +62,26 @@ activate the environment .. code:: bash - $ conda activate wrap + conda activate wrap-c -The *wrap* environment now contains all the dependencies needed +The *wrap-c* environment now contains all the dependencies needed to build, install, and wrap the *heat* model. Build the *heat* model from source ---------------------------------- -Clone the `bmi-example-c`_ repository from GitHub: +From the ``example-c`` directory, +clone the `bmi-example-c`_ repository from GitHub: .. code:: bash - $ git clone https://github.com/csdms/bmi-example-c + git clone https://github.com/csdms/bmi-example-c There are general `instructions`_ in the repository for building and installing this package on Linux, macOS, and Windows. We'll augment those instructions -with the note that we're installing into the *wrap* conda environment, +with the note that we're installing into the *wrap-c* conda environment, so the ``CONDA_PREFIX`` environment variable should be used to specify the install path. @@ -93,17 +93,17 @@ use these commands to build and install the *heat* model: .. code:: bash - $ cd bmi-example-c - $ mkdir _build && cd _build - $ cmake .. -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX - $ make install + cd bmi-example-c + mkdir build && cd build + cmake .. -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX + make install Verify the install by testing for the existence of the header of the library containing the compiled *heat* model: .. code:: bash - $ test -f $CONDA_PREFIX/include/bmi_heat.h ; echo $? + test -f $CONDA_PREFIX/include/bmi_heat.h ; echo $? A return of zero indicates success. @@ -111,91 +111,66 @@ Windows ....... Building on Windows requires -Microsoft Visual Studio 2017 or Microsoft Build Tools for Visual Studio 2017. +Microsoft Visual Studio 2019 or Microsoft Build Tools for Visual Studio 2019. To build and install the *heat* model, the following commands must be run in a `Developer Command Prompt`_: -.. code:: +.. code:: bat - > cd bmi-example-c - > mkdir _build && cd _build - > cmake .. ^ - -G "NMake Makefiles" ^ - -DCMAKE_INSTALL_PREFIX=%CONDA_PREFIX% ^ - -DCMAKE_BUILD_TYPE=Release - > cmake --build . --target install --config Release + cd bmi-example-c + mkdir build && cd build + cmake .. ^ + -G "NMake Makefiles" ^ + -DCMAKE_INSTALL_PREFIX=%CONDA_PREFIX% ^ + -DCMAKE_BUILD_TYPE=Release + cmake --build . --target install --config Release Verify the install by testing for the existence of the header of the library containing the compiled *heat* model: -.. code:: +.. code:: bat - > if not exist %LIBRARY_INC%\\bmi_heat.h exit 1 + if not exist %LIBRARY_INC%\\bmi_heat.h exit 1 -Create the *babelizer* input file ---------------------------------- +Create a *babelizer* configuration file +--------------------------------------- -The *babelizer* input file provides information to the *babelizer* +A *babelizer* configuration file provides information to the *babelizer* about the model to be wrapped. -The input file is created with the ``babelize generate`` subcommand. - -Return to our initial ``build`` directory and call ``babelize generate`` with: - -.. code:: bash - $ cd ../.. - $ babelize generate \ - --package=pymt_heatc \ - --summary="PyMT plugin for the C heat model" \ - --language=c \ - --library=bmiheatc \ - --header=bmi_heat.h \ - --entry-point=register_bmi_heat \ - --name=HeatModel \ - --requirement="" > babel_heatc.toml +Typically, we would use the ``babelize sample-config`` command +to create a sample configuration file, which could then be edited. +However, to simplify this example, we have provided a completed +configuration file for the *heat* model. +:download:`Download ` the file +:download:`babel_heatc.toml` and copy it to the ``build`` directory. -In this call, -the *babelizer* will also fill in default values; -e.g., author name, author email, GitHub username, and license. - -The resulting file, :download:`babel_heatc.toml`, -will look something like this: +The configuration file looks like this: .. include:: babel_heatc.toml :literal: -For more information on the entries and sections of the *babelizer* input file, +For more information on the entries and sections of the *babelizer* configuration file, see `Input file <./readme.html#input-file>`_. Wrap the model with the *babelizer* ----------------------------------- -Generate Python bindings for the model with the ``babelize init`` subcommand: +From the ``example-c`` directory, +generate a Python package for the model with the ``babelize init`` command: .. code:: bash - $ babelize init babel_heatc.toml + babelize init babel_heatc.toml The results are placed in a new directory, ``pymt_heatc``, under the current directory. -.. code:: bash - - $ ls -aF pymt_heatc - ./ MANIFEST.in recipe/ - ../ Makefile requirements-build.txt - .git/ README.rst requirements-library.txt - .github/ babel.toml requirements-testing.txt - .gitignore docs/ requirements.txt - CHANGES.rst meta/ setup.cfg - CREDITS.rst pymt_heatc/ setup.py - LICENSE pyproject.toml - -Before we can build the Python bindings, +Before we can build and install the Python package, we must ensure that the dependencies required by the toolchain, -as well as any required by the model, -as specified in the *babelizer* input file (none in this case), +as well as those required by the model, +as specified in the *babelizer* configuration file, are satisfied. Change to the ``pymt_heatc`` directory and install dependencies @@ -203,18 +178,18 @@ into the conda environment: .. code:: bash - $ cd pymt_heatc - $ conda install -c conda-forge \ - --file=requirements-build.txt \ - --file=requirements-testing.txt \ - --file=requirements-library.txt \ - --file=requirements.txt + cd pymt_heatc + conda install -c conda-forge \ + --file requirements-build.txt \ + --file requirements-library.txt \ + --file requirements-testing.txt \ + --file requirements.txt -Now build the Python bindings with: +Now build and install the Python package with: .. code:: bash - $ make install + pip install --no-build-isolation --editable . This command sets off a long list of messages, at the end of which you'll hopefully see: From edf60ca3eab77a204d5738194af887647f98d08c Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Tue, 2 Apr 2024 17:20:03 -0600 Subject: [PATCH 04/25] Rename C example [skip ci] --- docs/source/{example.rst => example-c.rst} | 0 docs/source/index.rst | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/source/{example.rst => example-c.rst} (100%) diff --git a/docs/source/example.rst b/docs/source/example-c.rst similarity index 100% rename from docs/source/example.rst rename to docs/source/example-c.rst diff --git a/docs/source/index.rst b/docs/source/index.rst index dedebede..529c6609 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -40,7 +40,7 @@ User Guide readme cli - example + example-c example-fortran glossary From db955a927245683664054895fd044103ecfe3fd0 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Tue, 2 Apr 2024 17:37:26 -0600 Subject: [PATCH 05/25] Update reference to C example from Fortran example --- docs/source/example-fortran.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/example-fortran.rst b/docs/source/example-fortran.rst index 536ce84e..a9c8a6d7 100644 --- a/docs/source/example-fortran.rst +++ b/docs/source/example-fortran.rst @@ -396,7 +396,7 @@ then run it with: $ python pymt_heatc_ex.py Note that here we are actually running the Python script that -was developed for the :doc:`C example `, not Fortran. +was developed for the :doc:`C example `, not Fortran. That is one of the powerful things about wrapping your BMI-enabled model and accessing it via PyMT - it provides a standardised interface, regardless of the underlying model @@ -410,7 +410,7 @@ Using the *babelizer*, we wrapped the *heat* model, which is written in Fortran. It can now be called as a *pymt* component in Python. The steps for wrapping a model with the *babelizer* outlined in this example -can also be applied to models written in C (:doc:`see the example `) +can also be applied to models written in C (:doc:`see the example `) and C++. From 98cf829e17c9ccb261c7b418af81c2124a17e490 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Tue, 2 Apr 2024 19:54:15 -0600 Subject: [PATCH 06/25] Update C example through installation [skip ci] --- docs/source/example-c.rst | 44 +++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/docs/source/example-c.rst b/docs/source/example-c.rst index 90f37610..ba463702 100644 --- a/docs/source/example-c.rst +++ b/docs/source/example-c.rst @@ -167,29 +167,15 @@ generate a Python package for the model with the ``babelize init`` command: The results are placed in a new directory, ``pymt_heatc``, under the current directory. -Before we can build and install the Python package, -we must ensure that the dependencies required by the toolchain, -as well as those required by the model, -as specified in the *babelizer* configuration file, -are satisfied. +Build and install the wrapped model +................................... -Change to the ``pymt_heatc`` directory and install dependencies -into the conda environment: +Change to the ``pymt_heatc`` directory, +then build and install the Python package with: .. code:: bash - cd pymt_heatc - conda install -c conda-forge \ - --file requirements-build.txt \ - --file requirements-library.txt \ - --file requirements-testing.txt \ - --file requirements.txt - -Now build and install the Python package with: - -.. code:: bash - - pip install --no-build-isolation --editable . + pip install ."[dev]" This command sets off a long list of messages, at the end of which you'll hopefully see: @@ -199,22 +185,27 @@ at the end of which you'll hopefully see: Successfully installed pymt-heatc Pause a moment to see what we've done. -Change back to the initial ``build`` directory, +Change back to the initial ``example-c`` directory, make a new ``test`` directory, and change to it: .. code:: bash - $ cd .. - $ mkdir test && cd test + cd .. + mkdir test && cd test Start a Python session and try the following commands: .. code:: python - >>> from pymt_heatc import HeatModel - >>> m = HeatModel() - >>> print(m.get_component_name()) + from pymt_heatc import HeatC + m = HeatC() + m.get_component_name() + +You should see: + +.. code:: bash + The 2D Heat Equation We've imported the *heat* model, @@ -222,6 +213,9 @@ written in C, into Python! Exit the Python session. +Test the BMI +............ + At this point, it's a good idea to run the *bmi-tester* (`GitHub repo `_) over the model. From fa14f965fe30de832f367c48b81fc36316963b2c Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 11:41:42 -0600 Subject: [PATCH 07/25] Replace Finder image with 'tree' output to show final directory structure This hopefully makes the result clearer and removes a binary file from the repo. [skip-ci] --- .../_static/babelizer-bmi-example-c.png | Bin 185508 -> 0 bytes docs/source/example-c.rst | 95 ++++++++++++++++-- 2 files changed, 86 insertions(+), 9 deletions(-) delete mode 100644 docs/source/_static/babelizer-bmi-example-c.png diff --git a/docs/source/_static/babelizer-bmi-example-c.png b/docs/source/_static/babelizer-bmi-example-c.png deleted file mode 100644 index 3dc74e8abfe260a9de3660bbdf9f80046dc70c2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185508 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

ciY9{^GjOquC^Tj6vrQ$=+xKWXQ+%JY8 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 bG zQRoLGR}B>ENhH7E2GEf=kriq}^IhFJA^XLVKCt98rb=X-?I&2!({J|PbeAx|MLw=5J_+I31IyCqE^BX zb1A>C#B)pPwr!4`_iy>WL4Y&rRNhx2JFj-%S2a*Wo|;8VZ~Hi_!Mht~8|^;ce3Cu_ z@1UiIT$?XfeF}exkv6l5s#g$IkOS9JhaXf(Q_(dIGs04S{_jl_)v`SLqe?><>FllzNK5qMEyI zp|7784p_?!+E2)(r&|R6{&xq?DN2g8(?={3O-)L5=gk&nP|HYv`(%m4FW;LFt~jX} zGllrm8HFYsUAecNcVheCQU*@0oXz+q5awR9N)T~y#dhcAH2(pG!;gOtG(nb>6gU{f z9c{%Dr+oFhI~hqjQTe_*a`Ww59H=FZQo#rC$)wAz_+$%2EJBaTySe$a8qMb;82iK0 zW|rGpRf%h%-(4r0#>I3U(4rjZgeG!Y@NtCB+WY_j@NpSkT=VP0)-H>4@sw6(&l2UQf=+&<9ZOxeK3 zHGcs4;g2X7Wn%?vyVPL2{y?u^#|{&@qWoHrkd{k-ryB}>1CbkYm^yV-?)^XHt09ou zV_Rw-|Bf!T_3V6D=TTASTAyzb`{A&JR_T^xR@ZJna zL{tC~=GzvQfA0ezpoi~q-ib{r;+1rMf6v2|Zf&+pi-@Xj(u~fsP9Lea)>MhaF-{?f zZ6&kgClEG<^}PEK{V14=dmJK zairwx9=9B8eK6H~!?0kUZBK`@R~NmPhKrbWqkpmH(rv!UhDfM#;TFvLaoZwvYiD02 zrHU8cu{pssqtK63!U-2+)ta(FMoWg?hBSsA<(E2T5_`R^(Q_V&wtHTVGQh*E{aeWXX`g8=ZuNL253o@inB841h05NBG7pUuinn}B^07I}_qOcU;-N7abyX{M zqT^rN38VoXwwr-Ti`_=%7-APMa$+2xg5RT`GHW^<|o(okzAg zg{-~~y~}(V=qxZwG3Ab;g7-|t61$g_{75(+Z9+j(gEr=FKtc+RI%C1?oVzj@62c}p zC-Ke30{g1oSq`BEd3DTQ6E;%B3~}(l(_9?JX5e3xuLMgfC}4!NOqZ__RW%xTHqyMHeYEA=RW1OmXq*Ry@l&sk%exCk ziVa`bCQQCnIojbd)8UPEATnEvS8eEYhlvuiqzT9SB+jW#bs~Uh-+TN$RRQU#TnDb; zKXYWf3jJGbWVrbPiTBpg=*2P*@wS^8vu-u+q`ZtckZCD}QG5QxXwxkVzkV9T62U

+lMFhvAEX8KVlR80_NATR$qMHSevl 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 ../meta + │   │   └── lib + │   │   ├── __init__.py + │   │   └── heatc.pyx + │   ├── pyproject.toml + │   ├── requirements-build.txt + │   ├── requirements-library.txt + │   ├── requirements-testing.txt + │   ├── requirements.txt + │   └── setup.cfg + └── test + └── config.txt + + 16 directories, 60 files - Figure 1: Directory structure after completing the C example. Set up a conda environment -------------------------- @@ -171,13 +247,14 @@ Build and install the wrapped model ................................... Change to the ``pymt_heatc`` directory, -then build and install the Python package with: +then build and install the Python package with *pip*: .. code:: bash + cd pymt_heatc pip install ."[dev]" -This command sets off a long list of messages, +The ``pip install`` command sets off a long list of messages, at the end of which you'll hopefully see: .. code:: bash From b82b1b4f9dd97b5133aac6c783025a99a7122839 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 12:04:26 -0600 Subject: [PATCH 08/25] Include bmi-tester in example environment --- docs/source/environment-c.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/environment-c.yml b/docs/source/environment-c.yml index 0e59a318..a51ad78e 100644 --- a/docs/source/environment-c.yml +++ b/docs/source/environment-c.yml @@ -10,3 +10,4 @@ dependencies: - c-compiler - bmi-c - babelizer + - bmi-tester>=0.5.9 From e4727adfb2ddfc4b0ad7e0f268c62d5c341d15a7 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 12:19:39 -0600 Subject: [PATCH 09/25] Move parameters for C example to their own directory --- docs/source/examples/{ => c}/heat.txt | 0 docs/source/examples/{ => c}/info.yaml | 0 docs/source/examples/{ => c}/parameters.yaml | 0 docs/source/examples/{ => c}/run.yaml | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename docs/source/examples/{ => c}/heat.txt (100%) rename docs/source/examples/{ => c}/info.yaml (100%) rename docs/source/examples/{ => c}/parameters.yaml (100%) rename docs/source/examples/{ => c}/run.yaml (100%) diff --git a/docs/source/examples/heat.txt b/docs/source/examples/c/heat.txt similarity index 100% rename from docs/source/examples/heat.txt rename to docs/source/examples/c/heat.txt diff --git a/docs/source/examples/info.yaml b/docs/source/examples/c/info.yaml similarity index 100% rename from docs/source/examples/info.yaml rename to docs/source/examples/c/info.yaml diff --git a/docs/source/examples/parameters.yaml b/docs/source/examples/c/parameters.yaml similarity index 100% rename from docs/source/examples/parameters.yaml rename to docs/source/examples/c/parameters.yaml diff --git a/docs/source/examples/run.yaml b/docs/source/examples/c/run.yaml similarity index 100% rename from docs/source/examples/run.yaml rename to docs/source/examples/c/run.yaml From 0632fa5eaaa6febad41e5014e4d4d90dc0edeac2 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 12:40:01 -0600 Subject: [PATCH 10/25] Move Python examples to c directory --- docs/source/examples/{ => c}/heatc_ex.py | 0 docs/source/examples/{ => c}/pymt_heatc_ex.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename docs/source/examples/{ => c}/heatc_ex.py (100%) rename docs/source/examples/{ => c}/pymt_heatc_ex.py (100%) mode change 100755 => 100644 diff --git a/docs/source/examples/heatc_ex.py b/docs/source/examples/c/heatc_ex.py similarity index 100% rename from docs/source/examples/heatc_ex.py rename to docs/source/examples/c/heatc_ex.py diff --git a/docs/source/examples/pymt_heatc_ex.py b/docs/source/examples/c/pymt_heatc_ex.py old mode 100755 new mode 100644 similarity index 100% rename from docs/source/examples/pymt_heatc_ex.py rename to docs/source/examples/c/pymt_heatc_ex.py From c4d15eade9c3c8cf286e10501d5e9324c13a3190 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 12:40:39 -0600 Subject: [PATCH 11/25] Include pymt in example environment --- docs/source/environment-c.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/environment-c.yml b/docs/source/environment-c.yml index a51ad78e..5219dfbe 100644 --- a/docs/source/environment-c.yml +++ b/docs/source/environment-c.yml @@ -11,3 +11,4 @@ dependencies: - bmi-c - babelizer - bmi-tester>=0.5.9 + - pymt>=1.3 From ae533ff7636b3b3c335b7479d02471288d87e43c Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 12:45:39 -0600 Subject: [PATCH 12/25] Update Python examples for C heat model --- docs/source/examples/c/config.txt | 1 + docs/source/examples/c/heatc_ex.py | 6 +++--- docs/source/examples/c/pymt_heatc_ex.py | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) create mode 120000 docs/source/examples/c/config.txt diff --git a/docs/source/examples/c/config.txt b/docs/source/examples/c/config.txt new file mode 120000 index 00000000..f1a6cc6c --- /dev/null +++ b/docs/source/examples/c/config.txt @@ -0,0 +1 @@ +../config.txt \ No newline at end of file diff --git a/docs/source/examples/c/heatc_ex.py b/docs/source/examples/c/heatc_ex.py index d6c31f23..5dae9948 100644 --- a/docs/source/examples/c/heatc_ex.py +++ b/docs/source/examples/c/heatc_ex.py @@ -1,14 +1,14 @@ -"""An example of running the heatc model through its BMI.""" +"""An example of running the C heat model through its BMI.""" import numpy as np -from pymt_heatc import HeatModel +from pymt_heatc import HeatC config_file = "config.txt" np.set_printoptions(formatter={"float": "{: 6.1f}".format}) # Instatiate an initialize the model. -m = HeatModel() +m = HeatC() print(m.get_component_name()) m.initialize(config_file) diff --git a/docs/source/examples/c/pymt_heatc_ex.py b/docs/source/examples/c/pymt_heatc_ex.py index 85f27694..09490235 100644 --- a/docs/source/examples/c/pymt_heatc_ex.py +++ b/docs/source/examples/c/pymt_heatc_ex.py @@ -1,9 +1,9 @@ -"""Run the heat model in pymt.""" +"""Run the C heat model in pymt.""" -from pymt.models import HeatModel +from pymt.models import HeatC # Instantiate the component and get its name. -m = HeatModel() +m = HeatC() print(m.name) # Call setup, then initialize the model. From ac642d394df5d0fcc159e9b97ddcc4f4badb387a Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 12:51:52 -0600 Subject: [PATCH 13/25] Update location of C Python example --- docs/source/example-fortran.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/example-fortran.rst b/docs/source/example-fortran.rst index a9c8a6d7..860beaf9 100644 --- a/docs/source/example-fortran.rst +++ b/docs/source/example-fortran.rst @@ -380,14 +380,14 @@ can be called through *pymt*: 'The 2D Heat Equation' A longer example, -:download:`pymt_heatc_ex.py `, +:download:`pymt_heatc_ex.py `, is included in the documentation. For easy viewing, it's reproduced here verbatim: -.. include:: examples/pymt_heatc_ex.py +.. include:: examples/c/pymt_heatc_ex.py :literal: -:download:`Download ` this Python script, +:download:`Download ` this Python script, make sure we're still in the `test` directory we just created, then run it with: From 8d5a121040902cd409c4ec644e635ad544763840 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 12:52:16 -0600 Subject: [PATCH 14/25] Finish updating C example [skip-ci] --- docs/source/example-c.rst | 54 +++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/docs/source/example-c.rst b/docs/source/example-c.rst index b9d45aec..4597da69 100644 --- a/docs/source/example-c.rst +++ b/docs/source/example-c.rst @@ -294,7 +294,7 @@ Test the BMI ............ At this point, -it's a good idea to run the *bmi-tester* (`GitHub repo `_) +it's a good idea to run the *bmi-tester* (`documentation `_) over the model. The *bmi-tester* exercises each BMI method exposed through Python, ensuring it works correctly. @@ -306,16 +306,16 @@ Create a configuration file for *heat* at the command line with: .. code:: bash - $ echo "1.5, 8.0, 6, 5" > config.txt + echo "1.5, 8.0, 6, 5" > config.txt -or download the file :download:`config.txt ` -(making sure to place it in the ``test`` directory). +or download the file :download:`config.txt `, +making sure to place it in the ``test`` directory. -Run the *bmi-tester*: +From the ``test`` directory, run the *bmi-tester*: .. code:: bash - $ bmi-test pymt_heatc:HeatModel --config-file=config.txt --root-dir=. -vvv + bmi-test pymt_heatc:HeatC --config-file=config.txt --root-dir=. -vvv This command sets off a long list of messages, ending with @@ -343,56 +343,55 @@ Recall the *babelizer* outputs the wrapped *heat* model to the directory ``pymt_heatc``. Under this directory, the *babelizer* created a directory for *heat* model metadata, -``meta/HeatModel``. +``meta/HeatC``. Change back to the ``pymt_heatc`` directory and view the current metadata: .. code:: bash $ cd ../pymt_heatc - $ ls meta/HeatModel/ + $ ls meta/HeatC/ api.yaml The file ``api.yaml`` is automatically generated by the *babelizer*. To complete the description of the *heat* model, other metadata files are needed, including: -* :download:`info.yaml ` -* :download:`run.yaml ` -* a :download:`templated model configuration file ` -* :download:`parameters.yaml ` +* :download:`info.yaml ` +* :download:`run.yaml ` +* a :download:`templated model configuration file ` +* :download:`parameters.yaml ` `Descriptions`_ of these files and their roles are given in the CSDMS Model Metadata repository. Download each of the files using the links in the list above -and place them in the ``pymt_heatc/meta/HeatModel`` directory +and place them in the ``pymt_heatc/meta/HeatC`` directory alongside ``api.yaml``. -Next, install *pymt*: - -.. code:: bash - - $ conda install -c conda-forge pymt - Then start a Python session and show that the *heat* model can be called through *pymt*: .. code:: python - >>> from pymt.models import HeatModel - >>> m = HeatModel() - >>> print(m.name) + from pymt.models import HeatC + m = HeatC() + m.name + +You should see: + +.. code:: bash + The 2D Heat Equation A longer example, -:download:`pymt_heatc_ex.py `, +:download:`pymt_heatc_ex.py `, is included in the documentation. For easy viewing, it's reproduced here verbatim: -.. include:: examples/pymt_heatc_ex.py +.. include:: examples/c/pymt_heatc_ex.py :literal: -:download:`Download ` this Python script, +:download:`Download ` this Python script, then run it with: .. code:: bash @@ -407,7 +406,7 @@ Using the *babelizer*, we wrapped the *heat* model, which is written in C. It can now be called as a *pymt* component in Python. The steps for wrapping a model with the *babelizer* outlined in this example -can also be applied to models written in C++ and Fortran. +can also be applied to models written in C++ and `Fortran`_. .. @@ -416,7 +415,8 @@ can also be applied to models written in C++ and Fortran. .. _bmi-example-c: https://github.com/csdms/bmi-example-c .. _instructions: https://github.com/csdms/bmi-example-c/blob/master/README.md .. _Developer Command Prompt: https://docs.microsoft.com/en-us/dotnet/framework/tools/developer-command-prompt-for-vs -.. _bmi-tester: https://github.com/csdms/bmi-tester +.. _bmi-tester: https://bmi-tester.readthedocs.io .. _Python Modeling Tool: https://pymt.readthedocs.io .. _CSDMS Model Metadata: https://github.com/csdms/model_metadata .. _Descriptions: https://github.com/csdms/model_metadata/blob/develop/README.rst +.. _Fortran: example-fortran.html From f571e710402c35995ad50a25c0a325a1dd4604df Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 13:33:31 -0600 Subject: [PATCH 15/25] Show a smaller tree for final result --- docs/source/example-c.rst | 112 ++++++++++---------------------------- 1 file changed, 29 insertions(+), 83 deletions(-) diff --git a/docs/source/example-c.rst b/docs/source/example-c.rst index 4597da69..78d11500 100644 --- a/docs/source/example-c.rst +++ b/docs/source/example-c.rst @@ -28,89 +28,16 @@ create a directory to hold our work: This directory is a starting point; we'll add files and directories to it as we proceed through the example. -At the end, -the directory structure under ``example-c`` should look similar to that below. +The final directory structure of ``example-c`` should look similar to that below. .. code:: bash - example-c + example-c/ ├── babel_heatc.toml - ├── bmi-example-c - │   ├── CMakeLists.txt - │   ├── LICENSE - │   ├── README.md - │   ├── heat - │   │   ├── CMakeLists.txt - │   │   ├── bmi_heat.c - │   │   ├── bmi_heat.h - │   │   ├── bmi_main.c - │   │   ├── bmiheatc.pc.cmake - │   │   ├── heat.c - │   │   ├── heat.h - │   │   ├── heatc.pc.cmake - │   │   └── main.c - │   └── testing - │   ├── CMakeLists.txt - │   ├── config.txt - │   ├── test_conflicting_instances.c - │   ├── test_get_value.c - │   ├── test_grid_info.c - │   ├── test_initialize_from_file.c - │   ├── test_irf.c - │   ├── test_print_var_names.c - │   ├── test_reinitialize.c - │   └── test_set_value.c + ├── bmi-example-c/ ├── environment-c.yml - ├── pymt_heatc - │   ├── CHANGES.rst - │   ├── CREDITS.rst - │   ├── LICENSE.rst - │   ├── MANIFEST.in - │   ├── README.rst - │   ├── babel.toml - │   ├── build - │   │   └── HeatC - │   │   └── api.yaml - │   ├── docs - │   │   ├── Makefile - │   │   ├── _static - │   │   │   ├── logo-dark.svg - │   │   │   └── logo-light.svg - │   │   ├── api - │   │   ├── authors.rst - │   │   ├── babel.rst - │   │   ├── changelog.rst - │   │   ├── conf.py - │   │   ├── developer_install.rst - │   │   ├── environments.rst - │   │   ├── index.rst - │   │   ├── license.rst - │   │   ├── quickstart.rst - │   │   ├── updating.rst - │   │   └── usage.rst - │   ├── meson.build - │   ├── meta - │   │   └── HeatC - │   │   └── api.yaml - │   ├── noxfile.py - │   ├── pymt_heatc - │   │   ├── __init__.py - │   │   ├── _bmi.py - │   │   ├── _version.py - │   │   ├── data -> ../meta - │   │   └── lib - │   │   ├── __init__.py - │   │   └── heatc.pyx - │   ├── pyproject.toml - │   ├── requirements-build.txt - │   ├── requirements-library.txt - │   ├── requirements-testing.txt - │   ├── requirements.txt - │   └── setup.cfg - └── test - └── config.txt - - 16 directories, 60 files + ├── pymt_heatc/ + └── test/ Set up a conda environment @@ -327,8 +254,8 @@ ending with if everything has been built correctly. -Add metadata to make a *pymt* component ---------------------------------------- +Make a *pymt* component +----------------------- The final step in wrapping the *heat* model is to add metadata used by the `Python Modeling Tool`_, *pymt*. @@ -349,8 +276,13 @@ and view the current metadata: .. code:: bash - $ cd ../pymt_heatc - $ ls meta/HeatC/ + cd ../pymt_heatc + ls meta/HeatC/ + +which gives: + +.. code:: bash + api.yaml The file ``api.yaml`` is automatically generated by the *babelizer*. @@ -367,8 +299,22 @@ are given in the CSDMS Model Metadata repository. Download each of the files using the links in the list above and place them in the ``pymt_heatc/meta/HeatC`` directory alongside ``api.yaml``. +The structure of the ``meta`` directory should look like: + +.. code:: bash + + meta/ + └── HeatC/ + ├── api.yaml + ├── heat.txt + ├── info.yaml + ├── parameters.yaml + └── run.yaml + +Run the babelized model in *pymt* +................................... -Then start a Python session and show that the *heat* model +Start a Python session and show that the *heat* model can be called through *pymt*: .. code:: python From f202a973cb69641f48e112209d81df2a212b58ce Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 16:10:52 -0600 Subject: [PATCH 16/25] Update Fortran environment file; relax bmi-tester version requirement --- docs/source/environment-c.yml | 2 +- docs/source/environment-fortran.yml | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/source/environment-c.yml b/docs/source/environment-c.yml index 5219dfbe..414e07b9 100644 --- a/docs/source/environment-c.yml +++ b/docs/source/environment-c.yml @@ -10,5 +10,5 @@ dependencies: - c-compiler - bmi-c - babelizer - - bmi-tester>=0.5.9 + - bmi-tester - pymt>=1.3 diff --git a/docs/source/environment-fortran.yml b/docs/source/environment-fortran.yml index 6bfd6118..903c569d 100644 --- a/docs/source/environment-fortran.yml +++ b/docs/source/environment-fortran.yml @@ -1,5 +1,5 @@ # A conda environment file for the babelizer Fortran example -name: wrap +name: wrap-f channels: - conda-forge dependencies: @@ -10,3 +10,5 @@ dependencies: - fortran-compiler - bmi-fortran - babelizer + - bmi-tester + - pymt>=1.3 From 7460ecb11eccb84e7293e370f62521a760d29ad4 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 16:20:32 -0600 Subject: [PATCH 17/25] Update HeatF babelizer config file --- docs/source/babel_heatf.toml | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/docs/source/babel_heatf.toml b/docs/source/babel_heatf.toml index 678ee596..e9511e28 100644 --- a/docs/source/babel_heatf.toml +++ b/docs/source/babel_heatf.toml @@ -1,9 +1,13 @@ -[library.HeatModel] +# See https://babelizer.readthedocs.io/ for more information + +# Describe the library being wrapped. +[library.HeatF] language = "fortran" library = "bmiheatf" header = "" entry_point = "bmi_heat" +# Describe compiler options need to build the library being wrapped. [build] undef_macros = [] define_macros = [] @@ -12,17 +16,26 @@ library_dirs = [] include_dirs = [] extra_compile_args = [] +# Describe the newly wrapped package. [package] name = "pymt_heatf" -requirements = [""] +requirements = [] [info] github_username = "pymt-lab" package_author = "csdms" package_author_email = "csdms@colorado.edu" package_license = "MIT License" -summary = "PyMT plugin for the Fortran heat model" +summary = "PyMT component for the Fortran heat model" [ci] -python_version = ["3.9"] -os = ["linux", "mac", "windows"] +python_version = [ + "3.10", + "3.11", + "3.12", +] +os = [ + "linux", + "mac", + "windows", +] From 127052956121344b4c2293d47cb57053d4c0d56a Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 17:22:11 -0600 Subject: [PATCH 18/25] Minor edits; fix typos --- docs/source/example-c.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/example-c.rst b/docs/source/example-c.rst index 78d11500..0e769550 100644 --- a/docs/source/example-c.rst +++ b/docs/source/example-c.rst @@ -146,7 +146,7 @@ to create a sample configuration file, which could then be edited. However, to simplify this example, we have provided a completed configuration file for the *heat* model. :download:`Download ` the file -:download:`babel_heatc.toml` and copy it to the ``build`` directory. +:download:`babel_heatc.toml` and copy it to the ``example-c`` directory. The configuration file looks like this: @@ -198,7 +198,7 @@ and change to it: cd .. mkdir test && cd test -Start a Python session and try the following commands: +Start a Python session (e.g., run ``python``) and try the following commands: .. code:: python @@ -215,7 +215,7 @@ You should see: We've imported the *heat* model, written in C, into Python! -Exit the Python session. +Exit the Python session (e.g. type ``exit()``). Test the BMI ............ @@ -262,7 +262,7 @@ is to add metadata used by the `Python Modeling Tool`_, *pymt*. CSDMS develops a set of standards, the `CSDMS Model Metadata`_, that provides a detailed and formalized description of a model. -The metadata allow *heat* to be run and and :term:`coupled ` +The metadata allow *heat* to be run and be :term:`coupled ` with other models that expose a BMI and have been similarly wrapped with the *babelizer*. From 5c8b3341d15404b8ef74089346a4fce5cda95092 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 17:34:14 -0600 Subject: [PATCH 19/25] Add Fortran-Python examples --- docs/source/examples/fortran/config.txt | 1 + docs/source/examples/fortran/heatf_ex.py | 67 +++++++++++++++++++ docs/source/examples/fortran/pymt_heatf_ex.py | 61 +++++++++++++++++ 3 files changed, 129 insertions(+) create mode 120000 docs/source/examples/fortran/config.txt create mode 100644 docs/source/examples/fortran/heatf_ex.py create mode 100644 docs/source/examples/fortran/pymt_heatf_ex.py diff --git a/docs/source/examples/fortran/config.txt b/docs/source/examples/fortran/config.txt new file mode 120000 index 00000000..f1a6cc6c --- /dev/null +++ b/docs/source/examples/fortran/config.txt @@ -0,0 +1 @@ +../config.txt \ No newline at end of file diff --git a/docs/source/examples/fortran/heatf_ex.py b/docs/source/examples/fortran/heatf_ex.py new file mode 100644 index 00000000..661a59e1 --- /dev/null +++ b/docs/source/examples/fortran/heatf_ex.py @@ -0,0 +1,67 @@ +"""An example of running the Fortran heat model through its BMI.""" + +import numpy as np +from pymt_heatf import HeatF + +config_file = "config.txt" +np.set_printoptions(formatter={"float": "{: 6.1f}".format}) + + +# Instatiate and initialize the model. +m = HeatF() +print(m.get_component_name()) +m.initialize(config_file) + +# List the model's exchange items. +print("Input vars:", m.get_input_var_names()) +print("Output vars:", m.get_output_var_names()) + +# Get the grid_id for the plate_surface__temperature variable. +var_name = "plate_surface__temperature" +print(f"Variable {var_name}") +grid_id = m.get_var_grid(var_name) +print(" - grid id:", grid_id) + +# Get grid and variable info for plate_surface__temperature. +print(" - grid type:", m.get_grid_type(grid_id)) +grid_rank = m.get_grid_rank(grid_id) +print(" - rank:", grid_rank) +grid_shape = np.empty(grid_rank, dtype=np.int32) +m.get_grid_shape(grid_id, grid_shape) +print(" - shape:", grid_shape) +grid_size = m.get_grid_size(grid_id) +print(" - size:", grid_size) +grid_spacing = np.empty(grid_rank, dtype=np.float64) +m.get_grid_spacing(grid_id, grid_spacing) +print(" - spacing:", grid_spacing) +grid_origin = np.empty(grid_rank, dtype=np.float64) +m.get_grid_origin(grid_id, grid_origin) +print(" - origin:", grid_origin) +print(" - variable type:", m.get_var_type(var_name)) +print(" - units:", m.get_var_units(var_name)) +print(" - itemsize:", m.get_var_itemsize(var_name)) +print(" - nbytes:", m.get_var_nbytes(var_name)) + +# Get the initial temperature values. +val = np.empty(grid_shape, dtype=np.float64) +m.get_value(var_name, val) +print(" - initial values (gridded):") +print(val.reshape(np.roll(grid_shape, 1))) + +# Get time information from the model. +print("Start time:", m.get_start_time()) +print("End time:", m.get_end_time()) +print("Current time:", m.get_current_time()) +print("Time step:", m.get_time_step()) +print("Time units:", m.get_time_units()) + +# Advance the model by one time step. +m.update() +print("Updated time:", m.get_current_time()) + +# Advance the model until a later time. +m.update_until(5.0) +print("Later time:", m.get_current_time()) + +# Finalize the model. +m.finalize() diff --git a/docs/source/examples/fortran/pymt_heatf_ex.py b/docs/source/examples/fortran/pymt_heatf_ex.py new file mode 100644 index 00000000..91678b43 --- /dev/null +++ b/docs/source/examples/fortran/pymt_heatf_ex.py @@ -0,0 +1,61 @@ +"""Run the Fortran heat model in pymt.""" + +from pymt.models import HeatF + +# Instantiate the component and get its name. +m = HeatF() +print(m.name) + +# Call setup, then initialize the model. +args = m.setup(".") +m.initialize(*args) + +# List the model's exchange items. +print("Number of input vars:", len(m.input_var_names)) +for var in m.input_var_names: + print(f" - {var}") +print("Number of output vars:", len(m.output_var_names)) +for var in m.output_var_names: + print(f" - {var}") + +# Get variable info. +var_name = m.output_var_names[0] +print(f"Variable {var_name}") +print(" - variable type:", m.var_type(var_name)) +print(" - units:", m.var_units(var_name)) +print(" - itemsize:", m.var_itemsize(var_name)) +print(" - nbytes:", m.var_nbytes(var_name)) +print(" - location:", m.var_location(var_name)) + +# Get grid info for variable. +grid_id = m.var_grid(var_name) +print(" - grid id:", grid_id) +print(" - grid type:", m.grid_type(grid_id)) +print(" - rank:", m.grid_ndim(grid_id)) +print(" - size:", m.grid_node_count(grid_id)) +print(" - shape:", m.grid_shape(grid_id)) + +# Get time information from the model. +print("Start time:", m.start_time) +print("End time:", m.end_time) +print("Current time:", m.time) +print("Time step:", m.time_step) +print("Time units:", m.time_units) + +# Get the initial values of the variable. +print(f"Get values of {var_name}...") +val = m.var[var_name].data +print(f" - values at time {m.time}:") +print(val) + +# Advance the model by one time step. +m.update() +print("Update: current time:", m.time) + +# Advance the model until a later time. +m.update_until(5.0) +print("Update: current time:", m.time) + +# Finalize the model. +m.finalize() +print("Done.") From 2be54ed171c58d35f824595f6b6b80d2de654a51 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 17:37:18 -0600 Subject: [PATCH 20/25] Fix typo --- docs/source/example-c.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/example-c.rst b/docs/source/example-c.rst index 0e769550..ebdf256c 100644 --- a/docs/source/example-c.rst +++ b/docs/source/example-c.rst @@ -342,7 +342,7 @@ then run it with: .. code:: bash - $ python pymt_heatc_ex.py + python pymt_heatc_ex.py Summary From 5703222ea006260c82a2bee7f6327381404d18c9 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 17:39:07 -0600 Subject: [PATCH 21/25] Update the Fortran example to match the C example --- docs/source/example-fortran.rst | 262 ++++++++++++++------------------ 1 file changed, 117 insertions(+), 145 deletions(-) diff --git a/docs/source/example-fortran.rst b/docs/source/example-fortran.rst index 860beaf9..0d2c3c56 100644 --- a/docs/source/example-fortran.rst +++ b/docs/source/example-fortran.rst @@ -9,16 +9,14 @@ To simplify package management in the example, we'll use :term:`conda`. We'll also use :term:`git` to obtain the model source code. -This is a somewhat long example. -To break it up, -here are the steps we'll take: +Here are the steps we'll take to complete this example: #. Create a :term:`conda environment` that includes software to compile the model and wrap it with the *babelizer* #. Clone the `bmi-example-fortran`_ repository from GitHub and build the *heat* model from source #. Create a *babelizer* input file describing the *heat* model -#. Run the *babelizer* to generate Python bindings, then build the bindings +#. Run the *babelizer* to generate a Python package, then build and install the package #. Show the *heat* model running in Python through *pymt* Before we begin, @@ -26,24 +24,20 @@ create a directory to hold our work: .. code:: bash - $ mkdir build && cd build + $ mkdir example-f && cd example-f This directory is a starting point; -we'll make new directories under it as we proceed through the example. -In the end, -the first level of the directory structure under ``build`` should look like this: +we'll add files and directories to it as we proceed through the example. +The final directory structure of ``example-c`` should look similar to that below. -.. code:: +.. code:: bash - . + example-f/ ├── babel_heatf.toml - ├── bmi-example-fortran - │ └── ... + ├── bmi-example-fortran/ ├── environment-fortran.yml - ├── pymt_heatf - │ └── ... - └── test - └── ... + ├── pymt_heatf/ + └── test/ Set up a conda environment -------------------------- @@ -57,11 +51,12 @@ The necessary packages are listed in the conda environment file :literal: :download:`Download ` this file -and create the new environment with: +and place it in the ``example-f`` directory you created above. +Create the new environment with: .. code:: bash - $ conda env create --file=environment-fortran.yml + conda env create --file environment-fortran.yml When this command completes, activate the environment @@ -69,20 +64,21 @@ activate the environment .. code:: bash - $ conda activate wrap + conda activate wrap-f -The *wrap* environment now contains all the dependencies needed +The *wrap-f* environment now contains all the dependencies needed to build, install, and wrap the *heat* model. Build the *heat* model from source ---------------------------------- -Clone the `bmi-example-fortran`_ repository from GitHub: +From the ``example-f`` directory, +clone the `bmi-example-fortran`_ repository from GitHub: .. code:: bash - $ git clone https://github.com/csdms/bmi-example-fortran + git clone https://github.com/csdms/bmi-example-fortran There are general `instructions`_ in the repository for building and installing this package on Linux, macOS, and Windows. @@ -93,14 +89,13 @@ should be used to specify the install path. Note that if you build the model with the `Fortran Package Manager `_ -(fpm), you will end up with a static library (`.a` on Unix, `.lib` on +(*fpm*), you will end up with a static library (`.a` on Unix, `.lib` on Windows) instead of the dynamic library (`.so` on Unix, `.dll` on Windows) that the CMake build creates. We are aware of issues linking to the compiler runtime libraries from this static library, and for this reason we recommend using the CMake build routine, as detailed below. - Linux and macOS ............... @@ -109,17 +104,17 @@ use these commands to build and install the *heat* model: .. code:: bash - $ cd bmi-example-fortran - $ mkdir _build && cd _build - $ cmake .. -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX - $ make install + cd bmi-example-fortran + mkdir build && cd build + cmake .. -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX + make install Verify the install by testing for the existence of the module file of the library containing the compiled *heat* model: .. code:: bash - $ test -f $CONDA_PREFIX/include/bmiheatf.mod ; echo $? + test -f $CONDA_PREFIX/include/bmiheatf.mod ; echo $? A return of zero indicates success. @@ -134,25 +129,24 @@ Building the *heat* model on Windows requires either: * Microsoft Visual Studio 2017 or later, or Microsoft Build Tools for Visual Studio 2017 or later, in which case the following instructions should be followed. -Open the `Developer Command Prompt`_ and run: +Open a `Developer Command Prompt`_ and run: -.. code:: +.. code:: bat - > cd bmi-example-fortran - > mkdir _build - > cd _build - > cmake .. ^ - -G "NMake Makefiles" ^ - -DCMAKE_INSTALL_PREFIX=%CONDA_PREFIX% ^ - -DCMAKE_BUILD_TYPE=Release - > cmake --build . --target install --config Release + cd bmi-example-fortran + mkdir build && cd build + cmake .. ^ + -G "NMake Makefiles" ^ + -DCMAKE_INSTALL_PREFIX=%CONDA_PREFIX% ^ + -DCMAKE_BUILD_TYPE=Release + cmake --build . --target install --config Release Verify the install by testing for the existence of the module file of the library containing the compiled *heat* model: -.. code:: +.. code:: bat - > if exist %CONDA_PREFIX%\include\bmiheatf.mod echo File exists + if exist %CONDA_PREFIX%\include\bmiheatf.mod echo File exists Note that on Windows systems, the conda package we specified called `fortran-compiler` installs a fairly old version of the Flang @@ -170,126 +164,93 @@ that uses them, to avoid incompatibility issues, and so if you choose a different compiler than provided by `fortran-compiler`, you will likely have to compile the BMI bindings with this compiler as well. +Create a *babelizer* configuration file +--------------------------------------- -Create the *babelizer* input file ---------------------------------- - -The *babelizer* input file provides information to the *babelizer* +A *babelizer* configuration file provides information to the *babelizer* about the model to be wrapped. -The input file is created with the ``babelize generate`` subcommand. - -Return to our initial ``build`` directory and call ``babelize generate`` with: - -.. code:: bash - - $ cd ../.. - $ babelize generate \ - --package=pymt_heatf \ - --summary="PyMT plugin for the Fortran heat model" \ - --language=fortran \ - --library=bmiheatf \ - --entry-point=bmi_heat \ - --name=HeatModel \ - --requirement="" > babel_heatf.toml -In this call, -the *babelizer* will also fill in default values; -e.g., author name, author email, GitHub username, and license. +Typically, we would use the ``babelize sample-config`` command +to create a sample configuration file, which could then be edited. +However, to simplify this example, we have provided a completed +configuration file for the *heat* model. +:download:`Download ` the file +:download:`babel_heatf.toml` and copy it to the ``example-f`` directory. -The resulting file, :download:`babel_heatf.toml`, -will look something like this: +The configuration file looks like this: .. include:: babel_heatf.toml :literal: -For more information on the entries and sections of the *babelizer* input file, +For more information on the entries and sections of the *babelizer* configuration file, see `Input file <./readme.html#input-file>`_. Wrap the model with the *babelizer* ----------------------------------- -Generate Python bindings for the model with the ``babelize init`` subcommand: +From the ``example-f`` directory, +generate a Python package for the model with the ``babelize init`` command: .. code:: bash - $ babelize init babel_heatf.toml + babelize init babel_heatf.toml The results are placed in a new directory, ``pymt_heatf``, under the current directory. -.. code:: bash - - $ ls -aF pymt_heatf - ./ .gitignore recipe/ - ../ LICENSE requirements-build.txt - babel.toml Makefile requirements-library.txt - CHANGES.rst MANIFEST.in requirements-testing.txt - CREDITS.rst meta/ requirements.txt - docs/ pymt_heatf/ setup.cfg - .git/ pyproject.toml setup.py - .github/ README.rst - -Before we can build the Python bindings, -we must ensure that the dependencies required by the toolchain, -as well as any required by the model, -as specified in the *babelizer* input file (none in this case), -are satisfied. - -Change to the ``pymt_heatf`` directory and install dependencies -into the conda environment: - -.. code:: bash +Build and install the wrapped model +................................... - $ cd pymt_heatf - $ conda install -c conda-forge \ - --file=requirements-build.txt \ - --file=requirements-testing.txt \ - --file=requirements-library.txt \ - --file=requirements.txt - -Now build the Python bindings with: +Change to the ``pymt_heatf`` directory, +then build and install the Python package with *pip*: .. code:: bash - $ make install + cd pymt_heatf + pip install ."[dev]" -This command sets off a long list of messages, +The ``pip install`` command sets off a long list of messages, at the end of which you'll hopefully see: .. code:: bash - Successfully installed pymt-heatf-0.1 - -Internally, this uses `pip` to install the Python -package in editable mode. + Successfully installed pymt_heatf Pause a moment to see what we've done. -Change back to the initial ``build`` directory, +Change back to the initial ``example-f`` directory, make a new ``test`` directory, and change to it: .. code:: bash - $ cd .. - $ mkdir test && cd test + cd .. + mkdir test && cd test -Start a Python session (e.g. run ``python``) and try the following commands: +Start a Python session (e.g., run ``python``) and try the following commands: .. code:: python - >>> from pymt_heatf import HeatModel - >>> m = HeatModel() - >>> m.get_component_name() - 'The 2D Heat Equation' + from pymt_heatf import HeatF + m = HeatF() + m.get_component_name() + +You should see: + +.. code:: bash + + The 2D Heat Equation We've imported the *heat* model, written in Fortran, into Python! -Exit the Python session (e.g. type ``exit()``) +Exit the Python session (e.g. type ``exit()``). + +Test the BMI +............ At this point, -it's a good idea to run the *bmi-tester* (`GitHub repo `_) +it's a good idea to run the *bmi-tester* (`documentation `_) over the model. The *bmi-tester* exercises each BMI method exposed through Python, ensuring it works correctly. @@ -301,16 +262,16 @@ Create a configuration file for *heat* at the command line with: .. code:: bash - $ echo "1.5, 8.0, 6, 5" > config.txt + echo "1.5, 8.0, 6, 5" > config.txt -or download the file :download:`config.txt ` -(making sure to place it in the ``test`` directory). +or download the file :download:`config.txt `, +making sure to place it in the ``test`` directory. -Run the *bmi-tester*: +From the ``test`` directory, run the *bmi-tester*: .. code:: bash - $ bmi-test pymt_heatf:HeatModel --config-file=config.txt --root-dir=. -vvv + bmi-test pymt_heatf:HeatF --config-file=config.txt --root-dir=. -vvv This command sets off a long list of messages, ending with @@ -322,8 +283,8 @@ ending with if everything has been built correctly. -Add metadata to make a *pymt* component ---------------------------------------- +Make a *pymt* component +----------------------- The final step in wrapping the *heat* model is to add metadata used by the `Python Modeling Tool`_, *pymt*. @@ -338,14 +299,19 @@ Recall the *babelizer* outputs the wrapped *heat* model to the directory ``pymt_heatf``. Under this directory, the *babelizer* created a directory for *heat* model metadata, -``meta/HeatModel``. +``meta/HeatF``. Change back to the ``pymt_heatf`` directory and view the current metadata: .. code:: bash - $ cd ../pymt_heatf - $ ls meta/HeatModel/ + cd ../pymt_heatf + ls meta/HeatModel/ + +which gives: + +.. code:: bash + api.yaml The file ``api.yaml`` is automatically generated by the *babelizer*. @@ -360,47 +326,53 @@ other metadata files are needed, including: `Descriptions`_ of these files and their roles are given in the CSDMS Model Metadata repository. Download each of the files using the links in the list above -and place them in the ``pymt_heatf/meta/HeatModel`` directory +and place them in the ``pymt_heatf/meta/HeatF`` directory alongside ``api.yaml``. - -Next, install *pymt*: +The structure of the ``meta`` directory should look like: .. code:: bash - $ conda install -c conda-forge pymt + meta/ + └── HeatF/ + ├── api.yaml + ├── heat.txt + ├── info.yaml + ├── parameters.yaml + └── run.yaml -Then start a Python session and show that the *heat* model +Run the babelized model in *pymt* +................................... + +Start a Python session and show that the *heat* model can be called through *pymt*: .. code:: python - >>> from pymt.models import HeatModel - >>> m = HeatModel() - >>> m.name - 'The 2D Heat Equation' + from pymt.models import HeatF + m = HeatF() + m.name + +You should see: + +.. code:: bash + + The 2D Heat Equation A longer example, -:download:`pymt_heatc_ex.py `, +:download:`pymt_heatf_ex.py `, is included in the documentation. For easy viewing, it's reproduced here verbatim: -.. include:: examples/c/pymt_heatc_ex.py +.. include:: examples/fortran/pymt_heatf_ex.py :literal: -:download:`Download ` this Python script, +:download:`Download ` this Python script, make sure we're still in the `test` directory we just created, then run it with: .. code:: bash - $ python pymt_heatc_ex.py - -Note that here we are actually running the Python script that -was developed for the :doc:`C example `, not Fortran. -That is one of the powerful things about wrapping your -BMI-enabled model and accessing it via PyMT - it provides a -standardised interface, regardless of the underlying model -and the language it was written in. + python pymt_heatf_ex.py Summary @@ -420,7 +392,7 @@ and C++. .. _bmi-example-fortran: https://github.com/csdms/bmi-example-fortran .. _instructions: https://github.com/csdms/bmi-example-c/blob/master/README.md .. _Developer Command Prompt: https://docs.microsoft.com/en-us/dotnet/framework/tools/developer-command-prompt-for-vs -.. _bmi-tester: https://github.com/csdms/bmi-tester +.. _bmi-tester: https://bmi-tester.readthedocs.io .. _Python Modeling Tool: https://pymt.readthedocs.io .. _CSDMS Model Metadata: https://github.com/csdms/model_metadata .. _Descriptions: https://github.com/csdms/model_metadata/blob/develop/README.rst From 049917b674b3349cd47dfec22f37b17aa7eead66 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Wed, 3 Apr 2024 17:52:46 -0600 Subject: [PATCH 22/25] Add news fragment --- news/97.doc | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 news/97.doc diff --git a/news/97.doc b/news/97.doc new file mode 100644 index 00000000..e9fc43e7 --- /dev/null +++ b/news/97.doc @@ -0,0 +1,3 @@ + +Updated the C and Fortran examples in the docs for configuration and API +changes in the *babelizer*. From f6362412349faa950f9e275cd1458e4d574a19f0 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Thu, 4 Apr 2024 10:12:38 -0600 Subject: [PATCH 23/25] Add code of conduct document to repo and docs --- CODE-OF-CONDUCT.rst | 9 +++++++++ docs/source/code-of-conduct.rst | 1 + docs/source/index.rst | 1 + 3 files changed, 11 insertions(+) create mode 100644 CODE-OF-CONDUCT.rst create mode 100644 docs/source/code-of-conduct.rst diff --git a/CODE-OF-CONDUCT.rst b/CODE-OF-CONDUCT.rst new file mode 100644 index 00000000..dc08e37d --- /dev/null +++ b/CODE-OF-CONDUCT.rst @@ -0,0 +1,9 @@ +Code of Conduct +--------------- + +Everyone participating in this project is governed by the CSDMS `Code of Conduct`_. +By participating, you are expected to uphold this code. + +.. Links + +.. _Code of Conduct: https://github.com/csdms/project/blob/main/CODE-OF-CONDUCT.md diff --git a/docs/source/code-of-conduct.rst b/docs/source/code-of-conduct.rst new file mode 100644 index 00000000..d16993ad --- /dev/null +++ b/docs/source/code-of-conduct.rst @@ -0,0 +1 @@ +.. include:: ../../CODE-OF-CONDUCT.rst diff --git a/docs/source/index.rst b/docs/source/index.rst index 529c6609..0a025055 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -66,6 +66,7 @@ Additional Information authors changelog contributing + code-of-conduct license Help From daf099129e02d62a12d9823f2a2d1df15c563269 Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Thu, 4 Apr 2024 10:14:09 -0600 Subject: [PATCH 24/25] Remove obsolete docs makefiles --- docs/Makefile | 20 -------------------- docs/make.bat | 35 ----------------------------------- 2 files changed, 55 deletions(-) delete mode 100644 docs/Makefile delete mode 100644 docs/make.bat diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index d0c3cbf1..00000000 --- a/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = source -BUILDDIR = build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index 6247f7e2..00000000 --- a/docs/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=source -set BUILDDIR=build - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd From f811c9679f464734bc2482ef3b98ef0bd2cdcdfa Mon Sep 17 00:00:00 2001 From: Mark Piper Date: Thu, 4 Apr 2024 10:22:12 -0600 Subject: [PATCH 25/25] Add news fragments --- news/97.misc.1 | 2 ++ news/97.misc.2 | 3 +++ 2 files changed, 5 insertions(+) create mode 100644 news/97.misc.1 create mode 100644 news/97.misc.2 diff --git a/news/97.misc.1 b/news/97.misc.1 new file mode 100644 index 00000000..ccba3e7c --- /dev/null +++ b/news/97.misc.1 @@ -0,0 +1,2 @@ + +Added a document linking to the CSDMS Code of Conduct. diff --git a/news/97.misc.2 b/news/97.misc.2 new file mode 100644 index 00000000..cc671173 --- /dev/null +++ b/news/97.misc.2 @@ -0,0 +1,3 @@ + +Removed the Sphinx makefiles from the ``docs`` directory in favor of the *nox* +``build-docs`` session.