
    wdX;-                        d dl mZmZmZ d dlmZmZmZmZ d dlm	Z	 d dl
Z
d dlZd dlmZ d dlmZ 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mZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: dgZ; ee<          d             Z= ee3          d             Z= e> e	j?        d  e:ej@                  D                                 ZAejB        d          dk    r eeC          d             Z= eeA          d             Z= eeD          d             Z= eeE          d             Z= eeF          d             Z= ee          d             Z= ee          d             Z= ee          d             Z= ee          d             Z= e eGd          e$f          d             Z=ddddd ZHd:d"ZId# ZJeKeDeHjL        eJeIfZMd$ ZN ee2          d%             Z= ee>eOePeQf          d&             Z=d' ZRd( ZSe#efe#e&fe#e'fe#efe#e*fe#efee'feefe&efe#e!fg
ZTeefe&efe#e!fgZU e8d) eT          ZT eVd* eTW                                D                       ZT e7eT          ZXd+ ZYd, ZZd- Z[e[fd.Z\d/ Z]d0 Z^e=_                    eV          e=_                    e4          d1                         Z` ee5          d2             Z= eeja                  d3             Z= eejb                  d4             Z=d5 Zc eejd                  d6             Z=d7 ZedZf	 d d8lgmfZf n# eh$ r 	 d d8limfZf n# eh$ r Y nw xY wY nw xY wef eef          d9             Z=[fdS );    )print_functiondivisionabsolute_import)datetimedatetime	timedelta)chainN)dedent)warn)parse   )dispatch)int32int64float64bool_
complex128	datetime_Optionvar
from_numpyTuplenullRecordstringNull	DataShaperealdate_time_Unit
timedelta_	TimeDeltaobject_String)isdimensionisrecord)	_strtypes	_inttypesMappingProxyTypeOrderedDict)	_toposortgroupby
subclassesdiscoverc                    t          |           j        }t          | d          rOt          | d          r?t          t	          d|z            t
                     t          | j        | j                  S t          d|z            )a   Discover datashape of object

    A datashape encodes the datatypes and the shape/length of an object.
    Discover returns the datashape of a Python object.  This object can refer
    to external data.

    Datashapes range from simple scalars

    >>> discover(10)
    ctype('int64')

    To collections

    >>> discover([[1, 2, 3], [4, 5, 6]])
    dshape('2 * 3 * int64')

    To record types and other objects

    >>> x = np.array([('Alice', 100), ('Bob', 200)], dtype=[('name', 'S7'),
    ...                                                     ('amount', 'i4')])
    >>> discover(x)
    dshape('2 * {name: string[7, "ascii"], amount: int32}')

    See http://datashape.pydata.org/grammar.html#some-simple-examples
    for more examples
    shapedtypez                array-like discovery is deperecated.
                Please write an explicit discover function for type '%s'.
                z"Don't know how to discover type %r)
type__name__hasattrr   r   DeprecationWarningr   r3   r4   NotImplementedError)objkwargs	type_names      3lib/python3.11/site-packages/datashape/discovery.pyr1   r1      s    8 S		"IsG 
0g!6!6 
0     	
 	
 	
 #)SY///
