rangekeeper 0.8.1__tar.gz → 0.8.2__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.
Files changed (39) hide show
  1. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/PKG-INFO +1 -1
  2. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/Rangekeeper.egg-info/PKG-INFO +1 -1
  3. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/pyproject.toml +1 -1
  4. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/flux.py +35 -2
  5. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/README.md +0 -0
  6. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/Rangekeeper.egg-info/SOURCES.txt +0 -0
  7. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/Rangekeeper.egg-info/dependency_links.txt +0 -0
  8. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/Rangekeeper.egg-info/requires.txt +0 -0
  9. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/Rangekeeper.egg-info/top_level.txt +0 -0
  10. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/__init__.py +0 -0
  11. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/api.py +0 -0
  12. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/distribution.py +0 -0
  13. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/duration.py +0 -0
  14. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/dynamics/__init__.py +0 -0
  15. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/dynamics/black_swan.py +0 -0
  16. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/dynamics/cyclicality.py +0 -0
  17. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/dynamics/market.py +0 -0
  18. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/dynamics/noise.py +0 -0
  19. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/dynamics/trend.py +0 -0
  20. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/dynamics/volatility.py +0 -0
  21. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/extrapolation.py +0 -0
  22. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/format.py +0 -0
  23. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/formula/__init__.py +0 -0
  24. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/formula/financial.py +0 -0
  25. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/graph.py +0 -0
  26. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/measure.py +0 -0
  27. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/policy.py +0 -0
  28. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/projection.py +0 -0
  29. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/segmentation.py +0 -0
  30. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/rangekeeper/space.py +0 -0
  31. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/setup.cfg +0 -0
  32. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/tests/test_api.py +0 -0
  33. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/tests/test_dynamics.py +0 -0
  34. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/tests/test_formulas.py +0 -0
  35. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/tests/test_graph.py +0 -0
  36. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/tests/test_measures.py +0 -0
  37. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/tests/test_models.py +0 -0
  38. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/tests/test_modules.py +0 -0
  39. {rangekeeper-0.8.1 → rangekeeper-0.8.2}/tests/test_projections.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Rangekeeper
3
- Version: 0.8.1
3
+ Version: 0.8.2
4
4
  Summary: A Python library assisting financial modelling in real estate asset & development planning, decision-making, cashflow forecasting, and scenario analysis.
5
5
  Author-email: Daniel Fink <danfink@mit.edu>
6
6
  License-Expression: MPL-2.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Rangekeeper
3
- Version: 0.8.1
3
+ Version: 0.8.2
4
4
  Summary: A Python library assisting financial modelling in real estate asset & development planning, decision-making, cashflow forecasting, and scenario analysis.
5
5
  Author-email: Daniel Fink <danfink@mit.edu>
6
6
  License-Expression: MPL-2.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "Rangekeeper"
3
- version = "0.8.1"
3
+ version = "0.8.2"
4
4
  description = "A Python library assisting financial modelling in real estate asset & development planning, decision-making, cashflow forecasting, and scenario analysis."
5
5
  authors = [
6
6
  { name = "Daniel Fink", email = "danfink@mit.edu" }
@@ -380,8 +380,41 @@ class Flow:
380
380
  .sum()
381
381
  )
382
382
 
383
- def get_frequency(self) -> str:
384
- return self.movements.index.freq
383
+ def earliest(self) -> datetime.date:
384
+ """
385
+ Returns the earliest non-zero movement date in the Flow.
386
+ """
387
+
388
+ sorted = self.movements[
389
+ ~((self.movements == 0) | (self.movements.isna()))
390
+ ].sort_index()
391
+ return sorted.index[0].date()
392
+
393
+ def latest(self) -> datetime.date:
394
+ """
395
+ Returns the latest non-zero movement date in the Flow.
396
+ """
397
+
398
+ sorted = self.movements[
399
+ ~((self.movements == 0) | (self.movements.isna()))
400
+ ].sort_index()
401
+ return sorted.index[-1].date()
402
+
403
+ def trim_empty(
404
+ self,
405
+ name: str = None,
406
+ ) -> Flow:
407
+ return self.__class__(
408
+ movements=self.movements.copy(deep=True).truncate(
409
+ before=self.earliest(),
410
+ after=self.latest(),
411
+ ),
412
+ units=self.units,
413
+ name=self.name if name is None else name,
414
+ )
415
+
416
+ # def get_frequency(self) -> str:
417
+ # return self.movements.index.freq
385
418
 
386
419
  def trim_to_span(
387
420
  self,
File without changes
File without changes