o
    ]۷i)                     @  s4  U d dl mZ d dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZ d dlmZ d dlmZ ddlmZmZmZmZmZmZmZmZ erKd d	lmZ d>ddZejejejej ejdej!ej"ej#ej ej$ej%di dej&dej'dej(dej)dej dej$dej*dej+dej+dej,dej-dej.d ej/d!ej0d"ej1d#ej2d$ej&ej3ej4ej5ej6ej7ej#ejd%dej8idej9idej:idej;id&Z<d'e=d(< G d)d* d*ej>Z?G d+d, d,eZ@G d-d. d.eZAe d?d1d2ZBd@dAd7d8ZCeAD  h d9ZEd:e=d;< eFeAG eE d<d=eAjHhB ZIdS )B    )annotationsN)	lru_cache)TYPE_CHECKINGAnyDictListOptionalSetUnion)warn)Field   )PYDANTIC_V2	BaseModelcached_propertyfield_validatormodel_validatoris_urlTypesUnionIntFloat)
ConfigDictschema Union[Dict[str, Any], List[Any]]keysUnion[List[str], List[int]]returnDict[Any, Any]c                 C  s   |s| }n?t |dkr"t| tr| |d i }n+| t|d  }n"t| tr5t| |d  |dd  }nt| t|d  |dd  }t|trK|S td|  d| )Nr   r   z/Does not support json pointer to array. schema=z, key=)len
isinstancedictgetintget_model_by_pathNotImplementedError)r   r   model r%   `/home/ubuntu/vllm_env/lib/python3.10/site-packages/lmformatenforcer/external/jsonschemaobject.pyr"   :   s   


r"   )int32int64default	date-timez	unix-time)floatdoubledecimalr*   timer)   r)   bytebinarydater*   r.   passwordemailz	idn-emailuuiduuid1uuid2uuid3uuid4uuid5urizuri-reference)hostnameipv4zipv4-networkipv6zipv6-networkr-   integer)r>   numberstringbooleanobjectnullarrayzDict[str, Dict[str, Types]]json_schema_data_formatsc                   @  s   e Zd ZdZdZdZdS )JSONReferenceLOCALREMOTEURLN)__name__
__module____qualname__rG   rH   rI   r%   r%   r%   r&   rF      s    rF   c                   @  s"   e Zd ZU ded< dZded< dS )DiscriminatorstrpropertyNameNzOptional[Dict[str, str]]mapping)rJ   rK   rL   __annotations__rP   r%   r%   r%   r&   rM      s   
 rM   c                      s  e Zd ZU eseredlddZnedlddZedmddZh d	Zd
e	d< dZ
de	d< edddnddZeddoddZdZde	d< dZde	d< dZde	d< dZd e	d!< dZd e	d"< dZd#e	d$< dZd#e	d%< dZd&e	d'< dZd&e	d(< dZd#e	d)< dZd#e	d*< dZd+e	d,< dZd-e	d.< dZd-e	d/< dZd0e	d1< dZd2e	d3< g Zd4e	d5< g Z d4e	d6< g Z!d4e	d7< g Z"d8e	d9< dZ#de	d:< dZ$d;e	d<< g Z%d=e	d>< e&dd?d@Z'd e	d< dAZ(de	dB< e&g dCd@Z)d=e	dD< dZ*d e	dE< dZ+d e	dF< dZ,de	dG< dZ-de	dH< dZ.de	dI< e&ddJd@Z/d e	dK< e&ddLd@Z0d e	dM< e&ddNd@Z1d e	dO< e&e
e2dPZ3de	d< dZ4dQe	dR< er;e5dSe6fdTZ7nG dUdV dVZ8esLdp fdXdYZ9e6dqd[d\Z:e6dqd]d^Z;e6drd_d`Z<eddddsdadbZ=e6dqdcddZ>e6dqdedfZ?e6dtdhdiZ@e6dqdjdkZA  ZBS )uJsonSchemaObjectr   Dict[str, Any]c                 C     | j S N)model_fieldsclsr%   r%   r&   
get_fields      zJsonSchemaObject.get_fieldsc                 C  rT   rU   )
__fields__rW   r%   r%   r&   rY      rZ   Nonec                 C  s   |    d S rU   )update_forward_refsrW   r%   r%   r&   model_rebuild   s   zJsonSchemaObject.model_rebuild>   maximumminimumpatternmaxItemsminItems	maxLength	minLength
multipleOfuniqueItemsexclusiveMaximumexclusiveMinimumSet[str]__constraint_fields__extrasrN   __extra_key__before)modevaluesr   c                 C  s|   t |tr|S |d}|d}|du r|d |d< |d= n|du r&|d= |du r5|d |d< |d= |S |du r<|d= |S )Nrh   ri   Tr_   Fr`   )r   boolr    )rX   rp   exclusive_maximumexclusive_minimumr%   r%   r&   0validate_exclusive_maximum_and_exclusive_minimum   s    


zAJsonSchemaObject.validate_exclusive_maximum_and_exclusive_minimumrefvaluec                 C  s\   t |tr,d|v r,|dr|d d S d|v s$|d dks$|d dkr&|S |ddS |S )N#z#/r   )r   rN   endswithreplace)rX   rv   r%   r%   r&   validate_ref   s   
 zJsonSchemaObject.validate_refNz;Union[List[JsonSchemaObject], JsonSchemaObject, bool, None]itemszOptional[bool]rg   zUnion[str, List[str], None]typeOptional[str]formatra   zOptional[int]re   rd   zOptional[UnionIntFloat]r`   r_   rc   rb   zOptional[float]rf   zUnion[float, bool, None]rh   ri   z#Union[JsonSchemaObject, bool, None]additionalPropertiesz%Optional[Dict[str, JsonSchemaObject]]patternPropertieszList[JsonSchemaObject]oneOfanyOfallOfz	List[Any]enum	writeOnlyz2Optional[Dict[str, Union[JsonSchemaObject, bool]]]
