
    bi                    0   U d dl mZ d dl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 d dlmZ d d	lmZ d d
lmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZm Z m!Z!m"Z"  G d d      Z#dPdZ$ G d d      Z%d Z&dQdZ'd Z(d Z)d Z*d Z+d Z,d Z-dddddZ. G d  d!e      Z/ G d" d#e      Z0 G d$ d%e0      Z1	 i Z2d&e3d'<    e	       Z4d( Z5	  e5d)      Z6 e5d*      Z7 e5d+      Z8 e5d,      Z9 e5d-      Z: e5d.      Z; e5d/      Z< e5d0      Z= e5d1      Z> e5d2      Z? e5d3      Z@ e5d4      ZA e5d5      ZB e5d6      ZC e5d7      ZD e5d8      ZE e5d9      ZF e5d:      ZG e5d;      ZH e5d<      ZI e5d=      ZJ e5d>      ZK e5d?      ZL e5d@      ZM e5dA      ZN e5dA      ZO e5dB      ZP e5dC      ZQ e5dD      ZR e5dE      ZS e5dF      ZT e5dG      ZU e5dH      ZV e5dI      ZW e5dJ      ZX e5dK      ZY e5dL      ZZ e5dM      Z[ e5dN      Z\ e5dO      Z]y)R    )annotationsN)product)Integral)Lock)new_collection)Array)IO)array_creation_dispatch)asarraybroadcast_shapesnormalize_chunks)arange)asarray_safe)tokenize)cached_propertyderived_fromrandom_state_datatypenamec                  ~   e Zd ZdZd Zd Zed        Zed        Z e	e
j                  j                  d      d1d
       Z e	e
j                  j                  d      d1d       Z e	e
j                  j                  d      d1d       Z e	e
j                  j                  d      	 	 	 	 	 	 d2d       Z e	e
j                  j                  d      d3d       Z e	e
j                  j                  d      d1d       Z e	e
j                  j                  d      d3d       Z e	e
j                  j                  d      d1d       Z e	e
j                  j                  d      d4d       Z e	e
j                  j                  d      d1d       Z e	e
j                  j                  d      dde
j.                  dd	fd       Z e	e
j                  j                  d      d4d       Z e	e
j                  j                  d      d4d       Z e	e
j                  j                  d      d4d       Z e	e
j                  j                  d      d1d       Z e	e
j                  j                  d      d1d       Z e	e
j                  j                  d      	 d5d       Z e	e
j                  j                  d      d1d       Z e	e
j                  j                  d      d1d       Z  e	e
j                  j                  d      d1d       Z! e	e
j                  j                  d      d4d       Z" e	e
j                  j                  d      d1d        Z# e	e
j                  j                  d      d!        Z$ e	e
j                  j                  d      d3d"       Z% e	e
j                  j                  d      d1d#       Z& e	e
j                  j                  d      de
jN                  dd	fd$       Z e	e
j                  j                  d      d3d%       Z( e	e
j                  j                  d      d1d&       Z) e	e
j                  j                  d      d1d'       Z* e	e
j                  j                  d      d1d(       Z+ e	e
j                  j                  d      d1d)       Z, e	e
j                  j                  d      d1d*       Z- e	e
j                  j                  d      d1d+       Z. e	e
j                  j                  d      d4d,       Z/ e	e
j                  j                  d      d1d-       Z0 e	e
j                  j                  d      d1d.       Z1 e	e
j                  j                  d      d1d/       Z2 e	e
j                  j                  d      d1d0       Z3y)6	Generatora
  
    Container for the BitGenerators.

    ``Generator`` exposes a number of methods for generating random
    numbers drawn from a variety of probability distributions and serves
    as a replacement for ``RandomState``. The main difference between the
    two is that ``Generator`` relies on an additional ``BitGenerator`` to
    manage state and generate the random bits, which are then transformed
    into random values from useful distributions. The default ``BitGenerator``
    used by ``Generator`` is ``PCG64``. The ``BitGenerator`` can be changed
    by passing an instantiated ``BitGenerator`` to ``Generator``.

    The function :func:`dask.array.random.default_rng` is the recommended way
    to instantiate a ``Generator``.

    .. warning::

       No Compatibility Guarantee.

       ``Generator`` does not provide a version compatibility guarantee. In
       particular, as better algorithms evolve the bit stream may change.

    Parameters
    ----------
    bit_generator : BitGenerator
        BitGenerator to use as the core generator.

    Notes
    -----
    In addition to the distribution-specific arguments, each ``Generator``
    method takes a keyword argument `size` that defaults to ``None``. If
    `size` is ``None``, then a single value is generated and returned. If
    `size` is an integer, then a 1-D array filled with generated values is
    returned. If `size` is a tuple, then an array with that shape is
    filled and returned.

    The Python stdlib module `random` contains pseudo-random number generator
    with a number of methods that are similar to the ones available in
    ``Generator``. It uses Mersenne Twister, and this bit generator can
    be accessed using ``MT19937``. ``Generator``, besides being
    Dask-aware, has the advantage that it provides a much larger number
    of probability distributions to choose from.

    All ``Generator`` methods are identical to ``np.random.Generator`` except
    that they also take a `chunks=` keyword argument.

    ``Generator`` does not guarantee parity in the generated numbers
    with any third party library. In particular, numbers generated by
    `Dask` and `NumPy` will differ even if they use the same seed.

    Examples
    --------
    >>> from numpy.random import PCG64
    >>> from dask.array.random import Generator
    >>> rng = Generator(PCG64())
    >>> rng.standard_normal().compute() # doctest: +SKIP
    array(0.44595957)  # random

    See Also
    --------
    default_rng : Recommended constructor for `Generator`.
    np.random.Generator
    c                    || _         y N)_bit_generator)selfbit_generators     X/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/array/_array_expr/random.py__init__zGenerator.__init__X   s
    +    c                    | j                   j                  }|d| j                  j                   j                  z   dz   z  }|S )N())	__class____name__r   )r   _strs     r   __str__zGenerator.__str__[   s<    ~~&&d))33<<<sBBr   c                P    t        | j                        j                  d      d   S N.r   )r   r   splitr   s    r   _backend_namezGenerator._backend_name`   s%     ++,2237::r   c                @    t        j                  | j                        S r   )	importlibimport_moduler+   r*   s    r   _backendzGenerator._backendf   s     &&t'9'9::r      
skipblocksNautoc                &    t        | d||f||d|S Nbetasizechunks
_wrap_funcr   abr8   r9   kwargss         r   r6   zGenerator.betal       $1Q4Q&QQr   c                &    t        | d||f||d|S Nbinomialr7   r:   r   npr8   r9   r?   s         r   rC   zGenerator.binomialp       $
AqUtFUfUUr   c                $    t        | d|f||d|S N	chisquarer7   r:   r   dfr8   r9   r?   s        r   rJ   zGenerator.chisquaret       $RTd6TVTTr   c                    t        | ||||||      \  }}}}}}}}	t        t        |j                  ||| j                  ||||            S r   )_choice_validate_paramsr   RandomChoiceGeneratorexprr   )
r   r=   r8   replacerF   axisshuffler9   metadependenciess
             r   choicezGenerator.choicex   sg    ( $D!T7AtVL		
 !d&9&97AtW
 	
r   c                $    t        | d|f||d|S Nexponentialr7   r:   r   scaler8   r9   r?   s        r   rZ   zGenerator.exponential   (    -
-1&
DJ
 	
r   c                &    t        | d||f||d|S Nfr7   r:   r   dfnumdfdenr8   r9   r?   s         r   r`   zGenerator.f       $UEVVVvVVr   c                &    t        | d||f||d|S Ngammar7   r:   r   shaper\   r8   r9   r?   s         r   rg   zGenerator.gamma   *    '5%
.26
EK
 	
