<commit_before><p align="center">
  <img src="https://github.com/VitensTC/epynet/blob/master/logo.png" alt="Epynet Logo"/>
</p>


EPYNET is an object oriented wrapper around the EPANET 2.1 community edition hydraulic network solver.

## Features
- [x] Hydraulic calculations
- [x] Object oriented access to Nodes, Junctions, Reservoirs, Tanks, Links, Pipes, Valves and Pumps
- [x] Convienent access to simulation results such as flow, velocity and pressure through class properties
- [x] Manipulation of valve and pump settings
- [x] Manipulation of pipe, junction, reservoir and tank settings
- [x] Support for time series
- [x] Pattern and Curve creation and manipulation
- [x] Create and remove nodes and links
- [ ] [TODO] Chemical calculations

## Example Usage
```python
# load a network
from epynet import Network
network = Network('network.inp')
# solve network
network.solve()
# properties
print(network.pipes['4'].flow)
print(network.nodes['1'].demand)
# valve manipulation
network.valves['12'].setting = 10
# convinience properties
print(network.pipes['5'].downstream_node.pressure)
print(network.nodes['1'].upstream_links[0].velocity)<commit_msg>update readme, trigger CI<commit_after><p align="center">
  <img src="https://github.com/VitensTC/epynet/blob/master/logo.png" alt="Epynet Logo"/>
</p>


EPYNET is an object oriented wrapper around the EPANET 2.1 community edition hydraulic network solver.

## Features
- [x] Hydraulic calculations
- [x] Object oriented access to Nodes, Junctions, Reservoirs, Tanks, Links, Pipes, Valves and Pumps
- [x] Convienent access to simulation results such as flow, velocity and pressure through class properties
- [x] Manipulation of valve and pump settings
- [x] Manipulation of pipe, junction, reservoir and tank settings
- [x] Support for time series
- [x] Pattern and Curve creation and manipulation
- [x] Create and remove nodes and links
- [x] Work on multiple networks at the same time
- [ ] [TODO] Chemical calculations

## Example Usage
```python
# load a network
from epynet import Network
network = Network('network.inp')
# solve network
network.solve()
# properties
print(network.pipes['4'].flow)
print(network.nodes['1'].demand)
# valve manipulation
network.valves['12'].setting = 10
# convinience properties
print(network.pipes['5'].downstream_node.pressure)
print(network.nodes['1'].upstream_links[0].velocity)
{'fraction_non_alphanumeric': 0.11442995372318047, 'fraction_numerical': 0.009255363904080775, 'mean_word_length': 5.341333333333333, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1581391', 'n_tokens_mistral': 752, 'n_tokens_neox': 695, 'n_words': 249}