What’s New#
These are new features and improvements of note in each release.
v0.13.2 (Anticipated December, 2025)#
Breaking Changes#
- Rename - axis_tiltand- cross_axis_tiltto- axis_slopeand- cross_axis_slopeall through the project. Affects:- pvlib.shading.shaded_fraction1d()parameters- cross_axis_tiltand- axis_tilt
- pvlib.shading.projected_solar_zenith_angle()parameter- axis_tilt
- pvlib.tracking.singleaxis()parameters- cross_axis_tiltand- axis_tilt
- pvlib.tracking.calc_surface_orientation()parameter- axis_tilt
- pvlib.tracking.calc_axis_tilt()function is renamed to- calc_axis_slope()
- pvlib.tracking.calc_cross_axis_tilt()function is renamed to- calc_cross_axis_slope(), and its parameter- axis_tilt
- pvlib.pvsystem.SingleAxisTrackerMountdataclass fields- axis_tiltand- cross_axis_tilt
 
Deprecations#
Bug fixes#
Enhancements#
Documentation#
Testing#
Benchmarking#
Requirements#
Maintenance#
Contributors#
v0.13.1 (September 24, 2025)#
Deprecations#
- Deprecate - pvlib.modelchain.get_orientation(). (GH2495)
- Rename parameter name - apparent_azimuthto- solar_azimuthin- singleaxis(). (GH2479, GH2480)
Bug fixes#
- Fix - detect_clearsky()to use inferred window length when- infer_limits=True. (GH2542, GH2550)
Enhancements#
- Add option to use the latest parameters for the Huld PV array model - huld(). (GH2461, GH2486)
- Add option to specify - kcoefficient in- ross(). (GH2506, GH2521)
- Add iotools functions to retrieve irradiance and weather data from Meteonorm: - get_meteonorm_forecast_basic(),- get_meteonorm_forecast_precision(),- get_meteonorm_observation_realtime(),- get_meteonorm_observation_training(), and- get_meteonorm_tmy(). (GH2499)
- Add - pvlib.iotools.get_nasa_power()to retrieve data from NASA POWER free API. (GH2500)
- pvlib.spectrum.spectral_factor_firstsolar()no longer emits warnings when airmass and precipitable water values fall out of range. (GH2512)
- Allow reading TMY data from a Path or file-like object in - read_tmy3(). (GH2544)
Documentation#
- Update - pvlib.irradiancemodule documentation to include links to parameter definitions from the nomenclature page, ensure consistent parameter description structure, add units to all parameters where required, and other miscellaneous edits. (GH2205, GH2248, GH2311)
- Substantiate definitions of solar/surface azimuth/zenith and aoi on the Nomenclature page. (GH2448, GH2503) 
- Add a new reference page for the spectrum (Spectrum) to the Modeling Topics section of the user guide, documenting pvlib-python’s spectrum functionality, which includes a comparison table of spectral mismatch estimation models. (GH2329, GH2353) 
- Fix FAQ URL in - README.md. (GH2488)
Requirements#
Maintenance#
Contributors#
- Elijah Passmore (@eljpsm) 
- Omar Bahamida (@OmarBahamida) 
- Cliff Hansen (@cwhanse) 
- Ioannis Sifnaios (@IoannisSifnaios) 
- Rajiv Daxini (@RDaxini) 
- Rodrigo Amaro e Silva (@ramaroesilva) 
- Kevin Anderson (@kandersolar) 
- Mikaella Brewer (@brwerx) 
- Will Holmgren (@wholmgren) 
- Jeremy Lucas (@jerluc) 
- Adam R. Jensen (@AdamRJensen) 
- Will Hobbs (@williamhobbs) 
- Echedey Luis (@echedey-ls) 
- Anton Driesse (@adriesse) 
- Mark Mikofski (@mikofski) 
- Mathias Aschwanden (@maschwanden) 
v0.13.0 (June 7, 2025)#
Breaking Changes#
- The functions - read_pvgis_hourly()and- get_pvgis_hourly()now return- (data,meta)following the iotools convention instead of- (data,inputs,meta). The- inputsdictionary is now included in- meta, which has changed structure to accommodate it. (GH2462)
- The functions - read_pvgis_tmy()and- get_pvgis_tmy()now return- (data,meta)following the iotools convention instead of- (data,months_selected,inputs,meta). (GH2470)
- get_pvgis_tmy()now defaults to- coerce_year=1990, whereas the default behavior previously was to use the years of the selected months for the TMY index. (GH2474)
- Remove - outputformat='basic'option in- get_pvgis_tmy(). (GH2416)
Deprecations#
- The following - parse_functions in- pvlib.iotoolsare deprecated, with the corresponding- read_functions taking their place: (GH2444, GH2458, GH2467, GH2466)
- The - serverparameter in- get_cams()has been renamed to- urlto be consistent with the other iotools. GH2463
- Rename parameter name - g_poa_effectiveto- effective_irradiancein- pvwatts_dc()and- pvwatts_dc(). (GH1253, GH2235)
Bug fixes#
- pvlib.iotools.get_pvgis_tmy()now returns the correct dtypes when when- outputformat='epw'. (GH2399, GH2417)
Enhancements#
- Add a function for estimating PVsyst SDM parameters from IEC 61853-1 matrix data ( - fit_pvsyst_iec61853_sandia_2025()). (GH2185, GH2429)
- The parameters for the Ix and Ixx points are now optional when using - pvlib.pvsystem.sapm()directly and through- PVSystemand- ModelChain. (GH2402, GH2433)
- Add optional arguments - temperature_refand- irradiance_refto- sapm()(GH2432, GH2434)
- Add NREL NSRDB PSM v4 API client to - pvlib.iotools. See- get_nsrdb_psm4_aggregated(),- get_nsrdb_psm4_tmy(),- get_nsrdb_psm4_conus(),- get_nsrdb_psm4_full_disc(), and- read_nsrdb_psm4(). (GH2326, GH2378, GH2445)
- pvlib.bifacial.infinite_shedsno longer emits “invalid value” warnings when supplying irradiance arrays with nighttime zero values. (GH2450, GH2451)
- Add - 'semi_integrated'parameters for the PVsyst temperature model. (GH2330, GH2415)
Documentation#
- Add a supporting reference to - pvlib.atmosphere.get_relative_airmass()(GH2390, GH2424)
- Document how - np.nanvalues are handled by- average_photon_energy()(GH2423, GH2426)
- Clarify which SAPM coefficients are required by the - moduleparameter in- sapm()(GH2392, GH2435)
- Add gallery example on calculating irradiance at crop level for agriPV systems. (GH2459) 
- Update references in - get_extra_radiation()(GH2333, GH2347)
- Update references in - get_cams()and- read_cams()(GH2427, GH2457)
- Fix - Edit on GitHublinks in stable documentation so they point to the tagged repository version matching the build environment (e.g., v0.12.0). (GH2456, GH2460)
- Fix a minor issue with calculation of solar position in the OEDI 9068 gallery page. (GH2468) 
Requirements#
- wheelis no longer a build dependency. (GH2439)
Maintenance#
Contributors#
- Cliff Hansen (@cwhanse) 
- Rajiv Daxini (@RDaxini) 
- Will Hobbs (@williamhobbs) 
- Kevin Anderson (@kandersolar) 
- Will Holmgren (@wholmgren) 
- Muhammad Rebaal (@Muhammad-Rebaal) 
- Echedey Luis (@echedey-ls) 
- omahs (@omahs) 
- Adam R. Jensen (@AdamRJensen) 
- Marion Schroedter-Homscheidt (@mschroedter) 
- Anton Driesse (@adriesse) 
- Mark Mikofski (@mikofski) 
- Ioannis Sifnaios (@IoannisSifnaios) 
- Mark Campanelli (@markcampanelli) 
- Paul Gilman (@cpaulgilman) 
- Yu Xie (@xieyupku) 
- Grant Buster (@grantbuster) 
v0.12.0 (March 19, 2025)#
Breaking Changes#
- The - pvlib.location.Location.pytzattribute is now read only. The- pytzattribute is now set internally to be consistent with the- pvlib.location.Location.tzattribute. (GH2340, GH2341)
- Users must now provide - ModelChain.spectral_model, or the- 'no_loss'spectral model is assumed.- ModelChainno longer attempts to infer the spectral model from- PVSystemattributes. (GH2017, GH2253)
- Remove deprecated - pvlib.pvsystem.sapm_spectral_loss(); use- spectral_factor_sapm()instead. (GH2243, GH2244)
- read_tmy3()now defaults to- map_variables=True. Additionally, the deprecated- recolumnparameter is now removed. (GH2324, GH2408)
- Remove - pvlib.atmosphere.first_solar_spectral_correction(), deprecated in v0.10.0. Use- spectral_factor_firstsolar()instead. (GH2130, GH2131)
- Remove deprecated - pvlib.spectrum.get_am15g()function; use- get_reference_spectra()instead. (GH2409)
- Change default method of - get_sun_rise_set_transit()to- 'spa'instead of- 'pyephem'. (GH2410)
Bug fixes#
- Add a check to - fully_covered_nrel()and- coverage_nrel(). The check uses snow depth on the ground to improve modeling for systems with shallow tilt angles. The check adds a new, optional parameter- snow_depth. (GH1171, GH2292)
- Fix a bug in - pvlib.bifacial.infinite_sheds.get_irradiance_poa()which may have yielded non-zero ground irradiance when the sun was below the horizon. (GH2245, GH2359)
- Fix a bug where - pvlib.transformer.simple_efficiency()could only be imported using the- from pvlib.transformersyntax. (GH2388)
- ModelChainnow requires only a minimal set of parameters to run the SAPM electrical model. (GH2369, GH2393)
- Correct keys for First Solar modules in - spectral_factor_pvspec(). (GH2398, GH2400)
- Ensure proper tz and pytz types in - Location. To ensure that the time zone in- Locationremains internally consistent if/when the time zone is updated, the- tzattribute is now the single source of time-zone truth, is the single time-zone setter interface, and its getter returns an IANA string. (GH2340, GH2341)
- get_pvgis_tmy()with- outputformat='csv'now works with the updated data format returned by PVGIS. (GH2344, GH2395)
Enhancements#
- gti_dirint()now raises an informative message when input data don’t include values with AOI<90. (GH1342, GH2347)
- Reduce space requirements by excluding tests and test files from wheel. Zipped wheel is now 66% of the previous size, and installed size is 50% of the previous size. (GH2271, GH2277) 
Documentation#
- Fix Procedural and Object Oriented simulation examples having slightly different results in Intro Tutorial. (GH2366, GH2367) 
- Restructure the user guide with subsections. (GH2302, GH2310) 
- Add references for - pvlib.snow.loss_townsend(). (GH2383, GH2384)
- Add ghi_clear to the Nomenclature page. (GH2272, GH2397) 
- Add output variable naming clarifaction to - pvlib.pvsystem.calcparams_desoto()and- pvlib.pvsystem.calcparams_pvsyst(). (GH716, GH2405)
Testing#
Maintenance#
Contributors#
- Rajiv Daxini (@RDaxini) 
- Cliff Hansen (@cwhanse) 
- Jason Lun Leung (@jason-rpkt) 
- Manoj K S (@manojks1999) 
- Kurt Rhee (@kurt-rhee) 
- Ayush jariyal (@ayushjariyal) 
- Kevin Anderson (@kandersolar) 
- Echedey Luis (@echedey-ls) 
- Mark Campanelli (@markcampanelli) 
- Max Jackson (@MaxJackson) 
- Anton Driesse (@adriesse) 
- Adam R. Jensen (@AdamRJensen) 
- Ioannis Sifnaios (@IoannisSifnaios) 
- Will Holmgren (@wholmgren) 
- Sophie Pelland (@solphie-pelland) 
- Will Hobbs (@williamhobbs) 
- Karel De Brabandere (@kdebrab) 
- Kenneth J. Sauer (@kjsauer) 
v0.11.2 (December 16, 2024)#
Deprecations#
- Deprecate terms - dni_clearskyand- clearsky_dni, replace with- dni_clearand- ghi_clear. Affected functions are- dirindex(),- dni()and- clearsky_index().
Enhancements#
- Add - rh_from_tdew()and- tdew_from_rh(). (GH1744, GH2286)
- fit_desoto()now allows input of initial parameter guesses. (GH1014, GH2291)
Bug Fixes#
- get_irradiance()accepts float inputs. (GH1338, GH2227)
- Handle DST transitions that happen at midnight in - pvlib.solarposition.hour_angle()(GH2132 GH2133)
- Change - dni_extrato a required parameter in- pvlib.irradiance.ghi_from_poa_driesse_2023()(GH2279 GH2331)
- julian_day_dt()now accounts for the 10 day difference between Julian and Gregorian calendars prior to the year 1582. (GH2077, GH2249)
- Correct sign of temperature coefficient - dEgdTin- fit_desoto_sandia(). Results may differ slightly from previous versions. (GH2311, GH2322)
Documentation#
- Edit docstrings for - dc_ohms_from_percent()and- dc_ohmic_losses()for clarity. (GH1601, GH2229)
- Add ‘freestanding’ and ‘insulated’ racking_model options for cell temperature calculation in - PVSystem,- SingleAxisTrackerMount, and- FixedMountdocstrings. Various formatting edits for clarity. (GH1942, GH2232)
- Update - reindl()to include definitions of terms and a new “notes” section (GH2183, GH2193)
- Clarify the error message in - detect_clearsky()when windows contain fewer than three data points (GH2005, GH2281)
- Clarify mounting cases for parameters for - sapm_module(),- sapm_cell()and- pvsyst_cell(). (GH1323, GH2293)
- Add an example to - retrieve_sam()docstring to demonstrate how to retrieve a database from the SAM repo. (GH2313)
- Add a new citation style guide (References) to the contributing page. (GH2202, GH2226) 
- Explain how to write docstrings for new functions in Example Docstring (GH2081, GH2254) 
- Add a section in the style guide for parameter naming and units best practices. See Parameter names and units. (GH2205, GH2248) 
- Add a new Nomenclature page, in place of the Variables and Symbols page, using the sphinx glossary directive. (GH1421, GH2234) 
- Add the following variables to the Nomenclature page: 
Testing#
- Update test files to track new PVGIS 5.3 data. (GH2305) 
Maintenance#
- Add a decorator to deprecate renamed keyword arguments in functions, - pvlib._deprecation.renamed_kwarg_warning(). (GH2237)
Contributors#
- Cliff Hansen (@cwhanse) 
- Rajiv Daxini (@RDaxini) 
- Dave Pitts (@dgapitts) 
- Kurt Rhee (@kurt-rhee) 
- Mark Mikofski (@mikofski) 
- Roma Koulikov (@matsuobasho) 
- Echedey Luis (@echedey-ls) 
- Kevin Anderson (@kandersolar) 
- Scott Nelson (@scttnlsn) 
- Ioannis Sifnaios (@IoannisSifnaios) 
- Adam R. Jensen (@AdamRJensen) 
- Anton Driesse (@adriesse) 
- Will Holmgren (@wholmgren) 
- Umay Akkoseoglu (@uakkoseo) 
- Mark Campanelli (@markcampanelli) 
- Hiromasa Ihara (@miettal) 
- Yunho Kee (@yhkee0404) 
- Hamilton Kibbe (@hamiltonkibbe) 
- Felix Korbelius (@FelixKoTU) 
- Michael Deceglie (@mdeceglie) 
- Will Hobbs (@williamhobbs) 
- Todd Karin (@toddkarin) 
- Lucas Schneeberger (@lucasschn) 
v0.11.1 (September 26, 2024)#
Enhancements#
- Add new function to calculate the average photon energy, - average_photon_energy(). (GH2135, GH2140)
- Add new losses function that accounts for non-uniform irradiance on bifacial modules, - power_mismatch_deline(). (GH2045, GH2046)
- Add new parameters for min/max absolute air mass to - spectral_factor_firstsolar(). (GH2086, GH2100)
- Add - roll_utc_offsetand- coerce_yeararguments to- get_pvgis_tmy()to allow user to specify time zone, rotate indices of TMY to begin at midnight, and force indices to desired year. (GH2139, GH2138)
- Restructured the pvlib/spectrum folder by breaking up the contents of pvlib/spectrum/mismatch.py into pvlib/spectrum/mismatch.py, pvlib/spectrum/irradiance.py, and pvlib/spectrum/response.py. (GH2125, GH2136, GH2151) 
- Added function for calculating wind speed at different heights, - windspeed_powerlaw(). (GH2118, GH2124)
- delta_tcan now be specified with an array in the SPA functions. The numba implementation now also allows calculation of- delta_tinternally. (GH2189, GH2190)
- The multithreaded SPA functions no longer emit a warning when calculating solar positions for short time series. (GH2170) 
- Implemented closed-form solution for alpha in - detect_clearsky(), obviating the call to scipy.optimize, which was prone to runtime errors, and minimizing computation. (GH2171, GH2216, GH2217).
Bug fixes#
- To prevent simulation output from differing slightly based on the time zone of the time stamps, models that use day of year for sun position and irradiance calculations now determine the day of year according to the UTC equivalent of the specified time stamps. The following functions are affected: - lookup_linke_turbidity(),- get_extra_radiation(),- disc(),- dirint(),- spectrl2(). (GH2054, GH2055)
- hour_angle()and- sun_rise_set_transit_geometric()now raise- ValueErrorwhen given timezone-naive inputs, instead of assuming UTC. (GH2055)
Testing#
- Updated the tests for - get_pvgis_tmy()and- read_pvgis_tmy()as the default API endpoint has changed from 5.1 to 5.2. (GH2222)
- Removed unused - timesinput from- dni_etfixture. (GH2105, GH2156)
Documentation#
- Added new gallery example pages for: - Demonstrating the application of several spectral mismatch factor models. (GH2107, GH2114) 
- Demonstrating the application of - average_photon_energy(). (GH2194, GH2206)
- Calculating cell temperature for floating PV. (GH2110) 
- Demonstrating how to use different Perez coefficients in a ModelChain. (GH2127, GH2148) 
 