r   c                $    t        | d|f||d|S N	geometricr7   r:   r   rF   r8   r9   r?   s        r   rm   zGenerator.geometric       $QST&SFSSr   c                &    t        | d||f||d|S Ngumbelr7   r:   r   locr\   r8   r9   r?   s         r   rr   zGenerator.gumbel   *    (C
-1&
DJ
 	
r   c                (    t        | d|||f||d|S Nhypergeometricr7   r:   r   ngoodnbadnsampler8   r9   r?   s          r   rx   zGenerator.hypergeometric   5    	
 	
 	
 		
r   Fc           	     *    t        | d|f|||||d|S )Nintegers)highr8   dtypeendpointr9   r:   )r   lowr   r8   r   r   r9   r?   s           r   r   zGenerator.integers   s:     

 

 

 
	
r   c                &    t        | d||f||d|S Nlaplacer7   r:   rs   s         r   r   zGenerator.laplace   *    )S%
.26
EK
 	
r   c                &    t        | d||f||d|S Nlogisticr7   r:   rs   s         r   r   zGenerator.logistic   *    *c5
/3F
FL
 	
r   c                &    t        | d||f||d|S N	lognormalr7   r:   r   meansigmar8   r9   r?   s         r   r   zGenerator.lognormal   *    +tU
15f
HN
 	
r   c                $    t        | d|f||d|S N	logseriesr7   r:   rn   s        r   r   zGenerator.logseries   ro   r   c                >    t        | d||f||t        |      ffd|S Nmultinomialr8   r9   extra_chunksr;   lenr   rE   pvalsr8   r9   r?   s         r   r   zGenerator.multinomial   >    		

 u:-)	
 	
 		
r   c                (    t        | d||f|||d|S )Nmultivariate_hypergeometric)r8   methodr9   r:   )r   colorsr|   r8   r   r9   r?   s          r   r   z%Generator.multivariate_hypergeometric   s7     )		

 	
 	
 		
r   c                &    t        | d||f||d|S Nnegative_binomialr7   r:   rD   s         r   r   zGenerator.negative_binomial  +    %q!
26v
IO
 	
