o
    Ci@                     @  s  U d dl mZ d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZmZmZ d dlmZ dd	lmZ erCd
dlmZ dhZddhZh dZddheZh eeddddZh eeZh eeZh eeZh eeZh eeZh eeZ h eeZ!h eeZ"eZ#eZ$h eeZ%h eeZ&h eeZ'eZ(dhZ)h dZ*dZ+dddddge+R Z,dZ-ee.Z/de0d < eD ]	Z1e/e1 2e+ qeD ]	Z1e/e1 2d! qeD ]	Z1e/e1 2d" qeD ]	Z1e/e1 2d# qeD ]	Z1e/e1 2d$ qeD ]
Z1e/e1 2d% qe D ]
Z1e/e1 2d& qe!D ]
Z1e/e1 2d' qe"D ]
Z1e/e1 2d( q,e%D ]
Z1e/e1 2d) q9e&D ]
Z1e/e1 2d* qFe'D ]
Z1e/e1 2d+ qSg e+e,e-d,d-R D ]
Z3e/d 4e3 qke)D ]
Z1e/e1 2d. qxe*D ]
Z1e/e1 2d/ qe#D ]
Z1e/e1 2d0 qe$D ]
Z1e/e1 2d1 qe(D ]
Z1e/e1 2d2 qdTd9d:Z5dUd=d>Z6dVdAdBZ7dWdGdHZ8dXdJdKZ9dYdQdRZ:dSS )Z    )annotations)defaultdict)copy)partial)TYPE_CHECKINGAnyCallableIterable)
CoreSchemaPydanticCustomErrorto_jsonable_python)core_schema   )PydanticMetadata   )GetJsonSchemaHandlerstrict
min_length
max_length>   gegtleltmultiple_ofallow_inf_nanstrip_whitespaceto_lowerto_upperpattern
union_mode>   r   default_hostdefault_pathdefault_porthost_requiredallowed_schemes)strbytesurlmulti-host-urllisttupleset	frozenset	generator)floatintdatetime	timedeltadatetimezdict[str, set[str]]CONSTRAINTS_TO_ALLOWED_SCHEMAS)r&   )r)   )r*   )r+   r,   )dict)r-   )r.   )r/   )r0   r1   r3   )r2   )r1   z
typed-dictmodel)union)r'   r(   )bool)uuid)zlax-or-strictscs.CoreSchemafCallable[[], dict[str, Any]]returnNonec                   sX   d fdd}d	| v r#| d	 }d
| v r|d
  | d S |g|d
< d S d
|gi| d	< d S )Nr:   r;   handlerr   r>   dict[str, Any]c                   s   || }|    |S N)update)r:   r@   	js_schemar<    /var/www/html/fyndo/python/python_agents/rag_suite/venv/lib/python3.10/site-packages/pydantic/_internal/_known_annotated_metadata.pyupdate_js_schema_   s   z.add_js_update_schema.<locals>.update_js_schemametadatapydantic_js_functions)r:   r;   r@   r   r>   rA   )append)r:   r<   rH   rI   rF   rE   rG   add_js_update_schema^   s   rL   vr   c                 C  s(   t | tttttt d fvrt| S | S rB   )typer/   r%   r.   r&   r8   r   rM   rF   rF   rG   as_jsonable_valuen   s   rP   r   Iterable[Any]c                 c  sn    ddl }ddlm} | D ]'}t||jr|E dH  qt||r1|jE dH  t|}g |_|V  q|V  qdS )a  Expand the annotations.

    Args:
        annotations: An iterable of annotations.

    Returns:
        An iterable of expanded annotations.

    Example:
        ```py
        from annotated_types import Ge, Len

        from pydantic._internal._known_annotated_metadata import expand_grouped_metadata

        print(list(expand_grouped_metadata([Ge(4), Len(5)])))
        #> [Ge(ge=4), MinLen(min_length=5)]
        ```
    r   N)	FieldInfo)annotated_typespydantic.fieldsrR   
isinstanceGroupedMetadatarI   r   )r   atrR   
annotationrF   rF   rG   expand_grouped_metadatat   s   
rY   rX   schemar
   CoreSchema | Nonec                   sV  ddl }ddlm} | }t g\}}|d }| D ]I\}|tvr-td| t| }||v rG|dkrB|dkrB|d	< n||< q|d
krXdu rXt	|j
|  S |dkrit|tjdg  S |dkrt	t|jd|}	t|	fdd |	  S |dkrt	t|jd|  S |dkrt	t|jd|  S |dkrt	t|jd|  S |dkrt	t|jd|  S |dkrt	t|jd|}	t|	fdd |	  S |dkrt	t|jd|}	t|	fdd |	  S |d krt|tjd!d"g  S |d#kr&t|tjd!d$g  S |d%kr8t|tjd!d&g  S |dkrKt	t|j jd|  S |dkr^t	t|j jd|  S td'| d(| |D ] t |jrt	t|j jd|  S t |jrt	t|j jd|  S t |jrt	t|j jd|  S t |j rt	t|j j!d|  S t |j"rt	t|j j#d|  S t |j$rt	t|j jd|  S t |j%rt	t|j jd|  S t |j&r&t' j(d)r j(j) d*nd+d1 fd/d0}
t	|
|  S  dS |S )2a{  Apply `annotation` to `schema` if it is an annotation we know about (Gt, Le, etc.).
    Otherwise return `None`.

    This does not handle all known annotations. If / when it does, it can always
    return a CoreSchema and return the unmodified schema if the annotation should be ignored.

    Assumes that GroupedMetadata has already been expanded via `expand_grouped_metadata`.

    Args:
        annotation: The annotation.
        schema: The schema.

    Returns:
        An updated schema with annotation if it is an annotation we know about, `None` otherwise.

    Raises:
        PydanticCustomError: If `Predicate` fails.
    r   Nr   )_validatorsrN   zUnknown constraint r   r7   moder   Fr   )r   r   )r   c                        dt  iS )Nr   rP   rF   valuerF   rG   <lambda>       z&apply_known_metadata.<locals>.<lambda>r   )r   r   )r   r   )r   r   )r   r   )r   c                     r^   )N	minLengthr_   rF   r`   rF   rG   rb      rc   r   )r   c                     r^   )N	maxLengthr_   rF   r`   rF   rG   rb      rc   r   T)r   r   )r   r   )r   zUnable to apply constraint z to schema __qualname__  rM   r   r>   c                   s      | stdd d| S )Npredicate_failedz