- Fixed examples in - shaded_fraction1d(). (GH2215)
- Updated model description, added equation variable definitions, and created a new “notes” section in - haydavies()and- klucher(). (GH2183, GH2191, GH2192)
- Document units with Wm⁻² instead of W/m^2 throughout - pvlib.irradiance. (GH2205, GH2191)
- Split the contributing page into several pages. (GH2210, GH2219) 
Requirements#
Contributors#
- Echedey Luis (@echedey-ls) 
- Yunho Kee (@yhkee0404) 
- Chris Deline (@cdeline) 
- Ioannis Sifnaios (@IoannisSifnaios) 
- Leonardo Micheli (@lmicheli) 
- Rajiv Daxini (@RDaxini) 
- Mark A. Mikofski (@mikofski) 
- Ben Pierce (@bgpierc) 
- Jose Meza (@JoseMezaMendieta) 
- Kevin Anderson (@kandersolar) 
- Luiz Reis (@luizreiscver) 
- Carlos Cárdenas-Bravo (@cardenca) 
- Marcos R. Escudero (@marc-resc) 
- Bernat Nicolau (@BernatNicolau) 
- Eduardo Sarquis (@EduardoSarquis) 
- Adam R. Jensen (@AdamRJensen) 
- Andrew B Godbehere (@agodbehere) 
- Cliff Hansen (@cwhanse) 
- Anton Driesse (@adriesse) 
- Miguel Angel Sevillano Bendezú (@msevillanob) 
- Erfan (@Metal-Bat) 
- Will Holmgren (@wholmgren) 
- Kurt Rhee (@kurt-rhee) 
- Mark Campanelli (@markcampanelli) 
v0.11.0 (June 21, 2024)#
Breaking changes#
- The deprecated - pvlib.modelchain.basic_chainhas now been removed. (GH1862)
- Remove the - poa_horizontal_ratiofunction and all of its references. (GH1697, GH2021)
- Updated - MIDC_VARIABLE_MAPto reflect changes in instrumentation. (GH2006)
- pvlib.iotools.read_srml_month_from_solardatwas deprecated in v0.10.0 and has now been completely removed. The function is replaced by- get_srml(). (GH1779, GH1989)
- The - leap_dayparameter in- get_psm3()now defaults to True instead of False. (GH1481, GH1991)
- get_psm3(),- read_psm3(), and- parse_psm3()all now have- map_variables=Trueby default. (GH1425, GH2094)
- The deprecated - ivcurve_pntsparameter of- pvlib.pvsystem.singlediode()is removed. Use- pvlib.pvsystem.v_from_i()and- pvlib.pvsystem.i_from_v()instead. (GH2101)
Deprecations#
- The - pvlib.irradiance.SURFACE_ALBEDOSdictionary has been moved to- pvlib.albedo.SURFACE_ALBEDOS. (GH2095)
- Function - pvlib.spectrum.get_am15g()has been deprecated in favor of the new function- pvlib.spectrum.get_reference_spectra(). Use- pvlib.spectrum.get_reference_spectra(standard="ASTM G173-03")["global"]instead. (GH2039)
Enhancements#
- Add a simple transformer efficiency model - pvlib.transformer.simple_efficiency(). (GH1269, GH2053)
- Add function - pvlib.shading.shaded_fraction1d(), to calculate the shade perpendicular to- axis_azimuth. The function is applicable to both fixed-tilt and one-axis tracking systems. (GH1689, GH1725, GH1962)
- Add function - pvlib.albedo.inland_water_dvoracek(), to calculate the albedo for inland water bodies. (GH2079)
- Added conversion functions from spectral response ([A/W]) to quantum efficiency ([unitless]) and vice versa. The conversion functions are - pvlib.spectrum.sr_to_qe()and- pvlib.spectrum.qe_to_sr()respectively. (GH2040, GH2041)
- Add function - pvlib.spectrum.spectral_factor_pvspec(), which calculates the spectral mismatch factor as a function of absolute airmass and clearsky index using the PVSPEC model. (GH1950, GH2065, GH2072)
- Add function - pvlib.spectrum.spectral_factor_jrc(), which calculates the spectral mismatch factor as a function of airmass and clearsky index using the JRC model. (GH1950, GH2065, GH2087, GH2088)
- Added extraterrestrial and direct spectra of the ASTM G173-03 standard with the new function - pvlib.spectrum.get_reference_spectra(). (GH1963, GH2039)
- Added function - pvlib.shading.direct_martinez()to calculate shading losses by taking into account the amount of bypass diodes of a module. (GH2063, GH2070)
- Add function - pvlib.irradiance.diffuse_par_spitters()to calculate the diffuse fraction of Photosynthetically Active Radiation (PAR) from the global diffuse fraction and the solar zenith. (GH2047, GH2048)
- Default altitude in - pvlib.location.Locationnow comes from- lookup_altitude()(GH1516, GH1850)
Documentation#
- Configure mathjax to left-align and indent equations in docstrings. (GH2056) 
Contributors#
- Cliff Hansen (@cwhanse) 
- Kurt Rhee (@kurt-rhee) 
- Mark Mikofski (@mikofski) 
- Siddharth Kaul (@k10blogger) 
- Ioannis Sifnaios (@IoannisSifnaios) 
- Mark Campanelli (@markcampanelli) 
- Rajiv Daxini (@RDaxini) 
- Nicolas Martinez (@nicomt) 
- John Obrecht (@jmobrecht) 
- Echedey Luis (@echedey-ls) 
- Adam R. Jensen (@AdamRJensen) 
- Anton Driesse (@adriesse) 
- Will Holmgren (@wholmgren) 
- Will Hobbs (@williamhobbs) 
- Kevin Anderson (@kandersolar) 
v0.10.5 (May 6, 2024)#
Bug fixes#
- Improved reliability of - pvlib.singlediode.bishop88_mpp(),- pvlib.singlediode.bishop88_i_from_v()and- pvlib.singlediode.bishop88_v_from_i()by improving the initial guess for the newton and brentq algorithms. (GH2013, GH2032)
- Corrected equation for Ixx0 in - pvlib.pvsystem.sapm(). (GH2016, GH2019)
- Fixed - pvlib.pvsystem.retrieve_sam()silently ignoring the- pathparameter when- namewas provided. Now an exception is raised requesting to only provide one of the two parameters. (GH2018, GH2020)
Documentation#
Requirements#
Contributors#
- Cliff Hansen (@cwhanse) 
- Mark Mikofski (@mikofski) 
- Echedey Luis (@echedey-ls) 
- Adam R. Jensen (@adamrjensen) 
- Anton Driesse (@adriesse) 
- Scott Meredith (@smmeredith) 
- Alexander Morgan (@alexandermorgan) 
- Kevin Anderson (@kandersolar) 
v0.10.4 (March 19, 2024)#
Enhancements#
- Added the Huld PV model used by PVGIS (GH1940) 
- Add - get_solargis()for retrieving Solargis irradiance data. (GH1969)
- Added function - pvlib.shading.projected_solar_zenith_angle(), a common calculation in shading and tracking. (GH1734, GH1904)
- Added - get_solrad()for fetching irradiance data from the SOLRAD ground station network. (GH1967)
- Added metadata parsing to - read_solrad()to follow the standard iotools convention of returning a tuple of (data, meta). Previously the function only returned a dataframe. (GH1968)
Bug fixes#
- Fixed an error in solar position calculations when using - pandas.DatetimeIndexwith- unitother than- 'ns'(GH1932). The following functions were affected:- ModelChainand- get_solarposition()with the- nrel_numpyand- nrel_numbamethods
 
- ModelChainnow raises a more useful error when- temperature_model_parametersare specified on the passed- systeminstead of on its- arrays. (GH1759).
- pvlib.irradiance.ghi_from_poa_driesse_2023()now correctly makes use of the- xtolargument. Previously, it was ignored. (GH1970, GH1971)
- Fixed incorrect unit conversion of precipitable water used for the Solcast iotools functions. (GH1969) 
- infer_temperature_modelnow raises a more useful error when the temperature model cannot be inferred (GH1946)
- The default URL for retrieving irradiance data from the SRML network was updated in - get_srml()(GH1957, GH1922)
Documentation#
Requirements#
Contributors#
- Patrick Sheehan (@patricksheehan) 
- Echedey Luis (@echedey-ls) 
- Kevin Anderson (@kandersolar) 
- Cliff Hansen (@cwhanse) 
- Roma Koulikov (@matsuobasho) 
- Adam R. Jensen (@AdamRJensen) 
- Peter Dudfield (@peterdudfield) 
- Anton Driesse (@adriesse) 
- Mark Mikofski (@mikofski) 
- Will Holmgren (@wholmgren) 
- Jules Chéron (@jules-ch) 
v0.10.3 (December 20, 2023)#
Enhancements#
- Added the continuous Perez-Driesse transposition model. - pvlib.irradiance.perez_driesse()(GH1841, GH1876)
- Added a reverse transposition algorithm using the Perez-Driesse model. - pvlib.irradiance.ghi_from_poa_driesse_2023()(GH1901, GH1907)
- pvlib.bifacial.infinite_sheds.get_irradiance()and- pvlib.bifacial.infinite_sheds.get_irradiance_poa()now include shaded fraction in returned variables. (GH1871)
- Added - get_solcast_tmy(),- get_solcast_historic(),- get_solcast_forecast()and- get_solcast_live()to read data from the Solcast API. (GH1313, GH1875)
- Added - convert()and- fit()that convert between IAM models, and that fit an IAM model to data. (GH1824, GH1827)
- Add - pvlib.iotools.read_solaranywhere()and- pvlib.iotools.get_solaranywhere()for reading and retrieving SolarAnywhere solar irradiance data. (GH1497, GH1310)
Bug fixes#
- Fixed CAMS error message handler in - pvlib.iotools.get_cams(). (GH1799, GH1905)
- Fix mapping of the dew point column to - temp_dewwhen- map_variablesis True in- pvlib.iotools.get_psm3(). (GH1920)
- Fix - pvlib.modelchain.ModelChainto use attribute clearsky_model. (GH1924)
Testing#
Documentation#
- Create Weather data User’s Guide page. (GH1754) 
- Fixed a plotting issue in the IV curve gallery example. (GH1895) 
- Added two examples to demonstrate reverse transposition. (GH1907) 
- Fixed - detect_clearsky()example in Clear sky. (GH1914)
- Clarified purpose of ModelChain.clearsky_model. (GH1924) 
Requirements#
Contributors#
- Arjan Keeman (@akeeman) 
- Miguel Sánchez de León Peque (@Peque) 
- Will Hobbs (@williamhobbs) 
- Anton Driesse (@adriesse) 
- Abigail Jones (@ajonesr) 
- Cliff Hansen (@cwhanse) 
- Gilles Fischer (@GillesFischerV) 
- Adam R. Jensen (@AdamRJensen) 
- Harry Jack (@harry-solcast) 
- Kevin Anderson (@kandersolar) 
- Lorenzo Riches (@lorenzo-solcast) 
- Hugh Cutcher (@hugh-solcast) 
- Echedey Luis (@echedey-ls) 
- Will Holmgren (@wholmgren) 
- Miroslav Šedivý (@eumiro) 
- Mark Mikofski (@mikofski) 
- Phoebe Pearce (@phoebe-p) 
- Eva-Maria Grommes (@EwaGomez) 
v0.10.2 (September 21, 2023)#
Enhancements#
- Added .pan/.ond reader function - pvlib.iotools.read_panond(). (GH1747, GH1749)
- Added support for dates to be specified as strings in the iotools get functions: - get_pvgis_hourly(),- get_cams(),- get_bsrn(), and- read_midc_raw_data_from_nrel(). (GH1800)
- Added support for asymmetric limiting angles in - pvlib.tracking.singleaxis()and- SingleAxisTrackerMount. (GH1777, GH1809, GH1852)
- Added option to infer threshold values for - pvlib.clearsky.detect_clearsky()(GH1808, GH1784)
- Added a continuous version of the Erbs diffuse-fraction/decomposition model. - pvlib.irradiance.erbs_driesse()(GH1755, GH1834)
- Added - interp()option as AOI losses model in- ModelChainand- PVSystem. (GH1742, GH1832)
- PVSystemobjects with a single- Arraycan now be created without wrapping the- Arrayin a list first. (GH1831, GH1854)
Bug fixes#
- get_psm3()no longer incorrectly returns clear-sky DHI instead of clear-sky GHI when requesting- ghi_clear. (GH1819)
- pvlib.singlediode.bishop88()with- method='newton'no longer crashes when passed- pandas.Seriesof length one. (GH1787, GH1822)
- PVSystemnow correctly passes- n_armodule parameter to- pvlib.iam.physical()when this IAM model is specified or inferred. (GH1832)
Testing#
Documentation#
- Added docstring detail for - pvlib.iam.schlick_diffuse(). (GH1811, GH1812)
- Specified that - pvlib.singlediode.bishop88(),- pvlib.singlediode.bishop88_i_from_v(), and- pvlib.singlediode.bishop88_v_from_i()parameters- breakdown_factor,- breakdown_voltage, and- breakdown_expshould be floats. (GH1820, GH1821)
- Fix and update example in - pvlib.pvsystem.retrieve_sam(). (GH1741, GH1833)
- Fix error in - pvlib.iotools.get_pvgis_hourly()documentation of- surface_azimuth. (GH1724, GH1838)
- Update definition of - snow_eventsparameter for- pvlib.snow.loss_townsend(). (GH1839, GH1840)
- Added gallery example demonstrating how horizon profile data from - pvlib.iotools.get_pvgis_horizon(), can be used to apply horizon shading to time series dni and global poa data. (GH1849)
Contributors#
- Connor Krening (@ckrening) 
- Adam R. Jensen (@AdamRJensen) 
- Michal Arieli (@MichalArieli) 
- Abigail Jones (@ajonesr) 
- Taos Transue (@reepoi) 
- Echedey Luis (@echedey-ls) 
- Todd Karin (@toddkarin) 
- NativeSci (@nativesci) 
- Anton Driesse (@adriesse) 
- Lukas Grossar (@tongpu) 
- Areeba Turabi (@aturabi) 
- Saurabh Aneja (@spaneja) 
- Miroslav Šedivý (@eumiro) 
- kjsauer (@kjsauer) 
- Jules Chéron (@jules-ch) 
- Cliff Hansen (@cwhanse) 
- Will Holmgren (@wholmgren) 
- Mark Mikofski (@mikofski) 
- Kevin Anderson (@kandersolar) 
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.
(GH1796, GH1797, GH1657)
v0.10.0 (June 30, 2023)#
Breaking changes#
- After being deprecated for over a year, the - pvlib.forecastmodule is now removed entirely. (GH1766)
- The following, originally deprecated in v0.9.0 (September 1, 2021), is now removed: (GH1770) - The - pvlib.tracking.SingleAxisTrackerclass
- The various model-specific - PVSysteminverter and cell temperature methods
- Attribute “pass-through” from - ModelChainto- ModelChainResult
- The - eta_mparameter in- pvlib.temperature.pvsyst_cell()
 
