o
    X۷i                     @  st   d dl mZ d dl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 d dlmZmZ G dd dZe ZdS )    )annotationsN)_util)get_plan_cacheclear_plan_cacheget_plan_cache_sizeset_plan_cache_sizeget_plan_cache_max_memsizeset_plan_cache_max_memsizeshow_plan_cache_info)get_current_callback_managerset_cufft_callbacksc                   @  s   e Zd ZeZeZeZeZeZeZe	Z	e
Z
eZejdddZejdddZejdddZdd	 Zed
d Zejdd Zedd Zejdd Zedd ZdS )
_FFTConfigz"cupy.fft.config.enable_nd_planningT)defaultzcupy.fft.config.use_multi_gpusFzcupy.fft.config.devicesNc                 C  sl   t d t|trdd t|D }nt|ttfr|}ntdt|dkr,td| j	
t| dS )a*  Set the GPUs to be used in multi-GPU FFT.

        Args:
            gpus (int or list of int): The number of GPUs or a list of GPUs
                to be used. For the former case, the first ``gpus`` GPUs
                will be used.

        .. warning::
            This API is currently experimental and may be changed in the future
            version.

        .. seealso:: `Multiple GPU cuFFT Transforms`_

        .. _Multiple GPU cuFFT Transforms:
            https://docs.nvidia.com/cuda/cufft/index.html#multiple-GPU-cufft-transforms
        zcupy.fft.config.set_cufft_gpusc                 S  s   g | ]}|qS  r   ).0ir   r   F/home/ubuntu/vllm_env/lib/python3.10/site-packages/cupy/fft/_config.py
<listcomp>:   s    z-_FFTConfig.set_cufft_gpus.<locals>.<listcomp>z.gpus must be an int or a list or tuple of int.   zMust use at least 2 GPUs.N)r   experimental
isinstanceintrangelisttuple
ValueErrorlen_devicesset)selfgpusdevsr   r   r   set_cufft_gpus&   s   

z_FFTConfig.set_cufft_gpusc                 C  s   t jdtdd | j S NzUenable_nd_planning is deprecated as of CuPy 14 and will always be True in the future.   )
stacklevel)warningswarnDeprecationWarning_enable_nd_planninggetr   r   r   r   enable_nd_planningE   s
   
z_FFTConfig.enable_nd_planningc                 C  s    t jdtdd | j| d S r#   )r&   r'   r(   r)   r   r   valuer   r   r   r,   L   s
   c                 C  s
   | j  S N)_use_multi_gpusr*   r+   r   r   r   use_multi_gpusS   s   
z_FFTConfig.use_multi_gpusc                 C  s   | j t| d S r/   )r0   r   boolr-   r   r   r   r1   W   s   c                 C  s   | j  r
| j S d S r/   )r0   r*   r   r+   r   r   r   devices[   s   z_FFTConfig.devices)__name__
__module____qualname__r   r   r   r   r   r	   r
   r   r   contextvars
ContextVarr)   r0   r   r"   propertyr,   setterr1   r3   r   r   r   r   r      s<    



r   )
__future__r   r7   r&   cupyr   cupy.fft._cacher   r   r   r   r   r	   r
   cupy.fft._callbackr   r   r   configr   r   r   r   <module>   s    $
L