diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 03c74a3..231037d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,3 +39,4 @@ jobs: with: project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} coverage-reports: coverage.xml + \ No newline at end of file diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 1a03a7b..4725cc9 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -13,19 +13,17 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: '3.x' - name: Install dependencies run: | python -m pip install --upgrade pip pip install setuptools wheel twine - - name: Build and publish - env: - TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} - TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: | - python setup.py sdist bdist_wheel - twine upload dist/* + - name: Upload Python Package + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_TOKEN }} diff --git a/README.md b/README.md index 386ddfe..c28aa44 100644 --- a/README.md +++ b/README.md @@ -42,29 +42,29 @@ $^a$ $T_{max}$ and $T_{min}$ can also be provided. $^b$ $RH_{max}$ and $RH_{min} Examples of using *pyet* can be found in the example folder: -* [Example 1](examples/01_example_zamg.ipynb): Estimating PET using pandas.Series +* [Example 1](): Estimating PET using pandas.Series -* [Example 2](examples/02_example_zamg_netcdf.ipynb): Estimating PET using xarray.DataArray +* [Example 2](): Estimating PET using xarray.DataArray -* [Example 3](examples/03_example_knmi.ipynb): Benchmarking Makkink +* [Example 3](): Benchmarking Makkink against [KNMI data](https://www.knmi.nl/over-het-knmi/about) -* [Example 4](examples/04_example_coagmet.ipynb): Benchmarking FAO56 +* [Example 4](): Benchmarking FAO56 against [CoAgMET data](https://coagmet.colostate.edu/) -* [Example 5](examples/05_example_calibration.ipynb): Calibrating the Romanenko and Abtew method against the PM-FAO56 +* [Example 5](): Calibrating the Romanenko and Abtew method against the PM-FAO56 -* [Example 6](examples/06_worked_examples_McMahon_etal_2013.ipynb): Worked examples for estimating meteorological +* [Example 6](): Worked examples for estimating meteorological variables and potential evapotranspiration after McMahon et al., 2013 -* [Example 7](examples/07_example_climate_change.ipynb): Example for estimating potential evapotranspiration under +* [Example 7](): Example for estimating potential evapotranspiration under warming and elevated $CO_2$ concentrations following Yang et al., (2019) -* [Example 8](examples/08_crop_coefficient.ipynb): Determining the crop coefficient function with Python +* [Example 8](): Determining the crop coefficient function with Python -* [Example 9](examples/09_CMIP6_data.ipynb): Estimating PET using CMIP data +* [Example 9](): Estimating PET using CMIP data -* [Example 10](examples/10_example_paper.ipynb): Notebook supporting PyEt manuscript +* [Example 10](): Notebook supporting PyEt manuscript Documentation is hosted on [ReadTheDocs](https://pyet.readthedocs.io). diff --git a/docs/conf.py b/docs/conf.py index 9d7fec4..3b2cc6d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -18,13 +18,11 @@ year = date.today().strftime("%Y") -sys.path.insert(0, os.path.abspath('.')) +sys.path.insert(0, os.path.abspath(".")) # Get a Bibtex reference file from the Zotero group for referencing url = "https://api.zotero.org/groups/4846265/collections/M9ZRDX2U/items/" -params = {"format": "bibtex", - "style": "apa", - "limit": 100} +params = {"format": "bibtex", "style": "apa", "limit": 100} r = requests.get(url=url, params=params) with open("references.bib", mode="w") as file: @@ -32,9 +30,7 @@ # Get a Bibtex reference file from the Zotero group for publications list url = "https://api.zotero.org/groups/4846265/collections/UR7PHVDK/items/" -params = {"format": "bibtex", - "style": "apa", - "limit": 100} +params = {"format": "bibtex", "style": "apa", "limit": 100} r = requests.get(url=url, params=params) with open("publications.bib", mode="w") as file: @@ -42,12 +38,12 @@ # -- Project information ----------------------------------------------------- -project = 'pyet' -copyright = '{}, M. Vremec, R.A. Collenteur'.format(year) -author = 'M. Vremec, R.A. Collenteur' +project = "pyet" +copyright = "{}, M. Vremec, R.A. Collenteur".format(year) +author = "M. Vremec, R.A. Collenteur" # The full version, including alpha/beta/rc tags -release = '2020' +release = "2020" # -- General configuration --------------------------------------------------- @@ -55,19 +51,21 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.autosummary', - 'sphinx.ext.napoleon', - 'sphinx.ext.doctest', - 'sphinx.ext.intersphinx', - 'sphinx.ext.todo', - 'sphinx.ext.mathjax', - 'sphinx.ext.ifconfig', - 'sphinx.ext.viewcode', - 'IPython.sphinxext.ipython_console_highlighting', # lowercase didn't work - 'sphinx.ext.autosectionlabel', - 'sphinxcontrib.bibtex', - 'myst_nb', + "sphinx.ext.autodoc", + "sphinx.ext.autosummary", + "sphinx.ext.napoleon", + "sphinx.ext.doctest", + "sphinx.ext.intersphinx", + "sphinx.ext.todo", + "sphinx.ext.mathjax", + "sphinx.ext.ifconfig", + "sphinx.ext.viewcode", + "IPython.sphinxext.ipython_console_highlighting", # lowercase didn't work + "sphinx.ext.autosectionlabel", + "sphinxcontrib.bibtex", + "myst_nb", + "numpydoc", + "sphinx_design", ] # Create custom bracket style with round brackets @@ -77,14 +75,13 @@ import sphinxcontrib.bibtex.plugin from sphinxcontrib.bibtex.style.referencing import BracketStyle -from sphinxcontrib.bibtex.style.referencing.author_year \ - import AuthorYearReferenceStyle +from sphinxcontrib.bibtex.style.referencing.author_year import AuthorYearReferenceStyle def bracket_style() -> BracketStyle: return BracketStyle( - left='(', - right=')', + left="(", + right=")", ) @@ -98,24 +95,24 @@ class MyReferenceStyle(AuthorYearReferenceStyle): sphinxcontrib.bibtex.plugin.register_plugin( - 'sphinxcontrib.bibtex.style.referencing', - 'author_year_round', MyReferenceStyle) + "sphinxcontrib.bibtex.style.referencing", "author_year_round", MyReferenceStyle +) -bibtex_bibfiles = ['references.bib', 'publications.bib'] +bibtex_bibfiles = ["references.bib", "publications.bib"] bibtex_reference_style = "author_year_round" # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] -source_suffix = '.rst' +source_suffix = ".rst" # The master toctree document. -master_doc = 'index' +master_doc = "index" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', '**.ipynb_checkpoints'] +exclude_patterns = ["_build", "**.ipynb_checkpoints"] # -- Options for HTML output ------------------------------------------------- @@ -123,15 +120,27 @@ class MyReferenceStyle(AuthorYearReferenceStyle): # a list of builtin themes. html_theme = "pydata_sphinx_theme" -html_theme_options = { - "github_url": "https://github.com/phydrus/pyet", - "use_edit_page_button": False -} # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +html_static_path = ["_static"] html_logo = "_static/logo.png" +html_use_smartypants = True +html_show_sourcelink = True + +html_theme_options = { + "github_url": "https://github.com/pyet-org/pyet", + "use_edit_page_button": True, + "header_links_before_dropdown": 6, + "icon_links": [ + { + "name": "GitHub", # Label for this link + "url": "https://github.com/pyet-org/pyet", # required + "icon": "fab fa-github-square", + "type": "fontawesome", # Default is fontawesome + } + ], +} autosummary_generate = True numpydoc_show_class_members = False @@ -148,3 +157,13 @@ class MyReferenceStyle(AuthorYearReferenceStyle): nb_execution_allow_errors = True # Allow errors in notebooks, to see the error online nb_execution_mode = "auto" + +# Enable specific MyST extensions, such as "dollarmath" for math rendering +myst_enable_extensions = [ + "dollarmath", +] + +# -- Numpydoc settings ---------------------------------------------------------------- + +numpydoc_class_members_toctree = True +numpydoc_show_class_members = False diff --git a/docs/examples/10_example_paper.ipynb b/docs/examples/10_example_paper.ipynb index 395e663..15a029d 100644 --- a/docs/examples/10_example_paper.ipynb +++ b/docs/examples/10_example_paper.ipynb @@ -89,6 +89,7 @@ "import pylab\n", "import matplotlib.dates as mdates\n", "from mpl_toolkits.axes_grid1.inset_locator import inset_axes\n", + "import gc # Import the garbage collection module\n", "\n", "import pyet\n", "import spotpy\n", @@ -120,7 +121,6 @@ "source": [ "#edit default values for plots\n", "params = {\n", - " \"font.family\": \"Arial\",\n", " \"legend.fontsize\": \"15\",\n", " \"axes.labelsize\": \"16\",\n", " \"xtick.labelsize\": \"15\",\n", @@ -773,7 +773,7 @@ "fig.supxlabel(\"PET$_{benchmark}$ [mm/day]\", x=0.475, fontsize=16)\n", "fig.supylabel(\"PET$_{pyet}$ [mm/day]\", fontsize=16)\n", "fig.subplots_adjust(wspace=0.05, hspace=0.05, left=0.05)\n", - "plt.tight_layout()\n", + "plt.tight_layout();\n", "#fig.savefig(\"figure1.png\", dpi=600, bbox_inches=\"tight\")" ] }, @@ -872,7 +872,7 @@ "\n", "plt.tight_layout()\n", "\n", - "axs[2].legend(loc=(1.05,0.1), ncol=2, bbox_transform=axs[0].transAxes, fontsize=8)\n", + "axs[2].legend(loc=(1.05,0.1), ncol=2, bbox_transform=axs[0].transAxes, fontsize=8);\n", "#fig.savefig(\"figure2.png\", dpi=600, bbox_inches=\"tight\")" ] }, @@ -1007,7 +1007,7 @@ " cbar.set_label(\"PET [mm/day]\", labelpad=10)\n", " plt.subplots_adjust(hspace=0.02, wspace=0.1)\n", "\n", - "plt.subplots_adjust(hspace=0.02, wspace=0.01)\n", + "plt.subplots_adjust(hspace=0.02, wspace=0.01);\n", "\n", "#fig.savefig(\"figure3.png\", dpi=300, bbox_inches=\"tight\")" ] @@ -1287,7 +1287,7 @@ "axs[1,5].set_yticklabels([\"\",800,1000,\"\"])\n", "axs[0,5].legend(loc=(-3.65,1.05), ncol=7, bbox_transform=axs[1,5].transAxes)\n", "clb = fig.colorbar(density, orientation=\"horizontal\", ax=axs[0, 0], cax = axs[0, 0].inset_axes([0.04, 1.2, 1, 0.05]))\n", - "clb.ax.set_title(\"Number of points per pixel\")\n", + "clb.ax.set_title(\"Number of points per pixel\");\n", "#fig.savefig(\"figure4.png\", dpi=600, bbox_inches=\"tight\")" ] }, @@ -1336,13 +1336,13 @@ "source": [ "# Load CO2 data for each RCP scenario\n", "rcp_co2 = pd.DataFrame()\n", - "rcp_co2[\"rcp_26\"] = pd.read_csv(\"data/example_10/co2_conc/RCP3PD_MIDYR_CONC.dat\", skiprows=38, \n", + "rcp_co2[\"rcp_26\"] = pd.read_csv(\"data/example_10/co2_conc/RCP3PD_MIDYR_CONC.DAT\", skiprows=38, \n", " delim_whitespace=True, index_col=\"YEARS\").loc[\"2020\":\"2100\", \"CO2\"]\n", - "rcp_co2[\"rcp_45\"] = pd.read_csv(\"data/example_10/co2_conc/RCP45_MIDYR_CONC.dat\", skiprows=38, \n", + "rcp_co2[\"rcp_45\"] = pd.read_csv(\"data/example_10/co2_conc/RCP45_MIDYR_CONC.DAT\", skiprows=38, \n", " delim_whitespace=True, index_col=\"YEARS\").loc[\"2020\":\"2100\", \"CO2\"]\n", - "rcp_co2[\"rcp_60\"] = pd.read_csv(\"data/example_10/co2_conc/RCP6_MIDYR_CONC.dat\", skiprows=38, \n", + "rcp_co2[\"rcp_60\"] = pd.read_csv(\"data/example_10/co2_conc/RCP6_MIDYR_CONC.DAT\", skiprows=38, \n", " delim_whitespace=True, index_col=\"YEARS\").loc[\"2020\":\"2100\", \"CO2\"]\n", - "rcp_co2[\"rcp_85\"] = pd.read_csv(\"data/example_10/co2_conc/RCP85_MIDYR_CONC.dat\", skiprows=38, \n", + "rcp_co2[\"rcp_85\"] = pd.read_csv(\"data/example_10/co2_conc/RCP85_MIDYR_CONC.DAT\", skiprows=38, \n", " delim_whitespace=True, index_col=\"YEARS\").loc[\"2020\":\"2100\", \"CO2\"]" ] }, @@ -1416,11 +1416,11 @@ "dpet_rcp_etco2 = pd.DataFrame(index=rcp_temp.index, columns=[\"rcp_26\", \"rcp_45\", \"rcp_60\", \"rcp_85\"])\n", "dpet_rcp_etco2_5th = pd.DataFrame(index=rcp_temp.index, columns=[\"rcp_26\", \"rcp_45\", \"rcp_60\", \"rcp_85\"])\n", "dpet_rcp_etco2_95th = pd.DataFrame(index=rcp_temp.index, columns=[\"rcp_26\", \"rcp_45\", \"rcp_60\", \"rcp_85\"])\n", - "for year in rcp_temp.index:\n", + "for year in rcp_temp.index: \n", " for rcp in [\"rcp_26\", \"rcp_45\", \"rcp_60\", \"rcp_85\"]:\n", " df_rcp_et = pd.DataFrame()\n", " df_rcp_etco2 = pd.DataFrame()\n", - " for i in np.arange(0, len(methods)):\n", + " for i in np.arange(0, len(methods[:2])): # only for two methods to reduce processing for RTD to handle!!!!!!!!!!!!\n", " input1 = input_rcp(rcp_temp.loc[year, rcp])\n", " df_rcp_et[methods[i]] = simulate(sollutions2[i], methods[i], input1[i])\n", " df_rcp_etco2[methods[i]] = simulate(sollutions2[i], methods[i], \n", @@ -1430,7 +1430,9 @@ " dpet_rcp_et_95th.loc[year, rcp] = df_rcp_et.resample(\"y\").mean().mean().quantile(0.95)\n", " dpet_rcp_etco2.loc[year, rcp] = df_rcp_etco2.resample(\"y\").mean().mean().mean()\n", " dpet_rcp_etco2_5th.loc[year, rcp] = df_rcp_etco2.resample(\"y\").mean().mean().quantile(0.05)\n", - " dpet_rcp_etco2_95th.loc[year, rcp] = df_rcp_etco2.resample(\"y\").mean().mean().quantile(0.95)" + " dpet_rcp_etco2_95th.loc[year, rcp] = df_rcp_etco2.resample(\"y\").mean().mean().quantile(0.95)\n", + " # Call gc.collect() after processing each RCP scenario for a year\n", + " gc.collect()" ] }, { @@ -1487,7 +1489,7 @@ "\n", "for i, letter in enumerate([\"a\", \"b\", \"c\", \"d\"]):\n", " axs[i].text(0.85, 0.9, \"({})\".format(letter), transform=axs[i].transAxes, fontsize=12)\n", - " axs[i].tick_params(axis='both', which='major', labelsize=13)\n", + " axs[i].tick_params(axis='both', which='major', labelsize=13);\n", "\n", "#fig.savefig(\"figure5.png\", dpi=600, bbox_inches=\"tight\")" ] @@ -1529,7 +1531,7 @@ "pet_df.plot() # daily PET [mm/day]\n", "pet_df.boxplot() # boxplot PET[mm/day]\n", "pet_df.cumsum().plot() # cummulative PET [mm]\n", - "plt.scatter(pyet_makkink, pet_knmi) # plot Makkink pyet vs KNMI" + "plt.scatter(pyet_makkink, pet_knmi) # plot Makkink pyet vs KNMI;" ] }, { diff --git a/docs/examples/index.rst b/docs/examples/index.rst index 9e90d39..25cb7ad 100644 --- a/docs/examples/index.rst +++ b/docs/examples/index.rst @@ -4,11 +4,50 @@ Below you can find examples of how *pyet* models are used for estimating (potent evaporation. .. toctree:: + :hidden: :maxdepth: 1 - :numbered: - :glob: - * + 01_example_zamg + 02_example_zamg_netcdf + 03_example_knmi + 04_example_coagmet + 05_example_calibration + 06_worked_examples_McMahon_etal_2013 + 07_example_climate_change + 08_crop_coefficient + 09_CMIP6_data + 10_example_paper + +`Estimating PET using pandas.Series`_ + +`Estimating PET using xarray.DataArray`_ + +`Benchmarking Makkink`_ + +`Benchmarking FAO56`_ + +`Calibration`_ + +`Examples from McMahon et al., 2013`_ + +`PET under climate change`_ + +`Crop coefficient`_ + +`Estimating PET using CMIP data`_ + +`Notebook supporting PyEt GMD manuscript`_ + +.. _Estimating PET using pandas.Series: 01_example_zamg.html +.. _Estimating PET using xarray.DataArray: 02_example_zamg_netcdf.html +.. _Benchmarking Makkink: 03_example_knmi.html +.. _Benchmarking FAO56: 04_example_coagmet.html +.. _Calibration: 05_example_calibration.html +.. _Examples from McMahon et al., 2013: 06_worked_examples_McMahon_etal_2013.html +.. _PET under climate change: 07_example_climate_change.html +.. _Crop coefficient: 08_crop_coefficient.html +.. _Estimating PET using CMIP data: 09_CMIP6_data.html +.. _Notebook supporting PyEt GMD manuscript: 10_example_paper.html .. tip:: The latest versions of the Jupyter Notebooks can be found in the diff --git a/docs/index.rst b/docs/index.rst index da15f96..4defe8e 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,23 +1,261 @@ *pyet* - Estimation of Potential Evapotranspiration =================================================== -Pyet is an open source Python package for the estimation of reference and potential evapotranspiration (PET) from +*pyet* is an open source Python package for the estimation of reference and potential evapotranspiration (PET) from time series data (`Pandas `_) and gridded data (`Xarray `_). This allows users to estimate potential evapotranspiration and calibrate the models with just a few lines of python code. -Citing PyET ------------ -If you find *pyet* helpful in your work, please consider citing PyET. This way you support the project and we can keep -track of the usage of the package. +.. grid:: -Contents --------- -.. toctree:: - :maxdepth: 1 + .. grid-item-card:: Getting started + :link: user_guide/index + :link-type: doc - Getting started - Examples - API-docs - Publications - References + User guide on the basic concepts of Pastas. + .. grid-item-card:: Examples + :link: examples/index + :link-type: doc + + Examples of *pyet* usage. + + .. grid-item-card:: Code Reference + :link: api/index + :link-type: doc + + *pyet* code reference. + +.. grid:: + + .. grid-item-card:: Publications + :link: publications + :link-type: doc + + Overview of publications that use *pyet* + + .. grid-item-card:: References + :link: references + :link-type: doc + + References used in the package. + +Currently, 18 methods are implemented for calculating daily PET +----------------------------- + +.. list-table:: PET Calculation Methods + :widths: 15 15 5 5 5 5 5 5 10 + :header-rows: 1 + + * - Method name + - pyet function + - T + - RH + - R + - u2 + - Lat. + - El. + - Benchmarked? + * - Penman + - penman + - ✓ [1] + - ✓ [2] + - ✓ [3] + - ✓ + - ✓ [3] + - ✓ [4] + - ✓ + * - Penman-Monteith + - pm + - ✓ [1] + - ✓ [2] + - ✓ [3] + - ✓ + - ✓ [3] + - ✓ [4] + - ✓ + * - ASCE-PM + - pm_asce + - ✓ [1] + - ✓ [2] + - ✓ [3] + - ✓ + - ✓ [3] + - ✓ [4] + - ✓ + * - FAO-56 + - pm_fao56 + - ✓ [1] + - ✓ [2] + - ✓ [3] + - ✓ + - ✓ [3] + - ✓ [4] + - ✓ + * - Priestley-Taylor + - priestley_taylor + - ✓ + - ✓ [5] + - ✓ [5] + - - + - ✓ [5] + - ✓ [4] + - ✓ + * - Kimberly-Penman + - kimberly_penman + - ✓ [1] + - ✓ [2] + - ✓ [3] + - ✓ + - ✓ [3] + - ✓ [4] + - - + * - Thom-Oliver + - thom_oliver + - ✓ [1] + - ✓ [2] + - ✓ [3] + - ✓ + - ✓ [3] + - ✓ [4] + - - + * - Blaney-Criddle + - blaney_criddle + - ✓ + - - [6] + - - [6] + - - [6] + - ✓ + - - + - ✓ + * - Hamon + - hamon + - ✓ + - - + - - + - - + - ✓ + - - + - ✓ + * - Romanenko + - romanenko + - ✓ + - ✓ + - - + - - + - - + - - + - ✓ + * - Linacre + - linacre + - ✓ [7] + - - + - - + - - + - - + - ✓ + - ✓ + * - Haude + - haude + - ✓ + - ✓ [8] + - - + - - + - - + - - + - ✓ + * - Turc + - turc + - ✓ + - ✓ + - ✓ + - - + - - + - - + - ✓ + * - Jensen-Haise + - jensen_haise + - ✓ + - - + - ✓ [9] + - - + - ✓ [9] + - - + - ✓ + * - McGuinness-Bordne + - mcguinness_bordne + - ✓ + - - + - - + - - + - ✓ + - - + - ✓ + * - Hargreaves + - hargreaves + - ✓ [10] + - - + - - + - - + - ✓ + - - + - ✓ + * - FAO-24 radiation + - fao_24 + - ✓ + - ✓ + - ✓ + - ✓ + - - + - ✓ [4] + - - + * - Abtew + - abtew + - ✓ + - - + - ✓ + - - + - - + - - + - ✓ + * - Makkink + - makkink + - ✓ + - - + - ✓ + - - + - - + - ✓ [4] + - ✓ + * - Oudin + - oudin + - ✓ + - - + - - + - - + - ✓ + - - + - - + +.. rubric:: Footnotes + +.. [1] T_max and T_min can also be provided. +.. [2] RH_max and RH_min can also be provided. If actual vapor pressure is provided, RH is not needed. +.. [3] Input for radiation can be (1) Net radiation, (2) solar radiation, or (3) sunshine hours. If (1), then latitude is not needed. If (1, 3) then latitude and elevation are needed. +.. [4] One must provide either the atmospheric pressure or elevation. +.. [5] If net radiation is provided, RH and Lat are not needed. +.. [6] If method==2, u2, RH_min, and sunshine hours are required. +.. [7] Additional input of Tmax and Tmin, or Tdew. +.. [8] Input can be RH or actual vapor pressure. +.. [9] If method==1, latitude is needed instead of Rs. +.. [10] Tmax and Tmin also needed. + + +Using *pyet*? Show your support by citing us! +----------------------------- + +If you find *pyet* useful and use it in your research or project, we kindly ask you to cite +the *pyet* preprint published in Hydrology and Earth System Sciences (HESS) as follows: + +- Vremec, M., Collenteur, R. A., and Birk, S.: Technical note: Improved handling of potential + evapotranspiration in hydrological studies with PyEt, Hydrol. Earth Syst. Sci. Discuss. + [preprint], https://doi.org/10.5194/hess-2022-417, 2023. \ No newline at end of file diff --git a/docs/publications.rst b/docs/publications.rst index 271eee6..26eb54c 100644 --- a/docs/publications.rst +++ b/docs/publications.rst @@ -1,7 +1,7 @@ Publications ============ -This page provides an overview of the publications that use PyET. The list is generated from the public Zotero +This page provides an overview of the publications that use *pyet*. The list is generated from the public Zotero library with the references. If you have used *pyet* in your work, please add the reference to the `Zotero library `_ (collection `Publications`) and it will show up here! diff --git a/docs/references.rst b/docs/references.rst index a4c911a..b13c7e4 100644 --- a/docs/references.rst +++ b/docs/references.rst @@ -1,8 +1,8 @@ References ========== -PyET is built on a lot of scientific literature on the estimation of potential evapotranspiration. Here the -references are listed for all the methods implemented in PyET, and the references used to benchmark the methods. This +*pyet* is built on a lot of scientific literature on the estimation of potential evapotranspiration. Here the +references are listed for all the methods implemented in *pyet*, and the references used to benchmark the methods. This list is automatically generated from a public `Zotero library `_ (collection `References`). For a list of publications using *pyet* we refer to the `Publications` page of this website. diff --git a/pyet/version.py b/pyet/version.py index d88270b..ff5fea7 100644 --- a/pyet/version.py +++ b/pyet/version.py @@ -1,3 +1,3 @@ # This is the only location where the version will be written and changed. # Based on https://packaging.python.org/single_source_version/ -__version__ = "1.3.0" +__version__ = "1.3.1" diff --git a/pyproject.toml b/pyproject.toml index 659f390..baa29cf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,4 +61,12 @@ rtd = [ "sphinxcontrib-bibtex", "matplotlib", "myst-nb", + "numpydoc", + "sphinx-design", + "seaborn", + "netcdf4", + "scikit-learn", + "scipy", + "spotpy", + "openpyxl" ] \ No newline at end of file