- Reorder arguments of - pvlib.pvsystem.PVSystem.i_from_v(),- pvlib.pvsystem.i_from_v(),- pvlib.pvsystem.v_from_i(),- pvlib.singlediode._lambertw_i_from_v(), and- pvlib.singlediode._lambertw_v_from_i()to match- pvlib.pvsystem.singlediode(). (GH1718, GH1719)
- Map wind direction to - 'wind_direction'instead of- 'wind_dir'in- pvlib.iotools.read_srml()and- pvlib.iotools.read_srml_month_from_solardat(GH1773)
- get_pvgis_tmy()and- read_pvgis_tmy()now rename columns to standard pvlib names by default (- map_variables=True) (GH1772)
- In - get_pvgis_tmy(), the- map_variableskeyword parameter now comes before the- urlkeyword parameter. (GH1795)
- Modified the - surface_azimuthparameter in- pvlib.iotools.get_pvgis_hourly()to conform to the pvlib azimuth convention (counterclockwise from north). Previously 0 degrees represented south. (GH1724, GH1739)
- For consistency with the rest of pvlib, the - pwparameters are renamed to- precipitable_waterin- pvlib.spectrum.spectral_factor_firstsolar(). (GH1768)
- For consistency with the rest of pvlib, the - tiltparameter is renamed to- surface_tiltin- pvlib.soiling.hsu(). (GH1717, GH1738)
- Several undocumented functions in - pvlib.iotools.midc,- pvlib.iotools.srml, and- pvlib.iotools.surfradare now private. (GH1756, GH1769)
Deprecations#
- The - ivcurve_pntsparameter of- pvlib.pvsystem.singlediode()is deprecated. Use- pvlib.pvsystem.v_from_i()and- pvlib.pvsystem.i_from_v()instead. (GH1626, GH1743)
- Functions for calculating spectral modifiers have been moved to - pvlib.spectrum:- pvlib.atmosphere.first_solar_spectral_correction()is deprecated and replaced by- spectral_factor_firstsolar(), and- pvlib.pvsystem.sapm_spectral_loss()is deprecated and replaced by- spectral_factor_sapm(). (GH1628)
- Removed the - get_ecmwf_maccand- read_ecmwf_macciotools functions as the MACC dataset has been removed by ECMWF (data period 2003-2012). Instead, ECMWF recommends to use CAMS global reanalysis (EAC4) from the Atmosphere Data Store (ADS). See also- pvlib.iotools.get_cams(). (GH1691, GH1654)
- The - recolumnparameter in- pvlib.iotools.read_tmy3(), which maps TMY3 column names to nonstandard alternatives, is now deprecated. We encourage using- map_variables(which produces standard pvlib names) instead. (GH1517, GH1623)
- pvlib.iotools.read_srml_month_from_solardatis deprecated and replaced by- pvlib.iotools.get_srml(). (GH1779)
Enhancements#
- Added two new irradiance decomposition models: - pvlib.irradiance.orgill_hollands()(GH1730) and- pvlib.irradiance.louche()(GH1705).
- The return values of - pvlib.pvsystem.calcparams_desoto(),- pvlib.pvsystem.calcparams_cec(), and- pvlib.pvsystem.calcparams_pvsyst()are all numeric types and have the same Python type as the- effective_irradianceand- temp_cellparameters. (GH1626, GH1700)
- Added - map_variablesparameter to- pvlib.iotools.read_tmy3()(GH1517, GH1623),- pvlib.iotools.read_srml(), and- pvlib.iotools.read_srml_month_from_solardat(GH1773).
- Added - pvlib.iotools.get_srml()that is similar to- pvlib.iotools.read_srml_month_from_solardatbut is able to fetch multiple months of data using the- startand- endparameters. (GH1779)
- Allow passing keyword arguments to - scipy.optimize.brentq()and- scipy.optimize.newton()solvers in- bishop88_mpp(),- bishop88_i_from_v()and- bishop88_v_from_i(). Among others, tolerance and number of iterations can be set. (GH1249, GH1764)
- Improved - ModelChainResult.__repr__(GH1236)
- Exposes several functions useful for bifacial and shading calculations (GH1666): 
- Added a function - pvlib.spectrum.spectral_factor_caballero()to estimate spectral mismatch modifiers from atmospheric conditions. (GH1296)
- Add optional - encodingparameter to- pvlib.iotools.read_tmy3(). (GH1732, GH1737)
- Added function to retrieve horizon data from PVGIS - pvlib.iotools.get_pvgis_horizon(). (GH1290, GH1395)
- Update the URL used in the - pvlib.iotools.get_cams()function. The new URL supports load-balancing and redirects to the fastest server. (GH1688, GH1740)
- pvlib.iotools.get_psm3()now has a- urlparameter to give the user the option of controlling what NSRDB endpoint is used. (GH1736)
- pvlib.iotools.get_psm3()now uses the new NSRDB 3.2.2 endpoint for hourly and half-hourly single-year datasets. (GH1591, GH1736)
- The default solar position algorithm (NREL SPA) is now 50-100% faster. (GH1748) 
- Added functions to retrieve daily precipitation, temperature, and snowfall data from the NOAA’s ACIS service: - get_acis_prism(),- get_acis_nrcc(),- get_acis_mpe(),- get_acis_station_data(), and- get_acis_available_stations(). (GH1293, GH1767)
Bug fixes#
- Prevent small negative values of - v_ocin- pvlib.singlediode._lambertw()which result from accumulated roundoff error. (GH1780, GH1673, GH1782)
- Corrects an error in view factor calculations which are part of - pvlib.bifacial.infinite_sheds.get_irradiance(). The error affects rear surface irradiance by a few W/m2. As part of the correction, average view factors are now computed by exact formulas rather than by numerical integration. (GH1665, GH1666)
- datacan no longer be left unspecified in- pvlib.modelchain.ModelChain.run_model_from_effective_irradiance(). (GH1713, GH1720)
- d2mutauand- NsVbiare now correctly passed through- pvlib.pvsystem.max_power_point()instead of being hardcoded. (GH1733)
- pvlib.iam.physical()no longer returns NaN when- n=1and- aoi>90. This bug was introduced in v0.9.5. (GH1706, GH1707)
Testing#
Documentation#
- Updated the description of the interval parameter in - pvlib.iotools.get_psm3(). (GH1702, GH1712)
Requirements#
- With the removal of - pvlib.forecast, the following packages are no longer listed as (optional) dependencies:- netCDF4,- cftime, and- siphon. (GH1766)
Contributors#
- Taos Transue (@reepoi) 
- Nicholas Riedel-Lyngskær (@nicorie) 
- Adam R. Jensen (@AdamRJensen) 
- Echedey Luis (@echedey-ls) 
- Cliff Hansen (@cwhanse) 
- Cédric Leroy (@cedricleroy) 
- Jean-Baptiste Pasquier (@pasquierjb) 
- Mark Mikofski (@mikofski) 
- Lakshya Garg (@Lakshyadevelops) 
- Ben Pierce (@bgpierc) 
- Joseph Palakapilly (@JPalakapillyKWH) 
- Anton Driesse (@adriesse) 
- Will Holmgren (@wholmgren) 
- Karel De Brabandere (@kdebrab) 
- Josh Stein (@jsstein) 
- Kevin Anderson (@kandersolar) 
- Siddharth Kaul (@k10blogger) 
- Kshitiz Gupta (@kshitiz305) 
- Stefan de Lange (@langestefan) 
- Jose Antonio Caballero (@Jacc0027) 
- Andy Lam (@andylam598) 
- Devon Watt (@d-watt) 
- Todd Karin (@toddkarin) 
- Corey Pullium (@cpullium) 
v0.9.5 (March 18, 2023)#
Starting with this version, new releases are no longer distributed through
the pvlib conda channel.  We recommend
conda users install from the conda-forge channel instead (see
Installation).
Enhancements#
- Added the optional - string_factorparameter to- pvlib.snow.loss_townsend(). (GH1636, GH1653)
- Added optional - n_arparameter to- pvlib.iam.physical()to support an anti-reflective coating. (GH1501, GH1616)
- boland()is another diffuse fraction, DF, estimation method similar to Erbs but uses a single logistic exponential correlation between DF and clearness index, kt, that is continuously differentiable and bounded between zero and one. (GH1179)
- Add - model='gueymard2003', the airmass model used for REST and REST2, to- get_relative_airmass(). (GH1655)
- Added an optional - modelparameter to- pvlib.bifacial.infinite_sheds.get_irradiance()and- pvlib.bifacial.infinite_sheds.get_irradiance_poa()to enable use of the hay-davies sky diffuse irradiance model instead of the default isotropic model. (GH1668)
- Added an optional - vectorizeparameter to- pvlib.bifacial.infinite_sheds.get_irradiance()and- pvlib.bifacial.infinite_sheds.get_irradiance_poa()which, when set to- True, enables faster calculation but with increased memory usage. (GH1680, GH1682)
- Update the ADR inverter model parameter database by appending the ADR equivalents of all inverters in the current (2019) Sandia inverter model parameter database. (GH1695) 
- Use Horner’s Method to evaluate polynomials in - disc(), may decrease runtime by 20%. (GH1180, GH1183)
Bug fixes#
- Added a limit to - pvlib.snow.loss_townsend()to guard against incorrect loss results for systems that are near the ground. (GH1636, GH1653)
- Fixed incorrect mapping of requested parameters names when using - pvlib.iotools.get_psm3(). Also fixed the random reordering of the dataframe columns. (GH1629, GH1647, GH1648)
- When using - utc_time_rangewith- pvlib.iotools.read_ecmwf_macc(), the time index subset is now selected with- nearestinstead of- beforeand- afterfor consistency with- cftime>=1.6.0. (GH1609, GH1656)
- pvsyst_temperature_coeff()no longer raises a scipy deprecation warning (and is slightly more accurate). (GH1644, GH1674)
Testing#
- Added Python 3.11 to test suite. (GH1582) 
- Updated PSM3 test data files to match the new version 3.2.2 data returned by the PSM3 API. (GH1591, GH1652) 
- Testing - pvlib.pvsystem.singlediode(),- pvlib.pvsystem.v_from_i(), and- pvlib.pvsystem.i_from_v()against precisely generated IV curve data. (GH411, GH1573)
Documentation#
Benchmarking#
- Added benchmarks for - pvlib.bifacial.infinite_sheds. (GH1627)
Requirements#
- Removed unnecessary - nosetest requirement. (GH1637)
Contributors#
- Kevin Anderson (@kanderso-nrel) 
- Will Holmgren (@wholmgren) 
- Cliff Hansen (@cwhanse) 
- Adam R. Jensen (@adamrjensen) 
- Pratham Chauhan (@ooprathamm) 
- Karel De Brabandere (@kdebrab) 
- Mark Mikofski (@mikofski) 
- Anton Driesse (@adriesse) 
- Michael Deceglie (@mdeceglie) 
- Saurabh Aneja (@spaneja) 
- John Moseley (@johnMoseleyArray) 
- Areeba Turabi (@aturabi) 
- Mark Campanelli (@markcampanelli) 
- Taos Transue (@reepoi) 
- Tim Townsend 
- Tom Arjannikov (@Arjannikov) 
v0.9.4 (December 20, 2022)#
Enhancements#
- Multiple code style issues fixed that were reported by LGTM analysis. (GH1275, GH1559) 
- Added a direct IAM model - pvlib.iam.schlick()which can be used with- marion_diffuse(), and a diffuse IAM model- pvlib.iam.schlick_diffuse(). (GH1562, GH1564)
- Added a function to calculate one of GHI, DHI, and DNI from values of the other two. - complete_irradiance(). (GH1565, GH1567)
- Added optional - return_componentsparameter to- pvlib.irradiance.haydavies()to return individual diffuse irradiance components. (GH1553, GH1568)
- Added a module temperature model that accounts for radiative losses to the sky in a simplified way, using the Faiman model as an example. - faiman_rad()(GH1594, GH1595)
- Added a function - pvlib.ivtools.utils.astm_e1036()to perform ASTM E1036 extraction of IV curve parameters. (GH1585)
- Added the ADR PV module efficiency model and a function to find its parameters from field or lab measurements ( - pvefficiency_adr()and- fit_pvefficiency_adr()). (GH1544, GH1602)
Bug fixes#
- Fixed bug in - pvlib.shading.masking_angle()and- pvlib.bifacial.infinite_sheds._ground_angle()where zero- gcrinput caused a ZeroDivisionError. (GH1576, GH1589)
- Fixed bug in - pvlib.tools._golden_sect_DataFrame()so that a result is returned when the search interval is length 0 (which occurs in- pvlib.pvsystem.singlediode()if v_oc is 0.) (GH1603, GH1606)
Testing#
- Corrected a flawed test for - get_ground_diffuse(). (GH1569, GH1575)
Documentation#
- Added an FAQ page to the docs: Frequently Asked Questions. (GH1546, GH1549) 
- Fixed equation in - pvlib.iam.martin_ruiz()docstring. (GH1561, GH1599)
- Fixed an error in - pvlib.singlediode.bishop88_mpp()docstring. (GH1613, GH1615)
- Added three gallery examples demonstrating how the new ADR PV model can be used for time series simulation. (GH1544, GH1602) 
Benchmarking#
Requirements#
Contributors#
- Kirsten Perry (@kperrynrel) 
- Christian Orner (@chrisorner) 
- Saurabh Aneja (@spaneja) 
- Marcus Boumans (@bowie2211) 
- Michael Deceglie (@mdeceglie) 
- Yu Xie (@xieyupku) 
- Anton Driesse (@adriesse) 
- Cliff Hansen (@cwhanse) 
- Kevin Anderson (@kanderso-nrel) 
- Karel De Brabandere (@kdebrab) 
- Naman Priyadarshi (@Naman-Priyadarshi) 
- Adam R. Jensen (@AdamRJensen) 
- Echedey Luis (@echedey-ls) 
- Mark Mikofski (@mikofski) 
- Mark Campanelli (@markcampanelli) 
- Will Holmgren (@wholmgren) 
- Marios Theristis (@mtheristis) 
v0.9.3 (September 15, 2022)#
Enhancements#
- New class and function translate module temperature model parameters - GenericLinearModel()- generic_linear()(GH1442, GH1463)
- Low resolution altitude lookup map - lookup_altitude()(GH1516, GH1518)
- New module to calculate spectral mismatch from field spectral measurements - get_example_spectral_response()- pvlib.spectrum.get_am15g()- calc_spectral_mismatch_field()(GH1523, GH1524)
- Added Townsend-Powers monthly snow loss model: - pvlib.snow.loss_townsend()(GH1246, GH1251, GH1468)
Documentation#
Contributors#
- João Guilherme (@joaoguilhermeS) 
- Nicolas Martinez (@nicomt) 
- Anton Driesse (@adriesse) 
- Cliff Hansen (@cwhanse) 
- Kevin Anderson (@kanderso-nrel) 
- Mark Mikofski (@mikofski) 
- Will Holmgren (@wholmgren) 
- Mark Campanelli (@markcampanelli) 
- Adam R. Jensen (@AdamRJensen) 
- Abhishek Parikh (@abhisheksparikh) 
- Taos Transue (@reepoi) 
v0.9.2 (August 19, 2022)#
Enhancements#
- albedo can now be provided as a column in the weather DataFrame input to - pvlib.modelchain.ModelChain.run_model(). (GH1387, GH1478)
- albedo is now available as an input to - pvlib.pvsystem.PVSystem.get_irradiance()and- pvlib.pvsystem.Array.get_irradiance(). (GH1478)
- pvlib.iotools.read_surfrad()now also accepts remote files with https links in addition to files on the SURFRAD FTP server. (GH1459)
- Add - pvlib.tracking.calc_surface_orientation()for calculating single-axis tracker- surface_tiltand- surface_azimuthfrom rotation angles. (GH1471, GH1480)
- Improve error message about uneven time intervals for - detect_clearsky()and- prilliman(). (GH1476, GH1490)
- Add support for PEP517 & PEP518 with setuptools build backend. (GH1495) 
Bug fixes#
- pvlib.irradiance.get_total_irradiance()and- pvlib.solarposition.spa_python()now raise an error instead of silently ignoring unknown parameters. (GH1437)
- Fix a bug in - pvlib.solarposition.sun_rise_set_transit_ephem()where passing localized timezones with large UTC offsets could return rise/set/transit times for the wrong day in recent versions of- ephem. (GH1449, GH1448)
- pvlib.iotools.read_tmy3()is now able to accept midnight timestamps as either 24:00 (which is the standard) as well as 00:00. Previously 00:00 timestamps would incorrectly be moved one day forward. (GH1494)
- pvlib.iotools.get_psm3()now raises a deprecation warning if the- leap_dayparameter is not specified in a single-year request. Starting in pvlib 0.11.0- leap_daywill default to True instead of False. (GH1481, GH1511)
Testing#
Documentation#
- Added a reference to - pvlib.inverter.sandia_multi(). (GH1479)
- Add gallery example of simulating rearside irradiance for a fixed-tilt array with pvfactors. (GH1470) 
Benchmarking#
Requirements#
Contributors#
- Adam R. Jensen (@AdamRJensen) 
- Naman Priyadarshi (@Naman-Priyadarshi) 
- Chencheng Luo (@roger-lcc) 
- Prajwal Borkar (@PrajwalBorkar) 
- Cliff Hansen (@cwhanse) 
- Kevin Anderson (@kanderso-nrel) 
- Cliff Hansen (@cwhanse) 
- Jules Chéron (@jules-ch) 
- Kurt Rhee (@kurt-rhee) 
- Will Hobbs (@williamhobbs) 
- Stephen Schneider (@sjschneider) 
- Mark Campanelli (@campanelli-sunpower) 
- Anton Driesse (@adriesse) 
- Kristen Wagner (@kwagnercpr) 
- Mark Mikofski (@mikofski) 
v0.9.1 (March 29, 2022)#
Deprecations#
- Moved - pvlib.bifacial.pvfactors_timeseries()to- pvlib.bifacial.pvfactors.pvfactors_timeseries().- pvlib.bifacialis now a sub-package. (GH717)
- pvlib.modelchain.basic_chainis deprecated. See- pvlib.modelchain.ModelChain.with_pvwatts()and- pvlib.modelchain.ModelChain.with_sapm()for alternative simplified- ModelChaininterfaces, although note that the inputs do not directly translate. (GH1401)
- All functionality in the - pvlib.forecastmodule is deprecated. For details, see- forecasts. (GH1057, GH1426)
Enhancements#
- Added - map_variablesoption to- pvlib.iotools.get_psm3()and- pvlib.iotools.read_psm3()(GH1374)
- Added - pvlib.bifacial.infinite_sheds, containing a model for irradiance on front and back surfaces of bifacial arrays. (GH717)
- Added - map_variablesoption to- read_crn()(GH1368)
- Added - pvlib.temperature.prilliman()for modeling cell temperature at short time steps (GH1081, GH1391)
Bug fixes#
- Address round-off effects in - pvlib.ivtools.utils._schumaker_qspline()(GH1311, GH1315)
- Fixed a bug in - pvlib.spectrum.spectrl2()where negative spectral irradiance values were returned when the sun is behind the plane of array (GH1348, GH1349)
- Fixed bug in - pvlib.iotools.get_pvgis_hourly()where the- optimal_surface_tiltargument was not being passed to the- optimalinclinationrequest parameter (GH1356)
- Fixed bug in - pvlib.bifacial.pvfactors.pvfactors_timeseries()where scalar- surface_tiltand- surface_azimuthinputs caused an error (GH1127, GH1332, GH1361)
- Added -99999 to list of values to map to nan in - read_crn()(GH1372, GH1368)
- Changed the metadata entry for the wind speed unit to “Wind Speed Units” in the PSM3 iotools function (GH1375) 
- Improved convergence when determining the maximum power point using for - pvlib.pvsystem.singlediode()with- method='lambertw'. Tolerance is determined for the voltage at the maximum power point, and is improved from 0.01 V to 1e-8 V. (GH1087, GH1089)
Testing#
- Updated test values to match the new values returned by the PVGIS TMY API. The difference is very minor (0.01 W/m2, affecting only a few beam irradiance values) (GH1396) 
Documentation#
- Fix documentation return error in - pvlib.forecast.ForecastModel.cloud_cover_to_transmittance_linear()(GH1367, GH1370)
- Add gallery example illustrating bifacial simulation using the - pvlib.bifacial.pvfactors.pvfactors_timeseries()function and either- pvlib.modelchain.ModelChainor procedural functions. (GH1394)
- Fix some typos (GH1414) 
- Clarify the descriptions of - delta_tin several solar position functions (GH1429)
- Changed $C$ to $\degree C$ in the plot_singlediode.py file (GH1434) 
Requirements#
Contributors#
- Cliff Hansen (@cwhanse) 
- Christian Weickhmann (@cweickhmann) 
- Kevin Anderson (@kanderso-nrel) 
- Adam R. Jensen (@AdamRJensen) 
- Johann Loux (@JoLo90) 
- Saurabh Aneja (@spaneja) 
- Jack Kelly (@JackKelly) 
- Somasree Majumder(@soma2000-lang) 
- Naman Priyadarshi (@Naman-Priyadarshi) 
- Will Holmgren (@wholmgren) 
- Mark Mikofksi (@mikofski) 
- Will Hobbs (@williamhobbs) 
- Uday Guntupalli (@uguntupalli) 
- Shashwata Roy (@RoyCoding8) 
v0.9.0 (September 1, 2021)#
Breaking changes#
- Moved functions related to inverters from - pvsystem.pyto- inverter.py. Functions are renamed to follow a more consistent pattern, as follows (GH886, GH1136):- pvlib.pvsystem.snlinverteris now- pvlib.inverter.sandia()
- pvlib.pvsystem.pvwatts_acis now- pvlib.inverter.pvwatts()
- pvlib.pvsystem.adrinverteris now- pvlib.inverter.adr()
 
