
    9i6                     D   S r SSKrSSKrSSKrSSKrSSKJr  SSK	J
r
  SSKJr  SSKJr  SSKJr  SSKJrJr  SS	KJrJr  SS
KJr   SSKJrJr  / SQrSrSr \r!\RD                  " 5       r#S r$S r%S r&S r'S r(\" SS5      r)SFS jr*S r+S r,S r-S r.S r/S r0 " S S\Rb                  5      r1 " S S \Rd                  5      r2S! r3S" r4SGS# jr5\3r6\4r7\5r8S$ r9S% r:\" S&5      \" S&5      \" S&5      \" \'/ S'QS(9\;\;\9\:\:\;\" \'S)S*/S(9\<\" \'S+S,/S(9\" \'S-/S(9\" \'S.S//S(9S0.\" \" S15      S29S3.\" S&5      \" S&5      \" S&5      \;\9\:\:\;\" \'S)S*/S(9\" \'S+S,/S(9\<\<\<S4.\" \" S15      S29S3.S5.r=\S6 S7 \(" \
5      \>\?\R                  \R                  \R                  \C\(" \D5      \\(" \5      \(" \R                  5      S8.rF\*" S9S: 5      S; 5       rG\-" S95      S< 5       rH\*" S=S>S?9S@ 5       rI\*" SA5      SB 5       rJ\-" SA5      SC 5       rK\-" SD5      SE 5       rLg! \ a     GNf = f)Hz<Custom datatypes (like datetime) serialization to/from JSON.    N
namedtuple)	timedelta)parse)Decimal)Fraction)partialwraps)
attrgettermethodcaller)
SortedList)CurrencyMoney)loadsdumpspretty
json_loads
json_dumpsjson_prettydumpencoderdecoder      c                     U [         l        g N)_localcoding)r   s    a/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/fileio/format/jsonplus.pypreferr   >   s	    FM    c                  "    [        [        5        g r   )r   EXACT r    r   prefer_exactr$   B   s	    
5Mr    c                  "    [        [        5        g r   )r   COMPATr#   r    r   prefer_compatr'   F   s	    
6Nr    c           
      X    [        U Vs/ s H  o"[        X5      4PM     sn5      $ s  snf )a  Helper function that extracts a list of attributes from
`value` object in a `dict`/mapping of (attr, value[attr]).

Args:
    value (object):
        Any Python object upon which `getattr` can act.

    attrs (iterable):
        Any iterable containing attribute names for extract.

Returns:
    `dict` of attr -> val mappings.

Example:
    >>> getattrs(complex(2,3), ['imag', 'real'])
    {'imag': 3.0, 'real': 2.0}
)dictgetattr)valueattrsattrs      r   getattrsr.   J   s)    $ %@%$,-%@AA@s   'c                 0   ^  [        T 5      U 4S j5       nU$ )zFunction decorator that wraps a function receiving
keyword arguments into a function receiving a dictionary
of arguments.

Example:
    @kwargified
    def test(a=1, b=2):
        return a + b

    >>> test({'b': 3})
    4
