epyt-flow 0.2.0__py3-none-any.whl → 0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
epyt_flow/topology.py CHANGED
@@ -3,6 +3,7 @@ Module provides a class for representing the topology of WDN.
3
3
  """
4
4
  from copy import deepcopy
5
5
  import warnings
6
+ from typing import Any
6
7
  import numpy as np
7
8
  import networkx as nx
8
9
  from scipy.sparse import bsr_array
@@ -14,6 +15,35 @@ UNITS_USCUSTOM = 0
14
15
  UNITS_SIMETRIC = 1
15
16
 
16
17
 
18
+ def unitscategoryid_to_str(unit_category_id: int) -> str:
19
+ """
20
+ Converts a given units category ID to the corresponding description.
21
+
22
+ Parameters
23
+ ----------
24
+ unit_category_id : `int`
25
+ ID of the units category.
26
+
27
+ Must be one of the following constants:
28
+
29
+ - UNITS_USCUSTOM = 0
30
+ - UNITS_SIMETRIC = 1
31
+
32
+ Returns
33
+ -------
34
+ `str`
35
+ Units category description.
36
+ """
37
+ if unit_category_id is None:
38
+ return ""
39
+ elif unit_category_id == UNITS_USCUSTOM:
40
+ return "US CUSTOMARY"
41
+ elif unit_category_id == UNITS_SIMETRIC:
42
+ return "SI METRIC"
43
+ else:
44
+ raise ValueError(f"Unknown units category ID '{unit_category_id}'")
45
+
46
+
17
47
  @serializable(NETWORK_TOPOLOGY_ID, ".epytflow_topology")
18
48
  class NetworkTopology(nx.Graph, JsonSerializable):
19
49
  """
@@ -29,7 +59,7 @@ class NetworkTopology(nx.Graph, JsonSerializable):
29
59
  List of all links/pipes -- i.e. link ID, ID of connecting nodes, and link information
30
60
  such as pipe diameter, length, etc.
31
61
  units : `int`
32
- Measurement units category.
62
+ Measurement units category -- i.e. US Customary or SI Metric.
33
63
 
34
64
  Must be one of the following constants:
35
65
 
@@ -63,6 +93,76 @@ class NetworkTopology(nx.Graph, JsonSerializable):
63
93
  info={"id": link_id, "nodes": link, "diameter": link_diameter,
64
94
  "length": link_length})
65
95
 
96
+ def convert_units(self, units: int) -> Any:
97
+ """
98
+ Converts this instance to a :class:`epyt_flow.topology.NetworkTopology` instance
99
+ where everything is measured in given measurement units category
100
+ (US Customary or SI Metric).
101
+
102
+ Parameters
103
+ ----------
104
+ units : `int`
105
+ Measurement units category.
106
+
107
+ Must be one of the following constants:
108
+
109
+ - UNITS_USCUSTOM = 0 (US Customary)
110
+ - UNITS_SIMETRIC = 1 (SI Metric)
111
+
112
+ Returns
113
+ -------
114
+ :class:`epyt_flow.topology.NetworkTopology`
115
+ Network topology with the new measurements units.
116
+ """
117
+ if self.__units is None:
118
+ raise ValueError("This instance does not contain any units!")
119
+
120
+ if not isinstance(units, int):
121
+ raise TypeError(f"'units' must be an instance of 'int' but not of '{type(units)}'")
122
+ if units not in [UNITS_SIMETRIC, UNITS_USCUSTOM]:
123
+ raise ValueError(f"Invalid units '{units}'")
124
+
125
+ if units == self.__units:
126
+ warnings.warn("Units already set in this NetworkTopology instance -- nothing to do!")
127
+ return deepcopy(self)
128
+
129
+ # Get all data and convert units
130
+ inch_to_millimeter = 25.4
131
+ feet_to_meter = 0.3048
132
+
133
+ nodes = []
134
+ for node_id in self.get_all_nodes():
135
+ node_info = self.get_node_info(node_id)
136
+ if units == UNITS_USCUSTOM:
137
+ conv_factor = 1. / feet_to_meter
138
+ else:
139
+ conv_factor = feet_to_meter
140
+ node_info["elevation"] *= conv_factor
141
+ if "diameter" in node_info:
142
+ node_info["diameter"] *= conv_factor
143
+
144
+ nodes.append((node_id, node_info))
145
+
146
+ links = []
147
+ for link_id, link_nodes in self.get_all_links():
148
+ link_info = self.get_link_info(link_id)
149
+
150
+ if units == UNITS_USCUSTOM:
151
+ conv_factor = 1. / feet_to_meter
152
+ else:
153
+ conv_factor = feet_to_meter
154
+ link_info["length"] *= conv_factor
155
+
156
+ if units == UNITS_USCUSTOM:
157
+ conv_factor = 1. / inch_to_millimeter
158
+ else:
159
+ conv_factor = inch_to_millimeter
160
+ link_info["diameter"] *= conv_factor
161
+
162
+ links.append((link_id, link_nodes, link_info))
163
+
164
+ return NetworkTopology(f_inp=self.name, nodes=nodes, links=links, units=units)
165
+
66
166
  def get_all_nodes(self) -> list[str]:
