
    
`i>                        d Z ddlZddlZddlZddlZddlmZmZmZ  G d de	          Z
 G d de
          Zej        d             Z G d	 d
          Zej        d.d            Zej        d.d            Zd Zd Zd Zd/dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(d& Z)d'Z*d( Z+d.d)Z,d.d*Z- G d+ d,          Z.d- Z/dS )0zA
Backend independent higher level interfaces, common exceptions.
    N)compatutilsutils35c                       e Zd ZdZdS )	JSONErrorz0
    Base exception for all parsing errors.
    N__name__
__module____qualname____doc__     `/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ijson/common.pyr   r                	Dr   r   c                       e Zd ZdZdS )IncompleteJSONErrorzH
    Raised when the parser can't read expected data from a stream.
    Nr   r   r   r   r   r      r   r   r   c              #   N  K   g }	 dV \  }}|dk    r#d                     |dd                   }||d<   n|dk    r+d                     |          }|                    d           n|dk    r*|                                 d                     |          }nv|dk    r+d                     |          }|                    d	           nE|d
k    r*|                                 d                     |          }nd                     |          }|                     |||f           !)aQ  
    A coroutine dispatching parsing events with the information about their
    location with the JSON object tree. Events are tuples
    ``(prefix, type, value)``.

    Available types and values are:

    ('null', None)
    ('boolean', <True or False>)
    ('number', <int or Decimal>)
    ('string', <unicode>)
    ('map_key', <str>)
    ('start_map', None)
    ('end_map', None)
    ('start_array', None)
    ('end_array', None)

    Prefixes represent the path to the nested elements from the root of the JSON
    document. For example, given this document::

        {
          "array": [1, 2],
          "map": {
            "key": "value"
          }
        }

    the parser would yield events:

      ('', 'start_map', None)
      ('', 'map_key', 'array')
      ('array', 'start_array', None)
      ('array.item', 'number', 1)
      ('array.item', 'number', 2)
      ('array', 'end_array', None)
      ('', 'map_key', 'map')
      ('map', 'start_map', None)
      ('map', 'map_key', 'key')
      ('map.key', 'string', u'value')
      ('map', 'end_map', None)
      ('', 'end_map', None)

    TNmap_key.	start_mapend_mapstart_arrayitem	end_array)joinappendpopsend)targetpatheventvalueprefixs        r   parse_basecoror%      s,     Z D,uuuIXXd3B3i((FDHHk!!XXd^^FKKiHHJJJXXd^^FFm##XXd^^FKKk!!HHJJJXXd^^FFXXd^^FVUE*+++',r   c                        e Zd ZdZddZd ZdS )ObjectBuilderat  
    Incrementally builds an object from JSON parser events. Events are passed
    into the `event` function that accepts two parameters: event type and
    value. The object being built is available at any time from the `value`
    attribute.

    Example::

        >>> from io import BytesIO
        >>> from ijson import basic_parse
        >>> from ijson.common import ObjectBuilder

        >>> builder = ObjectBuilder()
        >>> f = BytesIO(b'{"key": "value"}')
        >>> for event, value in basic_parse(f):
        ...     builder.event(event, value)
        >>> builder.value == {'key': 'value'}
        True

    Nc                 >      fd}|g _         |pt           _        d S )Nc                     | _         d S N)r#   )r#   selfs    r   initial_setz+ObjectBuilder.__init__.<locals>.initial_sett   s    DJJJr   )
containersdictmap_type)r+   r/   r,   s   `  r   __init__zObjectBuilder.__init__s   s5    	 	 	 	 	&- (Dr   c                     |dk    r	| _         d S |dk    rL                                   j        d                     fd} j                            |           d S |dk    r9g }  j        d         |            j                            |j                   d S |dk    s|dk    r j                                         d S   j        d         |           d S )Nr   r   r   c                     | j         <   d S r*   )key)r#   mappabler+   s    r   setterz#ObjectBuilder.event.<locals>.setter   s    %*"""r   r   r   r   )r3   r/   r-   r   r   )r+   r"   r#   r5   arrayr4   s   `    @r   r"   zObjectBuilder.eventy   s   IDHHHk!!}}HDOB)))+ + + + + +O""6*****m##EDOB&&&O""5<00000k!!Ui%7%7O!!!!!DOB&&&&&r   r*   )r	   r
   r   r   r0   r"   r   r   r   r'   r'   ^   sA         () ) ) )' ' ' ' 'r   r'   c              #   0  K   	 dV \  }}}||k    r|dv rld}t          |          }|r3|                    ||           dV \  }}}|dv r|dz  }n	|dv r|dz  }|3|j        dd= |                     |j                   n|                     |           )zo
    An couroutine dispatching native Python objects constructed from the events
    under a given prefix.
    TN)r   r      r/   )r   r   r'   r"   r-   r   r#   )r    r$   r/   currentr"   r#   object_depthbuilders           r   items_basecoror>      s      #!&f444 ':::" *MM%///-2UU)GUE <<<$)":::$) # * &qqq)GM****E"""!#r   c              #     K   d}	 dV \  }}}||k    r|dk    rd}|}t          |          }dV \  }}}|dk    r|dz  }|dk    s|dk    rY|dk    s|d	k    rM|                    ||           dV \  }}}|dk    r|dz  }n|dk    r|dz  }|dk    s|dk    r|dk    G|d	k    M|j        dd= |                     ||j        f           ||k    r|dk    )