- Argument - ac_modelfor- pvlib.modelchain.ModelChainnow accepts- 'sandia',- 'pvwatts'and- 'adr'for the inverter models. (GH886, GH1136)
- Calling - pvlib.pvsystem.PVSystem.sapm_celltemp()without setting- PVSystem.temperature_model_parameters, or a valid combination of- PVsystem.module_typeand- PVsystem.racking_model, will now raise an exception. (GH1030, GH1033, GH1136)
- Deprecated arbitrary keyword arguments for - pvlib.location.Location,- pvlib.pvsystem.PVSystem,- pvlib.tracking.SingleAxisTracker, and- pvlib.modelchain.ModelChain. Supplying arbitrary keyword to these objects result in TypeErrors in v0.9. (GH1029, GH1053, GH1136)
- pvlib.pvsystem.LocalizedPVSystemand- pvlib.pvsystem.LocalizedSingleAxisTrackerhave been removed. Use- pvlib.location.Location,- pvlib.pvsystem.PVSystem,- pvlib.tracking.SingleAxisTracker, and- pvlib.modelchain.ModelChaininstead. (GH1029, GH1034, GH1053, GH1136)
- irradiance.liujordanand- ForecastModel.cloud_cover_to_irradiance_liujordanhave been removed. (GH1136)
- ModelChain.snlinverterchanged to- ModelChain.sandia_inverter.- ModelChain.adrinverterchanged to- ModelChain.adr_inverter. (GH1150)
- The - orientation_strategyparameter has been removed from the various- pvlib.modelchain.ModelChainconstructors and- surface_tilt,- surface_azimuthare now required parameters for- pvlib.modelchain.basic_chain(GH1028, GH1181)
- Removed the - **kwargsparameters from- sapm()and- calcparams_desoto()and- calcparams_cec()(GH1118, GH1222)
- Switched the order of the outputs from the PSM3 iotools, notably - get_psm3()and- read_psm3()(GH1245, GH1268)
- Changed the naming of the inputs - startdate/- enddateto- start/- endin- get_ecmwf_macc()(GH1245, GH1268)
- Change the naming of the inputs - lat/- lonto- latitude/- longitudein- get_pvgis_tmy()(GH1245, GH1268)
Deprecations#
- The following - ModelChainattributes are deprecated. They have been moved to the- ModelChainResultclass that is accessible via- ModelChain.results:- ModelChain.ac
- ModelChain.airmass
- ModelChain.aoi
- ModelChain.aoi_modifier
- ModelChain.cell_temperature
- ModelChain.dc
- ModelChain.diode_params
- ModelChain.effective_irradiance
- ModelChain.losses
- ModelChain.solar_position
- ModelChain.spectral_modifier
- ModelChain.total_irrad
- ModelChain.tracking
- ModelChain.weather
- ModelChain.times
 
- The following - PVSystemcell temperature methods have been deprecated and consolidated into the new wrapper method- get_cell_temperature()(GH1211):- sapm_celltemp()
- pvsyst_celltemp()
- faiman_celltemp()
- fuentes_celltemp()
- noct_sam_celltemp()
 
- The - eta_mparameter for- pvsyst_cell()is replaced by parameter- module_efficiency. (GH1188, GH1218)
- The following attributes of - pvlib.pvsystem.PVSystemand- pvlib.tracking.SingleAxisTrackerhave been deprecated in favor of the corresponding- pvlib.pvsystem.Arrayattributes:- PVSystem.albedo
- PVSystem.module
- PVSystem.module_parameters
- PVSystem.module_type
- PVSystem.modules_per_string
- PVSystem.racking_model
- PVSystem.strings_per_inverter
- PVSystem.surface_tilt
- PVSystem.surface_azimuth
- PVSystem.temperature_model_parameters
 
- The - pvlib.tracking.SingleAxisTrackerclass is deprecated and replaced by using- pvlib.pvsystem.PVSystemwith the new- pvlib.pvsystem.SingleAxisTrackerMount(GH1176)
Enhancements#
- Added - read_pvgis_hourly()and- get_pvgis_hourly()for reading and retrieving hourly solar radiation data and PV power output from PVGIS. (GH1186, GH849)
- Added - map_variablesoption to- get_pvgis_tmy()and- read_pvgis_tmy()(GH1250, GH1268)
- Add - get_bsrn()and- read_bsrn()for retrieving and reading BSRN solar radiation data files. (GH1254, GH1145, GH1015)
- Add - get_cams(),- parse_cams(), and- read_cams()for retrieving, parsing, and reading CAMS Radiation and McClear time-series files. (GH1175)
- In - ModelChain, attributes which contain output of models are now collected into- ModelChain.results. (GH1076, GH1067)
- Added - Arrayclass to represent an array of modules separately from a- PVSystem. (GH1076, GH1067)
- Added - FixedMountand- SingleAxisTrackerMountclasses to use with the new- Arrayclass (GH1176)
- Added capability for modeling a PV system with multiple arrays in - PVSystem. Updates the- PVSystemAPI to operate on and return tuples where each element of the tuple corresponds to the input or output for a specific- Array. (GH1076, GH1067)
- Support for systems with multiple - Arraysadded to- ModelChain. This includes substantial API enhancements for accepting different weather input for each- Arrayin the system. (GH1076, GH1067)
- Support for - sandia_multi()and- pvwatts_multi()added to- PVSystemand- ModelChain(as- ac_model='sandia'and- ac_model='pvwatts'). (GH1076, GH1067, GH1132, GH1117, GH1150)
- ModelChain‘run_model’ methods now automatically switch to using- 'effective_irradiance'(if available) for cell temperature models, when- 'poa_global'is not provided in input weather or calculated from input weather data.
- pvwatts_dc()now scales the DC power by- pvsystem.PVSystem.modules_per_stringsand- pvsystem.PVSystem.strings_per_inverter. Note that both attributes still default to 1. (GH1138)
- get_ac()is added to calculate AC power from DC power. Use parameter- modelto specify which inverter model to use. (GH1147, GH998, GH1150)
- Added - noct_sam(), a cell temperature model implemented in SAM. (GH1177, GH1195)
- Added - pvsyst_temperature_coeff()to calculate the temperature coefficient of power for the pvsyst module model. (GH1190)
- get_total_irradiance()and- get_sky_diffuse()now fill in- airmassif required and not provided. These functions now raise a- ValueErrorif- dni_extrais required and not provided. (GH949, GH1225)
Bug fixes#
- Corrected an error in - perez()where the horizon irradiance component was prevented from taking negative values. Negative values are intentional according to the original publication. Changes in output are expected to be small and primarily occur at low irradiance conditions. (GH1238, GH1239)
- Pass weather data to solar position calculations in - prepare_inputs_from_poa(). (GH1065, GH1140)
- Reindl model fixed to generate sky_diffuse=0 when GHI=0. (GH1153, GH1154) 
- Fix floating point round-off issue in - aoi_projection()(GH1185, GH1191)
- Take into account - EgRef,- dEgdT,- irrad_refand- temp_refwhen calling- calcparams_cec(). (GH1215, GH1216)
- Corrected methodology error in - wvm(). Tracks with fix in PVLib for MATLAB. (GH1206, GH1213)
- Corrected an error affecting - detect_clearsky()when data time step is not one minute. Error was introduced in v0.8.1. (GH1241, GH1242)
- Corrected error affecting - _compute_wavelet()when passing a pandas time series with a sampling rate faster than 1 second. (GH1257, GH1258)
- Changed deprecated use of - .astype()to- .view()in- solarposition. (GH1256, GH1261, GH1262)
- Fix - singleaxis()AOI wrong when sun behind module. (GH1273, GH1221)
- Fix - get_data()failure to correct for non-UTC timezones. (GH1237, GH1285)
- Fixed - HRRRby changing model name to reflect change on the server. (GH1291, GH1292)
Testing#
- Added - __init__.pyto- pvlib/testsand subdirectories. This follows pytest recommendations for package layout and imports from- conftest.py. Solves issue with test discovery in vscode. (GH1204)
Documentation#
- Update intro tutorial to highlight the use of historical meteorological data and to make the procedural and OO results match exactly. (GH1116, GH1144) 
- Add a gallery example showing how to appropriately use interval-averaged weather data for modeling. (GH1152) 
- Update documentation links in - pvlib.iotools.get_psm3()(GH1169)
- Use - Mountclasses in- introtutorialand- pvsystemdocs pages (GH1267)
- Clarified how statistics are calculated for - pvlib.clearsky.detect_clearsky()(GH1070, GH1243)
- Add gallery examples using the new - Mountclasses (GH1266)
- Add “powered by pvlib” logos (GH1277) 
Requirements#
Contributors#
- Will Holmgren (@wholmgren) 
- Cliff Hansen (@cwhanse) 
- Will Vining (@wfvining) 
- Anton Driesse (@adriesse) 
- Mark Mikofski (@mikofski) 
- Nate Croft (@ncroft-b4) 
- Kevin Anderson (@kanderso-nrel) 
- Adam R. Jensen (@AdamRJensen) 
- Joshua Stein (@jsstein) 
- Tony Lorenzo (@alorenzo175) 
- Damjan Postolovski (@dpostolovski) 
- Miguel Sánchez de León Peque (@Peque) 
- Joe Ranalli (@jranalli) 
- Chas Schweizer (@cpr-chas) 
- Yoann Louvet (@YoannUniKS) 
- Brandon Carpenter (@hashstat) 
v0.8.1 (January 4, 2021)#
Deprecations#
- pvlib.irradiance.liujordanis deprecated.- pvlib.irradiance.campbell_norman()replaces- pvlib.irradiance.liujordan.
Enhancements#
- Add a numpy-based implementation of the SPECTRL2 spectral irradiance model - pvlib.spectrum.spectrl2()(GH1062)
- Create - fuentes_celltemp()and add- temperature_model='fuentes'option to- ModelChain. (GH1042) (GH1073)
- Added - pvlib.temperature.ross()for cell temperature modeling using only NOCT. (GH1045)
- pvlib.clearsky.detect_clearsky()now uses centered rolling windows instead of left-aligned rolling windows. (GH1074)
- The ‘times’ and ‘window_length’ parameters are now optional kwargs in - pvlib.clearsky.detect_clearsky(). If omitted, ‘times’ is set equal to the index of parameter ‘measured’, and ‘window_length’ is set to 10 minutes. (GH1074)
- Added - pvlib.inverter.sandia_multi()and- pvlib.inverter.pvwatts_multi()for modeling inverters with multiple MPPTs (GH457, GH1085, GH1106)
- Added optional - attributesparameter to- pvlib.iotools.get_psm3()and added the option of fetching 5- and 15-minute PSM3 data. (GH1086)
- Added - pvlib.irradiance.campbell_norman()for estimating DNI, DHI and GHI from extraterrestrial irradiance. This function replaces- pvlib.irradiance.liujordan; users of- pvlib.irradiance.liujordanshould note that- pvlib.irradiance.campbell_norman()expects different parameters. (GH1104)
- pvlib.forecast.ForecastModel.cloud_cover_to_irradiance_campbell_norman()replaces- pvlib.forecast.ForecastModel.cloud_cover_to_irradiance_liujordan. (GH1104)
Bug fixes#
- Fix issue with - pvlib.temperature.fuentes()with timezone-aware inputs. (GH1071, GH1072)
- Raise - ValueErrorfrom- pvlib.modelchain.ModelChain.prepare_inputs()when input does not have a ‘dhi’ column. (GH1092, GH1093)
- Add missing modules (including - shadingand- scaling) to- __init__.py. (GH1103)
Testing#
Documentation#
Contributors#
- Kevin Anderson (@kanderso-nrel) 
- Siyan (Veronica) Guo (@veronicaguo) 
- Will Holmgren (@wholmgren) 
- Cliff Hansen (@cwhanse) 
- Will Vining (@wfvining) 
- Michael Jurasovic (@jurasofish) 
- Aziz Ben Othman (@AzizCode92) 
- Anton Driesse (@adriesse) 
- Mark Mikofski (@mikofski) 
- Junaid Fatehi (@jhfatehi) 
v0.8.0 (September 8, 2020)#
Breaking changes#
- The - ivtools.pymodule has been reorganized into a subpackage and functions in- ivtools.pyhave been renamed (GH708):- Functions for fitting diode models are now in - pvlib.ivtools.sdm
- pvlib.ivtools.fit_sdm_cec_sam()is now- pvlib.ivtools.sdm.fit_cec_sam()
- pvlib.ivtools.fit_sdm_desoto()is now- pvlib.ivtools.sdm.fit_desoto()
- Functions for fitting the single diode equation are now in - pvlib.ivtools.sde
- pvlib.ivtools.fit_sde_sandia()is now- pvlib.ivtools.sde.fit_sandia_simple()
 
- Removed - run_parallel_calculationsand- n_workers_for_parallel_calcsfrom- pvlib.bifacial.pvfactors_timeseries()inputs (GH902) (GH934)
- 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,- pvlib.iotools.get_psm3()is now recommended to retrieve newer PSM3 data over the older TMY3 data. (GH996) (GH1004)
- The tkinter-based file selection dialog has been removed from - pvlib.iotools.read_tmy2()and- pvlib.iotools.read_tmy3(); the filepath is now a required parameter. (GH1004)
- Removed - systemdeffunction from- pvsystem.py. This function was not used in pvlib and its output was not directly compatible with any pvlib function. See- pvlib.iotools.read_tmy2(),- pvlib.iotools.read_tmy3(),- pvlib.location.Location.from_tmy(), and- pvlib.pvsystem.LocalizedPVSystemfor alternatives. (GH965) (GH1008)
- The following functions, methods, and arguments were deprecated in a previous release and have now been removed (GH966, GH1033): - pvsystem.PVSystem.ashraeiam. Use- pvlib.pvsystem.PVSystem.get_iam().
- pvsystem.PVSystem.physicaliam. Use- pvlib.pvsystem.PVSystem.get_iam().
- pvsystem.PVSystem.sapm_aoi_loss. Use- pvlib.pvsystem.PVSystem.get_iam().
- pvsystem.ashraeiam. Use- pvlib.iam.ashrae().
- pvsystem.physicaliam. Use- pvlib.iam.physical().
- pvsystem.sapm_aoi_loss. Use- pvlib.iam.sapm().
- pvsystem.sapm_celltemp. Use- pvlib.temperature.sapm_cell().
- pvsystem.pvsyst_celltemp. Use- pvlib.temperature.pvsyst_cell().
- timeskeyword argument of- pvlib.modelchain.ModelChain.run_model(),- pvlib.modelchain.ModelChain.complete_irradiance(), and- pvlib.modelchain.ModelChain.prepare_inputs(). The index of the input DataFrame is used instead.
- temp_modelkeyword argument of- pvlib.modelchain.ModelChain(). Use- temperature_modelinstead.
 
