What’s New#
These are new features and improvements of note in each release.
v0.4.4 (October / 14 / 2024)#
Bugfix Release with important updates to correct the indexing of trackerdict and gendaylit1axis
API Changes#
New input parameter to
makeModule
:glassEdge
. IfmakeModule
glass
= True, then this extends the glass past the absorber edge by this total amount (half in each x and y direction). Default 10mm.Module glass thickness can be changed. In
makeModule()
, ifglass
= True, then setting thez
parameter will indicate the total (front + back) glass thickness with the 1mm absorber in the middle. The default is z = 10mm.
Enhancements#
Deprecations#
.ini files loaded with
bifacial_radiance.load.readconfigurationinputfile()
useazimuth
key instead ofaxis_azimuth
(GH 438)(GH 551)bifacial_radiance.load.deepcleanResult()
is now deprecated in favor ofcleanResult()
and will be removed to its own example notebook in a future release (GH 556)bifacial_radiance.mismatch.analysisIrradianceandPowerMismatch()
is being removed to its own example notebook in a future release. (GH 556)
Bug fixes#
Fixed a major error with indexing the irradiance conditions with
gendaylit1axis()
. This could result in the trackerdict entry being mismatched from the metdata resource. (GH 441)versioning with setuptools_scm- set fallback_version to bifirad v0.4.3 to prevent crashes if git is not present (GH 535)(GH 539)
bifacial_radiance.load.readconfigurationinputfile()
now properly handles loading moduleObj parameters from .ini files:glass
,glassEdge
,frameParamsDict
,omegaParamsDict
(GH 551)Fixed a leap year bug in
readWeatherFile()
that crashed if epwfiles are loaded that include leap year data (like Feb. 28 2020). (GH 552)Bug fix in
bifacial_radiance.load.cleanResult()
that wouldn’t work with files created when front and rear scan are different lengths. (GH 419)GUI bug fixes where the sensorsy was not loading correctly, module .rad file was not being re-written, and an invalid default timestamp is used.
Bug fix in
bifacial_radiance.AnalysisObj.moduleAnalysis()
when sensorsY equals numCellsy-1 and the scan lines up in the gaps between cells. shift scan by half a cell.
Documentation#
No longer provide a warning message when both
hub_height
andclearance_height
are passed tomoduleAnalysis()
(GH 540)More useful
__repr__
output inAnalysisObj
andMetObj
(GH 471)
Contributors#
Silvana Ayala (@shirubana)
Chris Deline (@cdeline)
v0.4.3 (Aug 27 2024)#
Bugfix Release
API Changes#
A new function can now be called to compile results and report out final irradiance and performance data:
RadianceObj.compileResults
. (This is a temporary function soon to be deprecated)Multiple modules and rows can now be selected in a single analysis scan.
modWanted
androwWanted
inputs inanalysis1axis
can now be a list, to select multiple rows and modules for scans. (GH 405)(GH 408)To support multiple modules and row scans for 1axis simulations, outputs like Wm2Front are now stored in
trackerdict.Results
(GH 405)(GH 408)mismatch.mismatch.mad_fn
has new functionality and input parameteraxis
. If a 2D matrix or dataframe is passed in as data, MAD is calculated along the row (default) or along the columns by passing ‘axis=1’mismatch.mismatch_fit3
has been deprecated in favour ofmismatch.mismatch_fit2
which has a greater agreement with anual energy yield data (GH 520)
Enhancements#
Bug fixes#
Fixed error passing all of
sceneDict
into py:class:~bifacial_radiance.RadianceObj.makeScene1axis. (GH 502)Fixed Pandas 2.0 errors by re-factoring py:class:bifacial_radiance.mismatch.mad_fn (GH 449)
Switch from un-supported Versioneer to setuptools_scm (GH 519)
Numpy 2.0 compatibility bug (GH 521)
Fixed bug in
mismatch.mismatch_fit3
where the function was not returning the correct values. It has also been deprecated in favour ofmismatch.mismatch_fit2
which has a greater agreement with anual energy yield data (GH 520)Updated Github Actions to use Node20: checkout@v4, setup-python@v5, coactions/setup-xvfb, setup-buildx-action@v3 (GH 517)
Updated Github Actions to make Coveralls fail silently if it has an internal server error (GH 517)
Fix PerformanceWarning and SettingWithCopyWarning (GH 515)
Switch from Versioneer to setuptools_scm (GH 522)
Enable
coerce_year=None
if the TMYfile is all the same year (GH 526)
Documentation#
Edge effects evaluation tutorial 23, with the new functionality of multiple modules/rows on the same analysis scan.
Updates to example notebooks
Reduce number of digits in makeScene .rad file titles. (GH 503)
Reduce number of digits saved to files in results (GH 534)
In the sceneDict reported in the trackerdict, save both
clearance_height
andhub_height
parameters. (GH 503)
Contributors#
Silvana Ayala (@shirubana)
Chris Deline (@cdeline)
Kevin Anderson (@kandersolar)
Echedey Luis (@echedey-ls)
v0.4.2 (03 / 10 / 2023)#
Documentation, bug fix and enhancement update
Bug fixes#
Enhancements#
Adds new functions
ModuleObj
.saveImage
andSceneObj
.saveImage
to automatically save .hdr images of a module or scene to the /images/ directory. (GH 421)New
saveImage
functions are run by default in the modelchain if simulationParamsDict[‘saveImage’] = True. The gui will set saveImage = True by default. (GH 421)If modelchain is running a 1-axis simulation with simulationParamsDict[‘saveImage’] = True,
SceneObj
.saveImage
will render a scene using the tracker angle closest to 20 degree tilt (GH 421)
Deprecations#
Python 3.7 support is now deprecated. It should still work, but will not be tested by CI, and requirements.txt is incompatible.
RadianceObj
.nMods
andnRows
internal attributes have been removed. These are now defined perSceneObj
.sceneDict
(GH 455)trackerdict[index]['clearance_height']
attribute has been removed. These are available inside thetrackerdict[index]['scene']
SceneObj
.sceneDict
(GH 455)
Documentation#
API Changes#
Contributors#
Silvana Ovaitt (@shirubana)
Chris Deline (@cdeline)
Kevin Anderson (@kanderso-nrel)
v0.4.1 (03 / 09 / 2022)#
Minor bug fix update
API Changes#
Input parameters changed in
calculatePerformance
:temp_air
andwind_speed
.
Enhancements#
Deprecations#
Drop Python 3.6 support (it should still work though)
Bug fixes#
Documentation#
Contributors#
Silvana Ovaitt (@shirubana)
Chris Deline (@cdeline)
v0.4.0 (02 / 03 / 2022)#
Release of new version including new spectral property class, object-oriented ModuleObj class and other improvements for more seamless use with dask and paralellization.
Major usage changes include a ModuleObj output from makeModule, allowing updating geometry and adding module features (adding a torque tube, frame members, etc). This release also changes start and end time format to ‘YYYY-MM-DD_HHMM’ enabling multi-year and sub-hourly met file support.
API Changes#
The output of
makeModule
is now a new module classModuleObj
which stores module details and allows geometry modification and addition (GH 338)Object-oriented torque-tube generation function in ModuleObj.
addTorquetube
. Uses same input parameters previously passed into tubeParams. (GH 360)Object-oriented cell-level module generation function in ModuleObj.
addCellModule
. Uses same input parameters previously passed in the cellParams dict. (GH 360)Object-oriented module frame generation function in ModuleObj.
addFrame
. Uses same input parameters previously stored in the frameParams dict. (GH 360)Object-oriented module omega (tube mounting bracket) generation function in ModuleObj.
addOmega
. (GH 360)set1axis
has a new boolean input useMeasuredTrackerAngle. When set to True, it looks for manual tracker angle values in the weather file input with column name ‘Tracker Angle (degrees)’makeModule
now returns a ModuleObj instead of a dict. (GH 338)showModule
is moved out of SceneObj and is now in ModuleObj.showModule
(GH 338)Due to now allowing multiple years and subhourly files, timestamped files (octfiles, skyfiles, objects, results files) now are of YYYY-MM-DD_HHMM format.
readWeatherFile
has new arguments source, and coerce_year, but daydate option is removed. (GH 311)readWeatherFile
arguments starttime and endtime accept datetime and pd.TimeIndex inputs, as well as strings in either ‘MM_DD_HH’ or ‘MM_DD’ or ‘YYYY-MM-DD_HHMM’ format.Removed the standalone RadianceObj.readEPW function. Use
readWeatherFile
instead.genCumSky
new kwargumentgencumsky_metfile
pointing to the auto-generated met data csv file.set1axis
has new argumentfixed_tilt_azimuth
.makeOct1axis
input argumentsingleindex
must now take the format of ‘YYYY-MM-DD_HHMM’.moduleAnalysis
input arguments added:sensorsx
,modscanfront
,modscanback
,relative
.analysis
function has boolean inputRGB
to enable spectral simulationsRadianceObj
andAnalysisObj
objects now have an input argument forhpc
as boolean. hpc is true makes so that file reading waits longer to account for parallelization timing, and to not update to the central .json Module file while on parallelization.
Enhancements#
New
spectral_utils
module includes classes and functions to interact with irradiance spectra from SMARTS.Cell-specific module analysis. When a cell-level module is created, if sensorsy matches the number of cellsy the sensors will be positioned at the center of each solar cell.
sensorsy
can now be passed a list or tuple of 2 values. The first value is the number of front sensors, the second one is the number of rear sensors. This affectsmoduleAnalysis
andanalysis1axis
andgui
(GH 340)New
radname
input formakeScene
, so scenes do not overwrite with parallel processing.The software now considers Year in variuos of the routines, like metdata reading, sky creation and saving of results. (GH 250)
Sub-hourly weather files are now accepted in
readWeatherFile
The module scans dictionaries
modscanfront
andmodscanback
are now inputs on inanalysis1axis
so the scanning position can be be modified on the tracking routines (GH 263)Routine created to add materials to ground.scan.
addMaterial
(GH 278)(GH 74)makeModule
fuction has additional input to specify themodulematerial
.makeModule
fuction can create framed modules using the argumentframeParams
. Dictionary inputs include frame_material, frame_thickness, frame_z, frame_z and nsides_frame.makeModule
fuction generates Omegas (frame offset elements) using the argumentomegaParams
. Dictionary inputs include omega_material, x_omega1, mod_overlap, y_omega, omega_thickness, x_omega3 and inverted.makeModule
input argumentcellModule
has a new field option centerJB to reflect the distance betwen both sides of cell arrays in a center-junction box half-cell module. (still under development)makeScene
has optional input parameterradname
to give a custom name to the scene radfile.New
analyzeRow
function inAnalysisObj
to analyze every module in the row.readWeatherFile
allows ‘source=solargis’ input option to read commercial weather files obtained from SolarGIS.comFor all weather files, night-time data (GHI <= 0) is removed when the MetObj is created. This has always been the case for tracked simulations, but is also now true for fixed-tilt simulations as well.
deepcleanResult
is refactored to accept results files whether they have front, back or both irradiance data. (GH 346)
Deprecations#
gendaylit1axis
parametersstartdate
andenddate
are now deprecated. Downselect weather values when reading in weather file withreadWeatherFile
.genCumSky
arguments startdt and enddt are now removed. Limit time of simulations usingreadWeatherFile
argument starttime and endtime instead.genCumSky
kwargument epwfile has been removed. EPW files are no longer passed directly to genCumSky.makeScene
andmakeScene1axis
kwarg moduletype is now module (GH 338)readModule
andshowModule
are removed. (GH 338)makeModule
inputs variables diameter, material, torqueTubeMaterial, tubetype and axisofrotationTorqueTube are deprecated. use thetubeParams
dict input or ModuleObj.addTorquetube
instead. (GH 338)makeModule
input argumentcellLevelModuleParams
is now deprecated. Either pass dictionarycellModule
or use ModuleObj.addCellModule
(GH 338)Removed hpc input from
gendaylit1axis
,makeOct
,makeOct1axis
,makeScene
,makeScene1axis
,makeImage
, andanalysis
. Instead, passhpc
as input toRadianceObj
andAnalysisObj
or manually setRadianceObj
.hpc = True
Bug fixes#
For data in TMY3 format but has a interval smaller than 1 HR, now the
readWeatherFile
, function (which uses pvlib I/O function) fixes the timestamps from the already imported TMY3 data, with the column labeld ‘Time (HH:MM)’ (GH 278)runtimeWarnings are ignored in set1axis. Fixes pvlib tracker #260
Fixed bug on input file load that would rewrite
zgap
parameter asygap
. (GH 283)Image folder was not correctly loading on install (GH 275)(GH 282)
Weather data with zero length after filtering returns a more informative error (GH 332)
Errors while generating octfiles in
makeOct
are now printed instead of being muted.
Documentation#
HPC example scripts are now posted in \bifacial_radiance\HPCScripts. Knock yourself out.
JOSS Journal was published and is now referenced in documentation and READ.ME for citation, along with Zenodo DOIs.
Journal showing rear irradiance performance with and without white-pavers for ballasting the single axis trackers
AgriPV Journal improvements, and new Journal studying two crops with PV-module co-location
Example of running Spectral simulations with the use of dask.
Cleanup of journals and documentations throughout of coding comments.
Contributors#
Silvana Ovaitt (@shirubana)
Chris Deline (@cdeline)
Kevin Anderson (@kanderso-nrel)
Shamsul Arefeen (@sarefeen99)
Matt Brown (@mcbrown042)
Mark Monarch (@mmonarch)
v0.3.4 (05 / 26 / 2020)#
Release of new version including time-series albedo options, selecting if weather data is right, left or center labeled (averaged), and an updated module.json.
Starting this version, releases will have a Zenodo D.O.I for identification!
Deprecated support for Python 2.7. Stops support on this release. PVLib >= 0.7.0 is required for metdata file IO
Enhancements#
Enable
module.json
to be human readable and sorted. (GH 230)- Albedo:
Albedo: TIME-Varying ALBEDO: now albedo can be given for every timepoint being modeled.
Albedo: Functions
readWeatherFile()
,readEPW()
, andreadTMY()
return MetObj.albedo from TMY or EPW file if available (GH 246) (GH 68)Albedo:
setGround
pulls albedo if readWeatherfile has already been run and no explicit albedo is provided.Albedo:
setGround
accepts lists and 3xN RGB arraysAlbedo: Unrealistic albedo values are constrained to [0:1] (GH 227)
readWeatherFile()
,readEPW()
, andreadTMY()
now have an inputlabel
, to mark if data is right-averaged, left-averaged, or center-averaged. Default islabel=Right
, like TMY3 files: TMY3 data is right-labeled, so 11 AM data represents data from 10 to 11, and sun position is calculated at 10:30 AM. Sun position and tracker positions gets calculated according to the label chosen.
API Changes#
Input changed to
gendaylit
, now making metdata an optional input.
Bug fixes#
GUI tracker visualization enabled with proper changes in azimuth. (GH 229)
makeModule
informational messages updated. (GH 202)genCumSky1axis
bug fix for partial year data entry. (GH 203)AttributeError - bug fix in
analysis1axis
line 2207. (GH 251)Update to
mad_fun
to avoid Pandas 1.0 errors (GH 240)
Testing#
Added pytesting to
GroundObj
Documentation#
All notebooks and tests updated for new
albedo
in GroundObj functionalityNotebooks updated for
gendaylit
metdata optional inputCleaned up journal explaining how to use
glass
on modules.
Contributors#
Chris Deline (@cdeline)
Silvana Ayala (@shirubana)
Cameron Stark (@CameronTStark)
v0.3.3.2 (04 / 16 / 2020)#
Release of new version including fix to sensor orientation, increased py-testing, and glass in modules.
Enhancements#
Glass in modules now supported. New Glass material included in ground.rad. Example of use in Glass Tutorials.
Source code for gencumulativesky is now included along with makefile instructions in
/data/gencumsky/
New Torquetube options added on
makeModule
Added variables
frontsurfaceoffset
andbacksurfaceoffset
tomoduleAnalysis
, to offer the ability of controling the offset in local z of the sensor locations from the module’s front and rear surface.
API Changes#
readTMY
now saves the temporal TMY files generated for daydate simulations with different titles to avoid overwriting in parallel simulations.Input for daydate added to
analysis1axis
, allowing to save cumulative files for daydate.Sorted trackerdict keys on simulations that use trackerdict routines
Removed deprecation warning and inputs
nMods
andnRows
onmakeScene1axis
Modified quickExample() to include testfolder as an input, and returned analysis results. Call to interactive directory selection called from main.py instead than being redefined inside the function. (GH 201)
Removed HPCExample() function from main.py (added as a Tutorial Notebook)
Fix GUI load issue when None values passed
Set GUI default
modWanted
androwWanted
to Nullreadconfigurationinputfile
.ini input files now use the keytimeIndexSimulation
instead oftimestampRangeSimulation
Bug fixes#
Fixed sensor’s orientation error in scanning function calculation, mainly affecting high-tilt angle simulations (GH 226)
Fix GUI to allow reading null values for
modWanted
androwWanted
Exception handling for daily simulations in
gendaylit1axis
, due to a for loop going out of range for endindex+1 (GH 225)
Testing#
Modified pytest assertions for skies to avoid OS issues (skietc or skie//etc)
Added pytesting to
getSingleTimestampTrackerAngle
Added pytesting to sceneDict
height
inmakeScene1axis
Added pytesting for
makeImage
and py:class:~bifacial_radiance.AnalysisObj.makeFalseColorAdded pytest for
gendaylit2manual
Added pytest for
genCumSky
in py:class:~bifacial_radiance.modelchain.runModelChainAdded pytest for
genCumSky1axis
ontest_1axis_genCumSky()
Added pytest for torque tubes
makeModule
Added pytest for pitch and gcr on
makeScene1axis
(GH 204)Added pytest to
quickExample
(GH 201)Added pytest for
getEPW
Documentation#
Updated bifacial_radiance D.O.E. reference citation on index. (GH 213)
Added pip install options to Installation
Added software compatibility to Installation (GH 190)
Added Linux and MacOS instructions to Installation (GH 198)
Added content to Package Overview section (GH 191)
Added intended audience to documentation and main Github Readme (GH 192)
Platform and python-version updates throughout documentation (GH 198)
Improvements to Contributing guidelines (GH 191)(GH 196)
Working Folder path fixed on Tutorial Journals for compatibility with other OS Systems (GH 217)
Updated Youtube’s installation instructions to mention how to pip install bifacial_radiance, pip install pvlib, and comments for Linux/Mac OSX users to read the install guide on readthedocs.
Added suggestion to install Anaconda to run Jupyter Tutorial notebooks in Installation (GH 194)
Contributors#
Chris Deline (@cdeline)
Silvana Ayala (@shirubana)
Jason Alderman (@jalderman9)
Mark Mikofski (@mikofski)
v0.3.3.1 (10 / 16 / 2019)#
This is a minor release, a patch to fix a GUI error preventing the simulation from running.
v0.3.3 (10 / 14 / 2019)#
This is a major release that adds many power mismatch analysis features, GUI updates as well as documentation.
Deprecated support for Python 2.7. Will stop support on next release
API Changes#
readWeatherFile
set as main function to read TMY and EPW files.Added
startdate
andenddate
inputs toreadWeatherFile()
, in str formatMM_DD_HH
.Deprecated
gencumsky
startdate and enddate options.Fixed tilt simulations can now use the tracking workflow by passing a
fixed_tilt_angle
variable intoset1axis
. This has been implemented as the default for hourly simulations in the ModelChain and GUI.Renamed many functions with a dash, to differentiate from functions called by user and helper-functions that are subfunctions or called by the main functions. (GH 155)
Update internal paths to TESTDIR rather than os.cwd
gendaylit
: update to use the sunposition automatically stored withmetdata
Corrected print statements for full year hourly simulations to reflect the exact number of datapoints considered in that ratio average.
Changed functionality of ModelChain for tracking: if
simulationParamsDict[dayDateSimulation]
is False, default to full-year simulation even iftimeParamsDict
is passed.Added print statement for fixed tilt and tracking modelchain results.
Raise error if tracking modelchain is used with
timestampRangeSimulation
Updated modelchain
daydate
functionality: when starthour = endhour gives that hour of analysis.Add filenotfound error checking for loading .ini file
Added analysis.py to modules loaded by bifacial_radiance as default.
Trackerdict now keeps track of hub_height (GH 168)
Updated requirements for PVLib > 0.6.1 to avoid deprecation warnings (GH 158)
Enhancements#
Bug fixes#
Fix accuracy setting for
analysis1axis()
on (GH 150)GUI: GCR or Pitch independently read based on selection, so no need for values to match (GH 143)
Fixed tracking daydate hourly (GH 125)
Fix to avoid divide-by-zero errors in
gendaylit
Fix GUI tracking hourly by day, which was still reading enddate (GH 136)
GUI: fixing automatically downloading getEPW when readEPW was selected.
Testing#
Increase in pytesting, particularly for secondary modules in bifacial_radiance (other than main.py)
Tracking pytesting with coveralls
Rename test .ini files to avoid name confusion with test.py files
Add test for bad RadianceObj path
Documentation#
readtheDocs now connected. Moved all documentation to sphinx format.
Revamping of journals, with more explanations, images, and sorted by level of difficulty.
Contributors#
Chris Deline (@cdeline)
Silvana Ayala (@shirubana)
Jason Alderman (@jalderman9)
Mark Mikofski (@mikofski)
v0.3.0 (05 / 14 / 2019)#
This is a major release that includes the release of a new Visual Interface (GUI). We recommend all users to upgrade to this release as many internal geometry handling has been updated and made more accurate.
API Changes#
Dictionaries implemented as inputs to most functions.
Height deprecated as input, now functions expect clerance_height or hub_height.
Enhancements#
New GUI.
Modelchains implemented.
New internal Geometry handling.
Modules get centered on X and Y.
Geometry of scenes gets constructed around (X,Y) (0,0), placing the center of the center module of the center row in that position
New/improved sensor locations.
Multiple Scene object capability for fixed scenes.
HPC friendly code.
More module creation options
cell Level model capability with dictionary input.
Axis of rotation around torque tube possible with axisofrotation parameter.
Contributors#
Chris Deline (@cdeline)
Silvana Ayala (@shirubana)
v0.2.4 (02 / 27 / 2019)#
Various improvements across the bifacial_radiance software.
API Changes#
Module orientation deprecated. Now module is defined by
x
(dimension along rack) andy
(dimensio nin slant direction).Module gap variables renamed to
xgap
,ygap
, andzgap
.scenex
andsceney
variables introduced which include torquetube and gap dimensions.Py36 and cross-platform code compliance implemented
Modified
gendaylit()
to be based on sun positions by defaultgendaylit()
now uses PVLib for calculating sun position angles instea dof using Radiance internal sun positoin calculations.Updated
bifacial_radiance.AnalysisObj.makeFalseColor()
routine for visualizing in falsecolor the octfile.Moved existing and new load routines into
load
Enhancements#
More torquetube options added (round, square, hexagonal and octagonal profiles)
custom spacing between modules in a row added,
Added accuracy input option for 1-axis scans
Update to sensor position on 1axistracking.
Bugs#
Module-select and module scan bug fixed
Testing#
Updates to pytests.
Contributors#
Chris Deline (@cdeline)
Silvana Ayala (@shirubana)
v0.2.3 (11 / 14 / 2018)#
This release introduces the option to module torque tubes now added as part of makeModule.
Enhancements#
Arbitrary length and position of module scans in makeScene.
Torquetube option to makeModule
makeModule()
Option to add module gaps
xgap
,ygap
, andzgap
inmakeModule()
New functions
bifacial_radiance.RadianceObj.gendaylit1axis()
,bifacial_radiance.RadianceObj.makeOct1axis()
andbifacial_radiance.RadianceObj.analysis1axis()
trackerdict
already mapped toself.trackerdict
, so no longer mapping onanalysis1axis()
Contributors#
Chris Deline (@cdeline)
Silvana Ayala (@shirubana)
v0.2.2 (08 / 29 / 2018)#
Negative 1 hour offset to TMY file inputs
v0.2.1 (05 / 21 / 2018)#
Allow TMY3 input files
Using a different EPW file reader.
v0.2.0 (03 / 21 / 2018)#
Critical 1-axis tracking update to fix geometry issues that were over-predicting 1-axis results
v0.1.1 (03 / 08 / 2018)#
Allow southern latitudes.
v0.1.0 (12 / 18 / 2017)#
1-axis bug fix and validation vs PVSyst and ViewFactor model.
v0.0.5 (12 / 13 / 2017)#
1-axis tracking draft.
gencumsky()
now allows-G
filetype optoin for support of 1-axis tracking.
v0.0.4 (12 / 13 / 2017)#
Include configuration file module.json and custom module configuration.
v0.0.3 (12 / 13 / 2017)#
Arbitrary NxR number of modules and rows for SceneObj
v0.0.2 (06 / 29/ 2017)#
Adjustable azimuth
angle other than 180.
v0.0.1 (05 / 24 / 2017)#
Initial stable release.