67
167
  """
68
168
  Gets a list of all nodes.
@@ -85,7 +185,7 @@ class NetworkTopology(nx.Graph, JsonSerializable):
85
185
  """
86
186
  return [(link_id, end_points) for link_id, end_points, _ in self.__links]
87
187
 
88
- def get_node_info(self, node_id) -> dict:
188
+ def get_node_info(self, node_id: str) -> dict:
89
189
  """
90
190
  Gets all information (e.g. elevation, type, etc.) associated with a given node.
91
191
 
@@ -105,7 +205,7 @@ class NetworkTopology(nx.Graph, JsonSerializable):
105
205
 
106
206
  raise ValueError(f"Unknown node '{node_id}'")
107
207
 
108
- def get_link_info(self, link_id) -> dict:
208
+ def get_link_info(self, link_id: str) -> dict:
109
209
  """
110
210
  Gets all information (e.g. diameter, length, etc.) associated with a given link/pipe.
111
211
 
@@ -155,7 +255,7 @@ class NetworkTopology(nx.Graph, JsonSerializable):
155
255
 
156
256
  def __str__(self) -> str:
157
257
  return f"f_inp: {self.name} nodes: {self.__nodes} links: {self.__links} " +\
158
- f"units: {self.__units}"
258
+ f"units: {unitscategoryid_to_str(self.__units)}"
159
259
 
160
260
  def get_attributes(self) -> dict:
