Release notes

v0.1.6 (Master branch)

v0.1.5 (May 29, 2018)

  • Replaced the use of Pandas Panels with a dictionary of Pandas DataFrames (Pandas is deprecating Panels). This changes the way users interact with simulation results.
    • Removed ‘expected_demand’ and ‘type’ from simulation results. Expected demand can be computed using expected_demand. Node and link type is stored in the WaterNetworkModel and is no longer used to compute metrics.
    • Removed simulation_results example, example code is now embedded in the documentation.
  • Updated metrics to use simulation results in the new format and to clarify names.
    • Input arguments are now more explicit, e.g. pass a DataFrame with junction demands instead of an entire Panel with information that might not be used.
    • Updated the following metric names: changed fdv (fraction of delivered volume) to water_service_availability, todini to todini_index, cost to annual_network_cost, ghg_emissions to annual_ghg_emissions.
    • Removed the following metrics: fdd (fraction of delivered demand) and fdq (fraction of delivered quality), these can be computed with simple queries on demand and quality simulation results.
  • Improved error messages when simulation does not converge.
  • Updated default options for the WNTRSimulator.
  • Bug fix in node registries for the use of patterns.
  • Changed default colormap in network graphics from jet to Spectral_r.
  • Updated documentation.

v0.1.4 (February 23, 2018)

v0.1.4 includes several changes that improve simulation stability and tests to ensure that simulations run using WNTR match EPANET simulations. In addition to the publicly available software tests on, WNTR is also tested on private servers using several large water utility network models.

  • Added a faster EPANET binary output file reader
  • Updated the order in which controls operate to match EPANET
  • Updated controls classes to include Control and Rule objects (API change, see Control and Rule)
  • Added ability to get the names of all required objects that are queried or acted upon by the control/rule (see requires)
  • Modified the structure of the WaterNetworkOptions object to group options into types (API change, see WaterNetworkOptions)
  • Created water network model objects for different types of valves (see PRValve, PSValve, PBValve, FCValve, TCValve, and GPValve) and pumps (see HeadPump and PowerPump)
  • Created a Pattern object that contains a list of values (see Pattern)
    • A Pattern object can be called to get the pattern value at a specific time
  • Created a TimeSeries object that contains a base value, Pattern object, and category (see TimeSeries)
    • TimeSeries are used to store junction demand, source injection, pricing, pump speed, and reservoir head
    • A TimeSeries object can be called to get the timeseries value at a specific time
  • Created a Demands object to store a list of TimeSeries objects (see Demands)
    • Demands are used to store multiple demands at a single junction
    • A Demands object can be called to get the total demand at a specific time (does not include the demand multiplier)
    • Since a junction can have multiple demands, ‘base_demand’ is no longer a Junction attribute (API change). The Demands object can be used to extract the base value per demand.
    • Expected demand and average daily expected demand can be calculated using new metrics (see expected_demand and average_expected_demand). The metric ‘average_water_consumed’ has been removed.
  • Added support for flow control valves (FCV), multiple demands at a junction, variable reservoir head, and rule timesteps in the WNTRSimulator
  • Modified the dependence between the WaterNetworkModel and the NetworkX graph. The graph is now built from scratch when WaterNetworkModel.get_graph() is called. WaterNetworkModel.get_graph_deep_copy() has been removed (API change, see get_graph).
  • Modified the WaterNetworkModel.add_pattern() to no longer accept start_time and end_time options. Binary patterns can be created using the Patterns object (API change, see binary_pattern).
  • Added ENsaveinpfile to the EPANET toolkit (see ENsaveinpfile)
  • Updated documentation

v0.1.3 (October 3, 2017)

  • Added method to compute pump energy and cost
  • Added methods to plot fragility curves and pump curves
  • Bug fix to support 24-hour clocktime format and correct tank volume curve name in EPANET INP files
  • Added ability to create network graphics in subplots (API change, see plot_network)
  • Changed argument in the WNTRSimulator specifying demand-driven or pressure dependent demand (API change, see WNTRSimulator)
  • Updated use of NetworkX to be compatible v2.0
  • Bug fix in method used to split pipes. The updated method modifies the original pipe and retains rules and controls associated with that pipe. (API change, see split_pipe, replaces split_pipe_with_junction)
  • Updated documentation

v0.1.2 (May 19, 2017)

  • Improved EPANET INP file reader/writer with unit conversions
  • Added EPANET binary file reader
  • Improved model option handling with the EpanetSimulator
  • Added water network compatibility with EPANET INP file SOURCES and RULES
  • Restructured code base (API change)
    • Added epanet package which contains an epanet toolkit, EPANET INP file reader/writer, and unit conversions. Removed pyepanet package.
    • Added graphics package which contains functions to plot networks. Renamed draw_graph to plot_network. Added a function to create network graphics using Plotly.
    • Reorganized metrics, network, scenario, sim, and utils packages
    • Removed Waterquality class from the scenario package. This functionality has been replaced with Source class in the water network model.
  • Updated documentation

v0.1.1 (February 6, 2017)

  • Updated package for Python 3.4 and 3.5 compatibility
  • Added install requirements to
  • Bug fix in animation example
  • Updated documentation

v0.1.0 (October 17, 2016)

This is the first official release of WNTR. Features include basic functionality to:

  • Generate water network models
  • Modify network structure and operations
  • Add disruptive incident and response/repair strategies
  • Simulate network hydraulics using pressure dependent demand or demand-driven hydraulic simulation
  • Run probabilistic simulations using fragility curves
  • Compute resilience using topographic, hydraulic, water quality/security, and economic metrics
  • Analyze results and generate graphics