
    _Mh                         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	 ddl
mZmZ g d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)copy_if_needed   )	good_sizeprev_good_size)r   r   set_workersget_workersc                     t          | t                    r| f} 	 d | D             } n)# 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     [/var/www/html/test/jupyter/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)xnamees      r   _iterable_of_intr      s     !V DT***** T T TwDKKKLLRSST Hs   ' 
AAAc                     |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          t          |          t          |          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>5   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>7   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>G   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>L   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>N   s&      
 
 Q1q5
 
 
 
 
 
 r   invalid number of data points () specified)r   anyr   lensetr    rangeziplistr$   tuple)r   r$   r   noshapenoaxess   `    r   _init_nd_shape_and_axesr6   .   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 <<d##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         sdnt          }t          j        | ||          S )zl
    Convert to array with floating or complex dtype.

    float16 values are also promoted to float32.
    dtypefc=ALIGNEDT)r8   copy)hasattrnpasarrayr8   float16float32kindfloat64newbyteorderflagsr   array)r   r8   r<   s      r   	_asfarrayrG   U   s     1g JqMMw"*z!RZ(((	
T	!	!z!RZ((( G  %%Ewy)=44~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>   ndarrayr=   base)arroriginals     r   _datacopiedrN   i   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    r1   r$   r3   r2   r>   zerosr8   )
r   r$   r   	must_copyr   naxr(   axiszs
             r   
_fix_shaperW   u   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   rW   )r   rS   rU   s      r   _fix_shape_1drY      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 argumentrZ   zInvalid norm value z,, should be "backward", "ortho" or "forward"N)	_NORM_MAPKeyErrorr   )normr]   inorms      r   _normalizationrc      si    =$0uua%i0 = = =2$ 2 2 23 38<	==s    7c                     | t          t          dd          S | dk     r5| t           k    r| dt          z   z  } n0t          d|  dt                      | dk    rt          d          | S )Ndefault_workersr   r   z workers value out of range; got z, must not be less than zworkers must not be zero)getattr_config
_cpu_countr   )workerss    r   _workersrj      s    w 11555{{zk!!q:~%GG 9 9 9,6;9 9 : : :	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)r	   rj   r   r   rg   re   )ri   old_workerss     r   r   r      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
    re   r   )rf   rg   r   r   r   r	   r	      s     7-q111r   )N)numbersr   r   os	threading
contextlibnumpyr>   scipy._lib._utilr   pypocketfftr   r   __all__localrg   	cpu_countrh   r   r6   rG   rN   rW   rY   r_   rc   rj   contextmanagerr   r	   r   r   r   <module>ry      sl          				             + + + + + + 3 2 2 2 2 2 2 2 H
G
G
)/

R\^^
   2$$ $$ $$N/ / /(	 	 	  6( ( ( !aA>>	= = =    . . .42 2 2 2 2r   