161
261
  return super().get_attributes() | {"f_inp": self.name,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: epyt-flow
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: EPyT-Flow -- EPANET Python Toolkit - Flow
5
5
  Author-email: André Artelt <aartelt@techfak.uni-bielefeld.de>, "Marios S. Kyriakou" <kiriakou.marios@ucy.ac.cy>, "Stelios G. Vrachimis" <vrachimis.stelios@ucy.ac.cy>
6
6
  License: MIT License
@@ -32,8 +32,9 @@ Requires-Dist: falcon >=3.1.3
32
32
  Requires-Dist: multiprocess >=0.70.16
33
33
  Requires-Dist: psutil
34
34
 
35
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
36
35
  [![pypi](https://img.shields.io/pypi/v/epyt-flow.svg)](https://pypi.org/project/epyt-flow/)
36
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
37
+ ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/epyt-flow)
37
38
  [![build](https://github.com/WaterFutures/EPyT-Flow/actions/workflows/build_tests.yml/badge.svg)](https://github.com/WaterFutures/EPyT-Flow/actions/workflows/build_tests.yml)
38
39
  [![Documentation Status](https://readthedocs.org/projects/epyt-flow/badge/?version=stable)](https://epyt-flow.readthedocs.io/en/stable/?badge=stable)
39
40
  [![Downloads](https://static.pepy.tech/badge/epyt-flow)](https://pepy.tech/project/epyt-flow)
@@ -41,6 +42,8 @@ Requires-Dist: psutil
41
42
 
42
43
  # EPyT-Flow -- EPANET Python Toolkit - Flow
43
44
 
45
+ <img src="https://github.com/WaterFutures/EPyT-Flow/blob/main/docs/_static/net1_plot.png?raw=true" align="right" height="230px"/>
46
+
44
47
  EPyT-Flow is a Python package building on top of [EPyT](https://github.com/OpenWaterAnalytics/EPyT)
45
48
  for providing easy access to water distribution network simulations.
46
49
  It aims to provide a high-level interface for the easy generation of hydraulic and water quality scenario data.
@@ -50,8 +53,6 @@ and [EPANET-MSX](https://github.com/USEPA/EPANETMSX/).
50
53
  EPyT-Flow provides easy access to popular benchmark data sets for event detection and localization.
51
54
  Furthermore, it also provides an environment for developing and testing control algorithms.
52
55
 
53
- ![](https://github.com/WaterFutures/EPyT-Flow/blob/main/docs/_static/net1_plot.png?raw=true)
54
-
55
56
 
56
57
  ## Unique Features
57
58
 
@@ -74,8 +75,18 @@ Unique features of EPyT-Flow that make it superior to other (Python) toolboxes a
74
75
  EPyT-Flow supports Python 3.9 - 3.12
75
76
 
76
77
  Note that [EPANET and EPANET-MSX sources](epyt_flow/EPANET/) are compiled and overwrite the binaries
77
- shipped by EPyT IF EPyT-Flow is installed on a Linux system. By this we not only aim to achieve
78
- a better performance of the simulations but also avoid any compatibility problems of pre-compiled binaries.
78
+ shipped by EPyT **IF** EPyT-Flow is installed on a Unix system and the *gcc* compiler is available.
79
+ By this, we not only aim to achieve a better performance of the simulations but also avoid any
80
+ compatibility issues of pre-compiled binaries.
81
+
82
+ #### Prerequisites for macOS users
83
+ The "true" *gcc* compiler (version 12) is needed which is not the
84
+ *clang* compiler that is shipped with Xcode and is linked to gcc!
85
+
86
+ The correct version of the "true" *gcc* can be installed via [brew](https://brew.sh/):
87
+ ```
88
+ brew install gcc@12
89
+ ```
79
90
 
80
91
  ### PyPI
81
92
 
@@ -1,10 +1,11 @@
1
- epyt_flow/VERSION,sha256=H5MN0fEzwfl6lP46y42zQ3LPTAH_2ys_9Mpy-UlBIek,6
2
- epyt_flow/__init__.py,sha256=0xHKMfJ1mmAcaFVcg723MH0fps8q-7ELCRBaUkX0o8k,1456
1
+ epyt_flow/VERSION,sha256=2RXMldbKj0euKXcT7UbU5cXZnd0p_Dxh4mO98wXytbA,6
2
+ epyt_flow/__init__.py,sha256=KNDiPWiHdB9a5ZF1ipjA1uoq61TwU2ThjaStpvSLBtY,1742
3
3
  epyt_flow/metrics.py,sha256=kvt42pzZrUR9PSlCyK4uq5kj6UlYHkt7OcCjLnI1RQE,12883
4
4
  epyt_flow/serialization.py,sha256=nBcwc3aMUbHF0zW8Nvpc49kKeLPh75blc3gzjKDR1ok,12893
5
- epyt_flow/topology.py,sha256=ou5TMr-PCE7EbiyS2awp0MuC5v6-4Zw5AI63NApnZ_A,10961
5
+ epyt_flow/topology.py,sha256=LTWqKwXVRfg3zYN16x5_ZH-wUj8U5hB2spLWzlEnsqM,14221
6
6
  epyt_flow/utils.py,sha256=-1DFDpST_J86AB6pd2ufe_QQ06_tvQqB-5wD8DXacaU,11507
7
7
  epyt_flow/EPANET/compile_linux.sh,sha256=wcrDyiB8NkivmaC-X9FI2WxhY3IJqDLiyIbVTv2XEPY,489
8
+ epyt_flow/EPANET/compile_macos.sh,sha256=1K33-bPdgr01EIf87YUvmOFHXyOkBWI6mKXQ8x1Hzmo,504
8
9
  epyt_flow/EPANET/EPANET/SRC_engines/AUTHORS,sha256=yie5yAsEEPY0984PmkSRUdqEU9rVvRSGGWmjxdwCYMU,925
9
10
  epyt_flow/EPANET/EPANET/SRC_engines/LICENSE,sha256=8SIIcPPO-ga2HotvptcK3uRccZOEGCeUOIU0Asiq7CU,1070
10
11
  epyt_flow/EPANET/EPANET/SRC_engines/Readme_SRC_Engines.txt,sha256=7LWHGbghkYJb18wkIskUzYswRq0ZTMu_m6nV0IfvCOs,1005
@@ -79,14 +80,14 @@ epyt_flow/EPANET/EPANET-MSX/Src/smatrix.h,sha256=heHTNgQNNDTs_Jx0YBts7_B7dPg8VUF
79
80
  epyt_flow/EPANET/EPANET-MSX/Src/include/epanetmsx.h,sha256=L9y0VKHk5Fg1JZxID9uBzcvLZWOb1xuQP-MkmHH_LD4,3429
80
81
  epyt_flow/EPANET/EPANET-MSX/Src/include/epanetmsx_export.h,sha256=h5UMaf6pH_0asRJOmhWUGAZhyA180ui2Cz8_y5h1FKw,1054
81
82
  epyt_flow/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
- epyt_flow/data/networks.py,sha256=E3tVEl63IKuXPPPtbfbhFto52R4-BRZgBqRYVzkDfcc,24343
83
+ epyt_flow/data/networks.py,sha256=Ct-3tNEJPq6EooGWHr_Hz4vkkNYjv-QgiSwNKOTZ-oM,38526
83
84
  epyt_flow/data/benchmarks/__init__.py,sha256=nJ6hqPaPNp8YMizniev3fwOWpzvvNUBMoRF16wACUkE,754
84
85
  epyt_flow/data/benchmarks/batadal.py,sha256=sa_OZwO5XIbJONgGMwgok-KCGyHq07WpIQagVq-a-gw,11175
85
86
  epyt_flow/data/benchmarks/batadal_data.py,sha256=oIzcysGivMPAgrfzrk5l8i-j6Ii96DPcFa6sL4TSaw8,880
86
87
  epyt_flow/data/benchmarks/battledim.py,sha256=K0j9tbfxuXJmqBQY_e5XBJZGDYavaOZ7efkCT96Fb8A,20167
87
88
  epyt_flow/data/benchmarks/battledim_data.py,sha256=0vHm-2eAiLv6U-n5dqUUWS1o_szFRy9mVJ3eqDRp4PE,3373
88
89
  epyt_flow/data/benchmarks/gecco_water_quality.py,sha256=1buZRJiNf4jsqWYg4Ud90GhqaiLVo4yij3RAZJkzsqE,10985
89
- epyt_flow/data/benchmarks/leakdb.py,sha256=aLDb_iRepAft2Wxu0BaUFD5LyoiRM5KvDv1dTIlm2QM,25445
90
+ epyt_flow/data/benchmarks/leakdb.py,sha256=jMMSxJ6XrjOo5b91sGwplT5mTcv3k9Xr-TnWz3BhMbw,24952
90
91
  epyt_flow/data/benchmarks/leakdb_data.py,sha256=FNssgMkC1wqWVlaOrrihr4Od9trEZY7KeK5KuBeRMvM,507058
91
92
  epyt_flow/data/benchmarks/water_usage.py,sha256=FLqjff3pha33oEU9ZM3UGPXn9eJJumsJH8Gdj7YFX3A,4778
92
93
  epyt_flow/gym/__init__.py,sha256=KNTDtPTEtHwZ4ehHfj9qGw81Z9acFqPIgMzYUzH5_uM,115
@@ -96,13 +97,13 @@ epyt_flow/models/__init__.py,sha256=be5s08y1Tg66SuNYKGz5GnNMHThnQJo8SWJdT9493Kc,
96
97
  epyt_flow/models/event_detector.py,sha256=idR7byBgloo07XEJEyMIwi49VW4wxJErLQtI-tJXWPs,789
97
98
  epyt_flow/models/sensor_interpolation_detector.py,sha256=5MBK9WlliGPonrNApf0j9lp-NjwF0iTwPDXx4yv7Fa0,3624
98
99
  epyt_flow/rest_api/__init__.py,sha256=4HilmXhdh6H56UHJBB2WUSULlEBUDnI1FPTP11ft3HE,126
99
- epyt_flow/rest_api/base_handler.py,sha256=Te70M40_oGCAE9zK2EdcUbQZQi7ti5_bGpxvublKvB0,1886
100
+ epyt_flow/rest_api/base_handler.py,sha256=I5ZcSiCJOH9sY5Ai_CdvSZ8PMVblyxCd82beE_2Sjlo,2262
100
101
  epyt_flow/rest_api/res_manager.py,sha256=j6-3FUBZNLKM9bCsIDZzSytfDYJbDLRwjn1mIPstTqI,2342
101
- epyt_flow/rest_api/server.py,sha256=EeywjhHkqk0PU1vaDTBC1dy6ROROg9sOmRCdp4bphks,7589
102
+ epyt_flow/rest_api/server.py,sha256=kZlprvRw7op39s7KhtEt1TgAsqs94KTQEdzIW9NMMJc,7778
102
103
  epyt_flow/rest_api/scada_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
104
  epyt_flow/rest_api/scada_data/data_handlers.py,sha256=VpOQq_jb2d7CuZbPQ1lKfb5dd5UAkBp7H0mEtlDJMzo,10938
104
105
  epyt_flow/rest_api/scada_data/export_handlers.py,sha256=m5gM1u7z-KFZ5SCSS0f2Fs6PpAT8FX3FvCS2mp7DmTA,4450
105
- epyt_flow/rest_api/scada_data/handlers.py,sha256=zX-0kgCwp4F3gQ1oSd4vvNjbc4lJUBvbm3icUlvI1Ls,5391
106
+ epyt_flow/rest_api/scada_data/handlers.py,sha256=tFVY11C3tolTkNVbXXBb0_KnHv38UE4fOUtnqkvec8Y,6893
106
107
  epyt_flow/rest_api/scenario/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
108
  epyt_flow/rest_api/scenario/event_handlers.py,sha256=oIqbXWQVqJp0MzE9V4UhGF4fXPF03oWbKEyLhC6g_Ko,3842
108
109
  epyt_flow/rest_api/scenario/handlers.py,sha256=bDqMa-jM4hOMVqs0XvQJtHbQDZx9FP40GiEGwW38fGk,12353
@@ -110,29 +111,29 @@ epyt_flow/rest_api/scenario/simulation_handlers.py,sha256=oY1Ch6ZQgYT_5WeE1I7tvG
110
111
  epyt_flow/rest_api/scenario/uncertainty_handlers.py,sha256=uuu6AP11ZZUp2P3Dnukjg5ZTjyYKljlubg1xLN1GnXY,4048
111
112
  epyt_flow/simulation/__init__.py,sha256=VGGJqJRUoXZjKJ0-m6KPp3JQqD_1TFW0pofLgkwZJ8M,164
112
113
  epyt_flow/simulation/parallel_simulation.py,sha256=mMevycgtnMjV2FDq50WS4HjAdcOlI72Aj6FBX4HZDtc,6508
113
- epyt_flow/simulation/scenario_config.py,sha256=6FUo49qUtWgM0nRJ10-v08Iq9t7pHiYpWW2rtl_1558,26531
114
- epyt_flow/simulation/scenario_simulator.py,sha256=XAo2f_qV-oaRZ4ysEDUmvL7pWi8BN3a6W_x3P4T-5BI,91659
114
+ epyt_flow/simulation/scenario_config.py,sha256=6xZD3Gwje-isiSaoKCXLkX0R81SVDH8LojsXdDlH8to,26540
115
+ epyt_flow/simulation/scenario_simulator.py,sha256=Yf2oo3fMfvxrrW3nX8d6y2plrNcGZ-DBK-5mpLtplms,92070
115
116
  epyt_flow/simulation/scenario_visualizer.py,sha256=2gr1o731VLlhA8wQKgrLT94M43FsBNKjG_eucZPHy9A,2186
116
- epyt_flow/simulation/sensor_config.py,sha256=qvDK1nYpoDa_k4ahQNV7gkAlKw7y58s_Dn0gCQl-IFQ,71015
117
+ epyt_flow/simulation/sensor_config.py,sha256=9pUzvRm4HSF8zZ-Hu4pdpxzTjpNSdNmDvcPhRaRFNAI,80175
117
118
  epyt_flow/simulation/events/__init__.py,sha256=tIdqzs7_Cus4X2kbZG4Jl2zs-zsk_4rnajFOCvL0zlI,185
118
119
  epyt_flow/simulation/events/actuator_events.py,sha256=2_MPYbYO9As6fMkm5Oy9pjSB9kCvFuKpGu8ykYDAydg,7903
119
120
  epyt_flow/simulation/events/event.py,sha256=kARPV20XCAl6zxnJwI9U7ICtZUPACO_rgAmtHm1mGCs,2603
120
- epyt_flow/simulation/events/leakages.py,sha256=C-44uvk2mzbz9eaOg8ov1ZK-5rDK3P0kBYaul_LseYE,14569
121
+ epyt_flow/simulation/events/leakages.py,sha256=lDZNKOtVtQsKYhAuJ5Mt7tG6IfHX1436eSkjYTkQiZk,15267
121
122
  epyt_flow/simulation/events/sensor_faults.py,sha256=XX6k-GJh9RWZ4x54eGj9um-Ir9Eq41tY_9pRSCeYeqc,8447
122
123
  epyt_flow/simulation/events/sensor_reading_attack.py,sha256=bo5VavArN0wD5AHbIXJC9NFGZ7KR1uyWE6tBtwj0k9I,7538
123
124
  epyt_flow/simulation/events/sensor_reading_event.py,sha256=rQ-CmdpSUyZzDFYwNUGH2jGoj0oyU-aAb-7E8Oshhqw,6785
124
125
  epyt_flow/simulation/events/system_event.py,sha256=0KI2iaAaOyC9Y-FIfFVazeKT_4ORQRp26gWyMBUu_3c,2396
125
126
  epyt_flow/simulation/scada/__init__.py,sha256=ZFAxJVqwEVsgiyFilFetnb13gPhZg1JEOPWYvKIJT4c,90
126
127
  epyt_flow/simulation/scada/advanced_control.py,sha256=Enox02ggt36HdFLX7ZNxgxuqsTEeu9AACHrzU8CXGrg,4489
127
- epyt_flow/simulation/scada/scada_data.py,sha256=oNUT10QRd-iTkMG8GMF4PeI0n32eb1-ncId02GWLHhA,76710
128
- epyt_flow/simulation/scada/scada_data_export.py,sha256=I2ZIsDo5PK-xInTtftmma9c-KfdCWmAP1N_tk2yaNRE,9431
128
+ epyt_flow/simulation/scada/scada_data.py,sha256=NfGDGrQ7HIXTcShUaGeCALTvGmM5LAJW0Bgmk0H4UQg,104867
129
+ epyt_flow/simulation/scada/scada_data_export.py,sha256=YlA-6R6XpQ28POyKsw1eEe23gMAuDFvwBuDUN-ciu2Y,11213
129
130
  epyt_flow/uncertainty/__init__.py,sha256=ZRjuJL9rDpWVSdPwObPxFpEmMTcgAl3VmPOsS6cIyGg,89
130
131
  epyt_flow/uncertainty/model_uncertainty.py,sha256=DAgyfvdTQvOVMyduuPIpPB_8e3GIMNpehu6kh0jFg0s,13592
131
132
  epyt_flow/uncertainty/sensor_noise.py,sha256=zJVULxnxVPSSqc6UW0iwZ9O-HGf9dn4CwScPqf4yCY0,2324
132
133
  epyt_flow/uncertainty/uncertainties.py,sha256=X-o7GZUC0HELtzpoXIAJaAeYOw35N05TuRoSmStcCpI,17669
133
134
  epyt_flow/uncertainty/utils.py,sha256=gq66c9-QMOxOqI6wgWLyFxjVV0fbG0_8Yzd6mQjNYNo,5315
134
- epyt_flow-0.2.0.dist-info/LICENSE,sha256=-4hYIY2BLmCkdOv2_PehEwlnMKTCes8_oyIUXjKtkug,1076
135
- epyt_flow-0.2.0.dist-info/METADATA,sha256=ysOkPkLty2m6glBTDJawg-drJN1Ei1BJb3kX4td7mJo,6619
136
- epyt_flow-0.2.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
137
- epyt_flow-0.2.0.dist-info/top_level.txt,sha256=Wh_kd7TRL8ownCw3Y3dxx-9C0iTSk6wNauv_NX9JcrY,10
138
- epyt_flow-0.2.0.dist-info/RECORD,,
135
+ epyt_flow-0.3.0.dist-info/LICENSE,sha256=-4hYIY2BLmCkdOv2_PehEwlnMKTCes8_oyIUXjKtkug,1076
136
+ epyt_flow-0.3.0.dist-info/METADATA,sha256=tnq12BhftSSxemSI93ONtLRs4K4eT8R_I71NENxUuX4,7053
137
+ epyt_flow-0.3.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
138
+ epyt_flow-0.3.0.dist-info/top_level.txt,sha256=Wh_kd7TRL8ownCw3Y3dxx-9C0iTSk6wNauv_NX9JcrY,10
139
+ epyt_flow-0.3.0.dist-info/RECORD,,