ó
    °"³j>,  ã                  óÖ   • % S SK Jr  S SKrS SKJrJr  S SKJr  S SK	J
r
  S SKJrJrJr  SSKJr  \\\4   r\\-  rS	\S
'    " S S5      r\
" SS9 " S S\5      5       r " S S\5      rg)é    )ÚannotationsN)ÚABCÚabstractmethod)Údeepcopy)Ú	dataclass)ÚAnyÚLiteralÚ	TypeAliasé   )Ú	UserErrorr
   Ú_JsonSchemaNodec                  ó   • \ rS rSrSrSrg)ÚUseEnumMemberDocstringsé   u+  Mix into an `Enum` to describe each of its members by the docstring written under it.

This is the enum counterpart to `model_config = ConfigDict(use_attribute_docstrings=True)` on a Pydantic
model, which is how a model's fields get their docstrings as descriptions. With it, the enum is described
to the model as `anyOf` of `const`s carrying those docstrings as descriptions, rather than as a bare list
of values, so the model can tell similar options apart. Without it the docstrings are ignored and the
schema is unchanged.

The two are expressed differently because an `Enum` has no `model_config` to carry a flag, and cannot carry
a plain class attribute either â€” annotated or not, any assigned value becomes a member. A base class is the
only marker left, so mix it in ahead of `str`, `int` or `Enum`:
`class Urgency(UseEnumMemberDocstrings, str, Enum)`. It changes nothing else about the enum: its members,
their values, and their `str`/`int` behaviour are exactly what they would be without it.

See [enum options](../tools.md#enum-options) for an example.
© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    ÚU/home/mande/repo/quber/.venv/lib/python3.13/site-packages/pydantic_ai/_json_schema.pyr   r      s   † ôr   r   F)Úinitc                  óª   • \ rS rSrSrSSSS.       SS jjr\SS j5       rSS jrSS	 jr	SS
 jr
SS jrSS jrSS jrSS jr\SS j5       rSrg)ÚJsonSchemaTransformeré"   aŽ  Walks a JSON schema, applying transformations to it at each level.

The transformer is called during a model's prepare_request() step to build the JSON schema
before it is sent to the model provider.

