
    geY                         d dl mZ d dlZd dlZd dlZd dlZd dlZddlm	Z	  ej
                    Z ej                    ZddZd Zd Zd Zd	 Zd
 Zd d dddZd Zd Zej        d             Zd ZdS )    )NumberN   )	good_sizec                     t          | t                    r| f} 	 d | D             } n9# t          $ r,}|pd}t          d                    |                    |d}~ww xY w| S )a  Convert ``x`` to an iterable sequence of int

    Parameters
    ----------
    x : value, or sequence of values, convertible to int
    name : str, optional
        Name of the argument being converted, only used in the error message

    Returns
    -------
    y : ``List[int]``
    c                 6    g | ]}t          j        |          S  )operatorindex).0as     ;lib/python3.11/site-packages/scipy/fft/_pocketfft/helper.py
<listcomp>z$_iterable_of_int.<locals>.<listcomp>    s"    ***1X^A***    valuez+{} must be a scalar or iterable of integersN)
isinstancer   	TypeError
ValueErrorformat)xnamees      r   _iterable_of_intr      s     !V D/***** / / /wF &,,( (-.	//
 Hs   ' 
A'AAc                 X    |du }|du }|st          |d          } fd|D             }t           fd|D                       rt          d          t          t	          |                    t          |          k    rt          d          |st          |d          }|r/t          |          t          |          k    rt          d          |rQt          |           j        k    rt          d	          t           j        t          |          z
   j                  } fd
t          ||          D             }n9|r)t           j	                  }t           j                  }n fd|D             }t          d |D                       rt          d| d          ||fS )z2Handles shape and axes arguments for nd transformsNaxesc                 4    g | ]}|d k     r
|j         z   n|S )r   ndimr   r   r   s     r   r   z+_init_nd_shape_and_axes.<locals>.<listcomp>0   s+    999qa!eeAF

999r   c              3   :   K   | ]}|j         k    p|d k     V  dS )r   Nr   r   s     r   	<genexpr>z*_init_nd_shape_and_axes.<locals>.<genexpr>2   s2      22qAF{#a!e222222r   z$axes exceeds dimensionality of inputzall axes must be uniqueshapezBwhen given, axes and shape arguments have to be of the same lengthz)shape requires more axes than are presentc                 @    g | ]\  }}|d k    rj         |         n|S )r!   )r   sr   r   s      r   r   z+_init_nd_shape_and_axes.<locals>.<listcomp>B   s/    KKK$!QqBwwAKKKr   c                 *    g | ]}j         |         S r   r$   r   s     r   r   z+_init_nd_shape_and_axes.<locals>.<listcomp>G   s    ******r   c              3   "   K   | ]
}|d k     V  dS )r   Nr   )r   r%   s     r   r    z*_init_nd_shape_and_axes.<locals>.<genexpr>I   s&      
 
 Q1q5
 
 
 
 
 
 r   invalid number of data points () specified)
r   anyr   lensetr   rangeziplistr!   )r   r!   r   noshapenoaxess   `    r   _init_nd_shape_and_axesr2   )   s   tmGT\F 8f--9999D9992222T22222 	ECDDDs4yy>>SYY&&6777 + 00 	?CIIU++ > ? ? ? 	65zzAF"" !LMMM#e**,af55DKKKK#eT:J:JKKK	 +QWQV}}****T***

 
 %
 
 
    B@e@@@B B 	B $;r   c                    t          | d          st          j        |           } | j        t          j        k    rt          j        | t          j                  S | j        j        dvrt          j        | t          j                  S | j                            d          }| j	        d          }t          j
        | ||          S )zl
    Convert to array with floating or complex dtype.

    float16 values are also promoted to float32.
    dtypefc=ALIGNED)r4   copy)hasattrnpasarrayr4   float16float32kindfloat64newbyteorderflagsarray)r   r4   r8   s      r   	_asfarrayrC   P   s     1g JqMMw"*z!RZ(((	
T	!	!z!RZ((( G  %%Ewy!!D8AU....r   c                 x    | |u rdS t          |t          j                  st          |d          rdS | j        du S )z|
    Strict check for `arr` not sharing any data with `original`,
    under the assumption that arr = asarray(original)
    F	__array__N)r   r:   ndarrayr9   base)arroriginals     r   _datacopiedrJ   d   sI    
 huh
++ +0N0N u8tr   c                    d}t          d          g| j        z  }t          ||          D ]J\  }}| j        |         |k    rt          d|          ||<   *t          d| j        |                   ||<   d}Kt	          |          }|s
| |         dfS t          | j                  }t          ||          D ]
\  }}|||<   t          j        || j                  }	| |         |	|<   |	dfS )z5Internal auxiliary function for _raw_fft, _raw_fftnd.FNr   T)	slicer   r.   r!   tupler/   r:   zerosr4   )
r   r!   r   	must_copyr
   naxr%   axiszs
             r   
_fix_shaperT   p   s    I 4[[M!& EUD!!  272;!aE"IIa--E"III%LLE xQWAud##  4$
AGAxAeHd7Nr   c                 Z    |dk     rt          d| d          t          | |f|f          S )Nr   r(   r)   )r   rT   )r   rP   rR   s      r   _fix_shape_1drV      sC    1uu<a<<<> > 	> a!w'''r      )Nbackwardorthoforwardc                 t    	 t           |          }|r|nd|z
  S # t          $ r t          d| d          dw xY w)zAReturns the pypocketfft normalization mode from the norm argumentrW   zInvalid norm value z,, should be "backward", "ortho" or "forward"N)	_NORM_MAPKeyErrorr   )normrZ   inorms      r   _normalizationr`      si    =$0uua%i0 = = =2$ 2 2 23 38<	==s    7c                     | t          t          dd          S | dk     rC| t           k    r| dt          z   z  } n>t          d                    | t                               | dk    rt          d          | S )Ndefault_workersr   r   z<workers value out of range; got {}, must not be less than {}zworkers must not be zero)getattr_config
_cpu_countr   r   )workerss    r   _workersrg      s    w 11555{{zk!!q:~%GG --3VGj[-I-IK K K	A3444Nr   c              #      K   t                      }t          t          j        |                     t          _        	 dV  |t          _        dS # |t          _        w xY w)a  Context manager for the default number of workers used in `scipy.fft`

    Parameters
    ----------
    workers : int
        The default number of workers to use

    Examples
    --------
    >>> import numpy as np
    >>> from scipy import fft, signal
    >>> rng = np.random.default_rng()
    >>> x = rng.standard_normal((128, 64))
    >>> with fft.set_workers(4):
    ...     y = signal.fftconvolve(x, x)

    N)get_workersrg   r	   r
   rd   rb   )rf   old_workerss     r   set_workersrk      s[      & --K&x~g'>'>??G."-+----s   A Ac                  .    t          t          dd          S )zReturns the default number of workers within the current context

    Examples
    --------
    >>> from scipy import fft
    >>> fft.get_workers()
    1
    >>> with fft.set_workers(4):
    ...     fft.get_workers()
    4
    rb   r   )rc   rd   r   r   r   ri   ri      s     7-q111r   )N)numbersr   r	   os	threading
contextlibnumpyr:   pypocketfftr   localrd   	cpu_countre   r   r2   rC   rJ   rT   rV   r\   r`   rg   contextmanagerrk   ri   r   r   r   <module>rv      sD          				             " " " " " "
)/

R\^^
   4$ $ $N/ / /(	 	 	  6( ( ( !aA>>	= = =    . . .42 2 2 2 2r   