2828import pandas as pd
2929
3030from climada .entity .disc_rates .base import DiscRates
31- from climada .trajectories .riskperiod import (
32- ImpactCalcComputation ,
33- ImpactComputationStrategy ,
34- )
3531from climada .trajectories .snapshot import Snapshot
3632
3733LOGGER = logging .getLogger (__name__ )
3834
35+ DEFAULT_RP = [20 , 50 , 100 ]
36+
3937
4038class RiskTrajectory (ABC ):
4139 _grouper = ["measure" , "metric" ]
4240 """Results dataframe grouper"""
4341
4442 POSSIBLE_METRICS = []
45- DEFAULT_RP = [20 , 50 , 100 ]
4643
4744 def __init__ (
4845 self ,
4946 snapshots_list : list [Snapshot ],
5047 * ,
48+ return_periods : list [int ],
5149 all_groups_name : str = "All" ,
52- risk_disc : DiscRates | None = None ,
50+ risk_disc_rates : DiscRates | None = None ,
5351 ):
5452 self ._reset_metrics ()
5553 self ._snapshots = snapshots_list
5654 self ._all_groups_name = all_groups_name
57- self ._return_periods = self . DEFAULT_RP
55+ self ._return_periods = return_periods
5856 self .start_date = min ([snapshot .date for snapshot in snapshots_list ])
5957 self .end_date = max ([snapshot .date for snapshot in snapshots_list ])
60- self ._risk_disc = risk_disc
58+ self ._risk_disc_rates = risk_disc_rates
6159
6260 def _reset_metrics (self ):
6361 for metric in self .POSSIBLE_METRICS :
@@ -103,7 +101,7 @@ def return_periods(self, value, /):
103101 self ._return_periods = value
104102
105103 @property
106- def risk_disc (self ) -> DiscRates | None :
104+ def risk_disc_rates (self ) -> DiscRates | None :
107105 """The discount rate applied to compute net present values.
108106 None means no discount rate.
109107
@@ -112,25 +110,27 @@ def risk_disc(self) -> DiscRates | None:
112110
113111 Changing its value resets the metrics.
114112 """
115- return self ._risk_disc
113+ return self ._risk_disc_rates
116114
117- @risk_disc .setter
118- def risk_disc (self , value , / ):
115+ @risk_disc_rates .setter
116+ def risk_disc_rates (self , value , / ):
119117 if not isinstance (value , DiscRates ):
120118 raise ValueError ("Risk discount needs to be a `DiscRates` object." )
121119
122120 self ._reset_metrics ()
123- self ._risk_disc = value
121+ self ._risk_disc_rates = value
124122
125123 @classmethod
126- def npv_transform (cls , df : pd .DataFrame , risk_disc : DiscRates ) -> pd .DataFrame :
124+ def npv_transform (
125+ cls , df : pd .DataFrame , risk_disc_rates : DiscRates
126+ ) -> pd .DataFrame :
127127 """Apply discount rate to a metric `DataFrame`.
128128
129129 Parameters
130130 ----------
131131 df : pd.DataFrame
132132 The `DataFrame` of the metric to discount.
133- risk_disc : DiscRate
133+ risk_disc_rates : DiscRate
134134 The discount rate to apply.
135135
136136 Returns
@@ -156,15 +156,15 @@ def _npv_group(group, disc):
156156 as_index = False ,
157157 group_keys = False ,
158158 observed = True ,
159- )["risk" ].transform (_npv_group , risk_disc )
159+ )["risk" ].transform (_npv_group , risk_disc_rates )
160160 df = df .reset_index ()
161161 return df
162162
163163 @staticmethod
164164 def _calc_npv_cash_flows (
165165 cash_flows : pd .DataFrame ,
166166 start_date : datetime .date ,
167- disc : DiscRates | None = None ,
167+ disc_rates : DiscRates | None = None ,
168168 ):
169169 """Apply discount rate to cash flows.
170170
@@ -187,7 +187,7 @@ def _calc_npv_cash_flows(
187187 A dataframe (copy) of `cash_flows` where values are discounted according to `disc`
188188 """
189189
190- if not disc :
190+ if not disc_rates :
191191 return cash_flows
192192
193193 if not isinstance (cash_flows .index , pd .DatetimeIndex ):
@@ -198,7 +198,7 @@ def _calc_npv_cash_flows(
198198
199199 # Merge with the discount rates based on the year
200200 tmp = df .merge (
201- pd .DataFrame ({"year" : disc .years , "rate" : disc .rates }),
201+ pd .DataFrame ({"year" : disc_rates .years , "rate" : disc_rates .rates }),
202202 on = "year" ,
203203 how = "left" ,
204204 )
0 commit comments