Note: We may eventually want to rework tools to build the JSON schema from the type directly, using a subclass of
pydantic.json_schema.GenerateJsonSchema, rather than making use of this machinery.
NF)ÚstrictÚprefer_inlined_defsÚsimplify_nullable_unionsc               óä   • Xl         X l         SU l         X0l        X@l        [        U R                   R                  S0 5      5      U l        / U l        [        [           " 5       U l        0 U l        g )NTú$defs)Úschemar   Úis_strict_compatibler   r    r   ÚgetÚdefsÚ
refs_stackÚsetÚstrÚrecursive_refsÚ_walked_defs)Úselfr#   r   r   r    s        r   Ú__init__ÚJsonSchemaTransformer.__init__-   sh   € ð ŒàŒð	ð %)ˆÔ!ð	ð $7Ô Ø(@Ô%ä+3°D·K±K·O±OÀGÈRÓ4PÓ+QˆŒ	Ø%'ˆŒÜ!¤#šh›jˆÔØ35ˆÕr   c                ó   • U$ )zMake changes to the schema.r   ©r,   r#   s     r   Ú	transformÚJsonSchemaTransformer.transformI   s	   € ð ˆr   c           	     ó^  • [        U R                  5      nU R                  R                  5         U R                  R                  5         UR                  SS 5        U R                  U5      n[        U[        5      (       a   eU R                  (       dT  U R                  (       aC  U R                  R                  5        VVs0 s H  u  p4X0R                  U5      _M     snnUS'   U$ U R                  (       a¨  U R                   Vs0 s H  oU[        U R                  U5      5      _M     nnU R                  R                  S5      nUc  S O[        R                  " SSU5      nUc-  U R                  R                  SS5      nX†;   a  U S3nX†;   a  M  X&U'   USU 3S	.$ U$ s  snnf s  snf )
Nr"   ú$refú
^#/\$defs/Ú ÚtitleÚrootÚ_rootz#/$defs/)r"   r4   )r   r#   r*   Úclearr+   ÚpopÚ_handleÚ
isinstanceÚboolr   r&   ÚitemsÚ_walked_defr%   ÚreÚsub)	r,   r#   ÚhandledÚkÚvÚkeyr&   Úroot_refÚroot_keys	            r   ÚwalkÚJsonSchemaTransformer.walkN   sw  € Ü˜$Ÿ+™+Ó&ˆà×Ñ×!Ñ!Ô#Ø×Ñ×ÑÔ!ð 	�
‰
�7˜DÔ!Ø—,‘,˜vÓ&ˆÜ˜g¤t×,Ñ,Ð,Ð,à×'×'¨D¯I¯IØ?C¿y¹y¿¹Ô?PÔQÒ?P±t°q §<¡<°£?Ò 2Ñ?PÒQˆG�GÑð$ ˆð! × × ð EI×DWÒDWÓXÒDW¸Sœ $×"2Ñ"2°3Ó"7Ó8Ò8ÑDWˆDÐXØ—{‘{—‘ vÓ.ˆHØ'Ñ/‘t´R·V²V¸MÈ2ÈxÓ5XˆHØÑØŸ;™;Ÿ?™?¨7°FÓ;�ØÓ&à"* ¨5Ð1�Hð Õ&ð %�‰NØ!¨X°h°ZÐ+@ÑAÐAàˆùó%  Rùò Ys   ÃF$Ä$F*c                ó¢  • [        U[        5      (       a  U$ U R                  (       aÉ  UR                  S5      =n(       a±  [        R
                  " SSU5      nX0R                  ;   a  U R                  R                  U5        OnX0R                  ;  a_  UR                  5        VVs0 s H  u  pEUS:w  d  M  XE_M     snn=n(       a  U R                  X65      $ [        U R                  U5      5      $ UR                  S5      nUS:X  a  U R                  U5      nOQUS:X  a  U R                  U5      nO9Uc6  U R                  US5      nU R                  US5      nU R                  US	5      nUbF  S
 H@  nUR                  U5      =n	(       d  M  U	 V
s/ s H  o R!                  U
5      PM     sn
X'   MB     U R#                  U5      $ s  snnf s  sn
f )Nr4   r5   r6   ÚtypeÚobjectÚarrayÚallOfÚanyOfÚoneOf)rO   rP   rQ   )r=   r>   r   r%   rA   rB   r'   r*   Úaddr?   Ú	_walk_defr   r@   Ú_handle_objectÚ_handle_arrayÚ_handle_unionr<   r1   )r,   r#   ÚrefrF   rD   rE   ÚsiblingsÚtype_Ú
union_kindÚmembersÚmembers              r   r<   ÚJsonSchemaTransformer._handlen   s›  € Ü�fœd×#Ñ#ØˆMà×#×#°·
±
¸6Ó0BÐ)B¨Õ)BÜ—&’&˜¨¨CÓ0ˆCØ—o‘oÓ%à×#Ñ#×'Ñ'¨Õ,Ø×/Ñ/Ó/ð 28·±´ÔO²©¨À1ÈÁ;£ ¢±ÒOÐO�8ÕOð  Ÿ>™>¨#Ó8Ð8Ü × 0Ñ 0°Ó 5Ó6Ð6ð —
‘
˜6Ó"ˆØ�HÓØ×(Ñ(¨Ó0‰FØ�gÓØ×'Ñ'¨Ó/‰FØ‰]Ø×'Ñ'¨°Ó8ˆFØ×'Ñ'¨°Ó8ˆFØ×'Ñ'¨°Ó8ˆFàÑÛ9�
Ø$Ÿj™j¨Ó4Ð4�7×4ÙMTÓ)UÊWÀ6¯,©,°vÖ*>ÉWÑ)U�FÓ&ñ :ð �~‰~˜fÓ%Ð%ùó-  Pùò( *Vs   Â&GÂ6GÆGc                ó„   • U R                   R                  U5      =nc!  U R                  U0 5      =U R                   U'   nU$ )a¼  The definition `key` refers to, walked once per transformer and cached.

Inlining a definition means walking its whole subtree at every reference site, and the result
is the same at each of them, so the walk is done once and callers get a `deepcopy` of it. This
also keeps the inlined copies independent of each other: the walk transforms schemas in place,
so handing out the same object at multiple sites would let each site corrupt the next.
)r+   r%   rS   )r,   rF   Úwalkeds      r   r@   Ú!JsonSchemaTransformer._walked_def“   sE   € ð ×'Ñ'×+Ñ+¨CÓ0Ð0ˆFÑ9Ø.2¯n©n¸SÀ"Ó.EÐEˆD×Ñ˜cÑ" VØˆr   c                ó2  • U R                   R                  U5      nUc  [        SU 35      eU R                  R	                  U5        U R                  0 [        U5      EUE5      nU R                  R                  5         [        U[        5      (       a   eU$ )zQWalk the definition `key` refers to, with `$ref` sibling keywords merged over it.z#Could not find $ref definition for )
r&   r%   r   r'   Úappendr<   r   r;   r=   r>   )r,   rF   rX   Ú
def_schemar_   s        r   rS   ÚJsonSchemaTransformer._walk_defŸ   s…   € à—Y‘Y—]‘] 3Ó'ˆ
ØÑÜÐAÀ#ÀÐGÓHÐHà�‰×Ñ˜sÔ#Ø—‘ÐB¤¨*Ó!5ÐB¸ÐBÓCˆØ�‰×ÑÔä˜f¤d×+Ñ+Ð+Ð+Øˆr   c                óª  • UR                  S5      =n(       a2  0 nUR                  5        H  u  pEU R                  U5      X4'   M     X1S'   UR                  S5      =nb.  [        U[        5      (       a  XaS'   OU R                  U5      US'   UR                  S5      =nb2  0 nUR                  5        H  u  pEU R                  U5      X„'   M     X�S'   U$ )NÚ
propertiesÚadditionalPropertiesÚpatternProperties)r%   r?   r<   r=   r>   )	r,   r#   rf   Úhandled_propertiesrF   ÚvalueÚadditional_propertiesÚpattern_propertiesÚhandled_pattern_propertiess	            r   rT   Ú$JsonSchemaTransformer._handle_object¬   sÞ   € ØŸ™ LÓ1Ð1ˆ:Õ1Ø!#ÐØ(×.Ñ.Ö0‘
�Ø*.¯,©,°uÓ*=Ð"Ó'ñ 1à#5�<Ñ à%+§Z¡ZÐ0FÓ%GÐGÐ!ÑTÜÐ/´×6Ñ6Ø1FÐ-Ò.à15·±Ð>SÓ1T�Ð-Ñ.à"(§*¡*Ð-@Ó"AÐAÐÑNØ)+Ð&Ø0×6Ñ6Ö8‘
�Ø26·,±,¸uÓ2EÐ*Ó/ñ 9à*DÐ&Ñ'àˆr   c                óà   • UR                  S5      =n(       a$  U Vs/ s H  o0R                  U5      PM     snUS'   UR                  S5      =n(       a  U R                  U5      US'   U$ s  snf )NÚprefixItemsr?   )r%   r<   )r,   r#   Úprefix_itemsÚitemr?   s        r   rU   Ú#JsonSchemaTransformer._handle_arrayÁ   sg   € Ø!Ÿ:™: mÓ4Ð4ˆ<Õ4ÙDPÓ$QÂL¸D§\¡\°$Ö%7ÁLÑ$QˆF�=Ñ!à—J‘J˜wÓ'Ð'ˆ5Õ'Ø"Ÿl™l¨5Ó1ˆF�7‰Oàˆùò %Rs   �A+c                ób  •  UR                  U5      nU Vs/ s H  o@R                  U5      PM     nnU R                  (       a  U R	                  U5      n[        U5      S:X  a   [        US   [        5      (       a  US   U-  $ UR                  5       nXQU'   U$ ! [         a    Us $ f = fs  snf )Nr   r   )	r;   ÚKeyErrorr<   r    Ú_simplify_nullable_unionÚlenr=   ÚdictÚcopy)r,   r#   rZ   r[   r\   rC   s         r   rV   Ú#JsonSchemaTransformer._handle_unionÊ   s«   € ð	Ø—j‘j Ó,ˆGñ 7>Ó>²g¨F—<‘< Ö'±gˆÐ>à×(×(Ø×3Ñ3°GÓ<ˆGÜˆw‹<˜1Óä˜' !™*¤d×+Ñ+Ø˜q‘z FÑ*Ð*ð —‘“ˆØ$ˆzÑØˆøô! ó 	ØŠMð	üò ?s   ‚B —B,ÂB)Â(B)c                óÀ   • [        U 5      S:X  aN  SS0U ;   aF  [        S U  5       S 5      n[        U[        5      (       a  [	        U5      nSUS'   U/$ Ub  U $ U S   /$ U $ )Né   rL   Únullc              3  ó8   #   • U  H  oS S0:w  d  M  Uv •  M     g7f)rL   r}   Nr   )Ú.0rr   s     r   Ú	<genexpr>ÚAJsonSchemaTransformer._simplify_nullable_union.<locals>.<genexpr>ä   s   é € ÐD¢%˜$°F¸FÐ3CÑ+C—‘¢%ùs   ‚‘	TÚnullabler   )rw   Únextr=   rx   r   )ÚcasesÚnon_null_schemaÚ
new_schemas      r   rv   Ú.JsonSchemaTransformer._simplify_nullable_unionß   sw   € äˆu‹:˜‹? ¨Ð/°5Ó8ä"ÙD¡%ÓDØóˆOô ˜/¬4×0Ñ0ä% oÓ6�
Ø)-�
˜:Ñ&Ø"�|Ð#ØÑ*Ø�ð ˜a™�zÐ!àˆr   )	r+   r&   r$   r   r*   r'   r#   r    r   )r#   Ú
JsonSchemar   úbool | Noner   r>   r    r>   ©r#   rˆ   Úreturnrˆ   )r‹   rˆ   )r#   r   r‹   r   )rF   r)   r‹   rˆ   )rF   r)   rX   rˆ   r‹   rˆ   )r#   rˆ   rZ   z"Literal['allOf', 'anyOf', 'oneOf']r‹   rˆ   )r„   úlist[_JsonSchemaNode]r‹   rŒ   )r   r   r   r   r   r-   r   r1   rI   r<   r@   rS   rT   rU   rV   Ústaticmethodrv   r   r   r   r   r   r   "   sŠ   † ñð #Ø$)Ø).ñ6àð6ð ð	6ð
 "ð6ð #'õ6ð8 óó ðôô@#&ôJ
ôôô*ôð* óó ór   r   c                  óB   ^ • \ rS rSrSrSS.SU 4S jjjrS	S jrSrU =r$ )
ÚInlineDefsJsonSchemaTransformeréõ   z+Transforms the JSON Schema to inline $defs.N)r   c               ó"   >• [         TU ]  XSS9  g )NT)r   r   )Úsuperr-   )r,   r#   r   Ú	__class__s      €r   r-   Ú(InlineDefsJsonSchemaTransformer.__init__ø   s   ø€ Ü‰Ñ˜ÀDÐÒIr   c                ó   • U$ )Nr   r0   s     r   r1   Ú)InlineDefsJsonSchemaTransformer.transformû   s   € Øˆr   r   )r#   rˆ   r   r‰   rŠ   )	r   r   r   r   r   r-   r1   r   Ú__classcell__)r“   s   @r   r�   r�   õ   s   ø† Ù5àDH÷ Jò J÷ò r   r�   )Ú
__future__r   Ú_annotationsrA   Úabcr   r   ry   r   Údataclassesr   Útypingr   r	   r
   Ú
exceptionsr   rx   r)   rˆ   r>   r   Ú__annotations__r   r   r�   r   r   r   Ú<module>rŸ      st   ðÞ 2ã 	ß #Ý Ý !ß *Ñ *å !à�#�s�(‰^€
Ø'¨$Ñ.€�Ó .÷ñ ñ& �ÑôO˜Có Oó ðOôdÐ&;õ r   