U
    ·ÜŸjñ  ã                   @  sè   d dl mZ d dlZd dlmZmZ d dlmZ d dlZddl	m
Z
 ddlmZmZ ddlmZmZ ed	ƒZd
ddœdd„Zdddddœdd„Zddddœdd„Zdddœdd„Zdddœdd „Zdd!d"œd#d$„Zdd%dd&œd'd(„ZdS ))é    )ÚannotationsN)ÚAnyÚTypeVar)Ú	TypeGuardé   )Ú	NOT_GIVEN)Úis_dictÚis_list)ÚPYDANTIC_V2Úmodel_json_schemaÚ_Tz4type[pydantic.BaseModel] | pydantic.TypeAdapter[Any]zdict[str, Any])ÚmodelÚreturnc                 C  sR   t  | ¡rt| ƒrt| ƒ}n(tr6t| tjƒr6|  ¡ }nt	d| › �ƒ‚t
|d|d�S )Nz:Non BaseModel types are only supported with Pydantic v2 - © ©ÚpathÚroot)ÚinspectÚisclassÚis_basemodel_typer   r
   Ú
isinstanceÚpydanticZTypeAdapterÚjson_schemaÚ	TypeErrorÚ_ensure_strict_json_schema)r   Zschemar   r   ú8/tmp/pip-unpacked-wheel-2qj3ofc_/openai/lib/_pydantic.pyÚto_strict_json_schema   s    

r   Úobjectztuple[str, ...]zdict[str, object])r   r   r   r   c                  s\  t | ƒstd| › dˆ › �ƒ‚|  d¡}t |ƒrV| ¡ D ]\}}t|ˆ d|f˜ˆd� q6|  d¡}t |ƒr�| ¡ D ]\}}t|ˆ d|f˜ˆd� qp|  d¡}	|	dkr²d| kr²d	| d< |  d
¡}
t |
ƒrödd„ |
 ¡ D ƒ| d< ‡ ‡fdd„|
 ¡ D ƒ| d
< |  d¡}t |ƒ�r t|ˆ d˜ˆd�| d< |  d¡}t|ƒ�rP‡ ‡fdd„t|ƒD ƒ| d< |  d¡}t|ƒ�r¶t|ƒdk�rš|  	t|d ˆ d ˜ˆd�¡ |  
d¡ n‡ ‡fdd„t|ƒD ƒ| d< |  dt¡dk�rÒ|  
d¡ |  d¡}|�rXt| dƒ�rXt|tƒ�std|› �ƒ‚tˆ|d�}t |ƒ�s2td|› d|› �ƒ‚|  	|| –¡ |  
d¡ t| ˆ ˆd�S | S )!zkMutates the given JSON schema to ensure it conforms to the `strict` standard
    that the API expects.
    z	Expected z to be a dictionary; path=z$defsr   ÚdefinitionsÚtyper   ZadditionalPropertiesFÚ
propertiesc                 S  s   g | ]}|‘qS r   r   )Ú.0Úpropr   r   r   Ú
<listcomp>9   s     z._ensure_strict_json_schema.<locals>.<listcomp>Úrequiredc                   s(   i | ] \}}|t |ˆ d |f˜ˆd�“qS )r    r   )r   )r!   ÚkeyZprop_schemar   r   r   Ú
<dictcomp>:   s   ÿ z._ensure_strict_json_schema.<locals>.<dictcomp>ÚitemsÚanyOfc                   s*   g | ]"\}}t |ˆ d t|ƒf˜ˆd�‘qS )r(   r   ©r   Ústr)r!   ÚiÚvariantr   r   r   r#   H   s   ÿÚallOfé   r   Ú0c                   s*   g | ]"\}}t |ˆ d t|ƒf˜ˆd�‘qS )r-   r   r)   )r!   r+   Úentryr   r   r   r#   T   s   ÿÚdefaultNz$refzReceived non-string $ref - )r   ÚrefzExpected `$ref: z&` to resolved to a dictionary but got )r'   )r-   r/   )r   r   Úgetr'   r   Úkeysr	   Ú	enumerateÚlenÚupdateÚpopr   Úhas_more_than_n_keysr   r*   ÚAssertionErrorÚresolve_refÚ
ValueError)r   r   r   ZdefsZdef_nameZ
def_schemar   Zdefinition_nameZdefinition_schemaÚtypr    r'   Zany_ofZall_ofr2   Úresolvedr   r   r   r      s^    	



þ




þ


þ




r   r*   )r   r2   r   c                 C  sf   |  d¡std|›d�ƒ‚|dd …  d¡}| }|D ],}|| }t|ƒs\td|› d|› �ƒ‚|}q4|S )Nz#/zUnexpected $ref format z; Does not start with #/r   ú/z1encountered non-dictionary entry while resolving z - )Ú
startswithr<   Úsplitr   r:   )r   r2   r   r>   r%   Úvaluer   r   r   r;   v   s    
r;   r   z#TypeGuard[type[pydantic.BaseModel]])r=   r   c                 C  s   t  | ¡sdS t| tjƒS )NF)r   r   Ú
issubclassr   Z	BaseModel©r=   r   r   r   r   „   s    
r   Úboolc                 C  s
   t | dƒS )z@Returns True if the given type likely used `@pydantic.dataclass`Z__pydantic_config__)ÚhasattrrD   r   r   r   Úis_dataclass_like_typeŠ   s    rG   zTypeGuard[dict[str, object]])Úobjr   c                 C  s   t | ƒS )N)Ú_is_dict)rH   r   r   r   r   �   s    r   Úint)rH   Únr   c                 C  s,   d}|   ¡ D ]}|d7 }||kr dS qdS )Nr   r.   TF)r4   )rH   rK   r+   Ú_r   r   r   r9   •   s    r9   )Ú
__future__r   r   Útypingr   r   Útyping_extensionsr   r   Ú_typesr   Ú_utilsr   rI   r	   Ú_compatr
   r   r   r   r   r;   r   rG   r9   r   r   r   r   Ú<module>   s   [