ó
    °"³j�	  ã                  ó�   • S SK Jr  S SKJr  S SKJr  S SKJrJr  S SK	J
r
  SS jr        SS jrSS jr          SS	 jrg
)é    )Úannotations)ÚMapping)Úcast)Ú
UsageValueÚsubtract_usage_values)ÚUnitDefc                ól   • U R                   R                  5       UR                   R                  5       :*  $ ©N)Ú
dimensionsÚitems)ÚancestorÚ
descendants     ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/genai_prices/decompose.pyÚis_descendant_or_selfr   
   s+   € Ø×Ñ×$Ñ$Ó&¨*×*?Ñ*?×*EÑ*EÓ*GÑGÐGó    c           	     ó  ^^^• [        U4S jU TR                  5       -   5       S S9n0 mU H[  mUU4S jU 5       n[        [        UTR                  5      U5      nUS:  a  [        [        TX1U5      5      eUTTR                  '   M]     T$ )Nc              3  ó.   >#   • U  H
  nTU   v •  M     g 7fr
   © )Ú.0Ú	usage_keyÚunits_by_usage_keys     €r   Ú	<genexpr>Ú&compute_leaf_values.<locals>.<genexpr>   s   øé € ÐfÒ8e¨9Ð	˜IÖ	&Ò8eùs   ƒc                óF   • [        U R                  5      * U R                  4$ r
   )Úlenr   r   )Úunits    r   Ú<lambda>Ú%compute_leaf_values.<locals>.<lambda>   s   € œ3˜tŸ™Ó/Ð/°·±Ñ@r   )Úkeyc              3  óv   >#   • U  H.  nUTLd  M
  [        TU5      (       d  M  TUR                     v •  M0     g 7fr
   )r   r   )r   r   Úleaf_valuesr   s     €€r   r   r      s<   øé € ð 
â*�
Ø Ð%ó .ä*?ÀÀj×*Qó .ˆK˜
×,Ñ,Ö-Ú*ùs   ƒ	9�9£9r   )ÚsortedÚkeysr   Ú_usage_valuer   Ú
ValueErrorÚ_negative_leaf_error_message)Úpriced_usage_keysÚusager   Úpriced_unitsÚdescendant_valuesÚ
leaf_valuer!   r   s     `   @@r   Úcompute_leaf_valuesr,      s˜   ú€ ô ÜfÐ8IÐL^×LcÑLcÓLeÒ8eÓfÙ@ñ€Lð *,€Kãˆõ
á*ó
Ðô
 +¬<¸¸t¿~¹~Ó+NÐPaÓbˆ
à˜‹>ÜÔ9¸$ÀÐU_Ó`ÓaÐaà&0ˆ�D—N‘NÓ#ñ ð Ðr   c                óD   • [        XS 5      nUc  S$ [        [        U5      $ )Nr   )Úgetattrr   r   )r(   r   Ú	raw_values      r   r$   r$   '   s%   € Ü˜¨$Ó/€IØÑ!ˆ1ÐB¤t¬J¸	Ó'BÐBr   c           
     óª  • [        X R                  5      nU Vs/ s H;  nXPLd  M	  [        X5      (       d  M  [        X%R                  5      =nS:”  d  M8  XV4PM=     nnU H/  u  pVXd:”  d  M  SUR                   SU SU R                   SU S3	s  $    SR                  S U 5       5      n[	        XC45      n	SU S	U	 S
U R                   SU S3	$ s  snf )Nr   zInvalid usage data: z (z) cannot exceed Ú)z, c              3  ó>   #   • U  H  u  pUR                   v •  M     g 7fr
   )r   )r   r   Ú_s      r   r   Ú/_negative_leaf_error_message.<locals>.<genexpr><   s   é € Ð\ÒJ[¹¸ 
× 4Ö 4ÒJ[ùs   ‚z,Invalid usage data: more-specific usage for z totals z, which exceeds )r$   r   r   Újoinr   )
r   r)   r(   r+   Ú
unit_valuer   Úvaluer*   Údescendant_keysÚdescendant_totals
             r   r&   r&   ,   s  € ô ˜e§^¡^Ó4€Jñ 'óâ&ˆJØÐ!ó 	ô " $×3ó 	ô # 5×*>Ñ*>Ó?Ð?ˆUÀ1ÑDó	 	ˆÓÙ&ð ð ó /Ñˆ
ØÕØ)¨*×*>Ñ*>Ð)?¸rÀ%ÀÐHXÐY]×YgÑYgÐXhÐhjÐkuÐjvÐvwÐxÒxñ /ð —i‘iÑ\ÑJ[Ó\Ó\€OÜ,¨Z¸ÓGÐà
6°Ð6GÀxÐP`ÐOað bØŸ™Ð(¨¨:¨,°að	9ðùòs   šC¦C¸CÁCN)r   r   r   r   ÚreturnÚbool)r'   zset[str]r(   Úobjectr   zMapping[str, UnitDef]r:   zdict[str, UsageValue])r(   r<   r   Ústrr:   r   )
r   r   r)   zlist[UnitDef]r(   r<   r+   r   r:   r=   )Ú
__future__r   Úcollections.abcr   Útypingr   Úgenai_prices._usager   r   Úgenai_prices.unitsr   r   r,   r$   r&   r   r   r   Ú<module>rC      sr   ðÝ "å #Ý ç AÝ &ôHðØðØ(.ðØDYðàôô2Cð
Ø
ðØ!.ðØ7=ðØKUðàõr   