Files
boc/iom/risk/__pycache__/risk_model.cpython-39.pyc
T

81 lines
8.9 KiB
Plaintext
Raw Normal View History

a
1>jh2ã@sdZddlmZmZmZmZddlmZddlm Z Gddde
e ƒZ eGdddƒƒZ Gd d
d
ƒZ
Gd d d e
e ƒZGd
ddƒZeƒZd9e e
edœddZd:eee
e
edœddZedkreƒZedƒe dddddddZe ed¡Zed ed!d"ed#d$ƒed%ed&ƒed'ƒe dd(dddd)dZe ed*¡Zed ed!d"ed#d$ƒed+ƒejd(d,d-gd.d/Zed ed!d"ed#d$ƒed0ed1ƒed2ƒe ddddd(dd3Ze d(dddddd3Ze eed¡Zed4ed5ƒed6ed7ƒd8S);zR
Risk Model - Layer 8 of IOM
Risk calculation engine with weights per object type
é)ÚDictÚListÚOptionalÚTuple)Ú dataclass)ÚEnumc@s(eZdZdZdZdZdZdZdZdZ dS) Ú
RiskDimensionzRisk dimensionsÚsafetyÚeconomicÚ
environmentalÚ operationalÚlegalÚ aestheticN)
Ú__name__Ú
__module__Ú __qualname__Ú__doc__ÚSAFETYÚECONOMICÚ
ENVIRONMENTALÚ OPERATIONALÚLEGALÚ AESTHETIC©rrú6/home/bernt/.openclaw/workspace/iom/risk/risk_model.pyr src@sheZdZUdZdZeed<dZeed<dZeed<dZ eed<dZ
eed<dZ eed<e d œd
d Z
d S)
Ú
RiskScoreszRisk scores for all dimensionsrr r
r r r
r)ÚreturncCs|j|j|j|j|j|jdœS)r r
r r r
rr©ÚselfrrrÚto_dictsúzRiskScores.to_dictN)rrrrr ÚintÚ__annotations__r
r r r
rrr rrrrrs
      rc @s eZdZdZejdejdejdejdej dej
diZ ejdejdejdejdej dej
diZ ejdejdejd ejdej dej
diZ
ejdejdejdejdej dej
diZejdejdejdejdej dej
diZejd
ejdejdejdej dej
diZejdejdejd ejdej dej
diZejd ejdejdejdej dej
diZejdejd ejd ejdej dej
diZejdejdejdejd ej dej
diZd S)
Ú RiskWeightszRisk weights per object typeg333333Ó?gš™™™™™É?gš™™™™™¹?gš™™™™™Ù?g333333Ã?gš™™™™™©?gffffffÖ?gÐ?gÍÌÌÌÌÌÜ?gà?N)rrrrrrrrrrrÚDEFAULTÚBRIDGEÚROADÚFACADEÚWINDOWÚ
EV_CHARGERÚ STREET_LIGHTÚTRAFFIC_SIGNALÚPARKINGÚSIGNrrrrr#*ú ú ú ú ú ú ú ú ú úr#c@s$eZdZdZdZdZdZdZdZdS)Ú RiskLevelz Risk levelsZminimalZlowZmediumZhighÚcriticalN) rrrrÚMINIMALÚLOWÚMEDIUMÚHIGHÚCRITICALrrrrr.s r.c@eZdZdZddZdeeedœddZde e
eeedœd d
Z e ed œd d
Z ee
eedœddZ
eedœddZeedœddZeedœddZd eeeedœddZdS)!ÚRiskCalculatorz)Calculate risk for infrastructure objectsc Cs4tjtjtjtjtjtjtjtjtj tj
dœ
|_ dS)N)
ÚdefaultÚbridgeZroadÚfacadeÚwindowZ
ev_chargerZ street_lightZtraffic_signalZparkingZsign) r#r$r%r&r'r(r)r*r+r,r-Ú weights_maprrrrÚ__init__žsözRiskCalculator.__init__r6©ÚscoresÚ object_typercsz|j | ¡tj¡}tfdd| ¡Dƒƒ}tdtd|ƒƒ}|  |¡}t
|dƒ|j |  |¡ˆ 
¡dd| ¡Dƒ|dœS) a 
Calculate total risk score
Args:
scores: Risk scores for each dimension
object_type: Type of object for weight selection
Returns:
Dict with total score, level, and breakdown
c3s"|]\}}tˆ|jƒ|VqdS)N)ÚgetattrÚvalue©Ú.0ÚdimZweight©r=rrÚ <genexpr>¾sÿz+RiskCalculator.calculate.<locals>.<genexpr>g$@gécSsi|]\}}|j|qSr©r@rArrrÚ
<dictcomp>Îóz,RiskCalculator.calculate.<locals>.<dictcomp>)ÚtotalÚlevelÚlevel_descriptionÚ breakdownÚweightsr>)r:ÚgetÚlowerr#r$ÚsumÚitemsÚminÚmaxÚ
_get_levelÚroundr@Ú_get_level_descriptionr )rr=r>rNrJrKrrDrÚ calculate¬s þ
úzRiskCalculator.calculate©Ú conditionÚ defect_codesr>rcCs"| |¡}| ||¡}| ||¡S)a
Calculate risk from observation data
Args:
condition: Overall condition (1-5)
defect_codes: List of defect codes
object_type: Type of object
Returns:
Risk calculation result
)Ú_condition_to_scoresÚ_adjust_for_defectsrX)rrZr[r>Z base_scoresZadjusted_scoresrrrÚcalculate_from_observationÒs
 z)RiskCalculator.calculate_from_observation)rZrcCs$|d}t|||d||d|dS)z+Convert condition (1-5) to base risk scoresrFr)r)rrZZrisk_multiplierrrrr\ësúz#RiskCalculator._condition_to_scores)r=r[rcCtfi| ¡¤Ž}|D]¤}|dd}|dvr@td|jdƒ|_|dvrZtd|jdƒ|_|dvrttd|jdƒ|_|dvrŽtd|jdƒ|_|dvrtd|jd ƒ|_td|jd ƒ|_q|S)
z(Adjust risk scores based on defect codesNrF)Z13Z14Z16é
)Z10Z11Z12)Z20Z21Z22Z23Z24)Z15Z40Z41Z42Z43)Z19Z50Z51Z52é)rr rSr r