
    |Le-                        d dl mZmZmZ d dl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m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/m0Z0 d
dl1m2Z2m3Z3 d
dl4m5Z5m6Z6 d
dl7m8Z8m9Z9 d
dl:m;Z; dgZ< ee=          d             Z> ee6          d             Z> e? ej@        d  e;ejA                  D                                 ZB eeC          d             Z> eeB          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e5          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 e9d* eT          ZT eVd+ eTW                                D                       ZT e8eT          ZXd, ZYd- ZZd. Z[e[fd/Z\d0 Z]d1 Z^e>_                    eV          e>_                    e          d2                         Z` ee          d3             Z> eeja                  d4             Z> eejb                  d5             Z>d6 Zc eejd                  d7             Z>d8 ZedZf	 d d9lgmfZf n# eh$ r 	 d d9limfZf n# eh$ r Y nw xY wY nw xY wef eef          d:             Z>[fdS )<    )print_functiondivisionabsolute_import)OrderedDict)datetimedatetime	timedelta)chainN)dedent)MappingProxyType)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)	_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 deprecated.
                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      >lib/python3.11/site-packages/datashader/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   G       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>L   s^       (L (La+,:+@+@ BJ ,K ,K(L (L (L (L (L (L (Lr>   Nr/   )rI   iclss     r=   rK   rK   L   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    #;;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   rO   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=   	timeparserv      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 supportedr`   )resplitstripfloat
is_integerrp   nptimedelta64rF   r&   ra   )rJ   valuera   s      r=   
deltaparser      sv     (617799--KE4%LLE JHIII>#e**iT&:&:&:&?@@@r>   c                 <    | j         p| j        p| j        p| j         S r@   )hourminutesecondmicrosecondre   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   rp   KeyErrorisalphaisspacer   	dateparser   r	   r"   r   OverflowError)srW   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 rS   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 rS   )get)rI   r   keys     r=   r   z'discover.<locals>.<listcomp>.<listcomp>   s#    222dDHHSMM222r>   rS   )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 rS   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@   rS   rJ   s    r=   identityr      s    Hr>   c                     | d         S )Nr   rS   r   s    r=   <lambda>r     s
    !A$ r>   c              #   R   K   | ]"\  }}|t          d  |D                       fV  #dS )c              3       K   | ]	\  }}|V  
d S r@   rS   )rI   arP   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 rS   )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   indexrp   )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 rS   )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 rS   )r   r   r   )rI   r   names     r=   r   z)unite_base.<locals>.<listcomp>.<listcomp>1  s)    #S#S#SBGKKd$;$;#S#S#Sr>   r   )r   r   )rI   r   r   s    @r=   r   zunite_base.<locals>.<listcomp>0  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   9  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>M  s=      
N
N:b)$$;RU););
N
N
N
N
N
Nr>   c                     g | ]
}|d          S r   rS   r   s     r=   r   z*unite_merge_dimensions.<locals>.<listcomp>N  s    ((("1(((r>   c                 (    g | ]}|j         d          S r   r   r   s     r=   r   z*unite_merge_dimensions.<locals>.<listcomp>O  s    777bk!n777r>   r   r   N)r   r   r   r   r   )r   r   rU   dimsr   s        r=   r   r   C  s     	GA

N
Ng
N
N
NNN 4(((((u77w77788 	43t99~~""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@   rS   )inpfuncresultfuncss      r=   rW   zdo_one.<locals>.fX  s:     	 	DT#YYF 
r>   rS   )r   rW   s   ` r=   r   r   W  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 datashader.datashape import dshape
    >>> unpack(dshape('string'))
    ctype("string")
    r   r   )r   r    r   r   s    r=   r   r   a  s2     "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>s  s2      99!1hqtnn%999999r>   )r   r   r   s   `r=   _mapping_discoverr   p  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>x  s1      ::tq!1hqkk"::::::r>   )r   items)ods    r=   r1   r1   v  s'    ::rxxzz::::::r>   c                 <    t          dt          |                     S rR   )r   r5   rT   s    r=   r1   r1   {  s    b$q''"""r>   c                 "    t          d|           S rR   )r   rT   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 rS   )r'   r  r   )rI   r   typrJ   s      r=   r   zdiscover.<locals>.<listcomp>  sQ     ? ? ?!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!3!3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 )rS   )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>   )rl   )j
__future__r   r   r   collectionsr   r   r   r	   r
   	itertoolsr   rx   textwrapr   r   r   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,   internal_utilsr-   r.   utilr0   __all__objectr1   r   from_iterableinteger
npinttypesbytesr{   boolcomplexr5   boolsrv   r   rF   __getitem__r   r   r   r   	frozensetr   r   r   numeric_edgesr   r   r   r   r   r   r   r   r   registerr   numberr~   r  ndarrayr   r  unittest.mockImportErrormockrS   r>   r=   <module>r3     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 . - - - - - - - ) ) ) ) ) ) ) ) . . . . . . . .       , 
&'P 'P 'PT 
)   U&5& 'K 'K 4>:bj3I3I'K 'K 'K K K L L
 
%   
*# # # 
%   
$   
'   
(   
)      
$   
$   
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 
"*  $    """""""       Xd^^M M ^MDDs6   6L= =MM
	M
MMMMM