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%   v/home/app/PaddleOCR-VL-test/.venv_paddleocr/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strZpropertyNameNzOptional[Dict[str, str]]mapping)rJ   rK   rL   __annotations__rO   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)Zmodel_fieldsclsr%   r%   r&   
get_fields      zJsonSchemaObject.get_fieldsc                 C  rS   rT   )Z
__fields__rU   r%   r%   r&   rW      rX   Nonec                 C  s   |    d S rT   )Zupdate_forward_refsrU   r%   r%   r&   model_rebuild   s   zJsonSchemaObject.model_rebuild>   exclusiveMaximummaximumpatternminimumexclusiveMinimum	minLengthmaxItems	maxLengthminItemsuniqueItems
multipleOf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 )Nr[   r_   Tr\   Fr^   )r   boolr    )rV   rl   Zexclusive_maximumZ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)rV   rp   r%   r%   r&   validate_ref   s   
 zJsonSchemaObject.validate_refNz;Union[List[JsonSchemaObject], JsonSchemaObject, bool, None]itemszOptional[bool]rd   zUnion[str, List[str], None]typeOptional[str]formatr]   zOptional[int]r`   rb   zOptional[UnionIntFloat]r^   r\   rc   ra   zOptional[float]re   zUnion[float, bool, None]r[   r_   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idZcustomTypePathcustom_type_pathZcustomBasePathcustom_base_path)r   default_factoryzUnion[Discriminator, str, None]discriminatorT)arbitrary_types_allowedZignored_typesc                   @  s   e Zd ZdZefZdZdS )zJsonSchemaObject.ConfigTN)rJ   rK   rL   r   r   Zkeep_untouchedZ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__rv   rh   )selfr   	__class__r%   r&   r     s   zJsonSchemaObject.__init__rm   c                 C  s4   | j d up| jdko| j o| j o| j o| j S )NrB   )r   rw   r~   r|   r}   ro   r   r%   r%   r&   	is_object  s   

zJsonSchemaObject.is_objectc                 C  s   | j d up	| jdkS )NrD   )rv   rw   r   r%   r%   r&   is_array     zJsonSchemaObject.is_arrayc                 C  s   | j ddd S )N/r   rr   )ro   rsplitr   r%   r%   r&   ref_object_name  s   z JsonSchemaObject.ref_object_namec                 C  s   |pd S rT   r%   )rV   rl   r%   r%   r&   validate_items  s   zJsonSchemaObject.validate_itemsc                 C  s   d| j v p	d| jv S )Nr)   r   )__fields_set__rh   r   r%   r%   r&   has_default  r   zJsonSchemaObject.has_defaultc                 C  s   t | j| j@ S rT   )rm   rg   r   r   r%   r%   r&   has_constraint!  s   zJsonSchemaObject.has_constraintOptional[JSONReference]c                 C  s   | j rt| j S d S rT   )ro   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   rw   listr   r%   r%   r&   type_has_null+  s   zJsonSchemaObject.type_has_null)r   rR   )r   rY   )rl   rR   r   r   )rp   r   r   r   )r   r   r   rY   )r   rm   )r   rN   )rl   r   r   r   )r   r   )CrJ   rK   rL   r   r   classmethodrW   rZ   rg   rP   ri   r   rn   r   ru   rv   rd   rw   ry   r]   r`   rb   r^   r\   rc   ra   re   r[   r_   rz   r{   r|   r}   r~   r   r   r   r   r   ro   r   r   r   r   r   r   r)   r   r   r   r   rh   r   r   r   Zmodel_configr   r   r   r   r   r   r   r   r   r   __classcell__r%   r%   r   r&   rQ      s   
 	

rQ   ro   rN   c                 C  s&   | d dkr	t jS t| rt jS t jS )Nr   rq   )rF   rG   r   rI   rH   )ro   r%   r%   r&   r   0  s
   r   type_format__rx   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   ry   )r   r   Zdata_formatsr%   r%   r&   	_get_type9  s   r   >   r   r   r   constr   r   r   rf   DEFAULT_FIELD_KEYSr   r   )r   r   r   r   r   r   )ro   rN   r   rF   rT   )r   rN   r   rx   r   r   )J
__future__r   r   Z_enum	functoolsr   typingr   r   r   r   r   r	   r
   warningsr   Zpydanticr   Z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<   Zipv4_networkr=   Zipv6_networkrA   rB   rC   rD   rE   rP   EnumrF   rM   rQ   r   r   rZ   r   setrW   ri   r   r%   r%   r%   r&   <module>   s   $	(
	
1 %

