
     `i                         d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZmZmZmZmZmZ ddlmZmZmZ dd	lmZ d
d  ej                    D             iZ G d de          Z G d de          Z dededefdZ!dededefdZ" G d dej#                  Z$ G d de           Z% G d d          Z& G d de           Z' G d d e'          Z( G d! d"e'          Z) G d# d$e'          Z*dS )%    )deepcopyN)DictHashableListOptionalUnioncast   )JsonSchemaObjectjson_schema_data_formats)LMFormatEnforcerException)CharacterLevelParserCharacterLevelParserConfigForceStopParserSequenceParserStringParserUnionParser)	BACKSLASHBACKSLASH_ESCAPING_CHARACTERSWHITESPACE_CHARACTERS)RegexParseranyOfc                 "    g | ]}|d k    d|iS )integertype ).0r   s     u/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/lmformatenforcer/jsonschemaparser.py
<listcomp>r      s(    "s"s"sdaeirararFD>ararar    c            	       "    e Zd ZU  edi eZeed<    G d d          Zee	         ed<   eed<   e
ed<   eed<   eed<   	 	 	 ddeeed	f         dee         deee	                  de
f fdZdede	fdZdefdZdefdZdee         fdZ xZS )JsonSchemaParserANY_JSON_OBJECT_SCHEMAc                   L    e Zd ZU eed<   ded<   eed<   i Zeeef         ed<   dS )JsonSchemaParser._Contextmodel_classr"   active_parseralphabet_without_quotesregex_parser_cacheN)	__name__
__module____qualname__r   __annotations__strr)   r   r   r   r    r   _Contextr%      sS         %%%% *)))!$$$$57Dk!1277777r    r/   object_stackcontextnum_consecutive_whitespaceslast_parsed_stringlast_non_whitespace_characterNr   json_schemaconfigexisting_stackc                    t                                          |           t          |t          j                  r|| _        nst                                          | _        |pt          }t          di || j        _        | | j        _	        | j
        j                            dd          | j        _        || _        |!t          | | j        j                  g| _        n|| _        d| _        d| _        dS )zCreate a CharacterLevelParser for parsing JSON.
        :param json_schema: The json schema to parse. Can be a dict of a JSON schema, or None if any json output is allowed." Nr   )super__init__
isinstancer"   r/   r1   _ANY_JSON_SCHEMA_DICTr   r&   r'   r6   alphabetreplacer(   r2   
get_parserr0   r3   r4   )selfr5   r6   r7   r2   	__class__s        r   r<   zJsonSchemaParser.__init__    s     	   k#3#<== 	Y&DLL+4466DL%>)>K'7'F'F+'F'FDL$)-DL&37;3G3O3OPSUW3X3XDL0+F(!!+D$,2J!K!K LD .D"$-/***r    new_characterreturnc                 <   | | j         _        t          | j                  dz
  }| j        }|dk    rv|| j        |                                         vrU| j        |         }t          |t                    r|j        }|dz  }|dk    r!|| j        |                                         vU| j        d |dz            }t          | j         | j
        || j                  }||j         _        ||_        |dk    r(|j        |                             |          |j        |<   |t          v r|xj        dz  c_        | j        |_        nd|_        ||_        |j        rt          |j        d         t                    rt!          d |j        d         j        D                       rg }|j        d         j        D ]j}|j        d d         |gz   }	t          | j         | j
        |	|j                  }||j         _        ||_        |j        |_        |                    |           kt          |          S |j        }
|
r|
d                                         r|
d                                         dk    r|
d         }t          |t                    r|j        |_        |
d= |
rF|
d         }t          |t(                    r)|                                }|xj        dz  c_        ||
d<   |
r8|
d                                         r|
d                                         dk    |S )Nr
   r   c              3   N   K   | ] }t          |t          t          f          V  !d S N)r=   ObjectParsingStateListParsingStater   parsers     r   	<genexpr>z1JsonSchemaParser.add_character.<locals>.<genexpr>S   sK        B  Bv
6$68H#IJJ  B  B  B  B  B  Br    r:   )r1   r'   lenr0   r3   get_allowed_charactersr=   StringParsingStateparsed_stringr"   r6   r2   add_characterr   r4   r   anyparsersappendcan_endrK   _clonenum_items_seen)rB   rD   receiving_idxr3   finished_receiverupdated_stackupdated_parseroption_json_schema_parsersoption_parseroption_stacknew_object_stacknew_top_parsers               r   rS   zJsonSchemaParser.add_character9   s   %)" D-..2!4q  ]$:KM:Z:q:q:s:s%s%s $ 1- @+-?@@ E%6%D"QM	 q  ]$:KM:Z:q:q:s:s%s%s )*<=1+<*<=)$,]TXTtuu/=,,>)A9G9TUb9c9q9qr  :A  :AN'611166!;66;?;]N889:N6;HN8& 	;:n6QRT6UWb+c+c 	;  B  BYgYtuwYx  ZA  B  B  B  B  B	;
 *,&!/!<R!@!H A A-:3B3?=/Q 0t{LZh  [E  !F  !F6C%33E0>L>j;*11-@@@@9::: *6 
	:#3B#7#?#?#A#A 
	:FVWYFZFqFqFsFswyFyFy 0 4+-?@@ T4E4S1 $ :!1"!5n.>?? :%3%:%:%<%<N"11Q611+9$R(  
	:#3B#7#?#?#A#A 
	:FVWYFZFqFqFsFswyFyFy r    c                    | | j         _        g }t          | j                  D ]?}|                    |                                           |                                s n@t          |          dk    rd                    |          }nt          }| j
        | j        j        k    rd                    d |D                       }|S )Nr   r:   c              3   ,   K   | ]}|t           v|V  d S rI   )r   r   cs     r   rN   z:JsonSchemaParser.get_allowed_characters.<locals>.<genexpr>   s-      (i(iq!ShJhJhJhJhJhJh(i(ir    )r1   r'   reversedr0   rV   rP   rW   rO   joinr   r2   r6   max_consecutive_whitespaces)rB   allowed_character_strsrM   allowed_characterss       r   rP   z'JsonSchemaParser.get_allowed_characterss   s    %)"!#t011 	 	F"))&*G*G*I*IJJJ>>## %&&**"$''*@"A"A
 "7+t{/VVV!#(i(i4F(i(i(i!i!i!!r    c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S rI   )rW   rL   s     r   rN   z+JsonSchemaParser.can_end.<locals>.<genexpr>   s,      DD6>>##DDDDDDr    )allr0   rB   s    r   rW   zJsonSchemaParser.can_end   s"    DD$2CDDDDDDr    c                 (   | j         r| j         d         }t          |t                    rh|j        sa|j        rZ|j        sS|j        sLt          |j                  }|j	        pd}|j
        pt          j        }||k    s
J d            ||k     rd|||fS d S )NrG   r   z<Invalid schema for str: min length is larger than max lengthjson_freetext)r0   r=   rQ   allowed_stringsseen_opening_quoteseen_closing_quoteregex_parserrO   rR   
min_length
max_lengthsysmaxsize)rB   current_parsercur_lenmin_lenmax_lens        r   shortcut_keyzJsonSchemaParser.shortcut_key   s     	L!.r2N.*<== 
L%5 	L.:[ 	Ldr  eF 	L  O]  Oj 	L ".">??G,7<1G,7F3;G"g---/m---(( /'7KKtr    r   )NNr   )r*   r+   r,   r   r>   r#   r-   r/   r   r   intr.   r   dictr   r   r<   rS   rP   boolrW   r   r~   __classcell__rC   s   @r   r"   r"      s        /?/?/X/XBW/X/X,XXX8 8 8 8 8 8 8 8 +,,,,!$$$$#&&&& AEHL45	0 0#D(D$890!"<=0 "*$/C*D!E0 /2	0 0 0 0 0 0283 83G 8 8 8 8t" " " " ",E E E E Ehx0        r    r"   c                       e Zd ZdefdZdS )BaseParsingStaterootc                     || _         d S rI   )r   )rB   r   s     r   r<   zBaseParsingState.__init__   s    			r    N)r*   r+   r,   r"   r<   r   r    r   r   r      s0        -      r    r   base_schemaoption_schemarE   c                     | j         pi }|                                D ]\  }}||j         vr
||j         |<   | j        D ]%}||j        vr|j                            |           &|S rI   )
propertiesitemsrequiredrV   )r   r   base_schema_propertiesproperty_nameproperty_valuerequired_propertys         r   _merge_object_schemasr      s    (39r)?)E)E)G)G E E%~  8886DM$]3(1 = =M$:::"))*;<<<r    parsing_statevalue_schemac                 *    t          d          j        r" fdj        D             }t          |          S j        r?j        d         }j        dd          D ]}t	          ||          }t           |          S j        rBdj        v r9j        d         }t          |          t          k    }t           |g||          S j        dk    r)t           j
        dj        j        j        	          S j        r0fd
j        D             } fd|D             }t          |          S j        dk    rt                     S j        d k    rj        r~j                            d          d         }	 j        j        j        }
d|
v r	|
d         }nd|
v r	|
d         }nt)          d          ||	         }t+          d!i |t                     S j
        rt-          d j
        D                       }t-          d j
        D                       }|rt           j
        d          S |r"t           d j
        D             dd          S t          dt          j
                  z             j        dk    rt/           d          S j        dk    rt           ddgdd          S j        dk    rt           dgdd          S j        dk    rt/           d          S j        dk    r/j        pt2          j        }t7           |j        j                  S t=          j        t>                    r" fdj        D             }t          |          S t          d t          j                  z             )"Nz&JsonSchemaParser: Value schema is Nonec                 0    g | ]}t          |          S r   )rA   r   schemar   s     r   r   zget_parser.<locals>.<listcomp>   s#    VVV:mV44VVVr    r   r
   constrequire_opening_quoterequire_closing_quotestringT)r   rv   rw   patternc                 0    g | ]}t          |          S r   )r   )r   r   r   s     r   r   zget_parser.<locals>.<listcomp>   s%    uuuQ^/mLLuuur    c                 0    g | ]}t          |          S r   )rJ   )r   merged_schemar   s     r   r   zget_parser.<locals>.<listcomp>   s%    !w!w!wWd"4]M"R"R!w!w!wr    object/rG   definitionsz$defszNo definitions found in schemac              3   N   K   | ] }t          |t          t          f          V  !d S rI   )r=   r   floatr   is     r   rN   zget_parser.<locals>.<genexpr>   s0      PPAU|44PPPPPPr    c              3   @   K   | ]}t          |t                    V  d S rI   )r=   r.   r   s     r   rN   zget_parser.<locals>.<genexpr>   s,      HH
1s,,HHHHHHr    )r   c                 ,    g | ]}t          |          S r   )r.   r   s     r   r   zget_parser.<locals>.<listcomp>   s    333AQ333r    FzUnsupported enum type r   booleantruefalsenullnumberarrayc                 L    g | ] }t          t          |                     !S ))r   )rA   r   r   s     r   r   zget_parser.<locals>.<listcomp>
  s0    lllPV:m-=6-J-J-JKKlllr    zUnsupported type r   ) 	Exceptionr   r   allOfr   rA   extrasr   r.   rQ   enum	minLength	maxLengthr   oneOfrJ   refsplitr1   r&   
ValueErrorr   rn   NumberParsingStater   r"   r#   rK   minItemsmaxItemsr=   list)r   r   rU   r   r   allowed_value	is_stringmerged_schemasobject_parsing_optionsvalue_class_namer   r   
class_dict
is_numericitem_schemas   ``             r   rA   rA      s    @AAA $VVVV<CUVVV7### 8$*1-"(, 	I 	IF1-HHMM-777 Cw,*===$+G4''3.	!-#0/8A8AC C C 	C H$$!"&#-#- (
 
 
 	
  @F vuuubnbtuuu!w!w!w!whv!w!w!w1222		h	&	&!,>>>		d	"	"|'7	"'+11#66r:&29F"" /KK /KK=>>> !12
'55*55-666		 +FPPl>OPPPPP
HHl6GHHHHH	 	O%"&
 
 
 

  	O%33!2333&+&+	    4s<;L7M7MMNNN		i	'	'!-777		i	'	'!W"'"'	
 
 
 	
 
	f	$	$!H"'"'	
 
 
 	
 
	h	&	&!-666		g	%	%"(S,<,S{L<QS_Shiii	L%t	,	, FllllZfZklll7###+c,2C.D.DDEEEr    c                   &    e Zd ZdZdZdZdZdZdZdS )ObjectParsingStageStartObject
ParsingKeyParsingKeyValueSeparatorParsingValueParsingSeparatorOrEnd	EndObjectN)	r*   r+   r,   START_OBJECTPARSING_KEY_OR_ENDPARSING_KEY_VALUE_SEPARATORPARSING_VALUEPARSING_SEPARATOR_OR_END
END_OBJECTr   r    r   r   r     s/         L%"<"M6JJJr    r   c                        e Zd ZU eed<   eed<   ee         ed<   ee         ed<   e	ed<   dede
f fdZdd	Zd
edefdZdefdZde	fdZ xZS )rJ   schema_objectcurrent_stageexisting_keyscurrent_keyis_dictionaryr   c                     t                                          |           || _        t          j        | _        || _        g | _        d | _        | j        j	        d u | _
        d S rI   )r;   r<   r   r   r   r   r   r   r   r   r   )rB   r   r   rC   s      r   r<   zObjectParsingState.__init__   s^    */<	!/:dBr    rE   c                     t          | j        | j                  }| j        |_        | j        d d          |_        | j        |_        | j        |_        |S rI   )rJ   r   r   r   r   r   r   rB   clones     r   r   zObjectParsingState.clone*  sP    "4#5tyAA"0"03 ,"0r    rD   c                     |                                 dk    r S                                    j        t          j        k    r|dk    rt          j         _        n j        t          j        k    r0|dk    rt          j         _        |dk    rd } j        s j        j	        pg }t           fd|D             d           } j        j        j        r|r|g}n_t           j        j                                                  }t          t#          |                               j                            }t)           j        |dd          }|                    d          } j        j        j        j                            |           t          j         _        n j        t          j        k    r|dk    rt          j         _         j        j        j        j         _         j                             j                    j        r& j        j        r j        j        }n$t>          j         }n j        j         j                 }tC           j        |           _"         j        j        j        j                             j"                   d  _"        n j        t          j        k    rH|dk    rt          j#         _        nt|d	k    rt          j         _        n\|dk    rt          j         _        nD j        t          j#        k    r/|d	k    rt          j         _        n|dk    rt          j         _         S )
Nr:   {}r9   c              3   .   K   | ]}|j         v|V  d S rI   )r   )r   keyrB   s     r   rN   z3ObjectParsingState.add_character.<locals>.<genexpr>C  s1      -l-lccY]YkNkNkcNkNkNkNk-l-lr    Tr   :,)$stripr   r   r   r   r   r   r   r   r   nextr   r6   force_json_field_orderr   r   keysset
differencer   rQ   rS   r1   r'   r0   rV   r   r   r3   r   additionalPropertiesr"   r#   rA   current_key_parserr   )rB   rD   possible_keysrequired_keysnext_required_key
key_parserr   s   `      r   rS   z ObjectParsingState.add_character2  s!     B&&Kzz||"4"AAA$$!3!FD#5#HHH##%7%B"## $) 	$($6$?$E2M(,-l-l-l-l]-l-l-lnr(s(s%y'> CT ):(;(,T-?-J-O-O-Q-Q(R(R(,..99$:LMM) )
 0I}D`d  
 (55c::
	!/<CCJOOO%7%S"#5#QQQ##%7%E"#'9#4#B#U "))$*:;;;% S)> O'+'9'N'7'N#'#5#@AQ#RL*4I|+ +' 	!/<CCDD[\\\*.'#5#CCC ##%7%P""#%%%7%J""#%%%7%B"#5#NNN##%7%J""#%%%7%B"r    c                    | j         s+t          | j        j                                                  nd }| j        j        pg }t          | j                                      |          }| j         p&t          |          	                    | j                  }d t          D             }| j        t          j        k    r|                    d           n| j        t          j        k    r/|r|                    d           |r|                    d           n| j        t          j        k    r|                    d           n| j        t          j        k    r/|r|                    d           |r|                    d           nC| j        t          j        k    r.|r|                    d           |r|                    d           d                    |          S )Nc                     g | ]}|S r   r   re   s     r   r   z=ObjectParsingState.get_allowed_characters.<locals>.<listcomp>  s    @@@Qq@@@r    r   r   r9   r   r   r:   )r   r   r   r   r   r   r   r   
issupersetr   r   r   r   r   rV   r   r   r   r   rh   )rB   r   r   rW   can_parse_keypossible_characterss         r   rP   z)ObjectParsingState.get_allowed_characterst  s    %D#.3355666 	
 *39rd())44]CC* 
c-.@.@.K.K/
 /
 A@*?@@@!3!@@@&&s++++#5#HHH 0#**3/// 0#**3///#5#QQQ&&s++++#5#CCC 0#**3/// 0#**3///#5#NNN 0#**3/// 0#**3///ww*+++r    c                 ,    | j         t          j        k    S rI   )r   r   r   ro   s    r   rW   zObjectParsingState.can_end  s    !%7%BBBr    )rE   rJ   )r*   r+   r,   r   r-   r   r   r.   r   r   r"   r<   r   r   rS   rP   rW   r   r   s   @r   rJ   rJ     s        ####%%%%9#C&6 C>N C C C C C C   @3 @3G @ @ @ @D!, !, !, !, !,FC C C C C C C C Cr    rJ   c                       e Zd ZdZdZdZdS )StringParsingStage
StartTokenParsingStringEndTokenN)r*   r+   r,   START_TOKENPARSING_STRING	END_TOKENr   r    r   r   r     s        K$NIIIr    r   c                   H     e Zd Zdef fdZddZdedd fdZdefdZ	 xZ
S )	PrimitiveParsingStater   c                 z    t                                          |           t          j        | _        d| _        d S )Nr:   )r;   r<   r   r   stagerR   )rB   r   rC   s     r   r<   zPrimitiveParsingState.__init__  s3    '3
r    rE   c                     t                      rI   )NotImplementedErrorro   s    r   rX   zPrimitiveParsingState._clone  s    !###r    rD   c                 N    |                                  }|xj        |z  c_        |S rI   )rX   rR   )rB   rD   news      r   rS   z#PrimitiveParsingState.add_character  s(    kkmm]*
r    c                     dS )NTr   ro   s    r   rW   zPrimitiveParsingState.can_end  s    tr    )rE   r  )r*   r+   r,   r"   r<   rX   r.   rS   r   rW   r   r   s   @r   r  r    s         -            
$ $ $ $3 3J    
        r    r  c                   \     e Zd Zdedef fdZd
dZdedef fdZ	defdZ
defd	Z xZS )r   r   allow_floating_pointc                     t                                          |           || _        d| _        d| _        d| _        d| _        d S )NF)r;   r<   r  seen_decimal_pointseen_whitespace_after_digitsseen_exponent
seen_digit)rB   r   r  rC   s      r   r<   zNumberParsingState.__init__  sH    
 	$8!"',1)"r    rE   c                     t          | j        | j                  }| j        |_        | j        |_        | j        |_        | j        |_        | j        |_        |S rI   )r   r   r  rR   r  r  r  r  r   s     r   rX   zNumberParsingState._clone  sQ    "49d.GHH"0#'#: -1-N*"0?r    rD   c                    | j         s|t          v r| S t          t          t	                                          |                    } |t          v r| j         rd| _        | S |dk    rL| j         rt          | j                   dk    rt          d          | j	        rt          d          d| _	        nD|dv r%| j
        s| j        st          d          d| _
        n|                                rd| _        | S )NT.r
   z*Numbers cannot start with a decimal point.z4Numbers cannot contain more than two decimal points.eEzInvalid number format)rR   r   r	   r   r;   rS   r  rO   r   r  r  r  isdigit)rB   rD   rC   s     r   rS   z NumberParsingState.add_character  s    ! 	m7L&L&LK&(=(=m(L(LMM111! 9481KC% ^T-?)@)@A)E)E/0\]]]& h/0fggg&*D##d""! I I/0GHHH!%D""$$ 	#"DOr    c                 "   | j         rt          S d}| j        s|dt          z   z  }| j        r0t          | j                  dk    r| j        d         dk    rt          }| j        r-t          | j                  dk    r| j        dk    r
dt          z   }| j        r| j        d	         d
v r|dz  }| j        r| j        s|d
z  }| j        r| j        s| j        r| j        s|dz  }| j        r)| j        d	                                         r
|t          z  }|S )N
0123456789-r
   r   0   z-0r  rG   r  z-+)	r  r   rR   rO   r  r  r  r  r  )rB   rk   s     r   rP   z)NumberParsingState.get_allowed_characters  s\   , 	)(()! 	>#(="== 	7#d&8"9"9Q">">4CUVWCX\_C_C_!6 	=#d&8"9"9Q">">4CUY]C]C]!$'<!< 	'$"4R"8D"@"@$&? 	'4#5 	'$&$ 	&T-D 	& 	&aeas 	&#% 	8$"4R"8"@"@"B"B 	8"77!!r    c                     | j         r| j        d         dv rdS t          | j                  o%| j        d                                         p| j        S )NrG   zeE+-F)r  rR   r   r  r  ro   s    r   rW   zNumberParsingState.can_end  sW     	$"4R"8F"B"B5D&''sT-?-C-K-K-M-M-rQUQrsr    )rE   r   )r*   r+   r,   r"   r   r<   rX   r.   r   rS   rP   rW   r   r   s   @r   r   r     s        
 
  #
  
  
  
  
  
    3 3G      ," " " " "(t t t t t t t t tr    r   c                   F    e Zd ZU ee         ed<   eed<   eed<   eed<   ee         ed<   ee         ed<   ee         ed<   ee	         ed<   	 	 	 	 	 dde
dee         dededee         dee         dee         dee	         f fdZddZdef fdZdefdZdefdZ xZS )rQ   rr   rR   rt   rs   rv   rw   r   ru   TNr   r   r   c	                    t                                          |           || _        d| _        | | _        || _        || _        || _        || _        || _	        | j	        r| j        s| j        rt          d          | j	        r.| j	                            d          r| j	        dd          | _	        | j	        r.| j	                            d          r| j	        d d         | _	        || _        | j	        rs|ss| j	        | j        j        j        vr6t#          | j	        | j        j                  | j        j        j        | j	        <   | j        j        j        | j	                 | _        d S d S d S )NFz\String schema contains both a pattern and a min/max length, which is not currently supported^r
   $rG   )r;   r<   rr   rt   rs   r   r   rv   rw   r   r   
startswithendswithru   r   r1   r)   r   r6   )
rB   r   rr   r   r   rv   rw   r   ru   rC   s
            r   r<   zStringParsingState.__init__  s    	."'&;";%:"%:"$$< 	LT_ 	L 	L+  -K  L  L  L< 	,DL33C88 	,<+DL< 	-DL11#66 	-<,DL(< 	S 	S|49#4#GGGEPQUQ]_c_h_oEpEp	!4T\B $	 1 DT\ RD	S 	S 	S 	Sr    rE   c           
          t          | j        | j        | j        | j        | j        | j        | j        | j                  }| j	        |_	        | j
        |_
        | j        |_        |S rI   )rQ   r   rr   r   r   rv   rw   r   ru   rR   rt   rs   r   s     r   rX   zStringParsingState._clone%  se    "I &&OOL	
 	
 #0#'#: #'#: r    rD   c                    | j         r| j        r|t          v r| S t          t          t                                          |                    } |dk    r1| j        sd| _        d| _         nd| _        | j         d d         | _         | j        r3|dk    r-| j        r&| j        s| j                            |          | _        |t          k    rd t          D             }t          d dD                       }t          t          d          g|gd	z  z             }t          |          }t          ||gz             }| j        j        j        j                            |           | S )
Nr9   Tr:   rG   c                 ,    g | ]}t          |          S r   r   re   s     r   r   z4StringParsingState.add_character.<locals>.<listcomp>D  s     E}E}E}Z[lSTooE}E}E}r    c                 ,    g | ]}t          |          S r   r%  re   s     r   r   z4StringParsingState.add_character.<locals>.<listcomp>E  s    AtAtAtVW,q//AtAtAtr    0123456789abcdefABCDEFu   )rR   rt   r   r	   rQ   r;   rS   rs   ru   r   r   r   r   r   r   r   r1   r'   r0   rV   )rB   rD   escaping_character_parsershex_digit_parserunicode_componentsunicode_escape_parserjson_escaping_parserrC   s          r   rS   z StringParsingState.add_character5  s   " 	d&= 	=TiCiCiK&(=(=m(L(LMMC* =*.'%'""*.'%)%7%<" 	O#!5!5$:Q!5Z^Zq!5 $ 1 ? ? N NDI%%E}E}_|E}E}E}&5@AtAt[sAtAtAt5u5u=A<PSCTCTBUYiXjmnXnBn=o=o:HI[:\:\!#./IMbLc/c#d#d I+8??@TUUUr    c                 x     j         s
dt          z   S  j        rt          S  j        rh j                                        }|                    dd                              t          d          } j                                        r|dz  }|S  j        r fd j        D             }d |D             }t          t          |                    } j         j        v r j        r|                    d            j        s( j         r j        s|                    t                     d                    |          S  j        6t%           j                   j        k     r j        j        j        t          z   S  j        t%           j                   j        k    rdS  j        j        j        t          z   S )Nr9   r:   c                 |    g | ]8}|                     j                  |t          j                  d          9S rI   )r   rR   rO   )r   srB   s     r   r   z=StringParsingState.get_allowed_characters.<locals>.<listcomp>Y  sT     % % %<< 233%#d())++,% % %r    c                 D    g | ]}t          |          d k    |d          S )r   )rO   )r   allowed_continuations     r   r   z=StringParsingState.get_allowed_characters.<locals>.<listcomp>^  sa      'S  'S  'SCWtw  yM  uN  uN  QR  uR  uR';A'>  uR  uR  uRr    )rs   r   rt   ru   rP   r@   r   rW   rr   r   r   rR   r   rV   r   extendrh   rv   rO   r   r1   r(   rw   r6   r?   )rB   regex_charsallowed_continuationsallowed_next_characterss   `   r   rP   z)StringParsingState.get_allowed_charactersL  s   & 	/..." 	)(( 	+BBDDK%--c266>>y"MMK ((** #s" 	9% % % %-% % %!
 'S  'S[p  'S  'S  'S#&*3/F+G+G&H&H#!T%999d>X9'..s333& F1H FPTPj F'../DEEE772333*s43E/F/F/X/Xy(@9LL*s43E/F/F$//Y/Ys9#,y88r    c                 p    | j         r| j        S | j        r| j        | j        v S t	          | j                  S rI   )r   rt   rr   rR   r   ro   s    r   rW   zStringParsingState.can_endl  sC    % 	0**# 0)T-AAAD.///r    )TNNNN)rE   rQ   )r*   r+   r,   r   r.   r-   r   r   r   r   r"   r<   rX   rS   rP   rW   r   r   s   @r   rQ   rQ     s        #Yc];'''' '+"&"&#,0S SS cS  $	S
  $S SMS SMS #S {+S S S S S SD    3      .9 9 9 9 9@0 0 0 0 0 0 0 0 0r    rQ   c            	            e Zd ZU eed<   dZeed<   dZeed<   dZe	ed<   de
dedee	         d	ee	         f fd
ZdefdZdedd f fdZdefdZdefdZd Z xZS )rK   list_member_typeFseen_list_openerseen_list_closerr   rY   r   	min_items	max_itemsc                     t                                          |           || _        || _        || _        |j        j        }| j        |dk    r|||k     r|| _        d S d S d S d S )Nr   )r;   r<   r:  r=  r>  r6   max_json_array_length)rB   r   r:  r=  r>  default_maxrC   s         r   r<   zListParsingState.__init__|  s{     	 0""k7>!kAoo9;LPY\gPgPg(DNNN "!ooPgPgr    rE   c                     t          | j        | j        | j        | j                  }| j        |_        | j        |_        | j        |_        | j        |_        |S rI   )	rK   r   r:  r=  r>  rR   rY   r;  r<  )rB   r  s     r   rX   zListParsingState._clone  sQ    ty$*?QUQ_`` .!0#4#4
r    rD   c                    t          t          t                                          |                    } |dk    rd| _        t          | j        | j                  }| j        d uo
| j        dk    }|r|}nSt          d          }t          |t                    r|j                            |           |}nt          ||g          }| j        j        j        j                            |           nl|dk    rd| _        n^|dk    rX| j        sQ| xj        dz  c_        | j        j        j        j                            t          | j        | j                             | S )N[Tr   )allow_whitespace]r   r
   )r	   rK   r;   rS   r;  rA   r   r:  r=  r   r=   r   rU   rV   r1   r'   r0   r<  rY   )rB   rD   item_parserrequires_itemsparser_to_pushempty_list_parserrC   s         r   rS   zListParsingState.add_character  sp   $egg&;&;M&J&JKKC$(D!$TY0EFFK!^47NDNQ<NN 	S!, %4T$J$J$J!k;77 S'../@AAA%0NN%0+?P1Q%R%RNI+8??OOOOc!!$(D!!c!!( ##q(##	!/<CC	-    r    c                 n    | j         s
dt          z   S | j        s|                                 t          z   S dS )NrD  r:   )r;  r   r<  get_allowed_control_charactersro   s    r   rP   z'ListParsingState.get_allowed_characters  sA    $ 	...& 	6688;PPP2r    c                     | j         S rI   )r<  ro   s    r   rW   zListParsingState.can_end  s    $$r    c                 R   | j         }| j        j        j        j        d         }|| k    pt          |t                    o| |j        v }|s| j        j        j        j        dk    r|dz  }d}| j	        d u p
|| j	        k    }| j
        d u p
|| j
        k     }|dk    r|r|dz  }|r|dz  }|S )NrG   rD  r
   r:   r   r   rF  )rY   r   r1   r'   r0   r=   r   rU   r4   r=  r>  )rB   	num_items
top_parser	is_on_topcontrol_charactershas_enough_itemscan_add_another_items          r   rL  z/ListParsingState.get_allowed_control_characters  s    '	Y&4A"E
$&l*Z*M*M*lRVZdZlRl	 	ty0>\`ccc NI>T1PY$.5P#~5ST^9Sq==1=#% 	&#%!!r    )r*   r+   r,   r   r-   r;  r   r<  rY   r   r"   r   r<   r  rX   r.   rS   rP   rW   rL  r   r   s   @r   rK   rK   v  s9        &&&&"d""""d"""NC)) +) C=	)
 C=) ) ) ) ) )-    3 3E      >    % % % % %" " " " " " "r    rK   )+copyr   r   rx   typingr   r   r   r   r   r	   external.jsonschemaobjectr   r   
exceptionsr   characterlevelparserr   r   r   r   r   r   constsr   r   r   regexparserr   r   r>   r"   r   r   rA   Enumr   rJ   r   r  r   rQ   rK   r   r    r   <module>r]     sq          



 > > > > > > > > > > > > > > > > R Q Q Q Q Q Q Q 1 1 1 1 1 1 O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O S S S S S S S S S S $ $ $ $ $ $ !"s"s>[>V>[>]>]"s"s"st J J J J J+ J J JZ    +   

'7 
HX 
]m 
 
 
 
^F#^F"^F ^F ^F ^F ^FB       C C C C C) C C CD           ,   $Ct Ct Ct Ct Ct. Ct Ct CtLz0 z0 z0 z0 z0. z0 z0 z0zW" W" W" W" W", W" W" W" W" W"r    