@@ -175,25 +175,40 @@ def impfset_change(impfset: ImpactFuncSet, **_kwargs) -> ImpactFuncSet:
175175 if impfset_modifier .new_impfset_path is not None
176176 else impfset
177177 )
178- funcs = changed_impfset .get_func (
179- impfset_modifier .haz_type , impfset_modifier .impf_id
180- )
178+ if impfset_modifier .impf_ids is None or impfset_modifier .impf_ids == "all" :
179+ ids_to_change = impfset .get_ids (haz_type = impfset_modifier .haz_type )
180+ elif isinstance (impfset_modifier .impf_ids , list ):
181+ ids_to_change = impfset_modifier .impf_ids
182+ elif isinstance (impfset_modifier .impf_ids , (str , int )):
183+ ids_to_change = [impfset_modifier .impf_ids ]
184+ else :
185+ raise ValueError (
186+ f"Impact function ids to changes are invalid: { impfset_modifier .impf_ids } "
187+ )
188+
189+ funcs = changed_impfset .get_func (haz_type = impfset_modifier .haz_type )
181190 funcs = [funcs ] if isinstance (funcs , ImpactFunc ) else funcs
191+
182192 for impf in funcs :
183193 # Apply Intensity Mod
184- if impf .id in impfset_modifier .impf_intensity_modifier :
185- mult , shift = impfset_modifier .impf_intensity_modifier [impf .id ]
186- impf .intensity = np .maximum (impf .intensity * mult - shift , 0.0 )
187-
188- # Apply MDD Mod
189- if impf .id in impfset_modifier .impf_mdd_modifier :
190- mult , shift = impfset_modifier .impf_mdd_modifier [impf .id ]
191- impf .mdd = np .maximum (impf .mdd * mult + shift , 0.0 )
192-
193- # Apply PAA Mod
194- if impf .id in impfset_modifier .impf_paa_modifier :
195- mult , shift = impfset_modifier .impf_paa_modifier [impf .id ]
196- impf .paa = np .maximum (impf .paa * mult + shift , 0.0 )
194+ if impf .id in ids_to_change :
195+ mult , add = (
196+ impfset_modifier .impf_int_mult ,
197+ impfset_modifier .impf_int_add ,
198+ )
199+ impf .intensity = impf .intensity * mult + add
200+
201+ mult , add = (
202+ impfset_modifier .impf_mdd_mult ,
203+ impfset_modifier .impf_mdd_add ,
204+ )
205+ impf .mdd = impf .mdd * mult + add
206+
207+ mult , add = (
208+ impfset_modifier .impf_paa_mult ,
209+ impfset_modifier .impf_paa_add ,
210+ )
211+ impf .paa = impf .paa * mult + add
197212
198213 return changed_impfset
199214
0 commit comments