diff --git a/README.md b/README.md index 04f164678f..941906c247 100644 --- a/README.md +++ b/README.md @@ -25,9 +25,6 @@ Build Status - - travis build status - documentation build status diff --git a/docs/sphinx/source/api.rst b/docs/sphinx/source/api.rst index 8b18b65817..077a5e121d 100644 --- a/docs/sphinx/source/api.rst +++ b/docs/sphinx/source/api.rst @@ -136,6 +136,7 @@ Methods for irradiance calculations pvsystem.PVSystem.get_irradiance pvsystem.PVSystem.get_aoi + pvsystem.PVSystem.get_iam tracking.SingleAxisTracker.get_irradiance Decomposing and combining irradiance @@ -235,9 +236,10 @@ PV temperature models temperature.pvsyst_cell temperature.faiman temperature.fuentes + pvsystem.PVSystem.sapm_celltemp Temperature Model Parameters -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. currentmodule:: pvlib.temperature .. autodata:: TEMPERATURE_MODEL_PARAMETERS :annotation: @@ -276,9 +278,9 @@ Functions for fitting diode models .. autosummary:: :toctree: generated/ - ivtools.fit_sde_sandia - ivtools.fit_sdm_cec_sam - ivtools.fit_sdm_desoto + ivtools.sde.fit_sandia_simple + ivtools.sdm.fit_cec_sam + ivtools.sdm.fit_desoto Inverter models (DC to AC conversion) ------------------------------------- @@ -310,7 +312,6 @@ Sandia array performance model (SAPM) pvsystem.sapm pvsystem.sapm_effective_irradiance pvsystem.sapm_spectral_loss - pvsystem.sapm_aoi_loss inverter.sandia temperature.sapm_cell @@ -360,7 +361,7 @@ Utilities for working with IV curve data .. autosummary:: :toctree: generated/ - ivtools.utility.rectify_iv_curve + ivtools.utils.rectify_iv_curve Other ----- @@ -376,12 +377,16 @@ Effects on PV System Output =========================== Loss models -^^^^^^^^^^^ +----------- + .. autosummary:: :toctree: generated/ pvsystem.combine_loss_factors +Snow +---- + .. autosummary:: :toctree: generated/ @@ -389,12 +394,18 @@ Loss models snow.fully_covered_nrel snow.dc_loss_nrel +Soiling +------- + .. autosummary:: :toctree: generated/ soiling.hsu soiling.kimber +Shading +------- + .. autosummary:: :toctree: generated/ diff --git a/docs/sphinx/source/whatsnew/v0.8.0.rst b/docs/sphinx/source/whatsnew/v0.8.0.rst index 3df309ea8a..86fb81574f 100644 --- a/docs/sphinx/source/whatsnew/v0.8.0.rst +++ b/docs/sphinx/source/whatsnew/v0.8.0.rst @@ -1,69 +1,42 @@ .. _whatsnew_0800: -v0.8.0 (Month day, year) -------------------------- - -API Breaking Changes -~~~~~~~~~~~~~~~~~~~~ - -* The ``ivtools.py`` module has been reorganized into sub-modules and functions - in ``ivtools.py`` have been renamed (:pull:`708`) - - Functions for fitting diode models are now in ``ivtools\sdm.py`` - - :py:func:`pvlib.ivtools.fit_sdm_cec_sam` is now :py:func:`pvlib.ivtools.sdm.fit_cec_sam` - - :py:func:`pvlib.ivtools.fit_sdm_desoto` is now :py:func:`pvlib.ivtools.sdm.fit_desoto` - - Functions for fitting the single diode equation are now in ``ivtools\sde.py`` - - :py:func:`pvlib.ivtools.fit_sde_sandia` is now :py:func:`pvlib.ivtools.sde.fit_sandia_simple` - -API Changes with Deprecations -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -* Moved functions related to inverters from ``pvsystem.py`` to ``inverter.py``. - Functions are renamed to follow a more consistent pattern, as follows (:pull:`886`): - - :py:func:`pvlib.pvsystem.snlinverter` is now :py:func:`pvlib.inverter.sandia` - - :py:func:`pvlib.pvsystem.pvwatts_ac` is now :py:func:`pvlib.inverter.pvwatts` - - :py:func:`pvlib.pvsystem.adrinverter` is now :py:func:`pvlib.inverter.adr` -* Argument ``ac_model`` for :py:class:`pvlib.modelchain.ModelChain` now accepts - ``'sandia'``, ``'pvwatts'`` and ``'adr'`` for the inverter models. (:pull:`886`) -* :py:class:`pvlib.pvsystem.PVSystem` ``module_type`` and ``racking_model`` now - default to ``None``. This continues a deprecation of assuming SAPM values - for cell temperature modeling. In this v0.8 release series, calling - :py:meth:`pvlib.pvsystem.PVSystem.sapm_celltemp` without setting ``PVSystem.temperature model parameters``, - or a valid combination of ``PVsystem.module_type`` and ``PVsystem.racking_model``, will cause - ``PVSystem.temperature_model_parameters`` to be set to SAPM values for a - glass/glass module in open racking and emit a warning. In v0.9, users must - provide ``temperature_model_parameters`` or a valid combination of - ``module_type`` and ``racking_model``. (:issue:`1030`, :pull:`1033`) -* Deprecated arbitrary keyword arguments for - :py:class:`pvlib.location.Location`, :py:class:`pvlib.pvsystem.PVSystem`, - :py:class:`pvlib.tracking.SingleAxisTracker`, and - :py:class:`pvlib.modelchain.ModelChain`. Supplying arbitrary keyword - to these objects will result in TypeErrors in v0.9. (:issue:`1029`, :pull:`1053`) -* ``pvlib.pvsystem.LocalizedPVSystem`` and ``pvlib.pvsystem.LocalizedSingleAxisTracker`` - are deprecated and will be removed in 0.9. Use - :py:class:`pvlib.location.Location`, :py:class:`pvlib.pvsystem.PVSystem`, - :py:class:`pvlib.tracking.SingleAxisTracker`, and - :py:class:`pvlib.modelchain.ModelChain` instead. - (:issue:`1029`, :pull:`1034`, :pull:`1053`) +v0.8.0 (September 8, 2020) +-------------------------- + +Breaking changes +~~~~~~~~~~~~~~~~ +* The ``ivtools.py`` module has been reorganized into a subpackage and functions + in ``ivtools.py`` have been renamed (:pull:`708`): + + - Functions for fitting diode models are now in :py:mod:`pvlib.ivtools.sdm` + - :py:func:`pvlib.ivtools.fit_sdm_cec_sam` is now :py:func:`pvlib.ivtools.sdm.fit_cec_sam` + - :py:func:`pvlib.ivtools.fit_sdm_desoto` is now :py:func:`pvlib.ivtools.sdm.fit_desoto` + - Functions for fitting the single diode equation are now in :py:mod:`pvlib.ivtools.sde` + - :py:func:`pvlib.ivtools.fit_sde_sandia` is now :py:func:`pvlib.ivtools.sde.fit_sandia_simple` -API Changes -~~~~~~~~~~~ * Removed ``run_parallel_calculations`` and ``n_workers_for_parallel_calcs`` from :py:func:`pvlib.bifacial.pvfactors_timeseries` inputs (:issue:`902`) (:pull:`934`) + * :py:func:`pvlib.iotools.read_tmy3` can now only read local data files because the NREL RREDC server hosting the TMY3 dataset has been retired. For fetching TMY data from NREL servers, :py:func:`pvlib.iotools.get_psm3` is now recommended to retrieve newer PSM3 data over the older TMY3 data. (:issue:`996`) (:pull:`1004`) + * The tkinter-based file selection dialog has been removed from :py:func:`pvlib.iotools.read_tmy2` and :py:func:`pvlib.iotools.read_tmy3`; the filepath is now a required parameter. (:pull:`1004`) + * Removed ``systemdef`` function from ``pvsystem.py``. This function was not used in pvlib and its output was not directly compatible with any pvlib function. See :py:func:`pvlib.iotools.read_tmy2`, :py:func:`pvlib.iotools.read_tmy3`, :py:meth:`pvlib.location.Location.from_tmy`, and :py:class:`pvlib.pvsystem.LocalizedPVSystem` for alternatives. (:issue:`965`) (:pull:`1008`) + * The following functions, methods, and arguments were deprecated in a previous release and have now been removed (:issue:`966`, :pull:`1033`): + * ``pvsystem.PVSystem.ashraeiam``. Use :py:meth:`pvlib.pvsystem.PVSystem.get_iam`. * ``pvsystem.PVSystem.physicaliam``. Use :py:meth:`pvlib.pvsystem.PVSystem.get_iam`. * ``pvsystem.PVSystem.sapm_aoi_loss``. Use :py:meth:`pvlib.pvsystem.PVSystem.get_iam`. @@ -80,6 +53,41 @@ API Changes * ``temp_model`` keyword argument of :py:meth:`pvlib.modelchain.ModelChain`. Use ``temperature_model`` instead. +Deprecations +~~~~~~~~~~~~ +* Moved functions related to inverters from ``pvsystem.py`` to ``inverter.py``. + Functions are renamed to follow a more consistent pattern, as follows (:pull:`886`): + + - ``pvlib.pvsystem.snlinverter`` is now :py:func:`pvlib.inverter.sandia` + - ``pvlib.pvsystem.pvwatts_ac`` is now :py:func:`pvlib.inverter.pvwatts` + - ``pvlib.pvsystem.adrinverter`` is now :py:func:`pvlib.inverter.adr` + +* Argument ``ac_model`` for :py:class:`pvlib.modelchain.ModelChain` now accepts + ``'sandia'``, ``'pvwatts'`` and ``'adr'`` for the inverter models. (:pull:`886`) + +* :py:class:`pvlib.pvsystem.PVSystem` ``module_type`` and ``racking_model`` now + default to ``None``. This continues a deprecation of assuming SAPM values + for cell temperature modeling. In this v0.8 release series, calling + :py:meth:`pvlib.pvsystem.PVSystem.sapm_celltemp` without setting ``PVSystem.temperature_model_parameters``, + or a valid combination of ``PVsystem.module_type`` and ``PVsystem.racking_model``, will cause + ``PVSystem.temperature_model_parameters`` to be set to SAPM values for a + glass/glass module in open racking and emit a warning. In v0.9, users must + provide ``temperature_model_parameters`` or a valid combination of + ``module_type`` and ``racking_model``. (:issue:`1030`, :pull:`1033`) + +* Deprecated arbitrary keyword arguments for + :py:class:`pvlib.location.Location`, :py:class:`pvlib.pvsystem.PVSystem`, + :py:class:`pvlib.tracking.SingleAxisTracker`, and + :py:class:`pvlib.modelchain.ModelChain`. Supplying arbitrary keyword + to these objects will result in TypeErrors in v0.9. (:issue:`1029`, :pull:`1053`) + +* ``pvlib.pvsystem.LocalizedPVSystem`` and ``pvlib.pvsystem.LocalizedSingleAxisTracker`` + are deprecated and will be removed in 0.9. Use + :py:class:`pvlib.location.Location`, :py:class:`pvlib.pvsystem.PVSystem`, + :py:class:`pvlib.tracking.SingleAxisTracker`, and + :py:class:`pvlib.modelchain.ModelChain` instead. + (:issue:`1029`, :pull:`1034`, :pull:`1053`) + Enhancements ~~~~~~~~~~~~ * Update :func:`~pvlib.bifacial.pvfactors_timeseries` to run with ``pvfactors`` v1.4.1 (:issue:`902`)(:pull:`934`) @@ -99,9 +107,9 @@ Enhancements objects configured for the respective modeling paradigms. The configurations are defined in ``modelchain.PVWATTS_CONFIG``, and ``modelchain.SAPM_CONFIG``. (:issue:`1013`, :pull:`1022`) -* Added *racking_model*, *module_type*, and *temperature_model_parameters* to - PVSystem, LocalizedPVSystem, SingleAxisTracker, and - LocalizedSingleAxisTracker repr methods. (:issue:`1027`) +* Added ``racking_model``, ``module_type``, and ``temperature_model_parameters`` to + :py:class:`~pvlib.pvsystem.PVSystem` and :py:class:`~pvlib.tracking.SingleAxisTracker` + repr methods. (:issue:`1027`) * Added :py:func:`~pvlib.tracking.calc_axis_tilt` to calculate the tracker axes tilt and :py:func:`~pvlib.tracking.calc_cross_axis_tilt` to calculate the cross-axis tilt, which is the angle, relative to horizontal, of @@ -126,8 +134,10 @@ Bug fixes ~~~~~~~~~ * Fixed unit and default value errors in :py:func:`pvlib.soiling.hsu`. (:pull:`977`, :pull:`980`) * Handle NUL characters and fix version column dtype in - :py:func:`~pvlib.iotools.crn.read_crn`. (:issue:`1025`) + :py:func:`~pvlib.iotools.read_crn`. (:issue:`1025`) * Fix low sun angle tracker rotation calculation. (:issue:`824`) +* Fix issue with big-endian and little-endian data in ``forecast.py``. + (:issue:`921`) Testing ~~~~~~~ @@ -182,3 +192,8 @@ Contributors * Joshua S. Stein (:ghuser:`jsstein`) * Marc A. Anoma (:ghuser:`anomam`) * Will Holmgren (:ghuser:`wholmgren`) +* Brock Taute (:ghuser:`btaute`) +* Cameron Stark (:ghuser:`CameronTStark`) +* :ghuser:`kahemker` +* Miguel Sánchez de León Peque (:ghuser:`Peque`) +* Stephen Lightfoote (:ghuser:`srlightfoote`) diff --git a/pvlib/ivtools/utils.py b/pvlib/ivtools/utils.py index ea310130c1..eb46150918 100644 --- a/pvlib/ivtools/utils.py +++ b/pvlib/ivtools/utils.py @@ -142,20 +142,17 @@ def rectify_iv_curve(voltage, current, decimals=None): voltage : numeric [V] current : numeric [A] - Raises - ------ - ValueError if voltage and current are different length - Notes ----- - ``rectify_IV_curve`` ensures that the IV curve lies in the first quadrant + ``rectify_iv_curve`` ensures that the IV curve lies in the first quadrant of the (voltage, current) plane. The returned IV curve: - * increases in voltage - * contains no negative current or voltage values - * contains no NaNs - * contains no points with duplicate voltage values. Where voltage - values are repeated, a single data point is substituted with current - equal to the average of current at duplicated voltages. + + * increases in voltage + * contains no negative current or voltage values + * contains no NaNs + * contains no points with duplicate voltage values. Where voltage + values are repeated, a single data point is substituted with current + equal to the average of current at duplicated voltages. """ df = pd.DataFrame(data=np.vstack((voltage, current)).T, columns=['v', 'i']) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index 3cef177de4..7077d6c920 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -611,6 +611,7 @@ def dc_model(self, model): self._dc_model = partial(model, self) def infer_dc_model(self): + """Infer DC power model from system attributes.""" params = set(self.system.module_parameters.keys()) if {'A0', 'A1', 'C7'} <= params: return self.sapm, 'sapm' @@ -705,6 +706,7 @@ def ac_model(self, model): self._ac_model = partial(model, self) def infer_ac_model(self): + """Infer AC power model from system attributes.""" inverter_params = set(self.system.inverter_parameters.keys()) if {'C0', 'C1', 'C2'} <= inverter_params: return self.snlinverter @@ -816,6 +818,7 @@ def spectral_model(self, model): self._spectral_model = partial(model, self) def infer_spectral_model(self): + """Infer spectral model from system attributes.""" params = set(self.system.module_parameters.keys()) if {'A4', 'A3', 'A2', 'A1', 'A0'} <= params: return self.sapm_spectral_loss @@ -877,6 +880,7 @@ def temperature_model(self, model): self._temperature_model = partial(model, self) def infer_temperature_model(self): + """Infer temperature model from system attributes.""" params = set(self.system.temperature_model_parameters.keys()) # remove or statement in v0.9 if {'a', 'b', 'deltaT'} <= params or (