r   c                &    t        | d||f||d|S Nnoncentral_chisquarer7   r:   r   rL   noncr8   r9   r?   s         r   r   zGenerator.noncentral_chisquare
  +    ("d
9=f
PV
 	
r   c                (    t        | d|||f||d|S Nnoncentral_fr7   r:   r   rb   rc   r   r8   r9   r?   s          r   r   zGenerator.noncentral_f  ,    .%
;?
RX
 	
r   c                &    t        | d||f||d|S Nnormalr7   r:   rs   s         r   r   zGenerator.normal  ru   r   c                $    t        | d|f||d|S Nparetor7   r:   r   r=   r8   r9   r?   s        r   r   zGenerator.pareto      $!P$vPPPr   c                   ddl m} | j                  dk(  rt        d      t	        |t
        j                        rt        |d      }| j                  j                  t        |            }t        | j                  |        |||      S )Nr   shuffle_slicecupyz`Generator.permutation` not supported for cupy-backed Generator objects. Use the 'numpy' array backend to call `dask.array.random.default_rng`, or pass in  `numpy.random.PCG64()`.r3   r9   )dask.array.slicingr   r+   NotImplementedError
isinstancenumbersNumberr   r/   r   _shuffler   r   xr   indexs       r   permutationzGenerator.permutation   sv    4'%+  a(q(A$$SV,$$e,Q&&r   c                $    t        | d|f||d|S Npoissonr7   r:   r   lamr8   r9   r?   s        r   r   zGenerator.poisson3      $	3ST&SFSSr   c                $    t        | d|f||d|S Npowerr7   r:   r   s        r   r   zGenerator.power7      $OfOOOr   c                &    t        | df||||d|S )Nrandom)r8   r   outr9   r:   )r   r8   r   r   r9   r?   s         r   r   zGenerator.random;  s*    (
!%UF
NT
 	
r   c                $    t        | d|f||d|S Nrayleighr7   r:   r[   s        r   r   zGenerator.rayleighA      $
EVVVvVVr   c                "    t        | df||d|S Nstandard_cauchyr7   r:   r   r8   r9   r?   s       r   r   zGenerator.standard_cauchyE      $ 1VVVvVVr   c                "    t        | df||d|S Nstandard_exponentialr7   r:   r   s       r   r   zGenerator.standard_exponentialI  '    (
/3F
FL
 	
r   c                $    t        | d|f||d|S Nstandard_gammar7   r:   r   ri   r8   r9   r?   s        r   r   zGenerator.standard_gammaO  )    "E
04V
GM
 	
r   c                "    t        | df||d|S Nstandard_normalr7   r:   r   s       r   r   zGenerator.standard_normalU  r   r   c                $    t        | d|f||d|S N
standard_tr7   r:   rK   s        r   r   zGenerator.standard_tY      $bUtFUfUUr   c                (    t        | d|||f||d|S N
triangularr7   r:   r   leftmoderightr8   r9   r?   s          r   r   zGenerator.triangular]  ,    ,dE
8<V
OU
 	
r   c                &    t        | d||f||d|S Nuniformr7   r:   r   r   r   r8   r9   r?   s         r   r   zGenerator.uniformc  *    )S$
-1&
DJ
 	
r   c                &    t        | d||f||d|S Nvonmisesr7   r:   r   mukappar8   r9   r?   s         r   r   zGenerator.vonmisesi  *    *b%
.26
EK
 	
