rangekeeper 0.4.2a0__tar.gz → 0.4.4a0__tar.gz
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.
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/LICENSE +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/PKG-INFO +11 -9
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/README.md +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/pyproject.toml +10 -8
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/__init__.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/api.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/distribution.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/dynamics/__init__.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/dynamics/black_swan.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/dynamics/cyclicality.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/dynamics/market.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/dynamics/noise.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/dynamics/trend.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/dynamics/volatility.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/extrapolation.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/flux.py +1 -1
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/graph.py +11 -2
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/measure.py +2 -2
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/models/__init__.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/models/deterministic.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/models/flexible.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/models/linear.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/models/linear_graph.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/models/probabilistic.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/periodicity.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/projection.py +1 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/segmentation.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/space.py +4 -3
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/span.py +0 -0
- {rangekeeper-0.4.2a0 → rangekeeper-0.4.4a0}/rangekeeper/policy.py +0 -0
|
File without changes
|
|
@@ -1,37 +1,39 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: Rangekeeper
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4a0
|
|
4
4
|
Summary: A Python library assisting financial modelling in scenario planning, decision-making, cashflow forecasting, and the like
|
|
5
5
|
License: MPL-2.0
|
|
6
6
|
Author: Daniel Fink
|
|
7
7
|
Author-email: danfink@mit.edu
|
|
8
|
-
Requires-Python: >=3.
|
|
8
|
+
Requires-Python: >=3.10,<3.13
|
|
9
9
|
Classifier: License :: OSI Approved
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
12
11
|
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
13
14
|
Requires-Dist: Pint (>=0.20.1,<0.21.0)
|
|
14
15
|
Requires-Dist: PyYAML (>=6.0,<7.0)
|
|
15
16
|
Requires-Dist: aenum (>=3.1.11,<4.0.0)
|
|
16
17
|
Requires-Dist: docutils (==0.17.1)
|
|
18
|
+
Requires-Dist: ghp-import (>=2.1.0,<3.0.0)
|
|
17
19
|
Requires-Dist: jupyter (>=1.0.0,<2.0.0)
|
|
18
|
-
Requires-Dist: jupyter-book (>=0.
|
|
20
|
+
Requires-Dist: jupyter-book (>=1.0.0,<2.0.0)
|
|
19
21
|
Requires-Dist: matplotlib (>=3.7.0,<4.0.0)
|
|
22
|
+
Requires-Dist: mpld3 (>=0.5.10,<0.6.0)
|
|
20
23
|
Requires-Dist: multiprocess (>=0.70.14,<0.71.0)
|
|
21
24
|
Requires-Dist: networkx (>=3.0,<4.0)
|
|
22
|
-
Requires-Dist: numba (>=0.
|
|
25
|
+
Requires-Dist: numba (>=0.59.0,<0.60.0)
|
|
23
26
|
Requires-Dist: pandas (>=2.0.1,<3.0.0)
|
|
24
27
|
Requires-Dist: plotly (>=5.15.0,<6.0.0)
|
|
25
28
|
Requires-Dist: py-linq (>=1.4.0,<2.0.0)
|
|
26
29
|
Requires-Dist: py-moneyed (>=3.0,<4.0)
|
|
27
|
-
Requires-Dist: pyppeteer (>=
|
|
30
|
+
Requires-Dist: pyppeteer (>=2.0.0,<3.0.0)
|
|
28
31
|
Requires-Dist: python-dateutil (>=2.8.2,<3.0.0)
|
|
29
32
|
Requires-Dist: pyvis (>=0.3.2,<0.4.0)
|
|
30
|
-
Requires-Dist: pyxirr (>=0.
|
|
33
|
+
Requires-Dist: pyxirr (>=0.10.3,<0.11.0)
|
|
31
34
|
Requires-Dist: scipy (>=1.11.2,<2.0.0)
|
|
32
|
-
Requires-Dist: seaborn (>=0.
|
|
35
|
+
Requires-Dist: seaborn (>=0.13.2,<0.14.0)
|
|
33
36
|
Requires-Dist: specklepy (>=2.16.0,<3.0.0)
|
|
34
|
-
Requires-Dist: sphinx-rtd-theme (>=1.2.0,<2.0.0)
|
|
35
37
|
Requires-Dist: tabulate (>=0.9.0,<0.10.0)
|
|
36
38
|
Requires-Dist: tqdm (>=4.65.0,<5.0.0)
|
|
37
39
|
Description-Content-Type: text/markdown
|
|
File without changes
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "Rangekeeper"
|
|
3
|
-
version = "0.4.
|
|
3
|
+
version = "0.4.4-alpha"
|
|
4
4
|
description = "A Python library assisting financial modelling in scenario planning, decision-making, cashflow forecasting, and the like"
|
|
5
5
|
authors = ["Daniel Fink <danfink@mit.edu>"]
|
|
6
6
|
license = "MPL-2.0"
|
|
7
7
|
readme = "README.md"
|
|
8
8
|
|
|
9
9
|
[tool.poetry.dependencies]
|
|
10
|
-
python = ">=3.
|
|
10
|
+
python = ">=3.10, <3.13"
|
|
11
11
|
aenum = "^3.1.11"
|
|
12
12
|
matplotlib = "^3.7.0"
|
|
13
13
|
pandas = "^2.0.1"
|
|
14
14
|
Pint = "^0.20.1"
|
|
15
|
-
pyxirr = "^0.
|
|
15
|
+
pyxirr = "^0.10.3"
|
|
16
16
|
scipy = "^1.11.2"
|
|
17
17
|
networkx = "^3.0"
|
|
18
18
|
py-moneyed = "^3.0"
|
|
@@ -21,18 +21,20 @@ py-linq = "^1.4.0"
|
|
|
21
21
|
tabulate = "^0.9.0"
|
|
22
22
|
PyYAML = "^6.0"
|
|
23
23
|
specklepy = "^2.16.0"
|
|
24
|
-
numba = "^0.
|
|
24
|
+
numba = "^0.59.0"
|
|
25
25
|
jupyter = "^1.0.0"
|
|
26
26
|
#jupyterlab = "^4.0.5"
|
|
27
27
|
docutils = "0.17.1" # See https://jupyterbook.org/en/stable/content/citations.html#citations-and-bibliographies
|
|
28
28
|
tqdm = "^4.65.0"
|
|
29
29
|
multiprocess = "^0.70.14"
|
|
30
|
-
seaborn = "^0.
|
|
31
|
-
jupyter-book = "^0.
|
|
32
|
-
sphinx-rtd-theme = "^1.2.0"
|
|
30
|
+
seaborn = "^0.13.2"
|
|
31
|
+
jupyter-book = "^1.0.0"
|
|
32
|
+
#sphinx-rtd-theme = "^1.2.0"
|
|
33
33
|
pyvis = "^0.3.2"
|
|
34
34
|
plotly = "^5.15.0"
|
|
35
|
-
pyppeteer = "^
|
|
35
|
+
pyppeteer = "^2.0.0"
|
|
36
|
+
ghp-import = "^2.1.0"
|
|
37
|
+
mpld3 = "^0.5.10"
|
|
36
38
|
|
|
37
39
|
[tool.poetry.dev-dependencies]
|
|
38
40
|
pytest = "^7.2.1"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -123,6 +123,9 @@ class Entity(objects.Base):
|
|
|
123
123
|
def __eq__(self, other):
|
|
124
124
|
return self.entityId == other.entityId
|
|
125
125
|
|
|
126
|
+
def __hash__(self):
|
|
127
|
+
return hash(self.entityId)
|
|
128
|
+
|
|
126
129
|
def __init__(
|
|
127
130
|
self,
|
|
128
131
|
entityId: str = None,
|
|
@@ -134,6 +137,12 @@ class Entity(objects.Base):
|
|
|
134
137
|
type=type if type is not None else '[Unknown]'
|
|
135
138
|
)
|
|
136
139
|
|
|
140
|
+
def try_get_attribute(self, key):
|
|
141
|
+
try:
|
|
142
|
+
return self[key]
|
|
143
|
+
except KeyError:
|
|
144
|
+
return None
|
|
145
|
+
|
|
137
146
|
@classmethod
|
|
138
147
|
def from_base(
|
|
139
148
|
cls,
|
|
@@ -284,7 +293,7 @@ class Entity(objects.Base):
|
|
|
284
293
|
keys = properties
|
|
285
294
|
if properties is None:
|
|
286
295
|
keys = list(filter(lambda key: key not in filtered, self.get_member_names()))
|
|
287
|
-
attributes = {key: self
|
|
296
|
+
attributes = {key: self.try_get_attribute(key) for key in keys}
|
|
288
297
|
relationships = self.get_relationships(assembly=assembly)
|
|
289
298
|
if arborescence is False:
|
|
290
299
|
attributes['relationships'] = relationships
|
|
@@ -310,7 +319,7 @@ class Entity(objects.Base):
|
|
|
310
319
|
if relationship_type is None:
|
|
311
320
|
tree = assembly
|
|
312
321
|
else:
|
|
313
|
-
tree = assembly.
|
|
322
|
+
tree = assembly.filter_by_type(relationship_type=relationship_type)
|
|
314
323
|
if not nx.is_arborescence(tree.graph):
|
|
315
324
|
raise Exception('The Assembly is not a tree. Cannot calculate ancestors.')
|
|
316
325
|
|
|
@@ -81,12 +81,12 @@ def register_currency(
|
|
|
81
81
|
if '[currency]' not in registry._dimensions:
|
|
82
82
|
registry.define('money = [currency]')
|
|
83
83
|
registry.define(
|
|
84
|
-
'{0} =
|
|
84
|
+
'{0} = [currency] = {0} = {1}'.format(
|
|
85
85
|
''.join(currency.code.split()),
|
|
86
86
|
''.join(currency.name.split())))
|
|
87
87
|
else:
|
|
88
88
|
registry.define(
|
|
89
|
-
'{0} =
|
|
89
|
+
'{0} =[currency] = {0} = {1}'.format(
|
|
90
90
|
''.join(currency.code.split()),
|
|
91
91
|
''.join(currency.name.split())))
|
|
92
92
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -17,9 +17,10 @@ class Space(rk.graph.Entity):
|
|
|
17
17
|
super().__init__(
|
|
18
18
|
name=name,
|
|
19
19
|
type=type,
|
|
20
|
-
measurements=measurements,
|
|
21
|
-
events=events,
|
|
22
|
-
attributes=attributes
|
|
20
|
+
# measurements=measurements,
|
|
21
|
+
# events=events,
|
|
22
|
+
# attributes=attributes
|
|
23
|
+
)
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
class Apartment(Space):
|
|
File without changes
|
|
File without changes
|