z
    An coroutine dispatching (key, value) pairs constructed from the events
    under a given prefix. The prefix should point to JSON objects
    NTr   r   r9   r   r8   r   r   r:   )	r    r$   r/   r=   r!   r"   r#   r<   r3   s	            r   kvitems_basecoror@      s^      G.#eeeUfnn)!3!3LC#X666G"'%%D%##!)##|q'8'8)##|r'9'9eU+++&+ee"eUK'' A%LLi'' A%L )##|q'8'8)##|r'9'9 "111%KKgm,---# fnn)!3!3.r   c                 `    d| v sd| v sd| v st          |           S t          j        |           S )z
    Converts string with a numeric value into an int or a Decimal.
    Used in different backends for consistent number representation.
    r   eE)intdecimalDecimal	str_values    r   integer_or_decimalrI      s?    
 9y 0 0C94D4D9~~?9%%%r   c                 V    d| v sd| v sd| v st          |           S t          |           S )z
    Converts string with a numeric value into an int or a float.
    Used in different backends for consistent number representation.
    r   rB   rC   )rD   floatrG   s    r   integer_or_floatrL      s=    
 9y 0 0C94D4D9~~r   c                 T    t          j        dt                     t          |           S )Nz4number() function will be removed in a later release)warningswarnDeprecationWarningrI   rG   s    r   numberrQ      s$    MHJ\]]]i(((r      c              #   l   K   t          j        |           } 	 |                     |          }|V  |sdS )z4A generator that yields data from a file-like objectTN)r   bytes_readerread)fbuf_sizedatas      r   file_sourcerY      sG      AAvvh


 	E	r   c                     | d         g |ffS )Nbasic_parse_basecoror   backendconfigs     r   _basic_parse_pipeliner_      s    	'	("f5 r   c                 .    | d         g i f| d         g |ffS )Nr%   r[   r   r\   s     r   _parse_pipelinera      s,    	!	"B+	'	("f5 r   c                 H    | d         |fd|if| d         g i f| d         g |ffS )Nr>   r/   r%   r[   r   r]   r$   r/   r^   s       r   _items_pipelinerd      sC    	!	"VI
H/EF	!	"B+	'	("f5 r   c                 H    | d         |fd|if| d         g i f| d         g |ffS )Nr@   r/   r%   r[   r   rc   s       r   _kvitems_pipelinerf      sC    	#	$vi*h1GH	!	"B+	'	("f5 r   c                       fd}|S )Nc                 D    t          j        | gt          |          R  S r*   )r   chainr_   r    r^   r]   s     r   basic_parse_coroz0_make_basic_parse_coro.<locals>.basic_parse_coro   s1    {
"7F33
 
 
 	
r   r   )r]   rk   s   ` r   _make_basic_parse_cororl      s$    
 
 
 
 

 r   c                       fd}|S )Nc                 D    t          j        | gt          |          R  S r*   )r   ri   ra   rj   s     r   
parse_coroz$_make_parse_coro.<locals>.parse_coro	  s1    {
Wf--
 
 
 	
r   r   )r]   ro   s   ` r   _make_parse_cororp     s$    
 
 
 
 

 r   c                      d fd	}|S )Nc           	      H    t          j        | gt          |||          R  S r*   )r   ri   rd   r    r$   r/   r^   r]   s       r   