Predicate failed)funcr   rO   )rX   predicate_namerF   rG   val_funcA  s   

z&apply_known_metadata.<locals>.val_funcrM   r   r>   r   )*rS   rh   r\   r   collect_known_metadataitemsr4   
ValueErrorcs no_info_after_validator_functionforbid_inf_nan_checkchain_schema
str_schemar   greater_than_validatorrL   greater_than_or_equal_validatorless_than_validatorless_than_or_equal_validatormultiple_of_validatormin_length_validatormax_length_validatorr   r   RuntimeErrorrU   Gtr   Ger   Ltr   Ler   
MultipleOfr   MinLenMaxLen	Predicatehasattrrk   rf   )rX   rZ   rW   r\   schema_updateother_metadataschema_type
constraintallowed_schemasr:   rm   rF   )rX   rl   ra   rG   apply_known_metadata   s  










 	r    tuple[dict[str, Any], list[Any]]c                 C  sb  ddl }t| } i }g }| D ]}t|tr||j qt||jr+|d|ji qt||jr:|d|j	i qt||j
rI|d|ji qt||jrX|d|ji qt||jrg|d|ji qt||jrv|d|ji qt||jr|d	|ji qt|trt|tr|d
d t| D  q|| qdd | D }||fS )a  Split `annotations` into known metadata and unknown annotations.

    Args:
        annotations: An iterable of annotations.

    Returns:
        A tuple contains a dict of known metadata and a list of unknown annotations.

    Example:
        ```py
        from annotated_types import Gt, Len

        from pydantic._internal._known_annotated_metadata import collect_known_metadata

        print(collect_known_metadata([Gt(1), Len(42), ...]))
        #> ({'gt': 1, 'min_length': 42}, [Ellipsis])
        ```
    r   Nr   r   r   r   r   r   r   c                 S  s    i | ]\}}| d s||qS )_)
startswith.0krM   rF   rF   rG   
<dictcomp>  s     z*collect_known_metadata.<locals>.<dictcomp>c                 S  s   i | ]\}}|d ur||qS rB   rF   r   rF   rF   rG   r     s    )rS   rY   rU   r   rC   __dict__r   r   r   r   r   r   r   r   r   r   r   r   r   r   rN   
issubclassvarsrp   rK   )r   rW   res	remainingrX   rF   rF   rG   ro   Q  s4   
ro   rI   rA   allowedIterable[str]source_typec                 C  s<   |   t| }|rtd|dddd |D  dS )a  A small utility function to validate that the given metadata can be applied to the target.
    More than saving lines of code, this gives us a consistent error message for all of our internal implementations.

    Args:
        metadata: A dict of metadata.
        allowed: An iterable of allowed metadata.
        source_type: The source type.

    Raises:
        TypeError: If there is metadatas that can't be applied on source type.
    z/The following constraints cannot be applied to z: z, c                 S  s   g | ]}|qS rF   rF   )r   r   rF   rF   rG   
<listcomp>  s    z"check_metadata.<locals>.<listcomp>N)keysr+   	TypeErrorjoin)rI   r   r   unknownrF   rF   rG   check_metadata  s   r   N)r:   r;   r<   r=   r>   r?   rn   )r   rQ   r>   rQ   )rX   r   rZ   r
   r>   r[   )r   rQ   r>   r   )rI   rA   r   r   r   r   r>   r?   );
__future__r   collectionsr   r   	functoolsr   typingr   r   r   r	   pydantic_corer
   r   r   r   rr   _fieldsr   annotated_handlersr   STRICTSEQUENCE_CONSTRAINTS
INEQUALITYNUMERIC_CONSTRAINTSSTR_CONSTRAINTSBYTES_CONSTRAINTSLIST_CONSTRAINTSTUPLE_CONSTRAINTSSET_CONSTRAINTSDICT_CONSTRAINTSGENERATOR_CONSTRAINTSFLOAT_CONSTRAINTSINT_CONSTRAINTSBOOL_CONSTRAINTSUUID_CONSTRAINTSDATE_TIME_CONSTRAINTSTIMEDELTA_CONSTRAINTSTIME_CONSTRAINTSLAX_OR_STRICT_CONSTRAINTSUNION_CONSTRAINTSURL_CONSTRAINTSTEXT_SCHEMA_TYPESSEQUENCE_SCHEMA_TYPESNUMERIC_SCHEMA_TYPESr+   r4   __annotations__r   rC   r   addrL   rP   rY   r   ro   r   rF   rF   rF   rG   <module>   s    	



( 
69