c                    > T" S0 U D6$ Nr#   r#   )kwargsconstructors    r   kwargs_constructor&kwargified.<locals>.kwargs_constructorm   s    $V$$r    )r
   )r3   r4   s   ` r   
kwargifiedr6   _   s$     ;% % r    _PredicatedEncoderz#priority predicate encoder typenamec                    ^ ^^^ U(       a
  [         S   mO	[         S   mTc*  [        TS   5      S:  a  TS   S   R                  S-   mOSmU UUU4S jnU$ )	a	  A decorator for registering a new encoder for object type
defined either by a `classname`, or detected via `predicate`.

Predicates are tested according to priority (low to high),
but always before classname.

Args:
    classname (str):
        Classname of the object serialized, equal to
        ``type(obj).__name__``.

    predicate (callable, default=None):
        A predicate for testing if object is of certain type.
        The predicate shall receive a single argument, the object
        being encoded, and it has to return a boolean `True/False`.
        See examples below.

    priority (int, default=None):
        Predicate priority. If undefined, encoder is added at
        the end, with lowest priority.

    exact (bool, default=True):
        Determines the kind of encoder registered, an exact
        (default), or a compact representation encoder.

Examples:
    @encoder('mytype')
    def mytype_exact_encoder(myobj):
        return myobj.to_json()

    Functional discriminator usage is appropriate for serialization
    of objects with a different classname, but which can be encoded
    with the same encoder:

    @encoder('BaseClass', lambda obj: isinstance(obj, BaseClass))
    def all_derived_classes_encoder(derived):
        return derived.base_encoder()
exactcompat	predicater   d   i  c                    > T(       a"  TS   R                  [        TTU T5      5        U $ TS   R                  TU 5        U $ )Nr;   	classname)addr7   
setdefault)fr?   r;   prioritysubregistrys    r   
_decoratorencoder.<locals>._decorator   sK    $(("8Y9EG  $//	1=r    )_encode_handlerslenrC   )r?   r;   rC   r9   rE   rD   s   ```  @r   r   r   x   sh    N &w/&x0 {;'(1,";/3<<sBHH  r    c                 <   [         S   S    H9  nUR                  U 5      (       d  M  UR                  UR                  U 5      S.s  $    [	        U 5      R
                  nU[         S   S   ;   a  U[         S   S   U   " U 5      S.$ [        [        U 5      S-   5      e)ziSerialization handlers for types unsupported by `simplejson` 
that try to preserve the exact data types.
r9   r;   )	__class__	__value__r?    is not JSON serializable)rG   r;   typenamer   type__name__	TypeErrorreprobjhandlerr?   s      r   _json_default_exactrU      s     $G,[9S!!$--$__S1  : S	""I$W-k::")'2;?	J3O
 	

 DI ;;
<<r    c                    [         S   S    H,  nUR                  U 5      (       d  M  UR                  U 5      s  $    [        U 5      R                  nU[         S   S   ;   a  [         S   S   U   " U 5      $ [        [        U 5      S-   5      e)zYSerialization handlers that try to dump objects in
compatibility mode. Similar to above.
r:   r;   r?   rL   )rG   r;   r   rN   rO   rP   rQ   rR   s      r   _json_default_compatrW      s     $H-k:S!!??3'' ; S	""I$X.{;;)+6yA#FF
DI ;;
<<r    c                    ^  U 4S jnU$ )a   A decorator for registering a new decoder for `classname`.
Only ``exact`` decoders can be registered, since it is an assumption
the ``compat`` mode serializes to standard JSON.

Example:
    @decoder('mytype')
    def mytype_decoder(value):
        return mytype(value, reconstruct=True)
c                 2   > [         R                  TU 5        g r   )_decode_handlersrA   )rB   r?   s    r   rE   decoder.<locals>._decorator   s    ##Iq1r    r#   )r?   rE   s   ` r   r   r      s    2 r    c                     U R                  S5      nU(       aC  [        R                  U5      nU R                  S5      nU(       a  U" U5      $ [        SU-  5      eU $ )zDDeserialization handlers for types unsupported by `simplejson`.
    rJ   rK   zUnknown class: '%s')getrZ   rP   )r)   r?   r3   r+   s       r   _json_object_hookr^      sW     %I&**95%u%%-	9::Kr    c                    U R                  S[        [        S[        5      [        :H  5      (       a  U R                  [        SSSS.5        OU R                  [        SS.5        U R                  SS5        U R                  S	S5        g
)z/Shape default arguments for encoding functions.r9   r   F)defaultuse_decimaltuple_as_arraynamedtuple_as_objectT)r`   
ignore_nan
separators),:for_jsonN)	popr*   r   CODING_DEFAULTr"   updaterU   rW   rA   kws    r   _encoder_default_argsrn      sy     
vvgwvx@EIJJ
		* #
 	 			+
 	 MM,
+ MM*d#r    c                 2    U R                  S[        05        g)z/Shape default arguments for decoding functions.object_hookN)rk   r^   rl   s    r   _decoder_default_argsrq     s     II}/01r    c                   (   ^  \ rS rSrU 4S jrSrU =r$ )JSONEncoderi"  c                 D   > [        U5        [        [        U ]  " S0 UD6  g)zOConstructor for simplejson.JSONEncoder, with defaults overridden
for jsonplus.
Nr#   )rn   superrs   __init__selfrm   rJ   s     r   rv   JSONEncoder.__init__$       	b!k4)/B/r    r#   rO   
__module____qualname____firstlineno__rv   __static_attributes____classcell__rJ   s   @r   rs   rs   "      0 0r    rs   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )JSONDecoderi,  c                 D   > [        U5        [        [        U ]  " S0 UD6  g)zOConstructor for simplejson.JSONDecoder, with defaults overridden
for jsonplus.
Nr#   )rq   ru   r   rv   rw   s     r   rv   JSONDecoder.__init__.  rz   r    r#   r{   r   s   @r   r   r   ,  r   r    r   c                  D    [        U5        [        R                  " U 0 UD6$ r   )rn   jsonr   parm   s     r   r   r   6      "::r R  r    c                  D    [        U5        [        R                  " U 0 UD6$ r   )rq   r   r   r   s     r   r   r   ;  r   r    c                     UR                  SU5        UR                  SU5        UR                  SU5        [        U 40 UD6$ )N	sort_keysindentre   )rA   r   )xr   r   re   rm   s        r   r   r   @  s:    MM+y)MM(F#MM,
+>b>r    c                 "    U R                  5       $ r   )tolistr+   s    r   
np_to_listr   L  s    <<>r    c                 "    U R                  5       $ r   )itemr   s    r   generic_to_itemr   P  s    ::<r    	isoformat)dayssecondsmicroseconds)r,   realimag	numeratordenominatorhexamountcurrency)datetimedatetimer   tuplesetndarrayfloat16float32	frozensetcomplexr   r   UUIDr   rC   )key)r?   r;   )r   r   r   r   r   r   r   r   r   r   r   r   r   )r9   r:   c                 4    [        U 5      R                  5       $ r   )parse_datetimer   vs    r   <lambda>r     s    nQ',,.r    c                 4    [        U 5      R                  5       $ r   )r   timetzr   s    r   r   r     s    nQ'..0r    )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                 H    [        U [        5      =(       a    [        U S5      $ )N_fields)
isinstancer   hasattrrS   s    r   r   r     s    ZU+GY0GGr    c                 l    [        U 5      R                  [        U R                  5      [        U 5      S.$ )N)namefieldsvalues)rN   rO   listr   r   s    r   _dump_namedtupler     s.     S	""s{{#s) r    c                 6    [        U S   U S   5      nU" U S   6 $ )Nr   r   r   r   )valclss     r   _load_namedtupler     s%    
S[#h-
0CHr    r   F)r9   c                 f    U R                   U R                  U R                  S-  S-  -   S-  -   S-  $ )N   g      @i@B )r   r   r   )tds    r   _timedelta_total_secondsr     s=     OOZZ"''B,//589<AB Br    r   c                     SSK JnJn   U" U R                  5        U R                  $ ! U a    [	        U / SQ5      s $ f = f)zuSerialize standard (ISO-defined) currencies to currency code only,
and non-standard (user-added) currencies in full.
r   )CurrencyDoesNotExistget_currency)codenumericr   	countries)moneyedr   r   r   r.   )rS   r   r   s      r   _dump_currencyr     sA    
 ;GSXXxx GEFFGs   ( ??c                 @    SSK Jn   U" U S9$ !   [        S0 U D6s $ = f)zDeserialize string values as standard currencies, but
manually define fully-defined currencies (with code/name/numeric/countries).
r   )r   )r   r#   )r   r   r   )r   r   s     r   _load_currencyr     s*    
 %%%#s    r   c                     [        S0 U D6$ r1   )r   )r   s    r   _load_moneyr     s     <3<r    )NNT)Tz    )rf   z: )M__doc__numpynp
simplejsonr   	threadinguuidcollectionsr   r   r   dateutil.parserr   r   decimalr   	fractionsr   	functoolsr	   r
   operatorr   r   sortedcontainersr   r   r   r   ImportError__all__r"   r&   rj   localr   r   r$   r'   r.   r6   r7   r   rU   rW   r   r^   rn   rq   rs   r   r   r   r   r   r   r   r   r   r   strrG   r   r   asarrayr   r   r   r   r   rZ   r   r   r   r   r   r   r#   r    r   <module>r      s   B
     "  3   $ - '	'
: 	
	
		B**   4 EG ;|=0
="
 $F20$"" 00$"" 0!
!
 

 %%%H$GHHVV$45H[-$@AHUG,HXz$:;=
@  Jz$:;C"J %[1 - -!&&x/?@m0LM
  Jz$:;!I6 t .0I&zzzzzz'"8$tyy! $ 		GII 	 
 	E"B #B 		G 	G 	  	 u  		s   H HH