propertiesz	List[str]required$ref)r)   aliasFnullablezx-enum-varnamesx_enum_varnamesdescriptiontitleexampleexamplesr)   $ididcustomTypePathcustom_type_pathcustomBasePathcustom_base_path)r   default_factoryzUnion[Discriminator, str, None]discriminatorT)arbitrary_types_allowedignored_typesc                   @  s   e Zd ZdZefZdZdS )zJsonSchemaObject.ConfigTN)rJ   rK   rL   r   r   keep_untouchedsmart_castsr%   r%   r%   r&   Config   s    r   datac                   s*   t  jdi | dd | D | _d S )Nc                 S  s   i | ]\}}|t vr||qS r%   )EXCLUDE_FIELD_KEYS).0kvr%   r%   r&   
<dictcomp>  s    z-JsonSchemaObject.__init__.<locals>.<dictcomp>r%   )super__init__r|   rl   )selfr   	__class__r%   r&   r     s   zJsonSchemaObject.__init__rq   c                 C  s4   | j d up| jdko| j o| j o| j o| j S )NrB   )r   r}   r   r   r   ru   r   r%   r%   r&   	is_object  s   

zJsonSchemaObject.is_objectc                 C  s   | j d up	| jdkS )NrD   )r|   r}   r   r%   r%   r&   is_array     zJsonSchemaObject.is_arrayc                 C  s   | j ddd S )N/r   rx   )ru   rsplitr   r%   r%   r&   ref_object_name  s   z JsonSchemaObject.ref_object_namec                 C  s   |pd S rU   r%   )rX   rp   r%   r%   r&   validate_items  s   zJsonSchemaObject.validate_itemsc                 C  s   d| j v p	d| jv S )Nr)   r   )__fields_set__rl   r   r%   r%   r&   has_default  r   zJsonSchemaObject.has_defaultc                 C  s   t | j| j@ S rU   )rq   rk   r   r   r%   r%   r&   has_constraint!  s   zJsonSchemaObject.has_constraintOptional[JSONReference]c                 C  s   | j rt| j S d S rU   )ru   get_ref_typer   r%   r%   r&   ref_type%  s   
zJsonSchemaObject.ref_typec                 C  s   t | jto
d| jv S )NrC   )r   r}   listr   r%   r%   r&   type_has_null+  s   zJsonSchemaObject.type_has_null)r   rS   )r   r\   )rp   rS   r   r   )rv   r   r   r   )r   r   r   r\   )r   rq   )r   rN   )rp   r   r   r   )r   r   )CrJ   rK   rL   r   r   classmethodrY   r^   rk   rQ   rm   r   rt   r   r{   r|   rg   r}   r   ra   re   rd   r`   r_   rc   rb   rf   rh   ri   r   r   r   r   r   r   r   r   r   r   ru   r   r   r   r   r   r   r)   r   r   r   r   rl   r   r   r   model_configr   r   r   r   r   r   r   r   r   r   __classcell__r%   r%   r   r&   rR      s   
 	

rR   ru   rN   c                 C  s&   | d dkr	t jS t| rt jS t jS )Nr   rw   )rF   rG   r   rI   rH   )ru   r%   r%   r&   r   0  s
   r   type_format__r~   r   c                 C  sP   | t vrtjS t |  |d u rdn|}|d ur|S td||  t |  d S )Nr)   z6format of {!r} not understood for {!r} - using default)rE   r   anyr    r   r   )r   r   data_formatsr%   r%   r&   	_get_type9  s   r   >   constr   r   r   r   r   r   rj   DEFAULT_FIELD_KEYSr   r   )r   r   r   r   r   r   )ru   rN   r   rF   rU   )r   rN   r   r~   r   r   )J
__future__r   r   _enum	functoolsr   typingr   r   r   r   r   r	   r
   warningsr   pydanticr   jsonschemaobjectutilr   r   r   r   r   r   r   r   r   r"   r'   r(   r>   	date_timer+   r,   r-   r.   r?   r@   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   ipv4_networkr=   ipv6_networkrA   rB   rC   rD   rE   rQ   EnumrF   rM   rR   r   r   r^   r   setrY   rm   r   r%   r%   r%   r&   <module>   s   $	(
	
1 %