BYN
O
OO    c                     t           S N)r   is    r=   r1   r1   F       Lr>   c              #   H   K   | ]}d  t          |          D             V  dS )c              3   N   K   | ] }|j                             d           |V  !dS ))intuintN)r6   
startswith).0xs     r=   	<genexpr>z<genexpr>.<genexpr>K   s^       (L (La+,:+@+@ BJ ,K ,K(L (L (L (L (L (L (Lr>   Nr/   )rI   iclss     r=   rK   rK   K   sc       'K 'K ,0(L (L:d3C3C (L (L (L 'K 'K 'K 'K 'K 'Kr>      c                      t          d          S )NA)r&   bs    r=   r1   r1   R   s    c{{r>   c                 ,    t          d| j                  S N )r   r4   ns    r=   r1   r1   W   s    b!'"""r>   c                     t           S r@   )r   )fs    r=   r1   r1   \   s    Nr>   c                     t           S r@   )r   rP   s    r=   r1   r1   a   rC   r>   c                     t           S r@   )r   )zs    r=   r1   r1   f   s    r>   c                     t           S r@   )r   dts    r=   r1   r1   k   s    r>   c                 "    t          d          S )Nusunit)r$   )tds    r=   r1   r1   p   s    $r>   c                     t           S r@   )r    r]   s    r=   r1   r1   u   rC   r>   c                     t           S r@   )r!   ts    r=   r1   r1   z   rC   r>   c                     t           S r@   )r   rA   s    r=   r1   r1      s    Kr>   FT)FalsefalseTruetruez%H:%M:%Sz%H:%M:%S.%fc                     d}|D ]Q}	 t          j        | |                                          c S # t          $ r}t	          |          }Y d }~Jd }~ww xY wt          |          )N )r   strptimer   
ValueErrorstr)rJ   formatsmsgformates        r=   	timeparserw      s    
C  	$Q//4466666 	 	 	a&&CCCCCC	
S//s   &1
AAAc                 $   t          j        d|                                           \  }}t          |          }|                                st          d          t          j        t          |          t          |          j
                  S )a:  Naive timedelta string parser

    Examples
    --------
    >>> td = '1 day'
    >>> deltaparse(td)
    numpy.timedelta64(1,'D')
    >>> deltaparse('1.2 days')  # doctest: +IGNORE_EXCEPTION_DETAIL
    Traceback (most recent call last):
        ...
    ValueError: floating point timedelta value not supported
    z\s+z-floating point timedelta values not supportedra   )resplitstripfloat
is_integerrq   nptimedelta64rF   r$   rb   )rJ   valuerb   s      r=   
deltaparser      sv     (5!'')),,KE4%LLE JHIII>#e**iT&:&:&:&?@@@r>   c                 <    | j         p| j        p| j        p| j         S r@   )hourminutesecondmicrosecondrf   s    r=   is_zero_timer      s"    ?!(?ah?!-@@r>   c                    | st           S t          D ]3}	 t           ||                     c S # t          t          f$ r Y 0w xY w|                                 s|                                 rt          S 	 t          |           }t          |
                                          rt          nt          S # t          t          f$ r Y nw xY wt          S r@   )r   string_coercionsr1   rq   KeyErrorisalphaisspacer   	dateparser   r   r    r   OverflowError)srX   ds      r=   r1   r1      s       	AAaDD>>!!!H% 	 	 	D	 	yy{{ aiikk >aLL %QVVXX..=uuI= &   
 Ms!   .AA5B3 3CCc           	           st           t          z  S t          t          t          t
          g          t          d  D                       rt          t          t          t                                         dk    rqt          t                      }	 fd|D             }t          t          t
          t          g          t                      |          z  S # t          $ r Y nw xY wt          d  D                       rt          t          j        d  D                        } fd|D             }	 fd|D             }t                     t!          t          t          ||                              z  S # t          $ r Y nw xY wt          t          t"                               } t          t          t
          t          g          |          S )Nc              3   N   K   | ] }t          |t          t          f          V  !d S r@   )
