ó
    °"³jU  ã                  óÀ   • % S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	J
r
  \" SS9 " S S	5      5       r " S
 S5      rSS jrSS jrSS jrSS jrSqS\S'   SS jrg)é    )Úannotations)ÚMapping)Ú	dataclass)ÚMappingProxyType)ÚAnyÚcastT)Úfrozenc                  óR   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   SS	 jrSS
 jrSrg)ÚUnitDefé	   ÚstrÚ	usage_keyÚ	price_keyÚintÚperzMapping[str, str]Ú
dimensionsc           	     ój   • [         R                  U S[        [        U R                  5      5      5        g )Nr   )ÚobjectÚ__setattr__r   Údictr   )Úselfs    ÚO/home/mande/repo/quber/.venv/lib/python3.13/site-packages/genai_prices/units.pyÚ__post_init__ÚUnitDef.__post_init__   s#   € Ü×Ñ˜4 Ô/?ÄÀTÇ_Á_Ó@UÓ/VÕWó    c                ó^   ^• [        U4S jU R                  R                  5        5       5      $ )zDReturn whether two units can overlap without conflicting dimensions.c              3  ód   >#   • U  H%  u  pTR                   R                  X5      U:H  v •  M'     g 7f©N)r   Úget)Ú.0ÚkeyÚvalueÚothers      €r   Ú	<genexpr>Ú-UnitDef.is_compatible_with.<locals>.<genexpr>   s+   øé € ÐgÒOfÁÀ�5×#Ñ#×'Ñ'¨Ó3°uÖ<ÒOfùs   ƒ-0)Úallr   Úitems)r   r#   s    `r   Úis_compatible_withÚUnitDef.is_compatible_with   s!   ø€ äÔgÈtÏÉ×OdÑOdÔOfÓgÓgÐgr   © N)ÚreturnÚNone)r#   r   r+   Úbool)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r   r(   Ú__static_attributes__r*   r   r   r   r   	   s#   ‡ àƒNØƒNØ	ƒHØ!Ó!ôX÷hr   r   c                  ó’   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   S\S'   SSS jjrSS jrSS jrSS jrSr	g)ÚUnitRegistryé   zMapping[str, UnitDef]Úunitsúfrozenset[str]Ú_all_usage_keysÚ_all_price_keysÚ_reported_usage_keysztuple[str, ...]Ú_reported_usage_keys_in_orderzdict[str, UnitDef]Ú_units_by_price_keyz)dict[frozenset[tuple[str, str]], UnitDef]Ú_units_by_dimensionzdict[str, frozenset[str]]Ú_ancestor_usage_keysNc                ó2  ^• 0 n0 U l         0 U l        0 U l        U=(       d    0 R                  5        H­  u  p4[	        [        [        [        [        4   UR                  S0 5      5      5      n[        U[        [        UR                  SU5      5      [        [        US   5      US9m[        T5      nTX#'   TU R                   TR                  '   TU R                  U'   M¯     UR                  5        H6  u  nm[        U4S jUR                  5        5       5      U R                  U'   M8     [        U5      U l        [        U5      U l        [        U R                   5      U l        ['        S U 5       5      U l        [        U R(                  5      U l        g)z9Parse raw unit dictionaries into indexed runtime objects.r   r   r   )r   r   r   r   c              3  óp   >#   • U  H+  nUTLd  M
  [        UT5      (       d  M  UR                  v •  M-     g 7fr   )Ú_is_dimension_subsetr   )r    Úmaybe_ancestorÚunits     €r   r$   Ú(UnitRegistry.__init__.<locals>.<genexpr>9   s8   øé € ð =â&4�NØ!¨Ð-ó )ä2FÀ~ÐW[×2\ó )�×(Ö(Ú&4ùs   ƒ	6�6£6c              3  ó4   #   • U  H  oS :w  d  M
  Uv •  M     g7f)ÚrequestsNr*   )r    r   s     r   r$   rE   B   s   é € Ð2oÊeÀÐdnÑWn·9±9Êeùs   ‚	�	N)r=   r>   r?   r'   r   r   r   r   r   r   r   Ú_dimension_setr   Ú	frozensetÚvaluesr   r7   r9   r:   Útupler<   r;   )r   Ú	raw_unitsr7   r   Úraw_unitr   Údimension_setrD   s          @r   Ú__init__ÚUnitRegistry.__init__"   s]  ø€ à$&ˆØ#%ˆÔ Ø#%ˆÔ Ø$&ˆÔ!à$-§O°×#:Ñ#:Ö#<ÑˆIÜœd¤7¬3´¨8Ñ#4°h·l±lÀ<ÐQSÓ6TÓUÓVˆJÜØ#Üœs H§L¡L°¸iÓ$HÓIÜœ˜h u™oÓ.Ø%ñ	ˆDô +¨4Ó0ˆMà#ˆEÑØ7;ˆD×$Ñ$ T§^¡^Ñ4Ø6:ˆD×$Ñ$ ]Ó3ñ $=ð  %Ÿ{™{ž}‰OˆI�tÜ3<ô =à&+§l¡l¤nó=ó 4ˆD×%Ñ% iÓ0ñ  -ô & eÓ,ˆŒ
