
    'i                     D   d 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 ddl	m
Z
 dZd ej                  d      _        d ej                  d	      _        d
Zdee   fdZdZdee   deeef   fdZ ed      dee   fd       ZdedefdZddee
j,                     fdZy)zX
Common utils for testing.
These functions allow testing only some frameworks, not all.
    N)	lru_cache)ListTuple)	_backendszAlex RogozhnikovT
tensorflow
matplotlib)minmaxsummeanprodreturnc                      g } t         j                  j                         }|r7|j                         }||j                         z  }| j	                  |       |r7| D cg c]  }|j
                   c}S c c}w )N)r   AbstractBackend__subclasses__popappendframework_name)backend_subclassesbackendsbackendbs       O/var/www/stems/demucs_env/lib/python3.12/site-packages/einops/tests/__init__.pyfind_names_of_all_frameworksr      sl    ((779H
,,.G**,,!!'*  '99A999s   A4EINOPS_TEST_BACKENDSbackend_namesc                 v    t               }| D ]  }||vst        d|        t        dj                  |       fS )NUnknown framework: ,)r   RuntimeErrorENVVAR_NAMEjoin)r   _known_backendsbackend_names      r   unparse_backendsr%   %   sL    24O% E.!4\NCDDE ///       )maxsizec                      t         t        j                  vrt        dt          d      t        j                  t            j	                  d      } t               }| D ]  }||vst        d|        | S )Nz/Testing frameworks were not specified, env var z not setr   r   )r!   osenvironr    splitr   )parsed_backendsr#   r$   s      r   parse_backends_to_testr.   -   sy    "**$L[MYabccjj-33C8O24O' E.!4\NCDDE r&   r   c                 N    | t               vrt        d|        | t               v S )z8Used to skip test if corresponding backend is not testedzUnknown framework )r   r    r.   )r   s    r   is_backend_testedr0   :   s0    244/y9::,...r&   c                 T   | s|slt         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  g}nUt         j                  t         j
                  t         j                  g}n%|st         j                  g}nt         j                  g}t               }g }|D ](  }|j                  |vr	 |j                   |              * |S # t        $ r t        j                  d| d       Y Rw xY w)z
    :param symbolic: symbolic or imperative frameworks?
    :param layers: layers or operations?
    :return: list of backends satisfying set conditions
    z,backend could not be initialized for tests: r'   )
stacklevel)r   NumpyBackend
JaxBackendTorchBackendTensorflowBackendOneFlowBackendPaddleBackendCupyBackendPyTensorBackendTFKerasBackendr.   r   r   ImportErrorwarningswarn)symboliclayersbackend_typesbackend_names_to_testresultbackend_types         r   collect_test_backendsrE   A   s    &&$$&&++((''%%M &&((''M ))M
 ((M 34F% g&&.CC	gMM,.)	g M	  	g MMHWdef	gs   'D#D'&D')FF)__doc__loggingr*   r=   	functoolsr   typingr   r   einopsr   
__author__	getLoggerdisabledFLOAT_REDUCTIONSstrr   r!   r%   r.   boolr0   r   rE    r&   r   <module>rR      s   
  	    
 ,0   ,  (+/   ,  (8 :d3i : %0DI 0%S/ 0 1	S	 	 	/s /t /,4	@Y@Y;Z ,r&   