isinstancetuplelistrI   items     r=   rK   zdiscover.<locals>.<genexpr>   s0      <<JteT]++<<<<<<r>   r   c                 P    g | ]"} d  |D                       j         d         #S )c                 ,    g | ]}t          |          S rT   r1   rI   datas     r=   
<listcomp>z'discover.<locals>.<listcomp>.<listcomp>       >>>tHTNN>>>r>   r   subshaperI   columnunites     r=   r   zdiscover.<locals>.<listcomp>   J     , , , U>>v>>>??HK , , ,r>   c              3   @   K   | ]}t          |t                    V  d S r@   )r   dictr   s     r=   rK   zdiscover.<locals>.<genexpr>   s,      
2
2d:dD!!
2
2
2
2
2
2r>   c              3   4   K   | ]}t          |          V  d S r@   set)rI   r   s     r=   rK   zdiscover.<locals>.<genexpr>   s(      !6!6Q#a&&!6!6!6!6!6!6r>   c                 .    g | ]fd D             S )c                 :    g | ]}|                               S rT   )get)rI   r   keys     r=   r   z'discover.<locals>.<listcomp>.<listcomp>   s#    222dDHHSMM222r>   rT   )rI   r   seqs    @r=   r   zdiscover.<locals>.<listcomp>   s/    CCCs2222c222CCCr>   c                 P    g | ]"} d  |D                       j         d         #S )c                 ,    g | ]}t          |          S rT   r   r   s     r=   r   z'discover.<locals>.<listcomp>.<listcomp>   r   r>   r   r   r   s     r=   r   zdiscover.<locals>.<listcomp>   r   r>   )r   r   do_oneunite_identical
unite_baseunite_merge_dimensionsalllenr   mapr   zipr   AttributeErrorsortedunionr   r1   )r   columnstypeskeysr   s   `   @r=   r1   r1      s    V|OZ1GHIIE<<<<<<< 	CSMM""##q(	sCy//	, , , ,#*, , ,EO-CUKLLEs88eeEll** 	 	 	D	 
2
2c
2
2
222 ci!6!6#!6!6!6788CCCCdCCC	, , , ,#*, , ,Es88fT#dE*:*:%;%;<<<< 	 	 	D	 Xs##$$EC6?$:EBCCEJJJs&   A	C" "
C/.C/?AF 
FFc                 H    | t           k    p| t          t                     k    S r@   )r   r   dss    r=   isnullr      s    :.y..r>   c                     | S r@   rT   rJ   s    r=   <lambda>r      s    Q r>   c                     | d         S )Nr   rT   r   s    r=   r   r     s
    !A$ r>   c              #   R   K   | ]"\  }}|t          d  |D                       fV  #dS )c              3       K   | ]	\  }}|V  
d S r@   rT   )rI   arQ   s      r=   rK   z<genexpr>.<genexpr>  s&      %%41aQ%%%%%%r>   Nr   rI   kvs      r=   rK   rK     sB      AA41aa%%1%%%%%&AAAAAAr>   c                     t          j        d | D              }|r4t          d |D                       rt          |t          j                  S t          d          )z Find common shared dshape

    >>> lowest_common_dshape([int32, int64, float64])
    ctype("float64")

    >>> lowest_common_dshape([int32, int64])
    ctype("int64")

    >>> lowest_common_dshape([string, int64])
    ctype("string")
    c                 8    g | ]}t          t          |          S rT   )descendentsedgesrI   r   s     r=   r   z(lowest_common_dshape.<locals>.<listcomp>  s"    III2E2 6 6IIIr>   c              3   (   K   | ]}|t           v V  d S r@   )
toposorted)rI   cs     r=   rK   z'lowest_common_dshape.<locals>.<genexpr>  s&      66!a:o666666r>   )r   z)Not all dshapes are known.  Extend edges.)r   intersectionanyminr   indexrq   )dshapescommons     r=   lowest_common_dshaper     sk     IIIIIJF 1#66v66666 16z/0000
@
A
AAr>   c                     d  D              t          t                     }	 |d         n'# t          $ r t                     t          z  cY S w xY wt          d D                       rt                    }n7 fdD             r(d         j        }t          fd|D                       }|r6|	                    d          rt          |          }t                     |z  S dS )	z Performs lowest common dshape and also null aware

    >>> unite_base([float64, float64, int64])
    dshape("3 * float64")

    >>> unite_base([int32, int64, null])
    dshape("3 * ?int64")
    c                 ,    g | ]}t          |          S rT   )unpackr   s     r=   r   zunite_base.<locals>.<listcomp>#  s    ,,,bvbzz,,,r>   Fc              3   @   K   | ]}t          |t                    V  d S r@   )r   r"   r   s     r=   rK   zunite_base.<locals>.<genexpr>)  s,      
7
7B:b$
7
7
7
7
7
7r>   c              3   v   K   | ]3}t          d  D                       o|j        d         j        k    V  4dS )c              3   @   K   | ]}t          |t                    V  d S r@   )r   r   r   s     r=   rK   z'unite_base.<locals>.<genexpr>.<genexpr>+  s,      <<jV$$<<<<<<r>   r   N)r   names)rI   r   r   good_dshapess     r=   rK   zunite_base.<locals>.<genexpr>+  sd       
? 
?+- <<|<<<
<
< '
(gaj&
&
? 
? 
? 
? 
? 
?r>   r   c                 b    g | ]*t          fd D                       j        d         g+S )c                 P    g | ]"}|j                             t                    #S rT   )r   r   r   )rI   r   names     r=   r   z)unite_base.<locals>.<listcomp>.<listcomp>/  s)    #S#S#SBGKKd$;$;#S#S#Sr>   r   )r   r   )rI   r   r   s    @r=   r   zunite_base.<locals>.<listcomp>.  sY     * * * "#S#S#S#Sl#S#S#STT]^_`b * * *r>   TN)r.   r   r   r   r   r   r   r   r   r   r   )r   bynullbaser   r   s   `   @r=   r   r     sM    -,G,,,GVW%%F#e} # # #7||d""""#

7
7,
7
7
777 +#L11
? 
? 
? 
? 
?1=
? 
? 
? +Q% * * * *#(* * * + +  #::d 	 $<<D7||d""# #s   . !AAc                 v    t          t          |                     dk    rt          |           | d         z  S dS )zM

    >>> unite_identical([int32, int32, int32])
    dshape("3 * int32")
    r   r   N)r   r   )r   s    r=   r   r   7  s>     3w<<A )7||gaj(() )r>   c                 B   t          |           }t          d | D                       rtd | D             } |d | D                       }|rSt          t          |                    dk    r||d         |j        d         z  z  S |t          |j        d         z  z  S dS dS )z

    >>> unite_merge_dimensions([10 * string, 10 * string])
    dshape("2 * 10 * string")

    >>> unite_merge_dimensions([10 * string, 20 * string])
    dshape("2 * var * string")
    c              3   j   K   | ].}t          |t                    ot          |d                    V  /dS )r   N)r   r   r'   r   s     r=   rK   z)unite_merge_dimensions.<locals>.<genexpr>K  s=      
N
N:b)$$;RU););
N
N
N
N
N
Nr>   c                     g | ]
}|d          S r   rT   r   s     r=   r   z*unite_merge_dimensions.<locals>.<listcomp>L  s    ((("1(((r>   c                 (    g | ]}|j         d          S r   r   r   s     r=   r   z*unite_merge_dimensions.<locals>.<listcomp>M  s    777bk!n777r>   r   r   N)r   r   r   r   r   )r   r   rV   dimsr   s        r=   r   r   A  s     	GA

N
Ng
N
N
NNN 4(((((u77w77788 	43t99~~" 4DGdmA&6677C$-"22334 4	4 	4r>   c                       fd}|S )Nc                 4    D ]} ||           }|r|c S | S r@   rT   )inpfuncresultfuncss      r=   rX   zdo_one.<locals>.fV  s:     	 	DT#YYF 
r>   rT   )r   rX   s   ` r=   r   r   U  s#         Hr>   c                 f    t          | t                    rt          |           dk    r| d         S | S )z Unpack DataShape constructor if unnecessary

    Record packs inputs in DataShape containers.  This unpacks it.

    >>> from datashape import dshape
    >>> unpack(dshape('string'))
    ctype("string")
    r   r   )r   r   r   r   s    r=   r   r   _  s5     "i   SWW\ !u	r>   c                 T     t           fdt                     D                       S )Nc              3   F   K   | ]}|t          |                   fV  d S r@   r   )rI   r   ms     r=   rK   z$_mapping_discover.<locals>.<genexpr>q  s2      99!1hqtnn%999999r>   )r   r   r   s   `r=   _mapping_discoverr   n  s.     9999vayy999999r>   c                 X    t          d |                                 D                       S )Nc              3   >   K   | ]\  }}|t          |          fV  d S r@   r   r   s      r=   rK   zdiscover.<locals>.<genexpr>v  s1      ::tq!1hqkk"::::::r>   )r   items)ods    r=   r1   r1   t  s'    ::rxxzz::::::r>   c                 <    t          dt          |                     S rS   )r   r5   rU   s    r=   r1   r1   y  s    b$q''"""r>   c                 "    t          d|           S rS   )r   rU   s    r=   r1   r1   ~  s    b!r>   c                 r    t          d | j        dd                                         D                       S )z Is an array of strings

    >>> is_string_array(np.array(['Hello', 'world'], dtype='O'))
    True
    >>> is_string_array(np.array(['Hello', None], dtype='O'))
    False
    c              3   @   K   | ]}t          |t                    V  d S r@   )r   r)   )rI   rB   s     r=   rK   z"is_string_array.<locals>.<genexpr>  s,      EEAz!Y''EEEEEEr>   N   )r   flattolistr   s    r=   is_string_arrayr    s7     EE1B1B1D1DEEEEEEr>   c                 p    t           j         j                  }|j        t          k    r&t                     rt          |j        t          fz    S t          |j                  rPt          |j        j	        v r=t           fd|j        j        d         D                       }t          |j        |fz    S |S )Nc                 l    g | ]0\  }}||t           k    rt          |                   rt          n|g1S rT   )r%   r  r   )rI   r   typrJ   s      r=   r   zdiscover.<locals>.<listcomp>  sW     ? ? ?!c SG^ $8P8P 66 ? ? ?r>   r   )r   r3   r4   measurer%   r  r   r   r(   r   r   