Ü(¨Ó/ˆÔÜ(¨×)AÑ)AÓBˆÔÜ-2Ñ2oÉeÓ2oÓ-oˆÔ*Ü$-¨d×.PÑ.PÓ$QˆÕ!r   c                ó    • U R                   U   $ )z/Return the registered unit priced by price_key.)r=   )r   r   s     r   Úunit_for_price_keyÚUnitRegistry.unit_for_price_keyE   s   € à×'Ñ'¨	Ñ2Ð2r   c                ó    • U R                   U   $ r   )r?   )r   r   s     r   Úancestor_usage_keysÚ UnitRegistry.ancestor_usage_keysI   s   € Ø×(Ñ(¨Ñ3Ð3r   c                óÞ   • UR                  U5      (       d  gU R                  R                  [        UR                  R                  5       UR                  R                  5       -  5      5      $ )zRReturn the most specific registered unit joining two compatible units, if present.N)r(   r>   r   rI   r   r'   )r   ÚaÚbs      r   Ú	find_joinÚUnitRegistry.find_joinL   sQ   € à×#Ñ# A×&Ñ&Øà×'Ñ'×+Ñ+¬I°a·l±l×6HÑ6HÓ6JÈQÏ\É\×M_ÑM_ÓMaÑ6aÓ,bÓcÐcr   )r:   r9   r?   r;   r<   r>   r=   r7   r   )rL   z&Mapping[str, Mapping[str, Any]] | Noner+   r,   )r   r   r+   r   )r   r   r+   r8   )rX   r   rY   r   r+   zUnitDef | None)
r.   r/   r0   r1   r2   rO   rR   rU   rZ   r3   r*   r   r   r5   r5      sI   ‡ Ø Ó Ø#Ó#Ø#Ó#Ø(Ó(Ø#2Ó2Ø+Ó+ØBÓBØ3Ó3ö!RôF3ô4÷dr   r5   c                ó€  ^• U R                   nUR                  S5      nUR                  S5      nUR                  S5      nUS:H  =(       d    US:g  =(       a    US L=(       a    US L nU(       a  U R                  /nOA/ nUb  UR                  U5        Ub  UR                  U5        US:X  a  UR                  U5        U(       a  [	        U5      O1 SkmUR                  U4S j[        UR                  5       5       5       5        U(       d  UR                  U R                  5        S	R                  S
 U 5       5      $ )NÚfamilyÚ	directionÚmodalityÚ
tool_callsÚtokensÚmessages>   r]   r_   r^   c              3  ó<   >#   • U  H  u  pUT;  d  M  Uv •  M     g 7fr   r*   )r    r!   r"   Úhandled_dimensionss      €r   r$   Ú%_unit_display_name.<locals>.<genexpr>g   s   øé € ÐeÒ)C™:˜3ÀsÐRdÑGd—‘Ò)Cùs   ƒ“	Ú c              3  ó`   #   • U  H$  oR                  S S5      R                  5       v •  M&     g7f)Ú_rf   N)ÚreplaceÚtitle)r    Úparts     r   r$   re   j   s%   é € ÐEºu°t—L‘L  cÓ*×0Ñ0×2Ð2ºuùs   ‚,.)	r   r   r   ÚappendÚsetÚextendÚsortedr'   Újoin)rD   r   r]   r^   r_   Úuse_usage_keyÚpartsrd   s          @r   Ú_unit_display_namers   T   s  ø€ Ø—‘€JØ�^‰^˜HÓ%€FØ—‘˜{Ó+€IØ�~‰~˜jÓ)€Hà˜lÑ*×q¨v¸Ñ/A×/pÀiÐW[ÐF[×/pÐ`hÐlpÐ`p€MÞØ—‘Ð ‰àˆØÑ Ø�L‰L˜Ô#ØÑØ�L‰L˜Ô"Ø�ZÓØ�L‰L˜Ô æ,9œ˜ZœÒ?bÐØ	‡L�LÔe¬°
×0@Ñ0@Ó0BÔ)CÓeÔeÞØ�‰�T—^‘^Ô$Ø�8‰8ÑE¹uÓEÓEÐEr   c                ó€  • U R                   R                  S5      nUS:X  a  U R                  S:X  a  gUS:X  a  U R                  S:X  a  gUS:X  a  U R                  S	:X  a  g
US:X  a  U R                  S:X  a  gU R                  S:X  a  gU R                  S:X  a  gU R                  S:X  a  g[        U R                  5      $ )Nr]   ra   i@B ÚMTokrG   iè  ÚKÚ	durationsé<   ÚMini  ÚHouri Êš;ÚGÚM)r   r   r   r   )rD   r]   s     r   Ú_unit_per_labelr}   m   s¨   € Ø�_‰_× Ñ  Ó*€FØ�Ó˜dŸh™h¨)Ó3ØØ�Ó §¡¨EÓ 1ØØ�Ó §¡¨R£ØØ�Ó §¡¨UÓ!2ØØ‡x�x�=Ó ØØ‡x�x�9ÓØØ‡x�x�5ÓØÜˆt�x‰x‹=Ðr   c                óH   • [        U R                  R                  5       5      $ r   )rI   r   r'   )rD   s    r   rH   rH   €   s   € Ü�T—_‘_×*Ñ*Ó,Ó-Ð-r   c                ól   • U R                   R                  5       UR                   R                  5       :*  $ r   )r   r'   )rC   rD   s     r   rB   rB   „   s)   € Ø×$Ñ$×*Ñ*Ó,°·±×0EÑ0EÓ0GÑGÐGr   NzUnitRegistry | NoneÚ_bundled_registryc                 óJ   • [         b  [         $ SSKJn   [        U 5      q [         $ )Nr   ©Ú	unit_data)r€   Úgenai_prices.data_unitsrƒ   r5   r‚   s    r   Ú_get_registryr…   ‹   s$   € ô Ñ$Ü Ð å1ä$ YÓ/ÐÜÐr   )rD   r   r+   r   )rD   r   r+   zfrozenset[tuple[str, str]])rC   r   rD   r   r+   r-   )r+   r5   )Ú
__future__r   Úcollections.abcr   Údataclassesr   Útypesr   Útypingr   r   r   r5   rs   r}   rH   rB   r€   r2   r…   r*   r   r   Ú<module>r‹      sk   ðÞ "å #Ý !Ý "ß ñ �$Ñ÷hð hó ðh÷9dñ 9dôxFô2ô&.ôHð *.Ð Ð&Ó -õ	r   