diff --git a/ci/requirements-py3.10.yml b/ci/requirements-py3.10.yml index eaeaf9d496..61c0e02400 100644 --- a/ci/requirements-py3.10.yml +++ b/ci/requirements-py3.10.yml @@ -25,4 +25,4 @@ dependencies: - statsmodels - pip: - nrel-pysam>=2.0 - - pvfactors==1.5.2 + - solarfactors diff --git a/ci/requirements-py3.11.yml b/ci/requirements-py3.11.yml index c3eead957c..703ce9197a 100644 --- a/ci/requirements-py3.11.yml +++ b/ci/requirements-py3.11.yml @@ -25,4 +25,4 @@ dependencies: - statsmodels - pip: - nrel-pysam>=2.0 - - pvfactors==1.5.2 + - solarfactors diff --git a/ci/requirements-py3.7.yml b/ci/requirements-py3.7.yml index 0b9d4dd961..eb3ddbb9cc 100644 --- a/ci/requirements-py3.7.yml +++ b/ci/requirements-py3.7.yml @@ -25,4 +25,4 @@ dependencies: - statsmodels - pip: - nrel-pysam>=2.0 - - pvfactors==1.5.2 + - solarfactors diff --git a/ci/requirements-py3.8.yml b/ci/requirements-py3.8.yml index cdfd574117..91365f37fb 100644 --- a/ci/requirements-py3.8.yml +++ b/ci/requirements-py3.8.yml @@ -25,4 +25,4 @@ dependencies: - statsmodels - pip: - nrel-pysam>=2.0 - - pvfactors==1.5.2 + - solarfactors diff --git a/ci/requirements-py3.9.yml b/ci/requirements-py3.9.yml index 4b9c3c7614..947da05a4d 100644 --- a/ci/requirements-py3.9.yml +++ b/ci/requirements-py3.9.yml @@ -25,4 +25,4 @@ dependencies: - statsmodels - pip: - nrel-pysam>=2.0 - - pvfactors==1.5.2 + - solarfactors \ No newline at end of file diff --git a/docs/examples/bifacial/plot_bifi_model_mc.py b/docs/examples/bifacial/plot_bifi_model_mc.py index caa5cf7ce4..679ff22921 100644 --- a/docs/examples/bifacial/plot_bifi_model_mc.py +++ b/docs/examples/bifacial/plot_bifi_model_mc.py @@ -18,6 +18,13 @@ # # Future versions of pvlib may make it easier to do bifacial modeling # with ``ModelChain``. +# +# .. attention:: +# To run this example, the ``solarfactors`` package (an implementation +# of the pvfactors model) must be installed. It can be installed with +# either ``pip install solarfactors`` or ``pip install pvlib[optional]``, +# which installs all of pvlib's optional dependencies. + import pandas as pd from pvlib import pvsystem diff --git a/docs/examples/bifacial/plot_bifi_model_pvwatts.py b/docs/examples/bifacial/plot_bifi_model_pvwatts.py index 3a0a7674a6..76a813fd4c 100644 --- a/docs/examples/bifacial/plot_bifi_model_pvwatts.py +++ b/docs/examples/bifacial/plot_bifi_model_pvwatts.py @@ -10,6 +10,12 @@ # :py:func:`pvlib.pvsystem.pvwatts_dc` with the # :py:func:`pvlib.bifacial.pvfactors.pvfactors_timeseries` function to # transpose GHI data to both front and rear Plane of Array (POA) irradiance. +# +# .. attention:: +# To run this example, the ``solarfactors`` package (an implementation +# of the pvfactors model) must be installed. It can be installed with +# either ``pip install solarfactors`` or ``pip install pvlib[optional]``, +# which installs all of pvlib's optional dependencies. import pandas as pd from pvlib import location diff --git a/docs/examples/bifacial/plot_pvfactors_fixed_tilt.py b/docs/examples/bifacial/plot_pvfactors_fixed_tilt.py index 5525c49453..63d7db902a 100644 --- a/docs/examples/bifacial/plot_pvfactors_fixed_tilt.py +++ b/docs/examples/bifacial/plot_pvfactors_fixed_tilt.py @@ -11,6 +11,12 @@ # fixed-tilt systems correctly. # This example shows how to model rear-side irradiance on a fixed-tilt # array using :py:func:`pvlib.bifacial.pvfactors.pvfactors_timeseries`. +# +# .. attention:: +# To run this example, the ``solarfactors`` package (an implementation +# of the pvfactors model) must be installed. It can be installed with +# either ``pip install solarfactors`` or ``pip install pvlib[optional]``, +# which installs all of pvlib's optional dependencies. import pandas as pd from pvlib import location diff --git a/docs/sphinx/source/conf.py b/docs/sphinx/source/conf.py index cd2d6b379d..cadadcd963 100644 --- a/docs/sphinx/source/conf.py +++ b/docs/sphinx/source/conf.py @@ -297,7 +297,8 @@ def setup(app): 'pull': ('https://github.com/pvlib/pvlib-python/pull/%s', 'GH'), 'wiki': ('https://github.com/pvlib/pvlib-python/wiki/%s', 'wiki '), 'doi': ('http://dx.doi.org/%s', 'DOI: '), - 'ghuser': ('https://github.com/%s', '@') + 'ghuser': ('https://github.com/%s', '@'), + 'discuss': ('https://github.com/pvlib/pvlib-python/discussions/%s', 'GH'), } # -- Options for manual page output --------------------------------------- diff --git a/docs/sphinx/source/user_guide/bifacial.rst b/docs/sphinx/source/user_guide/bifacial.rst index 695f8b6d89..0b1b0736a0 100644 --- a/docs/sphinx/source/user_guide/bifacial.rst +++ b/docs/sphinx/source/user_guide/bifacial.rst @@ -15,7 +15,7 @@ surfaces. pvlib-python provides two groups of functions for estimating front and back irradiance: -1. a wrapper for convenient use of the pvfactors package: +1. a wrapper for convenient use of the pvfactors model: :py:func:`~pvlib.bifacial.pvfactors.pvfactors_timeseries` 2. the infinite sheds bifacial model: @@ -26,12 +26,25 @@ irradiance: pvfactors --------- -The `pvfactors `_ package calculates +The pvfactors model calculates incident irradiance on the front and back surfaces of an array. pvfactors uses a 2D geometry which assumes that the array is made up of long, regular rows. Irradiance is calculated in the middle of a row; end-of-row effects are not included. pvfactors can model arrays in fixed racking or on single-axis -trackers. +trackers with a user-configurable number of rows. + +Prior to pvlib version 0.10.1, pvlib used the original SunPower implementation +of the model via the `pvfactors `_ +package. Starting in version 0.10.1, pvlib instead uses +`solarfactors `_, a drop-in +replacement implementation maintained by the pvlib community. +This switch was made when the original ``pvfactors`` package became +difficult to install in modern python environments. +``solarfactors`` implements the same model as ``pvfactors`` and is kept +up to date and working over time. Note that "solarfactors" is only the name +on PyPI (meaning it is installed via ``pip install solarfactors``); +after installation, Python code still accesses it as "pvfactors" +(e.g. ``import pvfactors``). Infinite Sheds diff --git a/docs/sphinx/source/whatsnew.rst b/docs/sphinx/source/whatsnew.rst index 4a91218e1b..75831e6a48 100644 --- a/docs/sphinx/source/whatsnew.rst +++ b/docs/sphinx/source/whatsnew.rst @@ -6,6 +6,7 @@ What's New These are new features and improvements of note in each release. +.. include:: whatsnew/v0.10.1.rst .. include:: whatsnew/v0.10.0.rst .. include:: whatsnew/v0.9.5.rst .. include:: whatsnew/v0.9.4.rst diff --git a/docs/sphinx/source/whatsnew/v0.10.1.rst b/docs/sphinx/source/whatsnew/v0.10.1.rst index fda67c7465..42d709c808 100644 --- a/docs/sphinx/source/whatsnew/v0.10.1.rst +++ b/docs/sphinx/source/whatsnew/v0.10.1.rst @@ -1,34 +1,12 @@ .. _whatsnew_01010: -v0.10.1 (Anticipated September, 2023) -------------------------------------- - - -Deprecations -~~~~~~~~~~~~ - - -Enhancements -~~~~~~~~~~~~ - - -Bug fixes -~~~~~~~~~ - - -Testing -~~~~~~~ - - -Documentation -~~~~~~~~~~~~~ - - -Requirements -~~~~~~~~~~~~ - - -Contributors -~~~~~~~~~~~~ +v0.10.1 (July 3, 2023) +---------------------- + +To resolve an installation issue with ``pvfactors`` and ``shapely``, +this release drops the optional ``pvfactors`` dependency and replaces +it with ``solarfactors``, a fork of ``pvfactors`` maintained by the +pvlib community. This change should not affect any user code. +(:issue:`1796`, :pull:`1797`, :discuss:`1657`) diff --git a/docs/sphinx/source/whatsnew/v0.10.2.rst b/docs/sphinx/source/whatsnew/v0.10.2.rst new file mode 100644 index 0000000000..4b18a7fe9b --- /dev/null +++ b/docs/sphinx/source/whatsnew/v0.10.2.rst @@ -0,0 +1,34 @@ +.. _whatsnew_01020: + + +v0.10.2 (Anticipated September, 2023) +------------------------------------- + + +Deprecations +~~~~~~~~~~~~ + + +Enhancements +~~~~~~~~~~~~ + + +Bug fixes +~~~~~~~~~ + + +Testing +~~~~~~~ + + +Documentation +~~~~~~~~~~~~~ + + +Requirements +~~~~~~~~~~~~ + + +Contributors +~~~~~~~~~~~~ + diff --git a/pvlib/bifacial/pvfactors.py b/pvlib/bifacial/pvfactors.py index ed09879a21..05e3807658 100644 --- a/pvlib/bifacial/pvfactors.py +++ b/pvlib/bifacial/pvfactors.py @@ -1,6 +1,7 @@ """ The ``bifacial.pvfactors`` module contains functions for modeling back surface -plane-of-array irradiance using the pvfactors package. +plane-of-array irradiance using an external implementaton of the pvfactors +model (either ``solarfactors`` or the original ``pvfactors``). """ import pandas as pd @@ -15,11 +16,15 @@ def pvfactors_timeseries( horizon_band_angle=15.): """ Calculate front and back surface plane-of-array irradiance on - a fixed tilt or single-axis tracker PV array configuration, and using - the open-source "pvfactors" package. pvfactors implements the model - described in [1]_. - Please refer to pvfactors online documentation for more details: - https://sunpower.github.io/pvfactors/ + a fixed tilt or single-axis tracker PV array configuration using + the pvfactors model. + + The pvfactors bifacial irradiance model is described in [1]_. + + .. versionchanged:: 0.10.1 + It is now recommended to install the ``solarfactors`` package + (``pip install solarfactors``) instead of ``pvfactors`` for this + function. For more information, see :ref:`bifacial`. Parameters ---------- diff --git a/setup.py b/setup.py index 1e7ad4bedd..3d2b64444b 100755 --- a/setup.py +++ b/setup.py @@ -47,11 +47,11 @@ 'pytest-remotedata'] EXTRAS_REQUIRE = { 'optional': ['cython', 'ephem', 'nrel-pysam', 'numba', - 'pvfactors', 'statsmodels'], + 'solarfactors', 'statsmodels'], 'doc': ['ipython', 'matplotlib', 'sphinx == 4.5.0', 'pydata-sphinx-theme == 0.8.1', 'sphinx-gallery', 'docutils == 0.15.2', 'pillow', - 'sphinx-toggleprompt >= 0.0.5', 'pvfactors'], + 'sphinx-toggleprompt >= 0.0.5', 'solarfactors'], 'test': TESTS_REQUIRE } EXTRAS_REQUIRE['all'] = sorted(set(sum(EXTRAS_REQUIRE.values(), [])))