parameters)rJ   r   r   s   `  r=   r1   r1     s    	AGQW	%	%B
 
zW 2!3!3 228vi/11
 2:+; ;  ? ? ? ?%'Z%:1%=? ? ? @ @ 28qd?,,	r>   c                      t          |g          }                     |t                                }|r6t          j         fd|D              }||z  }|                    |           |6|S )za

    >>> d = {3: [2], 2: [1, 0], 5: [6]}
    >>> sorted(descendents(d, 3))
    [0, 1, 2, 3]
    c                 V    g | ]%}t                              |d                     &S )rT   )r   r   )rI   kidr   s     r=   r   zdescendents.<locals>.<listcomp>  s-    CCCss155b>>22CCCr>   )r   r   r   update)r   rJ   descchildrens   `   r=   r   r     s}     s88DuuQH
 9CCCCdCCCDDH   Kr>   )Mockc                      t          d          )Nz'Don't know how to discover mock objects)r9   r   s    r=   r1   r1     s    !"KLLLr>   )rm   )j
__future__r   r   r   r   r   r   r	   	itertoolsr
   ry   systextwrapr   warningsr   dateutil.parserr   r   numpyr~   r   	coretypesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   
predicatesr'   r(   py2helpr)   r*   r+   r,   internal_utilsr-   r.   utilr0   __all__objectr1   r   from_iterableinteger
npinttypesversion_infobytesr|   boolcomplexr5   boolsrw   r   rF   __getitem__r   r   r   r   	frozensetr   identityr   numeric_edgesr   r   r   r   r   r   r   r   r   registerr   numberr   r  ndarrayr   r  unittest.mockImportErrormockrT   r>   r=   <module>r5     s=   @ @ @ @ @ @ @ @ @ @ 4 4 4 4 4 4 4 4 4 4 4 4       				 



             . . . . . .          F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F . - - - - - - - H H H H H H H H H H H H . . . . . . . .       , 
&'P 'P 'PT 
)   U&5& 'K 'K 4>:bj3I3I'K 'K 'K K K L L
 A! Xe__  _ 
*# # # 
%   
$   
'   
(   
)      
$   
$   
44::t
   	 	   A A A( u0*iG A A A 
)  0 
5$Y
'((K K )(K>/ / / ; UOTNUOYZUO
EN	5MTN
	 EN	5MTN 	&&AA5;;==AAAAAYu
B B B$# # #:) ) ) +: 4 4 4 4(     
4	#$$: : %$ : 
+; ; ; 
")# # # 
".  F F F 
"*  $    """""""        MXd^^M M ^MDDs6   M
 
M%MM%MM%MM%$M%