§
    �ÅjË  ã                   ó^  — 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     úFC:\Projects\Historical\venv\Lib\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Ô9€HØ
ð +Ø—,’,‘.”.ˆØ�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Ô4€OØ%ð 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Ò3°CÑ8Ô8€OÝ2Ñ4Ô4€OØ'ð 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  € ð ð Øð 	åÔ&ÝÔ$ÝÔ&ÝÔ+ÝÔ(ÝÔ'ÝÔ%ðˆMˆMõ Ô&ÝÔ(ÝÔ'ðˆMˆMð ð 	åÔ)ðˆMˆMõ
 Ô(ðˆMõ 3Ñ4Ô4ÐØ€FØ%ð gð gˆØÔ&Ð.CÐCÐCØð	gØ�MŠM˜,˜,™.œ.Ñ)Ô)Ð)Ð)øÝð 	gð 	gð 	gõ ŒMÐWÈÐWÐWÐdeÐ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Ð ð: d¨3¤ið :ð :ð :ð :ð %€ð0 D¨¤Ið 0°%¸¸S¸´/ð 0ð 0ð 0ð 0ð €�1ÐÑÔð	  S¤	ð 	ð 	ð 	ñ Ôð	ð/˜sð / tð /ð /ð /ð /ð,ð ,¸4À	Ô@YÔ;Zð ,ð ,ð ,ð ,ð ,ð ,r   