Rangekeeper 0.8.25__py3-none-any.whl → 0.8.26__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.
rangekeeper/flux.py CHANGED
@@ -324,21 +324,35 @@ class Flow:
324
324
  movements=frame["Discounted Flow"], units=self.units, name=name
325
325
  )
326
326
 
327
- def xirr(self) -> float:
328
- return pyxirr.xirr(
327
+ def xirr(
328
+ self, registry: pint.UnitRegistry = rk.measure.Index.registry
329
+ ) -> pint.Quantity:
330
+ """
331
+ Returns the XIRR (Extended Internal Rate of Return) of the Flow's movements.
332
+ Formats the result as a percentage in the specified registry's units.
333
+ """
334
+ result = pyxirr.xirr(
329
335
  dates=list(self.movements.index.array),
330
336
  amounts=self.movements.to_list(),
331
337
  )
338
+ return result * 100 * registry.percent
332
339
 
333
340
  def xnpv(
334
341
  self,
335
- rate: float,
336
- ) -> float:
337
- return pyxirr.xnpv(
342
+ rate: Union[float, pint.Quantity],
343
+ ) -> pint.Quantity:
344
+ """
345
+ Returns the XNPV (Extended Net Present Value) of the Flow's movements at a specified rate.
346
+ Formats the result as a quantity in the Flow's units.
347
+ """
348
+ if isinstance(rate, pint.Quantity):
349
+ rate = rate.to(rk.measure.Index.registry.dimensionless).magnitude
350
+ result = pyxirr.xnpv(
338
351
  rate=rate,
339
352
  dates=list(self.movements.index.array),
340
353
  amounts=self.movements.to_list(),
341
354
  )
355
+ return result * self.units
342
356
 
343
357
  def diff(
344
358
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Rangekeeper
3
- Version: 0.8.25
3
+ Version: 0.8.26
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
@@ -3,7 +3,7 @@ rangekeeper/api.py,sha256=3nuG7C2IQjpumcn79MvYDTa7ADWPAos7VfVM-3pL4n4,4798
3
3
  rangekeeper/distribution.py,sha256=2C3jhi1rLJUs0seBztdQb196hNhc00sKJEGMkFiDpYs,8961
4
4
  rangekeeper/duration.py,sha256=9GU6dcZTL_OAOgEHLGkCVxjG16_Po1IMEU29K5g4iRM,20433
5
5
  rangekeeper/extrapolation.py,sha256=Zfsz2KwkImxEMMCNZaF8RpiQxlIgemS1dQkSnjliYU4,2814
6
- rangekeeper/flux.py,sha256=X1m4bkGQqRG5DswYWh46nwcbgIfKqj2sk6xLhaFYzYE,31227
6
+ rangekeeper/flux.py,sha256=R7W8GwiVcgRSw8Y1GgucrcQpWDFYS510EP2uRslRc5s,31916
7
7
  rangekeeper/format.py,sha256=DOfF4-LCXqWyCtE1OomwE80sJLe6LjL4gqEOAP454LQ,10796
8
8
  rangekeeper/graph.py,sha256=6oWRv-qzGsM5Z19UyJ1v3hwtWaQp_F4qQKxizvkQ_gg,28043
9
9
  rangekeeper/measure.py,sha256=eCdoTAocq1loNZBnOp3nPiPV7yIi0QTwpVHvjba1hkY,4125
@@ -20,7 +20,7 @@ rangekeeper/dynamics/trend.py,sha256=-WqrRvmmTj2mE24Pz-Dl5lXEpLXnDUMngafU__em_ac
20
20
  rangekeeper/dynamics/volatility.py,sha256=MGDLzrI1uP_C6HL-pigJwWikHg1KNbfB_0m0Akh-L2A,5162
21
21
  rangekeeper/formula/__init__.py,sha256=4OXzdJAYDBxQeOMzLR5MZvIjxxIfFOTE9aNu9zFryAE,36
22
22
  rangekeeper/formula/financial.py,sha256=oNFdhygbtdEUFjpxYFuuDnpC_P8nOO538b21FzaMtTU,14045
23
- rangekeeper-0.8.25.dist-info/METADATA,sha256=_bLPq7sZOAVAi0aKKviTEp-lpee04lB30okteq9VsOs,2212
24
- rangekeeper-0.8.25.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
25
- rangekeeper-0.8.25.dist-info/top_level.txt,sha256=7ov6d70lppmzKc088MAmRWnCtCRGA2cd43G28QBSv-c,12
26
- rangekeeper-0.8.25.dist-info/RECORD,,
23
+ rangekeeper-0.8.26.dist-info/METADATA,sha256=uvEDt-iGG-ofh01UcYM3srEUOUW9OxpHV-GOE5lL8PU,2212
24
+ rangekeeper-0.8.26.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
25
+ rangekeeper-0.8.26.dist-info/top_level.txt,sha256=7ov6d70lppmzKc088MAmRWnCtCRGA2cd43G28QBSv-c,12
26
+ rangekeeper-0.8.26.dist-info/RECORD,,