items_coroz$_make_items_coro.<locals>.items_coro  s5    {
Wfh??
 
 
 	
r   r*   r   )r]   rt   s   ` r   _make_items_cororu     s)    
 
 
 
 
 

 r   c                      d fd	}|S )Nc           	      H    t          j        | gt          |||          R  S r*   )r   ri   rf   rs   s       r   kvitems_coroz(_make_kvitems_coro.<locals>.kvitems_coro  s5    {
w&AA
 
 
 	
r   r*   r   )r]   rx   s   ` r   _make_kvitems_corory     s)    
 
 
 
 
 

 r   c                     t          j        |           p,t          j        |           o| j        j        t           j        z  S )z'True if `func` is an awaitable function)inspectiscoroutinefunctionisgeneratorfunction__code__co_flagsCO_ITERABLE_COROUTINE)funcs    r   is_awaitablefunctionr   #  s@     	#D)) 	


%d
+
+ C=!G$AAr   c                 J    t          | d          ot          | j                  S )z-True if `f` has an asynchronous `read` methodrU   )hasattrr   rU   )rV   s    r   is_async_filer   ,  s(     	6 	%QV$$r   c                 "    t          | d          S )zTrue if x has a `read` methodrU   r   xs    r   is_filer   3  s    1fr   c                 "    t          | d          S )zTrue if x can be iterated over__iter__r   r   s    r   is_iterabler   8  s    1j!!!r   c                     t          | t                    rt          j        |           S t          | t                    rt          j        |           S | S r*   )
isinstancebytesioBytesIOstrStringIO)sources    r   _get_sourcer   =  sK    &%   #z&!!!	FC	 	  #{6"""Mr   c                      d fd	}|S )NrR   c                 b    t          j        t          | |          gt          |          R  S N)rW   )r   	coros2genrY   r_   file_objrW   r^   r]   s      r   basic_parse_genz._make_basic_parse_gen.<locals>.basic_parse_genF  s>    8444
"7F33
 
 
 	
r   rR   r   )r]   r   s   ` r   _make_basic_parse_genr   E  s)    
 
 
 
 
 

 r   c                      d fd	}|S )NrR   c                 b    t          j        t          | |          gt          |          R  S r   )r   r   rY   ra   r   s      r   	parse_genz"_make_parse_gen.<locals>.parse_genO  s>    8444
Wf--
 
 
 	
r   r   r   )r]   r   s   ` r   _make_parse_genr   N  )    
 
 
 
 
 

 r   c                      d fd	}|S )NrR   c           	      f    t          j        t          | |          gt          |||          R  S r   )r   r   rY   rd   r   r$   r/   rW   r^   r]   s        r   	items_genz"_make_items_gen.<locals>.items_genX  sB    8444
Wfh??
 
 
 	