r   c                &    t        | d||f||d|S Nwaldr7   r:   r   r   r\   r8   r9   r?   s         r   r  zGenerator.waldo       $eX$vXQWXXr   c                $    t        | d|f||d|S Nweibullr7   r:   r   s        r   r  zGenerator.weibulls      $	1Q4Q&QQr   c                $    t        | d|f||d|S Nzipfr7   r:   r   s        r   r  zGenerator.zipfw      $NVNvNNr   Nr3   )NTNr   Tr3         ?Nr3   g        r  Nr3   )N	marginalsr3   )4r#   
__module____qualname____doc__r   r%   propertyr+   r/   r   npr   r   r6   rC   rJ   rW   rZ   r`   rg   rm   rr   rx   int64r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   float64r   r   r   r   r   r   r   r   r   r  r  r   r   r   r   r      s   >@,
 ; ;
 ; ;
 "))%%!4R 5R "))%%!4V 5V "))%%!4U 5U "))%%!4 

 5
6 "))%%!4
 5

 "))%%!4W 5W "))%%!4
 5

 "))%%!4T 5T "))%%!4
 5

 "))%%!4

 5

 "))%%!4 hh
 5
, "))%%!4
 5

 "))%%!4
 5

 "))%%!4
 5

 "))%%!4T 5T "))%%!4

 5

 "))%%!4EK
 5
 "))%%!4
 5

 "))%%!4
 5

 "))%%!4
 5

 "))%%!4
 5

 "))%%!4Q 5Q "))%%!4' 5'$ "))%%!4T 5T "))%%!4P 5P "))%%!4bjjd6 
 5

 "))%%!4W 5W "))%%!4W 5W "))%%!4
 5

 "))%%!4
 5

 "))%%!4W 5W "))%%!4V 5V "))%%!4
 5

 "))%%!4
 5

 "))%%!4
 5

 "))%%!4Y 5Y "))%%!4R 5R "))%%!4O 5Or   r   c                    t        | d      rt        |       S t        | t              r| S t        | d      rt        | j                        S t        t	        j
                  |             S )af
  
    Construct a new Generator with the default BitGenerator (PCG64).

    Parameters
    ----------
    seed : {None, int, array_like[ints], SeedSequence, BitGenerator, Generator}, optional
        A seed to initialize the `BitGenerator`. If None, then fresh,
        unpredictable entropy will be pulled from the OS. If an ``int`` or
        ``array_like[ints]`` is passed, then it will be passed to
        `SeedSequence` to derive the initial `BitGenerator` state. One may
        also pass in a `SeedSequence` instance.
        Additionally, when passed a `BitGenerator`, it will be wrapped by
        `Generator`. If passed a `Generator`, it will be returned unaltered.

    Returns
    -------
    Generator
        The initialized generator object.

    Notes
    -----
    If ``seed`` is not a `BitGenerator` or a `Generator`, a new
    `BitGenerator` is instantiated. This function does not manage a default
    global instance.

    Examples
    --------
    ``default_rng`` is the recommended constructor for the random number
    class ``Generator``. Here are several ways we can construct a random
    number generator using ``default_rng`` and the ``Generator`` class.

    Here we use ``default_rng`` to generate a random float:

    >>> import dask.array as da
    >>> rng = da.random.default_rng(12345)
    >>> print(rng)
    Generator(PCG64)
    >>> rfloat = rng.random().compute()
    >>> rfloat
    array(0.86999885)
    >>> type(rfloat)
    <class 'numpy.ndarray'>

    Here we use ``default_rng`` to generate 3 random integers between 0
    (inclusive) and 10 (exclusive):

    >>> import dask.array as da
    >>> rng = da.random.default_rng(12345)
    >>> rints = rng.integers(low=0, high=10, size=3).compute()
    >>> rints
    array([2, 8, 7])
    >>> type(rints[0])
    <class 'numpy.int64'>

    Here we specify a seed so that we have reproducible results:

    >>> import dask.array as da
    >>> rng = da.random.default_rng(seed=42)
    >>> print(rng)
    Generator(PCG64)
    >>> arr1 = rng.random((3, 3)).compute()
    >>> arr1
    array([[0.91674416, 0.91098667, 0.8765925 ],
           [0.30931841, 0.95465607, 0.17509458],
           [0.99662814, 0.75203348, 0.15038118]])

    If we exit and restart our Python interpreter, we'll see that we
    generate the same random numbers again:

    >>> import dask.array as da
    >>> rng = da.random.default_rng(seed=42)
    >>> arr2 = rng.random((3, 3)).compute()
    >>> arr2
    array([[0.91674416, 0.91098667, 0.8765925 ],
           [0.30931841, 0.95465607, 0.17509458],
           [0.99662814, 0.75203348, 0.15038118]])

    See Also
    --------
    np.random.default_rng
    capsuler   )hasattrr   r   r   r
   default_bit_generator)seeds    r   default_rngr#  |  sZ    d tY	D)	$		'++,,,BB4HIIr   c                     e Zd ZdZd/dZed        Zd0dZ ee	j                  j                  d      d1d       Z ee	j                  j                  d      d1d	       Z ee	j                  j                  d      d1d
       Z ej                   e      5   ee	j                  j                  d      d2d       Zddd        ee	j                  j                  d      d3d       Z ee	j                  j                  d      d1d       Z ee	j                  j                  d      d3d       Z ee	j                  j                  d      d1d       Z ee	j                  j                  d      d4d       Z ee	j                  j                  d      d1d       Z ee	j                  j                  d      d4d       Z ee	j                  j                  d      d4d       Z ee	j                  j                  d      d4d       Z ee	j                  j                  d      d1d       Z ee	j                  j                  d      d1d       Z ee	j                  j                  d      d1d       Z ee	j                  j                  d      d1d       Z ee	j                  j                  d      d1d       Z  ee	j                  j                  d      d4d       Z! ee	j                  j                  d      d1d       Z" ee	j                  j                  d      d        Z# ee	j                  j                  d      d3d       Z$ ee	j                  j                  d      d1d       Z% ee	j                  j                  d      d5d       Z& ee	j                  j                  d      d6d        Z' ee	j                  j                  d      d1d!       Z(e(Z
 ee	j                  j                  d      d3d"       Z) ee	j                  j                  d      d1d#       Z* ee	j                  j                  d      d1d$       Z+ ee	j                  j                  d      d1d%       Z, ee	j                  j                  d      d1d&       Z- ee	j                  j                  d      d1d'       Z. ee	j                  j                  d      d1d(       Z/ ee	j                  j                  d      d1d)       Z0 ee	j                  j                  d      d4d*       Z1 ee	j                  j                  d      d1d+       Z2 ee	j                  j                  d      d1d,       Z3 ee	j                  j                  d      d1d-       Z4 ee	j                  j                  d      d1d.       Z5y# 1 sw Y   xY w)7RandomStatea  
    Mersenne Twister pseudo-random number generator

    This object contains state to deterministically generate pseudo-random
    numbers from a variety of probability distributions.  It is identical to
    ``np.random.RandomState`` except that all functions also take a ``chunks=``
    keyword argument.

    Parameters
    ----------
    seed: Number
        Object to pass to RandomState to serve as deterministic seed
    RandomState: Callable[seed] -> RandomState
        A callable that, when provided with a ``seed`` keyword provides an
        object that operates identically to ``np.random.RandomState`` (the
        default).  This might also be a function that returns a
        ``mkl_random``, or ``cupy.random.RandomState`` object.

    Examples
    --------
    >>> import dask.array as da
    >>> state = da.random.RandomState(1234)  # a seed
    >>> x = state.normal(10, 0.1, size=3, chunks=(2,))
    >>> x.compute()
    array([10.01867852, 10.04812289,  9.89649746])

    See Also
    --------
    np.random.RandomState
    Nc                    t         j                  j                  |      | _        |t        j                  | _        y || _        y r   )r  r   r%  _numpy_stater
   _RandomState)r   r"  r%  s      r   r   zRandomState.__init__  s;    II11$73>3F#// 	LW 	r   c                z    t        | j                        j                  d      d   }t        j                  |      S r'   )r   r(  r)   r-   r.   )r   r+   s     r   r/   zRandomState._backend  s5     !!2!2399#>qA&&}55r   c                :    | j                   j                  |       y r   )r'  r"  )r   r"  s     r   r"  zRandomState.seed  s    t$r   r0   r1   c                &    t        | d||f||d|S r5   r:   r<   s         r   r6   zRandomState.beta  r@   r   c                &    t        | d||f||d|S rB   r:   rD   s         r   rC   zRandomState.binomial  rG   r   c                $    t        | d|f||d|S rI   r:   rK   s        r   rJ   zRandomState.chisquare  rM   r   c           
         t        | ||||d|      \  }}}}}}}}t        t        |j                  ||| j                  ||            S Nr   )rO   r   RandomChoicerQ   r'  )	r   r=   r8   rR   rF   r9   rS   rU   rV   s	            r   rW   zRandomState.choice  s`     (aw1fM	 "QVVVT43D3DgqQ r   c                $    t        | d|f||d|S rY   r:   r[   s        r   rZ   zRandomState.exponential+  r]   r   c                &    t        | d||f||d|S r_   r:   ra   s         r   r`   zRandomState.f1  rd   r   c                &    t        | d||f||d|S rf   r:   rh   s         r   rg   zRandomState.gamma5  rj   r   c                $    t        | d|f||d|S rl   r:   rn   s        r   rm   zRandomState.geometric;  ro   r   c                &    t        | d||f||d|S rq   r:   rs   s         r   rr   zRandomState.gumbel?  ru   r   c                (    t        | d|||f||d|S rw   r:   ry   s          r   rx   zRandomState.hypergeometricE  r}   r   c                &    t        | d||f||d|S r   r:   rs   s         r   r   zRandomState.laplaceR  r   r   c                &    t        | d||f||d|S r   r:   rs   s         r   r   zRandomState.logisticX  r   r   c                &    t        | d||f||d|S r   r:   r   s         r   r   zRandomState.lognormal^  r   r   c                $    t        | d|f||d|S r   r:   rn   s        r   r   zRandomState.logseriesd  ro   r   c                >    t        | d||f||t        |      ffd|S r   r   r   s         r   r   zRandomState.multinomialh  r   r   c                &    t        | d||f||d|S r   r:   rD   s         r   r   zRandomState.negative_binomialu  r   r   c                &    t        | d||f||d|S r   r:   r   s         r   r   z RandomState.noncentral_chisquare{  r   r   c                (    t        | d|||f||d|S r   r:   r   s          r   r   zRandomState.noncentral_f  r   r   c                &    t        | d||f||d|S r   r:   rs   s         r   r   zRandomState.normal  ru   r   c                $    t        | d|f||d|S r   r:   r   s        r   r   zRandomState.pareto  r   r   c                    ddl m} t        |t        j                        rt        |d      }t        j
                  t        |            }| j                  j                  |        |||      S )Nr   r   r3   r   )