Deprecations#
- Moved functions related to inverters from - pvsystem.pyto- inverter.py. Functions are renamed to follow a more consistent pattern, as follows (GH886):- pvlib.pvsystem.snlinverteris now- pvlib.inverter.sandia()
- pvlib.pvsystem.pvwatts_acis now- pvlib.inverter.pvwatts()
- pvlib.pvsystem.adrinverteris now- pvlib.inverter.adr()
 
- Argument - ac_modelfor- pvlib.modelchain.ModelChainnow accepts- 'sandia',- 'pvwatts'and- 'adr'for the inverter models. (GH886)
- pvlib.pvsystem.PVSystem- module_typeand- racking_modelnow default to- None. This continues a deprecation of assuming SAPM values for cell temperature modeling. In this v0.8 release series, calling- pvlib.pvsystem.PVSystem.sapm_celltemp()without setting- PVSystem.temperature_model_parameters, or a valid combination of- PVsystem.module_typeand- PVsystem.racking_model, will cause- PVSystem.temperature_model_parametersto 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_parametersor a valid combination of- module_typeand- racking_model. (GH1030, GH1033)
- Deprecated arbitrary keyword arguments for - pvlib.location.Location,- pvlib.pvsystem.PVSystem,- pvlib.tracking.SingleAxisTracker, and- pvlib.modelchain.ModelChain. Supplying arbitrary keyword to these objects will result in TypeErrors in v0.9. (GH1029, GH1053)
- pvlib.pvsystem.LocalizedPVSystemand- pvlib.pvsystem.LocalizedSingleAxisTrackerare deprecated and will be removed in 0.9. Use- pvlib.location.Location,- pvlib.pvsystem.PVSystem,- pvlib.tracking.SingleAxisTracker, and- pvlib.modelchain.ModelChaininstead. (GH1029, GH1034, GH1053)
Enhancements#
- Update - pvfactors_timeseries()to run with- pvfactorsv1.4.1 (GH902)(GH934)
- Add - pvlib.iam.marion_diffuse()and- pvlib.iam.marion_integrate()to calculate IAM values for diffuse irradiance. (GH984)
- Add - pvlib.shading.sky_diffuse_passias(),- pvlib.shading.masking_angle_passias(), and- pvlib.shading.masking_angle()to model diffuse shading loss. (GH1017)
- Add - pvlib.inverter.fit_sandia()that fits the Sandia inverter model to a set of inverter efficiency curves. (GH1011)
- Add - pvlib.ivtools.sdm.fit_pvsyst_sandia()and- pvlib.ivtools.sdm.fit_desoto_sandia()for fitting the Pvsyst and De Soto models to IV curve data (GH227)(GH708)
- Add factory methods - with_pvwatts()- with_sapm()to create- ModelChainobjects configured for the respective modeling paradigms. The configurations are defined in- modelchain.PVWATTS_CONFIG, and- modelchain.SAPM_CONFIG. (GH1013, GH1022)
- Added - racking_model,- module_type, and- temperature_model_parametersto- PVSystemand- SingleAxisTrackerrepr methods. (GH1027)
- Added - pvlib.tracking.calc_axis_tilt()to calculate the tracker axes tilt and- pvlib.tracking.calc_cross_axis_tilt()to calculate the cross-axis tilt, which is the angle, relative to horizontal, of the line formed by the intersection between the slope containing the tracker axes and a plane perpendicular to the tracker axes. (GH823)
- Added - cross_axis_tiltargument to- singleaxis()and- SingleAxisTracker()which defaults to zero. Use- pvlib.tracking.calc_cross_axis_tilt()to calculate the cross-axis tilt angle if necessary. (GH823)
- Added ability for - pvlib.soiling.hsu()to accept arbitrary time intervals. (GH980)
- Added - pvlib.temperature.fuentes()for cell temperature modeling. (GH1037)
- Add - pvlib.pvsystem.combine_loss_factors()as general purpose function to combine loss factors with a common index. Partialy addresses GH988. Contributed by Brock Taute @btaute
- Add capability to run a ModelChain starting with plane-of-array or effective irradiance, or with back-of-module or cell temperature data. New methods are - pvlib.modelchain.ModelChain.run_model_from_poa(),- pvlib.modelchain.ModelChain.run_model_from_effective_irradiance(), and- pvlib.modelchain.ModelChain.prepare_inputs_from_poa()(GH536, GH943)
Bug fixes#
- Fixed unit and default value errors in - pvlib.soiling.hsu(). (GH977, GH980)
- Handle NUL characters and fix version column dtype in - read_crn(). (GH1025)
- Fix low sun angle tracker rotation calculation. (GH824) 
- Fix issue with big-endian and little-endian data in - forecast.py. (GH921)
Testing#
- Decorator - pvlib.conftest.fail_on_pvlib_version()can now be applied to functions that require args or kwargs. (GH973)
- Test added for - pvlib.modelchain.ModelChainto confirm ValueError when- ac_modelis an invalid string. (GH886)
- Add minimum requirements configuration to Azure Pipelines build. (GH1006) 
- Update the data/test_psm3_tmy-2017.csv datafile to match the updated NSRDB data. (GH1005, GH1007) 
- Add wrappers around the pandas assert_X_equal functions to accommodate the changed API and default precision thresholds in pandas 1.1.0 (GH1018, GH1021) 
- Add github action for publishing tags to pypi.org. (GH950, GH1038, GH1039) 
- Remove Travis CI configuration. (GH950) 
Documentation#
- Improved formatting and content of docstrings in - pvlib.atmosphere. (GH969)
- Fix LaTeX rendering in - pvlib.singlediode.bishop88(). (GH967)
- Clarify units for heat loss factors in - pvlib.temperature.pvsyst_cell()and- pvlib.temperature.faiman(). (GH960)
- Added hsu soiling model example to the gallery. (GH990) 
- Add make.bat so that docs can be built on Windows without - makeinstalled. (GH978, GH981)
- Add instructions to build the documentation. (GH982) 
- Corrected key names for - pvlib.inverter.sandia(). (GH976, GH886)
- Add a transposition gain example to the gallery. (GH979) 
- Add a gallery example of calculating diffuse IAM using - pvlib.iam.marion_diffuse(). (GH984)
- Add a gallery example of modeling diffuse shading loss. (GH1017) 
- Add minigalleries to API reference pages. (GH991) 
Requirements#
Contributors#
- Cliff Hansen (@cwhanse) 
- Kevin Anderson (@kanderso-nrel) 
- Mark Mikofski (@mikofski) 
- Joshua S. Stein (@jsstein) 
- Marc A. Anoma (@anomam) 
- Will Holmgren (@wholmgren) 
- Brock Taute (@btaute) 
- Cameron Stark (@CameronTStark) 
- Miguel Sánchez de León Peque (@Peque) 
- Stephen Lightfoote (@srlightfoote) 
v0.7.2 (April 22, 2020)#
API Changes#
- pvlib.forecast.ForecastModelnow requires- startand- endarguments to be tz-localized. (GH877, GH879)
- pvlib.iotools.read_tmy3()when coerced to a single year now returns indices that are monotonically increasing. Therefore, the last index will be January 1, 00:00 of the next year. (GH910)
- Renamed - pvlib.lossesto- pvlib.soiling. Additional loss models will go into code modules named for the loss or effect type. (GH935, GH891)
- Renamed - pvlib.losses.soiling_hsuto- pvlib.soiling.hsu()(GH935)
Enhancements#
- TMY3 dataframe returned by - read_tmy3()now contains the original- Date (MM/DD/YYYY)and- Time (HH:MM)columns that the indices were parsed from. (GH866)
- Add - pvlib.pvsystem.PVSystem.faiman()and added- temperature_model='faiman'option to- ModelChain(GH897) (GH836).
- Add Kimber soiling model - pvlib.losses.soiling_kimber(). (GH860)
- Add - pvlib.iotools.read_pvgis_tmy()for files downloaded using the
- Add Kimber soiling model pvlib.soiling.kimber(). (GH860,
- :issue`935`) 
 
