
    Pi                     ^   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dS )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                                        }|rB|                                }||                                z  }|                     |           |Bd | D             S )Nc                     g | ]	}|j         
S  )framework_name).0bs     i/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einops/tests/__init__.py
<listcomp>z0find_names_of_all_frameworks.<locals>.<listcomp>   s    999A999    )r   AbstractBackend__subclasses__popappend)backend_subclassesbackendsbackends      r   find_names_of_all_frameworksr      s|    (7799H
 +,,..G**,,,!!'***  + :9&89999r   EINOPS_TEST_BACKENDSbackend_namesc                     t                      }| D ]}||vrt          d|           t          d                    |           fS )NUnknown framework: ,)r   RuntimeErrorENVVAR_NAMEjoin)r!   _known_backendsbackend_names      r   unparse_backendsr*   %   s\    244O% E E..C\CCDDD /////r      )maxsizec                     t           t          j        vrt          dt            d          t          j        t                                        d          } t                      }| D ]}||vr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_testr2   -   s    "*$$b[bbbcccj-33C88O244O' E E..C\CCDDD / r   r   c                 f    | t                      vrt          d|            | t                      v S )z8Used to skip test if corresponding backend is not testedzUnknown framework )r   r%   r2   )r   s    r   is_backend_testedr4   :   s=    24444999:::,....r   Fc                    | sv|sPt           j        t           j        t           j        t           j        t           j        t           j        t           j        g}nAt           j        t           j        t           j        g}n|st           j        g}nt           j	        g}t                      }g }|D ]S}|j        |vr	 |                     |                       +# t          $ r t          j        d| d           Y Pw xY w|S )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TFKerasBackendr2   r   r   ImportErrorwarningswarn)symboliclayersbackend_typesbackend_names_to_testresultbackend_types         r   collect_test_backendsrI   A   s0      	&$&+('%MM &('MM  	)MM
 (M 344F% g g&.CCC	gMM,,..)))) 	g 	g 	g MWWWdeffffff	g Ms   5C#C98C9)FF)__doc__loggingr.   rA   	functoolsr   typingr   r   einopsr   
__author__	getLoggerdisabledFLOAT_REDUCTIONSstrr   r&   r*   r2   boolr4   r   rI   r   r   r   <module>rU      s   
  				                     
 ,0  ,   (+/  ,   (8 :d3i : : : : %0DI 0%S/ 0 0 0 0 1	S	 	 	 	 	/s /t / / / /, ,4	@Y;Z , , , , , ,r   