r   r   r   r   r   r   r  r   r'  rT   r   s       r   r   zRandomState.permutation  sR    4a(q(A		#a&!!!%(Q&&r   c                $    t        | d|f||d|S r   r:   r   s        r   r   zRandomState.poisson  r   r   c                $    t        | d|f||d|S r   r:   r   s        r   r   zRandomState.power  r   r   c                (    t        | d||f|||d|S )Nrandint)r8   r9   r   r:   )r   r   r   r8   r9   r   r?   s          r   rE  zRandomState.randint  s,    )S$
-1&
QW
 	
r   c                &    t        | d||f||d|S )Nrandom_integersr7   r:   r   s         r   rG  zRandomState.random_integers  s+    #S$
59&
LR
 	
r   c                "    t        | df||d|S )Nrandom_sampler7   r:   r   s       r   rI  zRandomState.random_sample  s    $Td6TVTTr   c                $    t        | d|f||d|S r   r:   r[   s        r   r   zRandomState.rayleigh  r   r   c                "    t        | df||d|S r   r:   r   s       r   r   zRandomState.standard_cauchy  r   r   c                "    t        | df||d|S r   r:   r   s       r   r   z RandomState.standard_exponential  r   r   c                $    t        | d|f||d|S r   r:   r   s        r   r   zRandomState.standard_gamma  r   r   c                "    t        | df||d|S r   r:   r   s       r   r   zRandomState.standard_normal  r   r   c                $    t        | d|f||d|S r   r:   rK   s        r   r   zRandomState.standard_t  r   r   c                "    t        | df||d|S )Ntomaxintr7   r:   r   s       r   rQ  zRandomState.tomaxint  s    $
OfOOOr   c                (    t        | d|||f||d|S r   r:   r   s          r   r   zRandomState.triangular  r   r   c                &    t        | d||f||d|S r   r:   r   s         r   r   zRandomState.uniform  r   r   c                &    t        | d||f||d|S r   r:   r   s         r   r   zRandomState.vonmises  r  r   c                &    t        | d||f||d|S r  r:   r  s         r   r  zRandomState.wald  r  r   c                $    t        | d|f||d|S r
  r:   r   s        r   r  zRandomState.weibull  r  r   c                $    t        | d|f||d|S r  r:   r   s        r   r  zRandomState.zipf  r  r   )NNr   r  )NTNr3   r  r  )NNr3   l)NNr3   )6r#   r  r  r  r   r  r/   r"  r   r  r   r%  r6   rC   rJ   