- Add Kimber soiling model 
- Add - read_pvgis_tmy()for files downloaded using the PVGIS tool. (GH880)
- Add - pvlib.temperature.sapm_cell_from_module()to convert back of module temperature to cell temperature (GH927)
- Add new module - pvlib.snowto contain models related to snow coverage and effects on a PV system. (GH764)
- Add snow coverage model - pvlib.snow.coverage_nrel()and function to identify when modules are fully covered by snow- pvlib.snow.fully_covered_nrel(). (GH577)
- Add function - pvlib.snow.dc_loss_nrel()for effect of snow coverage on DC output. (GH764)
- Add capability to calculate current at reverse bias using an avalanche breakdown model, affects - pvlib.singlediode.bishop88(),- pvlib.singlediode.bishop88_i_from_v(),- pvlib.singlediode.bishop88_v_from_i(),- pvlib.singlediode.bishop88_mpp(). (GH948)
- Add weather data arguments in get_solarpostion method of modelchain.ModelChain.prepare_inputs - modelchain.ModelChain.prepare_inputs()(GH936)
Bug fixes#
- Fix - read_tmy3()parsing when February contains a leap year. (GH866)
- Implement NREL Developer Network API key for consistent success with API calls in - pvlib.tests.iotools.test_psm3. (GH873)
- Fix issue with - pvlib.location.Locationcreation when passing- tz=datetime.timezone.utc. (GH879)
- Fix documentation homepage title to “pvlib python” based on first heading on the page. (GH890) (GH888) 
- Fix missing 0.7.0 what’s new entries about changes to - PVSystem.pvwatts_ac. Delete unreleased 0.6.4 what’s new file. (GH898)
- Compatibility with cftime 1.1. (GH895) 
- Minor implemention changes to avoid runtime and deprecation warnings in - detect_clearsky(),- martin_ruiz_diffuse(),- soiling_hsu(), and various test functions.
- Fix - read_tmy3()so that when coerced to a single year the TMY3 index will be monotonically increasing. (GH910)
- Fix - pvlib.spa.julian_day_dt()so that microseconds are scaled correctly (GH940) (GH942)
Testing#
- Rename system fixture to sapm_dc_snl_ac_system in model chain tests. (GH908, GH915). 
- Implement pytest-remotedata to increase test suite speed. Requires - --remote-datapytest flag to execute data retrieval tests over a network. (GH882)(GH896)
- Add documentation build test to Azure Pipelines CI. (GH909) 
- Implement the pytest.mark.flaky decorator from pytest-rurunfailures pytest-dev/pytest-rerunfailures on all network dependent iotools tests to repeat them on failure. (GH919) 
- Separate azure-pipelines.yml platform-specific tests to their own templates located in - ./ci/azure/. (GH926)
Documentation#
Requirements#
Contributors#
- Mark Mikofski (@mikofski) 
- Cliff Hansen (@cwhanse) 
- Cameron T. Stark (@camerontstark) 
- Will Holmgren (@wholmgren) 
- Kevin Anderson (@kanderso-nrel) 
- Karthikeyan Singaravelan (@tirkarthi) 
- Siyan (Veronica) Guo (@veronicaguo) 
- Eric Fitch (@ericf900) 
- Joseph Palakapilly (@JPalakapilly) 
- Auguste Colle(@augustecolle) 
- Ahan M R (@Ahanmr) 
v0.7.1 (January 17, 2020)#
Enhancements#
- Added - read_psm3()to read local NSRDB PSM3 files and- parse_psm3()to parse local NSRDB PSM3 file-like objects. (GH841)
- Added leap_day parameter to iotools.get_psm3 instead of hardcoding it as False. 
- Added - get_pvgis_tmy()to get PVGIS TMY datasets. (GH845)
- Added - parse_epw()to parse a file-like buffer containing weather data in the EPW format.
- Added a new module pvlib.losses for various loss models. 
- Added the Humboldt State University soiling model - soiling_hsu(). (GH739)
Bug fixes#
Testing#
- Added single-year PSM3 API test for iotools.get_psm3. 
- Added tests for iotools.parse_psm3 and iotools.read_psm3. 
- Change pvlib/test folder to pvlib/tests and reorganize tests into subfolders, e.g.: created pvlib/tests/iotools (GH859) 
- replace os.path with pathlib and stringify path objects for Python<=3.5 
Documentation#
- Created an Example Gallery. (GH846) 
- Updated list of allowed years for iotools.get_psm3. 
Contributors#
- Kevin Anderson (@kanderso-nrel) 
- Mark Mikofski (@mikofski) 
- Will Holmgren (@wholmgren) 
- Cliff Hansen (@cwhanse) 
- Valliappan CA (@nappaillav) 
- Anton Driesse (@adriesse) 
v0.7.0 (December 18, 2019)#
This is a major release that drops support for Python 2 and Python 3.4. We recommend all users of v0.6.3 upgrade to this release after checking API compatibility notes.
Python 2.7 support ended on June 1, 2019. (GH501) Minimum numpy version is now 1.12.0. Minimum pandas version is now 0.18.1. (GH830, GH748)
API Breaking Changes#
- The effective_irradiance argument for - pvsystem.sapm()now requires units of W/m^2. Previously, units for this input were suns. A RuntimeWarning warning is raised if all effective_irradiance < 2.0.
- The output of - pvsystem.sapm_effective_irradiance()is now in units of W/m2 rather than suns.
- Calling - pvlib.pvsystem.retrieve_sam()with no parameters will raise an exception instead of displaying a dialog.
- The modelchain.ModelChain.diode_params attribute is now formatted in a pandas.DataFrame with DatetimeIndex, rather than in a tuple. 
- PVSystem.pvwatts_acnow uses inverter DC input limit- PVSystem.inverter_parameters['pdc0']instead of module nameplate capacity- PVSystem.module_parameters['pdc0']. (GH734)
- ModelChain.infer_ac_modelnow uses the presence of the key- 'pdc0'- PVSystem.inverter_parametersto determine if the pvwatts_ac inverter model should be used. The inference method previously looked for the key in- PVSystem.module_parameters. (GH734)
API Changes with Deprecations#
- Changes related to cell temperature models (GH678):
- Changes to functions
- Moved functions for cell temperature from pvsystem.py to temperature.py. 
- Renamed pvsystem.sapm_celltemp and pvsystem.pvsyst_celltemp to temperature.sapm_cell and temperature.pvsyst_cell. 
- temperature.sapm_cell returns only the cell temperature, whereas the old pvsystem.sapm_celltemp returned a DataFrame with both cell and module temperatures. 
- Created temperature.sapm_module to return module temperature using the SAPM temperature model. 
- Changed the order of arguments for pvsystem.sapm_celltemp, pvsystem.pvsyst_celltemp and PVSystem.sapm_celltemp to be consistent among cell temperature model functions. 
- Removed model as a kwarg from temperature.sapm_cell and temperature.pvsyst_cell. These functions now require model-specific parameters. 
- Added the argument irrad_ref, default value 1000, to temperature.sapm_cell. 
 
 
- Changes to named temperature model parameter sets
- Renamed pvsystem.TEMP_MODEL_PARAMS to temperature.TEMPERATURE_MODEL_PARAMETERS. 
- temperature.TEMPERATURE_MODEL_PARAMETERS uses dict rather than tuple for a parameter set. 
- Names for parameter sets in temperature.TEMPERATURE_MODEL_PARAMETERS have changed. 
- Parameter sets for the SAPM cell temperature model named ‘open_rack_polymer_thinfilm_steel’ and ‘22x_concentrator_tracker’ are considered obsolete and have been removed. 
 
 
- Changes to PVSystem class
- Changed the model kwarg in PVSystem.sapm_celltemp and PVSystem.pvsyst_celltemp to parameter_set. parameter_set expects a str which is a valid key for temperature.TEMPERATURE_MODEL_PARAMETERS for the corresponding temperature model. 
- Added an attribute PVSystem.module_type (str) to record module front and back materials, default is glass_polymer. 
- Changed meaning of PVSystem.racking_model to describe racking only, e.g., default is open_rack. 
- Added an attribute PVSystem.temperature_model_parameters (dict). to contain temperature model parameters. 
- If PVSystem.temperature_model_parameters is not specified and PVSystem.racking_model and PVSystem.module_type combine to a valid parameter set name for the SAPM cell temperature model, that parameter set is assigned to PVSystem.temperature_model_parameters. Otherwise PVSystem.temperature_model_parameters is assigned an empty dict. The result is that the default parameter set for SAPM cell temperature model is open_rack_glass_polymer; the old default was open_rack_glass_glass. 
 
 
- Changes to ModelChain class
- ModelChain.temp_model renamed to ModelChain.temperature_model. 
- ModelChain.temperature_model now defaults to None. The temperature model can be inferred from PVSystem.temperature_model_parameters. 
- ModelChain.temperature_model_parameters now defaults to None. The temperature model can be inferred from PVSystem.temperature_model_parameters. 
- ModelChain.temps attribute renamed to ModelChain.cell_temperature, and its datatype is now numeric rather than DataFrame. 
- If PVSystem.temperature_model_parameters is not specified, ModelChain defaults to old behavior, using the SAPM temperature model with parameter set open_rack_glass_glass. This behavior is deprecated, and will be removed in v0.8. In v0.8 PVSystem.temperature_model_parameters will be required for ModelChain. 
- Implemented pvsyst as an option for ModelChain.temperature_model. 
- modelchain.basic_chain has a new required argument temperature_model_parameters. 
 
 
 
 
- Changes related to IAM (AOI loss) functions (GH680):
- Changes to functions
- Moved functions from pvsystem.py to iam.py. pvsystem IAM functions are deprecated and will be removed in v0.8. 
- Functions are renamed to a consistent pattern:
- pvsystem.physicaliam is iam.physical 
- pvsystem.ashraeiam is iam.ashrae 
- pvsystem.sapm_aoi_loss is iam.sapm 
 
 
 
 
- Changes to PVSystem class
- IAM models are provided by PVSystem.get_iam with kwarg iam_model. 
- Methods PVSystem.ashraeiam, PVSystem.physicaliam and PVSystem.sapm_aoi_loss are deprecated and will be removed in v0.8. 
 
 
 
 
- Changes related to spectral modifier (GH782):
- Changes to functions
- Added the argument pw_min and pw_max, default values 0.1 and 8 resp., to - pvlib.atmosphere.first_solar_spectral_correction(). This function now returns NaN if pw value higher than pw_max.
 
 
 
 
- The times keyword argument has been deprecated in the - pvlib.modelchain.ModelChain.run_model(),- pvlib.modelchain.ModelChain.prepare_inputs(), and- pvlib.modelchain.ModelChain.complete_irradiance()methods. Model times are now determined by the input weather. DataFrame. Therefore, the weather DataFrame must have a DatetimeIndex. The weather argument of the above methods is now the first, required positional argument and the times argument is kept as the second keyword argument for capability during the deprecation period.
- Parameter pvsystem.DC_MODEL_PARAMS is renamed to pvsystem._DC_MODEL_PARAMS. Users should not rely on this dictionary’s existence or structure. 
Other API Changes#
- pvlib.iotools.midc.read_midc()now passes additional keyword arguments to pandas.read_csv
- Add timeout argument to - pvlib.iotools.midc.read_midc_raw_data_from_nrel()
- pvlib.bifacialis now imported when- pvlibis imported. (GH766)
Enhancements#
- Created one new temperature model function: - pvlib.temperature.faiman(). (GH750)
- Created two new incidence angle modifier (IAM) functions: - pvlib.iam.martin_ruiz()and- pvlib.iam.interp(). (GH751)
- Created one new incidence angle modifier (IAM) function for diffuse irradiance: - pvlib.iam.martin_ruiz_diffuse(). (GH751)
- Add the martin_ruiz IAM function as an option for ModelChain.aoi_model. 
- Updated the file for module parameters for the CEC model, from the SAM file dated 2017-6-5 to the SAM file dated 2019-03-05. (GH761) 
- Updated the file for inverter parameters for the CEC model, from the SAM file dated 2018-3-18 to the SAM file dated 2019-03-05. (GH761) 
- Added recombination current parameters to bishop88 single-diode functions and also to - pvlib.pvsystem.max_power_point(). (GH762)
- Add ivtools module to contain functions for IV model fitting. 
- Add - fit_sde_sandia(), a simple method to fit the single diode equation to an IV curve.
- Add - fit_sdm_cec_sam(), a wrapper for the CEC single diode model fitting function ‘6parsolve’ from NREL’s System Advisor Model.
- Add - fit_sdm_desoto(), a method to fit the De Soto single diode model to the typical specifications given in manufacturers datasheets.
- Add timeout to - pvlib.iotools.get_psm3().
- Add - wvm(), a port of the wavelet variability model for computing reductions in variability due to a spatially distributed plant.
- Add - from_epw(), a method to create a Location object from epw metadata, typically coming from pvlib.iotools.epw.read_epw.
Bug fixes#
- Fix handling of keyword arguments in forecasts.get_processed_data. (GH745) 
- Fix output as Series feature in - pvlib.pvsystem.ashraeiam().
- Fix rounding issue in clearsky._linearly_scale, a function that converts longitude or latitude degree to an index number in a Linke turbidity lookup table. Also rename the function to clearsky._degrees_to_index. (GH754) 
- Fix reading raw MIDC CSV files from NREL where the number of header columns does not match the number of data columns. 
- Fix installation issue due to missing - requestsdependency. (GH725)
- PVSystem.pvwatts_acnow uses inverter DC input limit- PVSystem.inverter_parameters['pdc0']instead of module nameplate capacity- PVSystem.module_parameters['pdc0']. (GH734)
Testing#
- Added 30 minutes to timestamps in test_psm3.csv to match change in NSRDB (GH733) 
- Added tests for methods in bifacial.py. 
- Added tests for changes to cell temperature models. 
- Add tests configuration for bare python environment (no conda). (GH727) 
- Added tests for changes to IAM models. 
- Added test for ModelChain.infer_aoi_model. 
Documentation#
- Corrected docstring for pvsystem.PVSystem.sapm 
- Fixed broken ipython examples from CEC data updates 
- Edited docstring for pvsystem.sapm to remove DataFrame option for input module. The DataFrame option was never tested and would cause an error if used. (GH785) 
- Note warning about _TMY3.epw files retrieved from energyplus.net in docstring of epw.read_epw 
- Improved sphinx rendering of API reference entries for clearsky.ineichen, clearsky.haurwitz, tracking.singleaxis, iotools.read_midc, Location.from_tmy, ModelChain.run_model, ModelChain.complete_irradiance, and ModelChain.prepare_inputs 
- Removed duplicate pvwatts_losses entry in api.rst 
Removal of prior version deprecations#
- Removed irradiance.extraradiation. 
- Removed irradiance.grounddiffuse. 
- Removed irradiance.total_irrad. 
- Removed irradiance.globalinplane. 
- Removed atmosphere.relativeairmass. 
- Removed atmosphere.relativeairmass. 
- Removed solarposition.get_sun_rise_set_transit. 
- Removed tmy module. 
- Removed ModelChain.singlediode method. 
- Removed ModelChain.prepare_inputs clearsky assumption when no irradiance data was provided. 
Requirements#
Contributors#
- Mark Campanellli (@markcampanelli) 
- Will Holmgren (@wholmgren) 
- Cliff Hansen (@cwhanse) 
- Oscar Dowson (@odow) 
- Anton Driesse (@adriesse) 
- Alexander Morgan (@alexandermorgan) 
- Miguel Sánchez de León Peque (@Peque) 
- Tanguy Lunel (@tylunel) 
- Veronica Guo (@veronicaguo) 
- Joseph Ranalli (@jranalli) 
- Tony Lorenzo (@alorenzo175) 
- Todd Karin (@toddkarin) 
- Mark Mikofski (@mikofski) 
- Kevin Anderson (@kevinsa5) 
- Cameron Stark (@camerontstark) 
- Janine Freeman (@janinefreeman) 
- Roel Loonen (@roelloonen) 
- Birgit Schachler (@birgits) 
- Hamilton Kibbe (@hamiltonkibbe) 
- Adam Peretti (@aperetti) 
- Cedric Leroy (@cedricleroy) 
- Joseph Palakapilly (@JPalakapillyKWH) 
v0.6.3 (May 15, 2019)#
This is a minor release on top of v0.6.2 to fix an installation issue. We recommend that all users of v0.6.1 and v0.6.2 upgrade to this release.
Python 2.7 support will end on June 1, 2019. Releases made after this date will require Python 3. This release is likely to be the last that supports Python 2.7. (GH501)
Bug fixes#
- Fix installation issue due to missing - requestsdependency. (GH725)
Contributors#
- Will Holmgren (@wholmgren) 
v0.6.2 (May 15, 2019)#
This is a minor release. We recommend all users of v0.6.1 upgrade to this release.
Python 2.7 support will end on June 1, 2019. Releases made after this date will require Python 3. This release is likely to be the last that supports Python 2.7. (GH501)
Minimum pandas requirement bumped 0.15.0=>0.16.0
API Changes#
- erbs()doy argument changed to datetime_or_doy to be consistent with allowed types and similar functions (- disc(),- get_extra_radiation()). (GH681)
- erbs()DataFrame vs. OrderedDict return behavior now determined by type of datetime_or_doy instead of ghi or zenith. (GH681)
- Added min_cos_zenith and max_zenith keyword arguments to - erbs(). (GH681)
- Deprecated - prepare_inputs()assumption of clear sky if no irradiance fields were provided. (GH705, GH707)
- Remove automatic column name mapping from - read_midc()and- read_midc_raw_data_from_nrel()and added optional keyword argument variable_map to map columns. (GH721)
- Update - pvfactors_timeseries()and tests to use- pvfactorsv1.0.1 (GH699)
Enhancements#
Bug fixes#
- Compatibility with pandas 0.24 deprecations. (GH659) 
- pvwatts_ac()raised- ZeroDivisionErrorwhen called with scalar- pdc=0and a- RuntimeWarningfor- array(0)input. Now correctly returns 0s of the appropriate type. (GH675)
- Fixed - erbs()behavior when zenith is near 90 degrees. (GH681)
- dni()now referenced in API under Decomposing and Combining irradiance header. (GH686)
- Fixed NaN output from - singleaxis()when sun near horizon. (GH656)
- Fixed numpy warnings in - singleaxis()when comparing NaN values to limits. (GH622)
- Change ModelChain to apply - pvwatts_lossesto- mc.dcinstead of- mc.ac. (GH696)
- Fixed a bug in the day angle equation for the ASCE extraterrestrial irradiance model. (GH211) 
- Silenced divide by 0 irradiance warnings in - klucher()and- calcparams_desoto(). (GH698)
- Fix - NDFDmodel by updating variables.
- Fix - format_index()to parse non one-minute data correctly. (GH709)
Testing#
- Remove most expected warnings emitted by test suite. (GH698) 
Contributors#
- Cliff Hansen (@cwhanse) 
- Will Holmgren (@wholmgren) 
- Roel Loonen (@roelloonen) 
- Todd Hendricks (@tahentx) 
- Kevin Anderson (@kevinsa5) 
- Jonathan Gaffiot (@jgaffiot) 
- Leland Boeman (@lboeman) 
- Marc Anoma (@anomam) 
v0.6.1 (January 31, 2019)#
This is a minor release. We recommend all users of v0.6.0 upgrade to this release.
Python 2.7 support will end on June 1, 2019. Releases made after this date will require Python 3. (GH501)
Minimum pandas requirement bumped 0.14.0=>0.15.0
API Changes#
- Deprecated - tmy,- tmy.readtmy2and- tmy.readtmy3; they will be removed in v0.7. Use the new- pvlib.iotools.read_tmy2()and- pvlib.iotools.read_tmy3()instead. (GH261)
- Added keyword argument - horizonto- pyephem()and- calc_time()with default value- '+0:00'. (GH588)
- Add max_airmass keyword argument to - pvlib.irradiance.disc(). Default value (max_airmass=12) is consistent with polynomial fit in original paper describing the model. This change may result in different output of functions that use the disc Kn calculation for times when input zenith angles approach 90 degrees. This includes- pvlib.irradiance.dirint()and- pvlib.irradiance.dirindex()when min_cos_zenith and max_zenith kwargs are used, as well as- pvlib.irradiance.gti_dirint(). (GH450)
- Changed key names for components returned from - pvlib.clearsky.detect_clearsky(). (GH596)
- Changed function name from pvlib.solarposition.get_rise_set_transit (deprecated) to - pvlib.solarposition.sun_rise_set_transit_spa. `sun_rise_set_transit_spa()requires time input to be localized to the specified latitude/longitude. (GH316)
- Created new bifacial section for pvfactors limited implementation (GH421) 
Enhancements#
- Add - sun_rise_set_transit_ephem`to calculate sunrise, sunset and transit times using pyephem (:issue:`114())
- Add geometric functions for sunrise, sunset, and sun transit times, - sun_rise_set_transit_geometric()(GH114)
- Add Location class method - get_sun_rise_set_transit()
- Created - pvlib.iotools.read_srml()and- pvlib.iotools.read_srml_month_from_solardatto read University of Oregon Solar Radiation Monitoring Laboratory data. (GH589)
- Created - pvlib.iotools.read_surfrad()to read NOAA SURFRAD data. (GH590)
- Created - pvlib.iotools.read_midc()and- pvlib.iotools.read_midc_raw_data_from_nrel()to read NREL MIDC data. (GH601)
- Created - pvlib.iotools.get_ecmwf_macc()and- pvlib.iotools.read_ecmwf_macc()to get and read ECMWF MACC data. (GH602)
- Use HRRR modeled surface temperature values instead of inferring from isobaric values and modeled wind speed instead of inferring from gust. (GH604) 
- Change - pvlib.pvsystem.sapm_spectral_loss()to avoid numpy warning.
- Add warning message when - pvlib.spa()is reloaded. (GH401)
- Add option for - pvlib.irradiance.disc()to use relative airmass by supplying pressure=None. (GH449)
- Created - pvlib.pvsystem.pvsyst_celltemp()to implement PVsyst’s cell temperature model. (GH552)
- Created - pvlib.bifacial.pvfactors_timeseries()to use open-source pvfactors package to calculate back surface irradiance (GH421)
- Add PVSystem class method - pvsyst_celltemp()(GH633)
- Add - pvlib.irradiance.clearsky_index()to calculate clear-sky index from measured GHI and modeled clear-sky GHI. (GH551)
Bug fixes#
- Fix when building documentation using Matplotlib 3.0 or greater. 
- ~pvlib.spa.calculate_deltat: Fix constant coefficient of the polynomial expression for years >= 1860 and < 1900, fix year 2050 which was returning 0. (GH600) 
- Fix and improve - hour_angle()(GH598)
- Fix error in - pvlib.clearsky.detect_clearsky()(GH506)
- Fix documentation errors when using IPython >= 7.0. 
- Fix error in - pvlib.modelchain.ModelChain.infer_spectral_model()(GH619)
- Fix error in - pvlib.spawhen using Python 3.7 on some platforms.
- Fix error in - pvlib.irradiance._delta_kt_prime_dirint()(GH637). The error affects the first and last values of DNI calculated by the function- pvlib.irradiance.dirint()
- Fix errors on Python 2.7 and Numpy 1.6. (GH642) 
- Replace deprecated np.asscalar with array.item(). (GH642) 
Testing#
- Add test for - hour_angle()(GH597)
- Update tests to be compatible with pytest 4.0. (GH623) 
- Add tests for - pvlib.bifacial.pvfactors_timeseries()implementation (GH421)
Contributors#
- Will Holmgren (@wholmgren) 
- Leland Boeman (@lboeman) 
- Cedric Leroy (@cedricleroy) 
- Ben Ellis (@bhellis725) 
- Cliff Hansen (@cwhanse) 
- Mark Mikofski (@mikofski) 
- Anton Driesse (@adriesse) 
- Cameron Stark (@camerontstark) 
- Jonathan Gaffiot (@jgaffiot) 
- Marc Anoma (@anomam) 
- Anton Driesse (@adriesse) 
- Kevin Anderson (@kevinsa5) 
v0.6.0 (September 17, 2018)#
This is a major release and contains a large number of API changes, new features, and bug fixes. Users should carefully read the changelog below before upgrading.
Python 2.7 support will end on June 1, 2019. Releases made after this date will require Python 3. (GH501)
API Changes#
- pvlib python is changing a handful of function names. In general, functions that can calculate a quantity using multiple algorithms now start with the prefix - get_. For example,- relativeairmasscan calculate airmass using one of many- modelarguments. Its name has been changed to- get_relative_airmass(). The old function names remain in this release, but will emit a- PVLibDeprecationWarningwhen called. The old functions will be removed in the v0.7 release. Functions composed of multiple words jammed together have been renamed with underscores separating the words (see above). Each change is detailed below. (GH427)
- Deprecated - relativeairmass; it will be removed in v0.7. Use the new- get_relative_airmass()instead. (GH427)
- Deprecated - absoluteairmass; it will be removed in v0.7. Use the new- get_absolute_airmass()instead. (GH427)
- Deprecated - irradiance.globalinplane; it will be removed in v0.7. Use the new- poa_components()instead. (GH427)
- Added - poa_components(). Function is the same as the now-deprecated- irradiance.globalinplane, but adds- 'poa_sky_diffuse'and- 'poa_ground_diffuse'to the output. (GH427)
- Deprecated - irradiance.extraradiation; it will be removed in v0.7. Use- pvlib.irradiance.get_extra_radiation()instead. (GH427)
- Deprecated - irradiance.grounddiffuse; it will be removed in v0.7. Use- get_ground_diffuse()instead. (GH427)
- Added - get_poa_sky_diffuse(). (GH427)
- Deprecated - irradiance.total_irrad; it will be removed in v0.7. Use- get_total_poa_irradiance()instead. (GH427)
- Removed - 'klutcher'from- get_sky_diffuse/- total_irrad. This misspelling was deprecated long ago but never removed. (GH97)
- calcparams_desoto()now requires arguments for each module model parameter. (GH462)
- Add losses_parameters attribute to PVSystem objects and remove the kwargs support from PVSystem.pvwatts_losses. Enables custom losses specification in ModelChain calculations. (GH484) 
- removed irradiance parameter from ModelChain.run_model and ModelChain.prepare_inputs 
- Add - perez_enhancementkeyword argument to clearsky.ineichen to control whether or not the “perez enhancement factor” is applied. The enhancement factor was always applied until now. Now it is turned off by default. The enhancement factor can yield unphysical results, especially for latitudes closer to the poles and especially in the winter months. It may yield improved results under other conditions. (GH435)
- Add min_cos_zenith, max_zenith keyword arguments to disc, dirint, and dirindex functions. (GH311, GH396) 
- Method ModelChain.infer_dc_model now returns a tuple (function handle, model name string) instead of only the function handle (GH417) 
- Add DC model methods desoto and pvsyst to ModelChain, and deprecates DC model method singlediode (singlediode defaults to desoto until v0.7.0) (GH487) 
- Add the CEC module model in pvsystem.calcparams_cec and ModelChain.cec. The CEC model differs from the desoto model by using the parameter Adjust. Modules selected from the SAM CEC library sam-library-cec-modules-2017-6-5.csv include the Adjust parameter and ModelChain.infer_dc_model will now select the cec model rather than the desoto model. (GH463) 
- The behavior of irradiance.perez(return_components=True) has changed. The function previously returned a tuple of total sky diffuse and an OrderedDict/DataFrame of components. The function now returns an OrderedDict/DataFrame with total sky diffuse and each component. The behavior for return_components=False remains unchanged. (GH434) 
Enhancements#
- Add sea surface albedo in - irradiance.py(GH458)
- Implement - first_solar_spectral_loss()in- modelchain.py(GH359)
- Clarify arguments - Egrefand- dEgdTfor- calcparams_desoto()(GH462)
- Add pvsystem.calcparams_pvsyst to compute values for the single diode equation using the PVsyst v6 model (GH470) 
- Extend - singlediode()with an additional keyword argument- methodin- ('lambertw', 'newton', 'brentq'), default is- 'lambertw', to select a method to solve the single diode equation for points on the IV curve. Selecting either- 'brentq'or- 'newton'as the method uses- bishop88()with the corresponding method. (GH410)
- Implement new methods - 'brentq'and- 'newton'for solving the single diode equation for points on the IV curve.- 'brentq'uses a bisection method (Brent, 1973) that may be slow but guarantees a solution.- 'newton'uses the Newton-Raphson method and may be faster but is not guaranteed to converge. However,- 'newton'should be safe for well-behaved IV curves. (GH408)
- Implement - bishop88()for explicit calculation of arbitrary IV curve points using diode voltage instead of cell voltage. If- methodis either- 'newton'or- 'brentq'and- ivcurve_pntsin- singlediode()is provided, the IV curve points will be log spaced instead of linear.
- Implement - estimate_voc()to estimate open circuit voltage by assuming \(R_{sh} \to \infty\) and \(R_s=0\) as an upper bound in bisection method for- singlediode()when method is either- 'newton'or- 'brentq'.
- Add - max_power_point()method to compute the max power point using the new- 'brentq'method.
- Add new module - pvlib.singlediodewith low-level functions for solving the single diode equation such as:- bishop88(),- estimate_voc(),- bishop88_i_from_v(),- bishop88_v_from_i(), and- bishop88_mpp().
- Add PVSyst thin-film recombination losses for CdTe and a:Si (GH163) 
- Python 3.7 officially supported. (GH496) 
- Improve performance of solarposition.ephemeris. (GH512) 
- Improve performance of Location.get_airmass. Most noticeable when solar position is supplied, time index length is less than 10000, and method is looped over. (GH502) 
- Add irradiance.gti_dirint function. (GH396) 
- Add irradiance.clearness_index function. (GH396) 
- Add irradiance.clearness_index_zenith_independent function. (GH396) 
- Add checking for consistency between module_parameters and dc_model. (GH417) 
- Add DC model methods - 'desoto'and- 'pvsyst'to ModelChain (GH487)
- Add the CEC module model in pvsystem.calcparams_cec and ModelChain.cec. (GH463) 
- Add DC model methods desoto and pvsyst to ModelChain (GH487) 
- pvlib now ships with a pvlib[optional] installation option to automatically install packages needed to support additional pvlib features: - pip install pvlib[optional]. Additional installation options include doc (requirements for minimal documentation build), test (requirements for testing), and all (optional + doc + test). (GH553, GH483)
- Set default alpha to 1.14 in - angstrom_aod_at_lambda()(GH563)
- tracking.singleaxis now accepts scalar and 1D-array input. 
Bug fixes#
- Unset executable bits of irradiance.py and test_irradiance.py (GH460) 
- Fix failing tests due to column order on Python 3.6+ and Pandas 0.23+ (GH464) 
- ModelChain.prepare_inputs failed to pass solar_position and airmass to Location.get_clearsky. Fixed. (GH481) 
- Add User-Agent specification to TMY3 remote requests to avoid rejection. (GH493) 
- Fix - pvlib.irradiance.klucheroutput is different for Pandas Series vs. floats and NumPy arrays. (GH508)
- Make GitHub recognize the license, add AUTHORS.md, clarify shared copyright. (GH503) 
- Fix issue with non-zero direct irradiance contribution to Reindl, Klucher, and Hay-Davies diffuse sky algorithms when the sun is behind the array. (GH526) 
- Fix issue with dividing by near-0 cos(solar_zenith) values in Reindl and Hay-Davies diffuse sky algorithms. (GH432) 
- Fix argument order of longitude and latitude when querying weather forecasts by lonlat bounding box (GH521) 
- Fix issue with unbounded clearness index calculation in disc. (GH540) 
- Limit pvwatts_ac results to be greater than or equal to 0. (GH541) 
- Fix bug in get_relative_airmass(model=’youngirvine1967’). (GH545) 
- Fix bug in variable names returned by forecast.py’s HRRR_ESRL model. (GH557) 
- Fixed bug in tracking.singleaxis that mistakenly assigned nan values when the Sun was still above the horizon. No effect on systems with axis_tilt=0. (GH569) 
- Source distribution did not contain LICENSE file. Added LICENSE, AUTHORS.md, and some docs to MANIFEST. (GH579) 
- Patch SPA C-files to fix timezone macro name clash with pyconfig.h. (GH168) 
Documentation#
- Expand testing section with guidelines for functions, PVSystem/Location objects, and ModelChain. 
- Updated several incorrect statements in ModelChain documentation regarding implementation status and default values. (GH480) 
- Expanded general contributing and pull request guidelines. 
- Added section on single diode equation with some detail on solutions used in pvlib-python (GH518) 
- Minor improvements and updates to installation documentation. (GH531) 
- Improve LocalizedPVSystem and LocalizedSingleAxisTracker documentation. (GH532) 
- Move the “Getting Started”/”Modeling Paradigms” section to a new top-level “Intro Examples” page. 
- Copy pvlib documentation’s “Getting support” section to README.md. 
- Add example of Kasten Linke Turbidity calculation, discuss broadband AOD and Angstrom Turbidity Model. (GH302) 
- Add JOSS paper to “Citing pvlib-python” section. 
Testing#
- Add pytest-mock dependency 
- Use pytest-mock to ensure that PVSystem and ModelChain methods call corresponding functions correctly. Removes implicit dependence on precise return values of some function/methods. (GH394) 
- Additional test refactoring to limit test result dependence to a single function per test. (GH394) 
- Use pytest-mock to ensure that ModelChain DC model is set up correctly. 
- Add Python 3.7 to build matrix 
- Make test_forecast.py more robust. (GH293) 
- Improve test_atmosphere.py. (GH158) 
- Add LGTM.com integration. (GH554) 
- Add SticklerCI integration. 
- Add codecov integration. 
Contributors#
- Will Holmgren (@wholmgren) 
- Yu Cao (@tsaoyu) 
- Cliff Hansen (@cwhanse) 
- Mark Mikofski (@mikofski) 
- Alan Mathew (@alamathe1) 
- Xavier Rene-Corail (@xcorail) 
- Anton Driesse (@adriesse) 
- Mark Campanelli (@thunderfish24) 
- Cedric Leroy (@cedricleroy) 
- Jessica Forbess (@jforbess) 
- Jeff Newmiller (@jdnewmil) 
- Marc A. Anoma (@anomam) 
- William C Grisaitis (@grisaitis) 
- Karel De Brabandere (@kdebrab) 
v0.5.2 (May 13, 2018)#
API Changes#
Enhancements#
- Improve clearsky.lookup_linke_turbidity speed, changing .mat source file to .h5 (GH437) 
- Updated libraries for CEC module parameters to SAM release 2017.9.5 (library dated 2017.6.30) and CEC inverter parameters to file posted to www.github.com/NREL/SAM on 2018.3.18, with one entry removed due to a missing parameter value. (:issue:’440’) 
Bug fixes#
- fixed redeclaration of test_simplified_solis_series_elevation (GH387) 
- physicaliam now returns a Series if called with a Series as an argument. (GH397) 
- corrected docstring for irradiance.total_irrad (:issue: ‘423’) 
- modified solar_azimuth_analytical to handle some borderline cases, thereby avoiding the NaN values and/or warnings that were previously produced (:issue: ‘420’) 
- removed RuntimeWarnings due to divide by 0 or nans in input data within irradiance.perez, clearsky.simplified_solis, pvsystem.adrinverter, pvsystem.ashraeiam, pvsystem.physicaliam, pvsystem.sapm_aoi_loss, pvsystem.v_from_i. (GH428) 
Documentation#
- Improve physicaliam doc string. (GH397) 
Testing#
Contributors#
- Cliff Hansen 
- Will Holmgren 
- KonstantinTr 
- Anton Driesse 
- Cedric Leroy 
v0.5.1 (October 17, 2017)#
API Changes#
- pvsystem.v_from_i and pvsystem.i_from_v functions now accept resistance_series = 0 and/or resistance_shunt = numpy.inf as inputs (GH340) 
Enhancements#
- Improve clearsky.lookup_linke_turbidity speed. (GH368) 
- Ideal devices supported in single diode model, e.g., resistance_series = 0 and/or resistance_shunt = numpy.inf (GH340) 
- pvsystem.v_from_i and pvsystem.i_from_v computations for near ideal devices are more numerically stable. However, very, very near ideal resistance_series and/or resistance_shunt may still cause issues with the implicit solver (GH340) 
Bug fixes#
- Remove condition causing Overflow warning from clearsky.haurwitz (GH363) 
- modelchain.basic_chain now correctly passes ‘solar_position_method’ arg to solarposition.get_solarposition (GH370) 
- Fixed: Variables and Symbols extra references not available (GH380) 
- Removed unnecessary calculations of alpha_prime in spa.solar_position_numpy and spa.solar_position_loop (GH366) 
- Fixed args mismatch for solarposition.pyephem call from solarposition.get_solarposition with method=’pyephem’ arg to solarposition.get_solarposition (GH370) 
- ModelChain.prepare_inputs and ModelChain.complete_irradiance now correctly pass the ‘solar_position_method’ argument to solarposition.get_solarposition (GH377) 
- Fixed usage of inplace parameter for tmy._recolumn (GH342) 
Documentation#
Testing#
- Changed test for clearsky.haurwitz to operate on zenith angles 
- Significant new test cases added for pvsystem.v_from_i and pvsystem.i_from_v (GH340) 
Contributors#
- Cliff Hansen 
- KonstantinTr 
- Will Holmgren 
- Mark Campanelli 
- DaCoEx 
v0.5.0 (August 11, 2017)#
API Changes#
- Removed parameter w from _calc_d (GH344) 
- SingleAxisTracker.get_aoi and SingleAxisTracker.get_irradiance now require surface_zenith and surface_azimuth (GH351) 
- Changes calculation of the Incidence Angle Modifier to return 0 instead of np.nan for angles >= 90°. This improves the calculation of effective irradiance close to sunrise and sunset. (GH338) 
- Change the default ModelChain orientation strategy from ‘south_at_latitude_tilt’ to - None. (GH290)
Bug fixes#
- Method of multi-inheritance has changed to make it possible to use kwargs in the parent classes of LocalizedPVSystem and LocalizedSingleAxisTracker (GH330) 
- Fix the __repr__ method of ModelChain, crashing when orientation_strategy is set to ‘None’ (GH352) 
- Fix the ModelChain’s angle of incidence calculation for SingleAxisTracker objects (GH351) 
- Fix issue with ForecastModel.cloud_cover_to_transmittance_linear method of forecast.py ignoring ‘offset’ parameter. (GH343) 
Enhancements#
Documentation#
- Added ModelChain documentation page 
- Added nbsphinx to documentation build configuration. 
- Added a pull request template file (GH354) 
Testing#
- Added explicit tests for aoi and aoi_projection functions. 
- Update test of ModelChain.__repr__ to take in account GH352 
- Added a test for solar_azimuth_analytical function. 
Contributors#
- Johannes Kaufmann 
- Will Holmgren 
- Uwe Krien 
- Alaina Kafkes 
- Birgit Schachler 
- Jonathan Gaffiot 
- Siyan (Veronica) Guo 
- KonstantinTr 
v0.4.5 (June 5, 2017)#
Bug fixes#
- Fix pandas 0.20 incompatibilities in Location.get_clearsky, solarposition.ephemeris (GH325) 
- Fixes timezone issue in solarposition spa_c function (GH237) 
- Added NREL Bird clear sky model. (GH276) 
- Added lower accuracy formulas for equation of time, declination, hour angle and solar zenith. 
- Remove all instances of .ix (GH322) 
- Update docstring in pvlib.spa.solar_position - change units of pressure to millibars. NOTE: units of pressure in pvlib.solar_position.spa_python and pvlib.solar_position.spa_c are still Pascals. This update should have no effect on most users, since it only applies to the low-level spa.py module. (GH327) 
Enhancements#
- Added irradiance.dni method that determines DNI from GHI and DHI and corrects unreasonable DNI values during sunrise/sunset transitions 
- ForecastModel will now only connect to the Unidata server when necessary, rather than when the object is created. This supports offline work and speeds up analysis of previously downloaded data. 
Contributors#
- Will Holmgren 
- Marc Anoma 
- Mark Mikofski 
- Birgit Schachler 
v0.4.4 (February 18, 2017)#
Enhancements#
- Added Anton Driesse Inverter database and made compatible with pvsystem.retrieve_sam. (GH169) 
- Ported Anton Driesse Inverter model from PV_LIB Toolbox. (GH160) 
- Added Kasten pyrheliometric formula to calculate Linke turbidity factors with improvements by Ineichen and Perez to extend range of air mass (GH278) 
- Added coefficients for CIGS and a-Si modules types to the first_solar_spectral_correction function (GH308) 
API Changes#
- Change PVSystem default module_parameters and inverter_parameters to empty dict. Code that relied on these attributes being None or raising a TypeError will need to be updated. (issue:294) 
Documentation#
- Fixes the Forecasting page’s broken links to the tutorials. 
- Fixes the Forecasting page’s broken examples. (GH299) 
- Fixes broken Classes link in the v0.3.0 documentation. 
Bug fixes#
- Resolved several issues with the forecast module tests. Library import errors were resolved by prioritizing the conda-forge channel over the default channel. Stalled ci runs were resolved by adding a timeout to the HRRR_ESRL test. (GH293) 
- Fixed issue with irradiance jupyter notebook tutorial. (GH309) 
Contributors#
- Will Holmgren 
- Volker Beutner 
- Mark Mikofski 
- Anton Driesse 
- Mitchell Lee 
v0.4.3 (December 28, 2016)#
Enhancements#
Other#
- Adds Python 3.6 to compatibility statement and pypi classifiers. (GH286) 
Contributors#
- Marc Anoma 
- Will Holmgren 
- Cliff Hansen 
- Tony Lorenzo 
v0.4.2 (December 7, 2016)#
This is a minor release from 0.4.1.
Bug fixes#
- Fixed typo in __repr__ method of ModelChain and in its regarding test. 
- PVSystem.pvwatts_ac could not use the eta_inv_ref kwarg and PVSystem.pvwatts_dc could not use the temp_ref kwarg. Fixed. (GH252) 
- Fixed typo in ModelChain.infer_spectral_model error message. (GH251) 
- Fixed Linke turbdity factor out of bounds error at 90-degree latitude or at 180-degree longitude (GH262) 
- Fixed Linke turbidity factor grid spacing and centers (GH263) 
API Changes#
- The run_model method of the ModelChain will use the weather parameter of all weather data instead of splitting it to irradiation and weather. The irradiation parameter still works but will be removed soon. (GH239) 
- delta_t kwarg is now 67.0 instead of None. IMPORTANT: Setting delta_t as None will break the code for the Numba accelerated calculations. This will be fixed in a future version. (GH165) 
Enhancements#
- Adding a complete_irradiance method to the ModelChain to make it possible to calculate missing irradiation data from the existing columns [beta]. (GH239) 
- Added calculate_deltat method to the spa module to calculate the time difference between terrestrial time and UT1. Specifying a scalar is sufficient for most calculations. (GH165) 
- Added more attributes to ModelChain, PVSystem, and Location printed representations. (GH254) 
- Added name attribute to ModelChain and PVSystem. (GH254) 
- Restructured API section of the documentation so that there are separate pages for each function, class, or method. (GH258) 
- Improved Linke turbidity factor time interpolation with Python calendar month days and leap years (GH265) 
- Added option to return diffuse components from Perez transposition model. 
Other#
Code Contributors#
- Uwe Krien 
- Will Holmgren 
- Volker Beutner 
- Mark Mikofski 
- Marc Anoma 
- Giuseppe Peronato 
v0.4.1 (October 5, 2016)#
This is a minor release from 0.4.0. We recommend that all users upgrade to this version, especially if they want to use the latest versions of pandas.
Bug fixes#
Documentation#
Code Contributors#
- Mark Mikofski 
- Johannes Dollinger 
- Will Holmgren 
v0.4.0 (July 28, 2016)#
This is a major release from 0.3.3. We recommend that all users upgrade to this version after reviewing the API Changes. Please see the Bug Fixes for changes that will result in slightly different modeling results.
API Changes#
- Remove unneeded module argument from singlediode function. (GH200) 
- In - pvlib.irradiance.perez, renamed argument- modeltto- model. (GH196)
- Functions in the irradiance module now work with scalar inputs in addition to arrays and Series. Furthermore, these functions no longer promote scalar or array input to Series output. Also applies to atmosphere.relativeairmass. (GH201, GH214) 
- Reorder the ashraeiam, physicaliam, and snlinverter arguments to put the most variable arguments first. Adds default arguments for the IAM functions. (GH197) 
- The irradiance.extraradiation function input/output type consistency across different methods has been dramatically improved. (GH217, GH219) 
- Updated to pvsystem.sapm to be consistent with the PVLIB MATLAB API. pvsystem.sapm now takes an effective irradiance argument instead of POA irradiances, airmass, and AOI. Implements closely related sapm_spectral_loss, sapm_aoi_loss, and sapm_effective_irradiance functions, as well as PVSystem methods. The sapm_aoi_loss function includes an optional argument to apply an upper limit to the output (output can be ~1% larger than 1 for AOI of ~30 degrees). (GH198, GH205, GH218) 
- The pvsystem.retrieve_sam keyword argument - samfilehas been replaced with- path. A selection dialog window is now activated by not supplying any arguments to the function. The API for typical usage remains unchanged, however, the data will be loaded from a local file rather than the SAM website. (GH52)
Enhancements#
- Adds the First Solar spectral correction model. (GH115) 
- Adds the Gueymard 1994 integrated precipitable water model. (GH115) 
- Adds the PVWatts DC, AC, and system losses model. (GH195) 
- Improve PEP8 conformity in irradiance module. (GH214) 
- irradiance.disc is up to 10x faster. (GH214) 
- Add solarposition.nrel_earthsun_distance function and option to calculate extraterrestrial radiation using the NREL solar position algorithm. (GH211, GH215) 
- pvsystem.singlediode can now calculate IV curves if a user supplies an ivcurve_pnts keyword argument. (GH83) 
- Includes SAM data files in the distribution. (GH52) 
- ModelChain now implements SAPM, PVWatts, Single Diode and user-defined modeling options. See Will Holmgren’s ModelChain refactor gist for more discussion about new features in ModelChain. (GH143, GH194) 
- Added - forecast.pymodule for solar power forecasts. (GH86, GH124, GH180)
Bug fixes#
- Fixed an error in pvsystem.singlediode’s i_mp, v_mp, and p_mp calculations when using array or Series input. The function wrongly returned solutions when any single point is within the error tolerance, rather than requiring that the solution for all points be within the error tolerance. Results in test scenarios changed by 1-10%. (GH221) 
- Fixed a numerical overflow error in pvsystem.singlediode’s v_oc determination for some combinations of parameters. (GH225) 
- dirint function yielded the wrong results for non-sea-level pressures. Fixed. (GH212) 
- Fixed a bug in the day angle calculation used by the ‘spencer’ and ‘asce’ extraterrestrial radiation options. Most modeling results will be changed by less than 1 part in 1000. (GH211) 
- irradiance.extraradiation now raises a ValueError for invalid method input. It previously failed silently. (GH215) 
Documentation#
Other#
- pvlib-python is now available on the conda-forge channel: conda install pvlib-python -c conda-forge (GH154) 
- Switch to the py.test testing framework. (GH204) 
- Reconfigure Appveyor CI builds and resolve an issue in which the command line length was too long. (GH207) 
- Manually build numpy and pandas for the min requirements test. This is needed to avoid Continuum’s bad practice of bundling scipy with pandas. (GH214) 
Requirements#
- pvlib now requires pandas >= 0.14.0 and numpy >= 1.9.0, both released in 2014. Most of pvlib will work with lesser versions. (GH214) 
Code Contributors#
- Will Holmgren 
- Jonathan Chambers 
- Mitchell Lee 
- Derek Groenendyk 
v0.3.3 (June 15, 2016)#
This is a minor release from 0.3.2. We recommend that all users upgrade to this version.
API Changes#
- Renamed - series_modulesto- modules_per_stringand- parallel_modulesto- strings_per_inverter. (GH176)
- Changed two of the TMY3 data reader fields for consistency with the rest of the fields and with PVLIB MATLAB. Changed ‘PresWth source’ to ‘PresWthSource’, and ‘PresWth uncert’ to ‘PresWthUncertainty’. (GH193) 
Enhancements#
- Adds the Erbs model. (GH2) 
- Adds the - scale_voltage_current_powerfunction and- PVSystemmethod to support simple array modeling. (GH159)
- Adds support for - SingleAxisTrackerobjects in- ModelChain. (GH169)
- Add - __repr__method to PVSystem, LocalizedPVSystem, ModelChain, SingleAxisTracker, Location. (GH142)
- Add - v_from_ifunction for solving the single diode model. (GH190)
- Improve speed of - singlediodefunction by using- v_from_ito determine- v_oc. Speed is ~2x faster. (GH190)
- Adds the Simplified Solis clear sky model. (GH148) 
Bug fixes#
- Fix another bug with the Appveyor continuous integration builds. (GH170) 
- Add classifiers to setup.py. (GH181) 
- Fix snlinverter and singlediode documentation. They incorrectly said that inverter/module must be a DataFrame, when in reality they can be any dict-like object. (GH157) 
- Fix numpy 1.11 deprecation warnings caused by some functions using non-integer indices. 
- Propagate airmass data through ModelChain’s get_irradiance call so that the perez model can use it, if necessary. (GH172) 
- Fix problem in which the perez function dropped nighttime values. Nighttime values are now set to 0. (GH191) 
Documentation#
- Localize datetime indices in package overview examples. (GH156) 
- Clarify that - ModelChainand- basic_chaincurrently only supports SAPM. (GH177)
- Fix version number in 0.3.2 whatsnew file. 
- Shorten README.md file and move information to official documentation. (GH182) 
- Change authors to PVLIB Python Developers and clean up setup.py. (GH184) 
- Document the PresWth, PresWthSource, and PresWthUncertainty fields in the TMY3 data reader. (GH193) 
Other#
- Removed test skip decorator functions for Linux + Python 3 and for pandas 0.18.0. (GH187) 
Contributors#
- Will Holmgren 
- Mark Mikofski 
- Johannes Oos 
- Tony Lorenzo 
v0.3.2 (May 3, 2016)#
This is a minor release from 0.3.1. We recommend that all users upgrade to this version.
Bug fixes#
- Updates the SAM file URL. (GH152) 
Contributors#
- Will Holmgren 
v0.3.1 (April 19, 2016)#
This is a minor release from 0.3.0. We recommend that all users upgrade to this version.
Enhancements#
- Added versioneer to keep track of version changes instead of manually updating pvlib/version.py. This will aid developers because the version string includes the specific git commit of the library code currently imported. (issue:150) 
Bug fixes#
- Fixes night tare issue in snlinverter. When the DC input power (p_dc) to an inverter is below the inversion startup power (Ps0), the model should set the AC output (ac_power) to the night tare value (Pnt). The night tare power indicates the power consumed by the inverter to sense PV array voltage. The model was erroneously comparing Ps0 with the AC output power (ac_power), rather than the DC input power (p_dc). (GH140) 
- Fixed the azimuth calculation of rotated PV panel in function pvlib.tracking.singleaxis(…) so that the results are consistent with PVsyst. (GH144) 
Contributors#
- ejmiller2 
- Yudong Ma 
- Tony Lorenzo 
- Will Holmgren 
v0.3.0 (March 21, 2016)#
This is a major release from 0.2.2. It will almost certainly break your code, but it’s worth it! We recommend that all users upgrade to this version after testing their code for compatibility and updating as necessary.
API changes#
- The - locationargument in- solarposition.get_solarpositionand- clearsky.ineichenhas been replaced with- latitude,- longitude,- altitude, and- tzas appropriate. This separates the object-oriented API from the procedural API. (GH17)
- Locationclasses gain the- get_solarposition,- get_clearsky, and- get_airmassfunctions.
- Adds - ModelChain,- PVSystem,- LocalizedPVSystem,- SingleAxisTracker, and- LocalizedSingleAxisTrackerclasses. (GH17)
- Locationobjects can be created from TMY2/TMY3 metadata using the- from_tmyconstructor.
- Change default - Locationtimezone to- 'UTC'.
- The solar position calculators now assume UTC time if the input time is not localized. The calculators previously tried to infer the timezone from the now defunct location argument. 
- pvsystem.sapm_celltempargument names now follow the variable conventions.
- irradiance.total_irradnow follows the variable conventions. (GH105)
- atmosphere.relativeairmassnow raises a ValueError instead of assuming- 'kastenyoung1989'if an invalid model is supplied. (GH119)
Enhancements#
- Added new sections to the documentation: 
- Variables and Symbols (GH102) 
- Classes (GH93) (Moved to API reference in GH258) 
 
- Adds support for Appveyor, a Windows continuous integration service. (GH111) 
- The readthedocs documentation build now uses conda packages instead of mock packages. This enables code to be run and figures to be generated during the documentation builds. (GH104) 
- Reconfigures TravisCI builds and adds e.g. - has_numbadecorators to the test suite. The result is that the TravisCI test suite runs almost 10x faster and users do not have to install all optional dependencies to run the test suite. (GH109)
- Adds more unit tests that test that the return values are actually correct. 
- Add - atmosphere.APPARENT_ZENITH_MODELSand- atmosphere.TRUE_ZENITH_MODELSto enable code that can automatically determine which type of zenith data to use e.g.- Location.get_airmass.
- Modify - sapmdocumentation to clarify that it does not work with the CEC database. (GH122)
- Adds citation information to the documentation. (GH73) 
- Updates the - comparison_pvlib_matlabdocumentation. (GH116)
Bug fixes#
- Fixed the metadata key specification in documentation of the - readtmy2function.
- Fixes the import of tkinter on Python 3 (GH112) 
- Add a decorator to skip - test_calcparams_desotoon pandas 0.18.0. (GH130)
- Fixes - i_from_vdocumentation. (GH126)
- Fixes two minor sphinx documentation errors: a too short heading underline in whatsnew/v0.2.2.txt and a table format in pvsystem. (GH123) 
Contributors#
- Will Holmgren 
- pyElena21 
- DaCoEx 
- Uwe Krien 
Will Holmgren, Jessica Forbess, bmu, Cliff Hansen, Tony Lorenzo, Uwe Krien, and bt- contributed to the object model discussion.
v0.2.2 (November 13, 2015)#
This is a minor release from 0.2.1. We recommend that all users upgrade to this version.
Enhancements#
Bug fixes#
- irradiance.total_irradhad a typo that required the Klucher model to be accessed with- 'klutcher'. Both spellings will work for the remaining 0.2.* versions of pvlib, but the misspelled method will be removed in 0.3. (GH97)
- Fixes an import and KeyError in the IPython notebook tutorials (GH94). 
- Uses the - loggingmodule properly by replacing- formatcalls with- args. This results in a 5x speed increase for- tracking.singleaxis(GH89).
- Adds a link to the 2015 PVSC paper (GH81) 
Contributors#
- Will Holmgren 
- jetheurer 
- dacoex 
v0.2.1 (July 16, 2015)#
This is a minor release from 0.2. It includes a large number of bug fixes for the IPython notebook tutorials. We recommend that all users upgrade to this version.
Enhancements#
- Update component info from SAM (csvs dated 2015-6-30) (GH75) 
Bug fixes#
Contributors#
- Will Holmgren 
- Jessica Forbess 
v0.2.0 (July 6, 2015)#
This is a major release from 0.1 and includes a large number of API changes, several new features and enhancements along with a number of bug fixes. We recommend that all users upgrade to this version.
Due to the large number of API changes, you will probably need to update your code.
API changes#
- Change variable names to conform with new Variables and style rules wiki. This impacts many function declarations and return values. Your existing code probably will not work! (GH37, GH54). 
- Move - dirintand- discalgorithms from- clearsky.pyto- irradiance.py(GH42)
- Mark some - pvsystem.pymethods as private (GH20)
- Make output of - pvsystem.sapm_celltempa DataFrame (GH54)
Enhancements#
Bug fixes#
- The release date of 0.1 was fixed in the documentation (see v0.1.0 (April 20, 2015)) 
- fix casting of DateTimeIndex to int64 epoch timestamp on machines with 32 bit python int (GH63) 
- fixed some docstrings with failing doctests (GH62) 
Contributors#
- Will Holmgren 
- Rob Andrews 
- bmu 
- Tony Lorenzo 
v0.1.0 (April 20, 2015)#
This is the first official release of the pvlib-python project. As such, a “What’s new” document is a little hard to write. There will be significant overlap with the to-be-written document that describes the differences between pvlib-python and PVLIB_Matlab.
API changes#
- Remove - pvl_from module names.
- Consolidation of similar modules. For example, functions from - pvl_clearsky_ineichen.pyand- pvl_clearsky_haurwitz.pyhave been consolidated into- clearsky.py.
- Return one DataFrame instead of a tuple of DataFrames. 
- Change function and module names so that they do not conflict. 
New features#
- Library is Python 3.3 and 3.4 compatible 
- Add What’s New section to docs (GH10) 
- Add PyEphem option to solar position calculations. 
- Add a Python translation of NREL’s SPA algorithm. 
- irradiance.pyhas more AOI, projection, and irradiance sum and calculation functions
- TMY data import has a - coerce_yearoption
- TMY data can be loaded from a url (GH5) 
- Locations are now - pvlib.location.Locationobjects, not “structs”.
- Specify time zones using a string from the standard IANA Time Zone Database naming conventions or using a pytz.timezone instead of an integer GMT offset. We may add dateutils support in the future. 
- clearsky.ineichensupports interpolating monthly Linke Turbidities to daily resolution.
Other changes#
- Removed - Vars=Locals(); Expect...; var=pvl\_tools.Parse(Vars,Expect);pattern. Very few tests of input validitity remain. Garbage in, garbage or- nanout.
- Removing unnecssary and sometimes undesired behavior such as setting maximum zenith=90 or airmass=0. Instead, we make extensive use of - nanvalues.
- Adding logging calls, removing print calls. 
- Improved PEP8 compliance. 
- Added - /pvlib/datafor lookup tables, test, and tutorial data.
- Limited the scope of - clearsky.py’s- scipydependency.- clearsky.ineichenwill work without- scipyso long as the Linke Turbidity is supplied as a keyword argument. (GH13)
- Removed NREL’s SPA code to comply with their license (GH9). 
- Revised the globalinplane function and added a test_globalinplane (GH21, GH33). 
Documentation#
Testing#
- Tests are cleaner and more thorough. They are still nowhere near complete. 
- Using Coveralls to measure test coverage. 
- Using TravisCI for automated testing. 
- Using - nosetestsfor more concise test code.
Bug fixes#
- Fixed DISC algorithm bugs concerning modifying input zenith Series (GH24), the - Ktconditional evaluation (GH6), and ignoring the input pressure (GH25).
- Many more bug fixes were made, but you’ll have to look at the detailed commit history. 
- Fixed inconsistent azimuth angle in the ephemeris function (GH40) 
Contributors#
This list includes all (I hope) contributors to pvlib/pvlib-python, Sandia-Labs/PVLIB_Python, and UARENForecasting/PVLIB_Python.
- Rob Andrews 
- Will Holmgren 
- bmu 
- Tony Lorenzo 
- jforbess 
- Jorissup 
- dacoex 
- alexisph 
- Uwe Krien 