r   NrR   r   )r]   r   s   ` r   _make_items_genr   W  r   r   c                      d fd	}|S )NrR   c           	      f    t          j        t          | |          gt          |||          R  S r   )r   r   rY   rf   r   s        r   kvitems_genz&_make_kvitems_gen.<locals>.kvitems_gena  sB    8444
w&AA
 
 
 	
r   r   r   )r]   r   s   ` r   _make_kvitems_genr   `  s)    
 
 
 
 
 

 r   c                      d fd	}|S )NrR   c                     t          |           } t          |           r d         | fd|i|S t          |           r d         | fd|i|S t          dt	          |           z            )Nbasic_parse_asyncrW   r   Unknown source type: %r)r   r   r   
ValueErrortyper   rW   r^   r]   s      r   basic_parsez&_make_basic_parse.<locals>.basic_parsej  s    V$$   	/7./ !)-3   V__ 	-7,- !)-3   2T&\\ABBBr   r   r   )r]   r   s   ` r   _make_basic_parser   i  s/    
C 
C 
C 
C 
C 
C r   c                      d fd	}|S )NrR   c                 :   t          |           } t          |           r d         | fd|i|S t          |           r d         | fd|i|S t          |           rt	          j        | d         di f          S t          dt          |           z            )Nparse_asyncrW   r   r%   r   r   r   r   r   r   r   r   r   r   r   s      r   parsez_make_parse.<locals>.parsey  s    V$$   	)7=) !)-3   V__ 	'7;' !)-3      	?6)*B3   2T&\\ABBBr   r   r   )r]   r   s   ` r   _make_parser   x  .    C C C C C C Lr   c                      d fd	}|S )NrR   c                 H   t          |           } t          |           r d         | |f||d|S t          |           r d         | |f||d|S t          |           r!t	          j        | d         |fd|if          S t          dt          |           z            )Nitems_asyncr/   rW   r   r>   r/   r   r   r   r$   r/   rW   r^   r]   s        r   itemsz_make_items.<locals>.items  s    V$$   	)7=))1H HN   V__ 	'7;')1H HN      	?6)*VI
H7MN   2T&\\ABBBr   r   r   )r]   r   s   ` r   _make_itemsr     r   r   c                      d fd	}|S )NrR   c                 H   t          |           } t          |           r d         | |f||d|S t          |           r d         | |f||d|S t          |           r!t	          j        | d         |fd|if          S t          dt          |           z            )Nkvitems_asyncr   r   r@   r/   r   r   r   s        r   kvitemsz_make_kvitems.<locals>.kvitems  s    V$$   	+7?+)1H HN   V__ 	)7=))1H HN      	?6+,vi*h9OP   2T&\\ABBBr   r   r   )r]   r   s   ` r   _make_kvitemsr     s.    C C C C C C Nr   z
Don't use the ijson.common.* functions; instead go directly with the ijson.* ones.
See the documentation for more information.
c                 z    t          j        t          t                     t	          j        | t          di f          S )zXLike ijson.parse, but takes events generated via ijson.basic_parse instead
    of a filer   )rN   rO   _common_functions_warnrP   r   r   r%   )eventss    r   r   r     s8     M(*<===?6	R   r   c                     t          j        t          t                     t	          j        | t          |fd|if          S )zTLike ijson.kvitems, but takes events generated via ijson.parse instead of
    a filer/   )rN   rO   r   rP   r   r   r@   r   r$   r/   s      r   r   r     s?     M(*<===?6	F9z8&<=  r   c                     t          j        t          t                     t	          j        | t          |fd|if          S )zRLike ijson.items, but takes events generated via ijson.parse instead of
    a filer/   )rN   rO   r   rP   r   r   r>   r   s      r   r   r     s?     M(*<===?6	&Z$:;  r   c                   (    e Zd ZdZddddddZd Zd	S )
BackendCapabilitiesz.
    Capabilities supported by a backend.
    z'C-ctyle comments (non-standard in JSON)z0Multiple top-level values (non-standard in JSON)z>Detection of leading zeros in numbers, marking them as invalidz%Documents with incomplete JSON tokensz>64 bit integers supported when running with ``use_float=True``
c_commentsmultiple_valuesinvalid_leading_zeros_detection incomplete_json_tokens_detectionint64c                 L    d| _         d| _        d| _        d| _        d| _        d S )NTr   )r+   s    r   r0   zBackendCapabilities.__init__  s,    #/3,04-


r   N)r	   r
   r   r   	__slots__r0   r   r   r   r   r     sK         
 @M+k,SQ I    r   r   c                    t                      }|                                D ]\  }}t          |||           || d<   | d                             d          d         | d<   | d         | d<   dD ]}|dz   }|| vrt	                      |         | |<   |d	z   }|| vr%t	                      d
|z            } ||           | |<   |dz   }|| vr%t	                      d
|z            } ||           | |<   |dz   }	|	| vr&t          t          d
|	z             } ||           | |	<   t	                      d
|z            } ||           | |<   dS )z
    Provides a backend with any missing coroutines/generators/async-iterables
    it might be missing by using the generic ones written in python.
    capabilitiesr	   r   r   r]   backend_name)r   r   r   r   	_basecoro_coro_make__gen_asyncN)r   r   setattrsplitglobalsgetattrr   )
r]   capabilities_overridesr   namer#   basecoro_name	coro_namefactorygen_name
async_names
             r   enrich_backendr     s    '((L-3355 + +edE*****GN ,22377;GI%i0GN< ) ){*''%,YY}%=GM"7N	G##ii9 45G!(!1!1GI&=7""ii8 34G ' 0 0GHH_
W$$gx*'<==G")''"2"2GJ))HtO,((#) )r   r*   r   )0r   rE   r{   r   rN   ijsonr   r   r   	Exceptionr   r   	coroutiner%   r'   r>   r@   rI   rL   rQ   rY   r_   ra   rd   rf   rl   rp   ru   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s1      				  ( ( ( ( ( ( ( ( ( (	 	 	 	 		 	 	 		 	 	 	 	) 	 	 	 @, @, @,F+' +' +' +' +' +' +' +'\ # # # #0 . . . .8& & &  ) ) )                         
" " "
              &  &  & 
               *) ) ) ) )r   