contextlibsuppressAttributeErrorrW   rZ   r`   rg   rm   rr   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   rE  rG  rI  r   r   r   r   r   r   rQ  r   r   r   r  r  r  r  r   r   r%  r%    s   >
 6 6% "))''A6R 7R "))''A6V 7V "))''A6U 7U 
		^	, 	bii++	:	 
;	( "))''A6
 7

 "))''A6W 7W "))''A6
 7

 "))''A6T 7T "))''A6
 7

 "))''A6

 7

 "))''A6
 7

 "))''A6
 7

 "))''A6
 7

 "))''A6T 7T "))''A6

 7

 "))''A6
 7

 "))''A6
 7

 "))''A6
 7

 "))''A6
 7

 "))''A6Q 7Q "))''A6' 7' "))''A6T 7T "))''A6P 7P "))''A6
 7

 "))''A6
 7

 "))''A6U 7U F"))''A6W 7W "))''A6W 7W "))''A6
 7

 "))''A6
 7

 "))''A6W 7W "))''A6V 7V "))''A6P 7P "))''A6
 7

 "))''A6
 7

 "))''A6
 7

 "))''A6Y 7Y "))''A6R 7R "))''A6O 7Ou s   &WW!r%  c                    t        |       j                  d      d   }t        j                  |      }|j                  j                  |       S r'   )r   r)   r-   r.   r   r#  )bitgenbackend_namebackend_libs      r   _rng_from_bitgenr`    sE     F#))#.q1L)),7K))&11r   c                    | j                   } t        |              } || _         t        |       }|j                  ||      S )N)rS   )statetyper`  rT   )r   r   rS   
state_datarb  s        r   r   r     sA    $$J'D')M$M]+E===&&r   c                    | j                   j                  |      }|D cg c]  } t        |       |       }}|S c c}w r   )	_seed_seqspawnrc  )r]  	n_bitgensseedsr"  bitgenss        r   _spawn_bitgensrk    s@    ""9-E.34d|tF|D!4G4N 5s   <c                    t        |t        j                  j                        r | |      }t	        |      } t        | |      } ||d|i|S )z$Apply random module method with seedr8   )r   r  r   SeedSequencer`  getattr)rngfuncnamer]  r8   argsr?   funcs          r   _apply_random_funcrs    sJ    &"))001V
6
"C3!D+D+F++r   c                b    | t         j                  }  | |      }t        ||      } ||d|i|S )z"Apply RandomState method with seedr8   )r
   r%  rn  )r%  rp  rd  r8   rq  r?   rb  rr  s           r   _apply_randomru    s>    -99
