
     h]                         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     W/var/www/html/Sam_Eipo/venv/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                 v    |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
                    |                    ||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 ({0}) specified)r   anyr   lensetr   rangeziplistr!   r   )r   r!   r   noshapenoaxess   `    r   _init_nd_shape_and_axesr1   )   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***

 
 %
 
 
    K;BB5IIK K 	K $;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)r3   copy)hasattrnpasarrayr3   float16float32kindfloat64newbyteorderflagsarray)r   r3   r7   s      r   	_asfarrayrB   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   r9   ndarrayr8   base)arroriginals     r   _datacopiedrI   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.   r9   zerosr3   )
r   r!   r   	must_copyr
   naxr%   axiszs
             r   
_fix_shaperS   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                 x    |dk     r"t          d                    |                    t          | |f|f          S )Nr   r(   )r   r   rS   )r   rO   rQ   s      r   _fix_shape_1drU      sI    1uu;BB1EEG G 	G 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 argumentrV   zInvalid norm value z,, should be "backward", "ortho" or "forward"N)	_NORM_MAPKeyErrorr   )normrY   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   _workersrf      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_workersrf   r	   r
   rc   ra   )re   old_workerss     r   set_workersrj      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
    ra   r   )rb   rc   r   r   r   rh   rh      s     7-q111r   )N)numbersr   r	   os	threading
contextlibnumpyr9   pypocketfftr   localrc   	cpu_countrd   r   r1   rB   rI   rS   rU   r[   r_   rf   contextmanagerrj   rh   r   r   r   <module>ru      sD          				             " " " " " "
)/

R\^^
   4$ $ $N/ / /(	 	 	  6( ( ( !aA>>	= = =    . . .42 2 2 2 2r   