#E5(#D+D+F++r   c                F    t        |       }|j                  ||||||      S )N)r8   rR   rF   rS   rT   )r`  rW   )rd  r=   r8   rR   rF   rS   rT   rb  s           r   _choice_rngrw    s'    Z(E<<gw<WWr   c                V    t        j                  |       }|j                  ||||      S )N)r8   rR   rF   )r
   r%  rW   )rd  r=   r8   rR   rF   rb  s         r   
_choice_rsry  "  s)    #//
;E<<g<;;r   c                8   g }t        |t              rt        | t              rQ| j                  dk(  rt	        d      | j
                  j                  j                         j                  ddd       }nrt        | t              rW|| j
                  j                  dg      n|}	| j
                  j                  j                         j                  dd|	      }nt        d      |}
|dk  rt        d      t        |      }|j                  |j                        }|j                  }|j                   dk7  rt        d	      t#        |      }
|j%                  |       |j'                         d   }|t        |t(              sKt+        ||
      }t-        j.                  |j1                         ddd      st        d      t        |      }n|j                  |j                        }|j                   dk7  rt        d      t#        |      |
k7  rt        d      |j%                  |       |j'                         d   }|d}|dk7  rt        d      t3        ||t,        j4                        }|st#        |d         dkD  rd}t	        |      ||||||||fS )Nr   z3`choice` not supported for cupy-backed `Generator`.r0   r  )r8   rF   zUnknown generator classr   za must be greater than 0za must be one dimensional)likegHz>)rtolatolzprobabilities do not sum to 1zp must be one dimensionalza and p must have the same sizez)axis must be 0 since a is one dimensionalr   z]replace=False is not currently supported for dask.array.choice with multi-chunk output arrays)r   r   r   r+   r   r/   r   r#  rW   r%  array
ValueErrorr   rechunkri   _metandimr   append__dask_keys__r   r   r  isclosesumr   r  )rb  r=   r8   rR   rF   rS   r9   rV   rU   dummy_plen_aerr_msgs               r   rO   rO   '  sX   L!XeY'""f,)I  >>((446==abD=QD{+ 45=enn**A3/aG>>((446==abG=TD677q5788AJIIaggww66Q;899AAOOa  	}!U# QQ'A::aeegqt!< !@AA
A		!''"A66Q;899q6U?>??AOOa |qyDEEfd"**=Fs6!9~) 	
 "'**dGQfdL@@r   r3   r  r   c               l    |t        |t        t        f      s|f}t        t	        | ||||||            S r   )r   tuplelistr   Random)ro  rp  r8   r9   r   rq  r?   s          r   r;   r;   k  s?     
4% ?wsHdFL$G r   c                      e Zd Zg dZddiZed        Zed        Zed        Z	ed        Z
ed        Zd	 Zed
        Zy)r  )ro  distributionr8   r9   r   rq  r?   r   r  c                $    | j                  d      S )Nr?   operandr*   s    r   r?   zRandom.kwargs      ||H%%r   c                    | j                  d      }| j                  d      }|g}t        | }t        ||| j                  j	                  dt
        j                              S )Nr8   r9   r   r~  )r  r   r   r?   getr  r  )r   r8   r9   shapess       r   r9   zRandom.chunks  sZ    ||F#h' (++//'2::6
 	
r   c                   t        t        | j                         }t        | j                  t
              rst        | j                  j                  t        |            }t        |      }|D cg c]  }|j                   }}t        }t        | j                  j                        }nvt        | j                  t              rQt        t        |      | j                  j                        }t        |      }t         }| j                  j"                  }nt%        d      t        || j&                  | j                  | j(                  | j*                        }| j,                   d| }|||||fS c c}w )Nz:Unknown object type: Not a Generator and Not a RandomState-)r  r   r9   r   ro  r   rk  r   r   r   rf  rs  rc  r%  r   r'  ru  r(  	TypeErrorr8   rq  r?   r  )	r   sizesrj  bitgen_token_bitgenfunc_appliergentokennames	            r   _infozRandom._info  s!   Wdkk*+dhh	*$TXX%<%<c%jIG#G,L8?@Ww((@G@-Ltxx../C+.'E
DHH4I4IJG#G,L(L((''CL  tyy$++tyy$++V##$AeW-eS,66 As   .E.c                     | j                   d   S )Nr0   r  r*   s    r   _namezRandom._name      zz!}r   c                     | j                   d   S r/  r  r*   s    r   rj  zRandom.bitgens  r  r   c                   | j                   \  }}}}}t        |gg| j                  D cg c]  }t        t	        |             c}dggt	        | j
                        z  z    }g }t        ||      D ];  \  }	}
|j                  ||| j                  |	|
| j                  | j                  f       = t        t        ||            S c c}w r/  )r  r   r9   ranger   r   zipr  r  rq  r?   dict)r   rj  r  r  r  r  bdkeysvalsr]  r8   s              r   _layerzRandom._layer  s    26**/uc<F
(,4"uSW~4us4CTCT?U7UU

 / 	LFDKK %%IIKK
	 CdO$$% 5s   C
c                    | j                   \  }}}}} ||| j                  |d   dt        | j                  d            z  | j                  | j
                        S )Nr   r   r8   )r  r  r   r  rq  r?   )r   rj  r  r  r  r  s         r   r  zRandom._meta  sZ    26**/uc<AJ3t||F+,,IIKK	
 		
r   N)r#   r  r  _parameters	_defaultsr   r?   r  r9   r  r  rj  r  r  r  r   r   r  r  u  s    K  $I& & 
 
, 7 7,    %2 
 
r   r  c                  j    e Zd Zg dZdddZdZed        Zed        Zed        Z	ed        Z
d
d	Zy)r0  )r  r9   r  _staterR   rF   rS   rT   N)rS   rT   zda.random.choice-c                $    | j                  d      S )Nr9   r  r*   s    r   r9   zRandomChoice.chunks  r  r   c                8    t        t        | j                         S r   )r  r   r9   r*   s    r   r  zRandomChoice.sizes  s    GT[[)**r   c                T    t        t        | j                        | j                        S r   )r   r   r  r  r*   s    r   rd  zRandomChoice.state_data  s     TZZ$++>>r   c                $    | j                  d      S )Nr  )operandsr*   s    r   r  zRandomChoice._meta  s    }}W%%r   c                    t        | j                         | j                  | j                        D ci c]1  \  }}}|t        || j
                  || j                  | j                  f3 c}}}S c c}}}w r   )r  r  rd  r  ry  r  rR   rF   )r   krb  r8   s       r   r  zRandomChoice._layer  sg     #&d&8&8&:DOOTZZ"X
 
5$ 
E4::tT\\466JJ
 	
 
s   6A/returnr  )r#   r  r  r  r  	_funcnamer   r9   r  rd  r  r  r  r   r   r0  r0    sm    	K $/I#I& & + + ? ? & &
r   r0  c                  (    e Zd Zi Zed        ZddZy)rP   c                T    t        | j                  t        | j                              S r   )rk  r  r   r  r*   s    r   rd  z RandomChoiceGenerator.state_data  s    dkk3tzz?;;r   c                   t        | j                         | j                  | j                        D ci c]G  \  }}}|t        || j
                  || j                  | j                  | j                  | j                  fI c}}}S c c}}}w r   )
r  r  rd  r  rw  r  rR   rF   rS   rT   )r   r  r]  r8   s       r   r  zRandomChoiceGenerator._layer  s     $'""$dootzz$
 
  64 

			 	
 	
 
s   ABNr  )r#   r  r  r  r   rd  r  r  r   r   rP   rP     s    I< <
r   rP   zdict[str, RandomState]_cached_statesc                      fd}t        t               j                  |_        t        t               j                  |_        |S )Nc                     t         j                  }t        5  	 t        |   }d d d         t              | i |S # t        $ r t               xt        |<   }Y 8w xY w# 1 sw Y   =xY wr   )r
   backend_cached_states_lockr  KeyErrorr%  rn  )rq  r?   keyrb  attrs       r   wrapperz_make_api.<locals>.wrapper/  sr    %--  	<<&s+	<
 $wud#T4V44  <.9m;s#e<	< 	<s&   A	=AAAAA()rn  r%  r#   r  )r  r  s   ` r   	_make_apir  .  s8    5 {D1::Gk4088GONr   r"  r6   rC   rJ   rW   rZ   r`   rg   rm   rr   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   rI  rE  rG  r   r   r   r   r   r   r   r   r   r  r  r  r   r  )^
__future__r   rY  r-   r   	itertoolsr   r   	threadingr   numpyr  dask._collectionsr   "dask.array._array_expr._collectionr   dask.array._array_expr._ior	   dask.array.backendsr
   dask.array.corer   r   r   dask.array.creationr   dask.array.utilsr   dask.tokenizer   
dask.utilsr   r   r   r   r   r#  r%  r`  r   rk  rs  ru  rw  ry  rO   r;   r  r0  rP   r  __annotations__r  r  r"  r6   rC   rJ   rW   rZ   r`   rg   rm   rr   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   rI  r   rE  rG  r   r   r   r   r   r   r   r   r   r  r  r  r  r   r   <module>r     s   "        , 4 ) 7 G G & ) " Q QbO bOJ\J~WO WOt2',,X
<
AAJ  $Fk
R k
\"
2 "
J
L 
2 *,& +f  Z k"		8	&cN'k"		8	+,
I
Z k"	k"	&12  !78 (	8		8	&
I
'/*	?	#
I
-.Z -. !78 +,-.|$
|$

I
Z 
I
r   