§
    OŠtjQE  ã                   óÚ   — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZmZmZmZmZmZmZmZ d dlmZ dd„Zd	„ Zd
„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'dS )é    )Úimport_module)ÚMul)ÚInteger)ÚDagger)	ÚXÚYÚZÚHÚCNOTÚIdentityGateÚCGateÚ	PhaseGateÚTGate)Úgenerate_gate_rulesÚgenerate_equivalent_idsÚGateIdentityÚbfs_identity_searchÚis_scalar_sparse_matrixÚis_scalar_nonsparse_matrixÚis_degenerateÚis_reducible)Úskipc                 óz   — t          | ¦  «        t          | ¦  «        t          | ¦  «        t          | ¦  «        f}|S )N)r   r   r	   r
   )ÚqubitÚgatess     úm/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/physics/quantum/tests/test_identitysearch.pyÚcreate_gate_sequencer      s-   € Ýˆu‰XŒX•q˜‘x”x¥ 5¡¤­1¨U©8¬8Ð4€EØ€Ló    c                  óx  — t          ¦   «         \  } }}}t          d¦  «        }t          dt          d¦  «        ¦  «        }t	          | f¦  «        | fdfhk    sJ ‚| | fdf| f| ffh}t	          | | f¦  «        |k    sJ ‚| || fdf|| | fdf| | |fdf|| f| ff| |f| ff|f| | ffh}t	          | || f¦  «        |k    sJ ‚| ||fdf||| fdf|| |fdfd| ||ffd|| |ffd||| ff| f||ff||f| ff|f| |ff|| f|ff|f|| ff| |f|ffh}t	          | ||f¦  «        }||k    sJ ‚d|||| ffd| |||ffd|| ||ffd||| |ff|f||| ff| f|||ff|f| ||ff|f|| |ff|| f||ff| |f||ff||f| |ff||f|| ff|| |f|ff| ||f|ff|||f| ff||| f|ff|| ||fdf| |||fdf|||| fdf||| |fdfh}t	          | |||f¦  «        }||k    sJ ‚d|dz  |dz  | ffd|dz  | |dz  ffd| |dz  |dz  ff|f|dz  | ff|f| |dz  ff| f|dz  |dz  ff|| f|dz  ff||f| ff| |f|dz  ff|| |fdf||| fdf| ||fdfh}t	          | ||f¦  «        }||k    sJ ‚t          d¦  «        |dz  |dz  z  | z  ft          d¦  «        |dz  | z  |dz  z  ft          d¦  «        | |dz  z  |dz  z  f||dz  | z  f|| |dz  z  f| |dz  |dz  z  f|| z  |dz  f||z  | f| |z  |dz  f|| z  |z  t          d¦  «        f||z  | z  t          d¦  «        f| |z  |z  t          d¦  «        fh}t	          | ||fd¬¦  «        }||k    sJ ‚d S )Nr   é   © éÿÿÿÿT©Úreturn_as_muls)r   r   r   r   r   r   )ÚxÚyÚzÚhÚphÚcgate_tÚ
gate_rulesÚactuals           r   Útest_generate_gate_rules_1r-      sv  € å'Ñ)Ô)�L€Qˆˆ1ˆaÝ	�1‰Œ€BÝ�A•u˜Q‘x”xÑ Ô €Gå ˜tÑ$Ô$¨1¨$°¨¨Ò4Ð4Ð4Ð4à�q�6˜2�,Ø�t˜a˜T�lð$€Jå  1˜vÑ&Ô&¨*Ò4Ð4Ð4Ð4à�q˜!�9˜b�/Ø˜1˜a�y "�oØ˜1˜a�y "�oØ˜1�v ˜t�nØ˜1�v ˜t�nØ�t˜a ˜V�nð&€Jõ   1 a˜yÑ)Ô)¨ZÒ7Ð7Ð7Ð7à�q˜!�9˜b�/ Q¨¨1 I¨r ?°a¸¸A°YÀ°OØ˜A˜q !˜9�o¨¨Q°°1¨I ¸¸aÀÀA¸Y¸Ø�t˜a ˜V�n¨¨1 v°¨t n¸°t¸aÀ¸V°nØ˜1�v ˜t�n¨ t¨a°¨V n¸¸1°vÀ¸t°nðF€Jõ ! ! Q¨ Ñ+Ô+€FØ�ZÒÐÐÐð 
ˆa��A�qˆ\Ð˜R ! Q¨¨1 Ð.°°a¸¸A¸q°\Ð0BØ
ˆq�!�Q˜ˆlÐ	˜q˜d Q¨¨1 IÐ.°!°¸¸1¸a°yÐ0AØˆ$��A�q�	Ð	˜a˜T A q¨! 9Ð-°°A°¸¸A¸Ð/?Øˆaˆ&�1�a�&Ð	˜Q ˜F Q¨ FÐ+¨q°!¨f°q¸!°fÐ-=Øˆa�ˆ)�a�TÐ	˜a  A˜Y¨¨Ð-°°A°q°	¸A¸4Ð/@Øˆa�ˆ)�a�TÐ	˜a  A q˜\¨2Ð.°!°Q¸¸1°¸rÐ0BØˆa��Aˆ,˜Ð	˜q ! Q¨˜l¨BÐ/ð1€Jõ ! ! Q¨¨1 Ñ.Ô.€FØ�ZÒÐÐÐà˜ "™ r¨B¡x°Ð3Ð4Ø˜B ™H a¨°2©Ð7Ð8Ø˜A˜w¨™}¨b°2©hÐ7Ð8Ø�z B¨¡H¨a =Ð1Ø�u˜q '¨B¡-Ð0Ð1Ø�t˜g¨™m¨R°"©XÐ6Ð7Ø �| b¨2¡h [Ð1Ø˜G�} q dÐ+Ø˜2�w ¨2¡Ð 0Ð1Ø  BÐ'¨Ð,Ø˜G QÐ'¨Ð,Ø˜2˜wÐ'¨Ð,ð.€Jõ ! ! R¨Ð!1Ñ2Ô2€FØ�ZÒÐÐÐå˜1‘:”:˜w¨™}¨R°"©XÑ5°aÑ7Ð8Ý˜q‘z”z 2¨¡8¨A¡:¨g¸©mÑ#;Ð<Ý˜q‘z”z 1 W¨r¡]¡?°2¸±8Ñ#;Ð<Ø  R¡¨¡
Ð+Ø˜1˜W r™]™?Ð+Ø˜' B™-¨¨R©Ñ0Ð1Ø˜q‘y " r¡(Ð+Ø˜'‘z 1�oØ˜‘t˜W r™]Ð+Ø˜q‘y ‘|¥W¨Q¡Z¤ZÐ0Ø˜'‘z !‘|¥W¨Q¡Z¤ZÐ0Ø˜‘t˜G‘|¥W¨Q¡Z¤ZÐ0ð2€Jõ ! ! R¨Ð!1À$ÐGÑGÔG€FØ�ZÒÐÐÐÐÐr   c                  óX	  — t          ¦   «         \  } }}}t          d¦  «        }t          dt          d¦  «        ¦  «        }| t	          d¦  «        fh}t          | fd¬¦  «        |k    sJ ‚t	          d¦  «        t	          d¦  «        fh}t          | | z  d¬¦  «        |k    sJ ‚dh}t          | | z  d¬¦  «        |k    sJ ‚| |z  | z  t	          d¦  «        f|t	          d¦  «        f|| z  | f| |z  | fh}t          | |z  | z  d¬¦  «        |k    sJ ‚| |z  |z  t	          d¦  «        f||z  | z  t	          d¦  «        f|| z  |z  t	          d¦  «        ft	          d¦  «        | |z  |z  ft	          d¦  «        || z  |z  ft	          d¦  «        ||z  | z  f| ||z  f||z  | f|| |z  f|| z  |f||| z  f| |z  |fh}t          | |z  |z  d¬¦  «        }||k    sJ ‚t	          d¦  «        ||z  |z  | z  ft	          d¦  «        | |z  |z  |z  ft	          d¦  «        || z  |z  |z  ft	          d¦  «        ||z  | z  |z  f|||z  | z  f| ||z  |z  f|| |z  |z  f||| z  |z  f|| z  ||z  f||z  || z  f| |z  ||z  f||z  | |z  f|| z  |z  |f| |z  |z  |f||z  |z  | f||z  | z  |f|| z  |z  |z  t	          d¦  «        f| |z  |z  |z  t	          d¦  «        f||z  |z  | z  t	          d¦  «        f||z  | z  |z  t	          d¦  «        fh}t          | |z  |z  |z  d¬¦  «        }||k    sJ ‚t	          d¦  «        |dz  |dz  z  | z  ft	          d¦  «        |dz  | z  |dz  z  ft	          d¦  «        | |dz  z  |dz  z  f||dz  | z  f|| |dz  z  f| |dz  |dz  z  f|| z  |dz  f||z  | f| |z  |dz  f|| z  |z  t	          d¦  «        f||z  | z  t	          d¦  «        f| |z  |z  t	          d¦  «        fh}t          | |z  |z  d¬¦  «        }||k    sJ ‚d|dz  |dz  | ffd|dz  | |dz  ffd| |dz  |dz  ff|f|dz  | ff|f| |dz  ff| f|dz  |dz  ff|| f|dz  ff||f| ff| |f|dz  ff|| |fdf||| fdf| ||fdfh}t          | |z  |z  ¦  «        }||k    sJ ‚d S )	Nr   r    Tr#   )r!   r!   Fr"   r!   )r   r   r   r   r   r   )	r%   r&   r'   r(   r)   r*   Úexpectedr+   r,   s	            r   Útest_generate_gate_rules_2r0   X   s/  € å'Ñ)Ô)�L€Qˆˆ1ˆaÝ	�1‰Œ€BÝ�A•u˜Q‘x”xÑ Ô €Gð •G˜A‘J”J�Ð €HÝ ˜t°DÐ9Ñ9Ô9¸XÒEÐEÐEÐEå˜‘”�W Q™ZœZÐ(Ð)€HÝ˜q ™s°4Ð8Ñ8Ô8¸HÒDÐDÐDÐDàˆz€HÝ˜q ™s°5Ð9Ñ9Ô9¸XÒEÐEÐEÐEà�Q‘3�q‘5�' !™*œ*Ð%Ø�' !™*œ*�oØ˜‘s˜A�hØ˜‘s˜A�hð €Jõ ˜q ™s 1™u°TÐ:Ñ:Ô:¸jÒHÐHÐHÐHà�Q‘3�q‘5�' !™*œ*Ð%Ø˜‘s˜1‘u�g a™jœjÐ)Ø˜‘s˜1‘u�g a™jœjÐ)Ý˜q‘z”z 1 Q¡3 q¡5Ð)Ý˜q‘z”z 1 Q¡3 q¡5Ð)Ý˜q‘z”z 1 Q¡3 q¡5Ð)Ø˜!˜A™#�hØ˜‘s˜A�hØ˜!˜A™#�hØ˜‘s˜A�hØ˜!˜A™#�hØ˜‘s˜A�hð €Jõ !  1¡ Q¡°tÐ<Ñ<Ô<€FØ�ZÒÐÐÐå˜1‘:”:˜q ™s 1™u Q™wÐ'Ý˜q‘z”z 1 Q¡3 q¡5¨¡7Ð+Ý˜q‘z”z 1 Q¡3 q¡5¨¡7Ð+Ý˜q‘z”z 1 Q¡3 q¡5¨¡7Ð+Ø˜!˜A™#˜a™%�j 1 a¨¡c¨!¡e *Ø˜!˜A™#˜a™%�j 1 a¨¡c¨!¡e *Ø˜‘s˜A˜a™C�j 1 Q¡3¨¨!© *Ø˜‘s˜A˜a™C�j 1 Q¡3¨¨!© *Ø˜‘s˜1‘u˜a�j 1 Q¡3 q¡5¨! *Ø˜‘s˜1‘u˜a�j 1 Q¡3 q¡5¨! *Ø˜‘s˜1‘u˜Q‘w¥¨¡
¤
Ð+Ø˜‘s˜1‘u˜Q‘w¥¨¡
¤
Ð+Ø˜‘s˜1‘u˜Q‘w¥¨¡
¤
Ð+Ø˜‘s˜1‘u˜Q‘w¥¨¡
¤
Ð+ð-€Jõ !  1¡ Q¡ q¡¸Ð>Ñ>Ô>€FØ�ZÒÐÐÐå˜1‘:”:˜w¨™}¨R°"©XÑ5°aÑ7Ð8Ý˜q‘z”z 2¨¡8¨A¡:¨g¸©mÑ#;Ð<Ý˜q‘z”z 1 W¨r¡]¡?°2¸±8Ñ#;Ð<Ø  R¡¨¡
Ð+Ø˜1˜W r™]™?Ð+Ø˜' B™-¨¨R©Ñ0Ð1Ø˜q‘y " r¡(Ð+Ø˜'‘z 1�oØ˜‘t˜W r™]Ð+Ø˜q‘y ‘|¥W¨Q¡Z¤ZÐ0Ø˜'‘z !‘|¥W¨Q¡Z¤ZÐ0Ø˜‘t˜G‘|¥W¨Q¡Z¤ZÐ0ð2€Jõ !  2¡ g¡¸dÐCÑCÔC€FØ�ZÒÐÐÐà˜ "™ r¨B¡x°Ð3Ð4Ø˜B ™H a¨°2©Ð7Ð8Ø˜A˜w¨™}¨b°2©hÐ7Ð8Ø�z B¨¡H¨a =Ð1Ø�u˜q '¨B¡-Ð0Ð1Ø�t˜g¨™m¨R°"©XÐ6Ð7Ø �| b¨2¡h [Ð1Ø˜G�} q dÐ+Ø˜2�w ¨2¡Ð 0Ð1Ø  BÐ'¨Ð,Ø˜G QÐ'¨Ð,Ø˜2˜wÐ'¨Ð,ð.€Jõ !  2¡ g¡Ñ.Ô.€FØ�ZÒÐÐÐÐÐr   c                  ó&  — t          ¦   «         \  } }}}t          | f¦  «        | fhk    sJ ‚t          | | f¦  «        | | fhk    sJ ‚t          | |f¦  «        | |f|| fhk    sJ ‚| ||f}| ||f||| f|| |f||| f|| |f| ||fh}t          |¦  «        |k    sJ ‚t          | ||¦  «        t          ||| ¦  «        t          || |¦  «        t          ||| ¦  «        t          || |¦  «        t          | ||¦  «        h}t          |d¬¦  «        |k    sJ ‚| |||f}| |||f|||| f|| ||f|||| f||| |f|| ||f||| |f| |||fh}t          |¦  «        |k    sJ ‚| || |f}| || |f|| || fh}t          |¦  «        |k    sJ ‚t          d|¦  «        }||||f}||||f||||fh}t          |¦  «        |k    sJ ‚t	          dd¦  «        }t          dt          d¦  «        ¦  «        }||||f}||||f||||f||||f||||fh}t          |¦  «        |k    sJ ‚d S )NTr#   ©r    r    r   ©r   )r   r   r   r   r   r	   )	r%   r&   r'   r(   Úgate_seqÚgate_idsÚcgate_yÚcnotÚcgate_zs	            r   Útest_generate_equivalent_ids_1r9   ­   så  € å'Ñ)Ô)�L€Qˆˆ1ˆaå" A 4Ñ(Ô(¨a¨T¨FÒ2Ð2Ð2Ð2Ý" A q 6Ñ*Ô*°°1¨v¨hÒ6Ð6Ð6Ð6Ý" A q 6Ñ*Ô*°°1¨v¸¸1°vÐ.>Ò>Ð>Ð>Ð>à�1�aˆy€HØ�A�q�	˜A˜q !˜9 q¨!¨Q i°!°Q¸°Ø˜˜1�I  1 a˜yð*€Hå" 8Ñ,Ô,°Ò8Ð8Ð8Ð8å�A�q˜!‘”�c ! Q¨™lœl­C°°1°a©L¬LÝ˜˜1˜a‘L”L¥# a¨¨A¡,¤,µ°A°q¸!±´ð>€Hå" 8¸DÐAÑAÔAÀXÒMÐMÐMÐMà�1�a˜ˆ|€HØ�A�q˜!�˜q ! Q¨˜lØ˜˜1˜a�L 1 a¨¨A ,Ø˜˜1˜a�L 1 a¨¨A ,Ø˜˜1˜a�L 1 a¨¨A ,ð0€Hõ # 8Ñ,Ô,°Ò8Ð8Ð8Ð8à�1�a˜ˆ|€HØ�A�q˜!�˜q ! Q¨˜lÐ+€HÝ" 8Ñ,Ô,°Ò8Ð8Ð8Ð8å�D˜!‰nŒn€GØ�7˜A˜wÐ'€HØ�G˜Q Ð(¨7°A°wÀÐ*BÐC€HÝ" 8Ñ,Ô,°Ò8Ð8Ð8Ð8å��1‰:Œ:€DÝ�D�!˜A™$œ$ÑÔ€GØ�a˜ !Ð$€HØ�q˜' 1Ð%¨¨7°A°tÐ'<Ø˜˜a Ð)¨G°Q¸¸aÐ+@ðB€Hå" 8Ñ,Ô,°Ò8Ð8Ð8Ð8Ð8Ð8r   c            	      óÂ  — t          ¦   «         \  } }}}t          | fd¬¦  «        | hk    sJ ‚t          d¦  «        h}t          | | z  d¬¦  «        |k    sJ ‚| |z  || z  h}t          | |z  d¬¦  «        |k    sJ ‚| |f|| fh}t          | |z  ¦  «        |k    sJ ‚t          | ||fŽ }| |z  |z  ||z  | z  || z  |z  ||z  | z  || z  |z  | |z  |z  h}t          |d¬¦  «        |k    sJ ‚t          | |||fŽ }| |z  |z  |z  ||z  |z  | z  || z  |z  |z  ||z  |z  | z  ||z  | z  |z  || z  |z  |z  ||z  | z  |z  | |z  |z  |z  h}t          |d¬¦  «        |k    sJ ‚t          | || |fŽ }| |z  | z  |z  || z  |z  | z  h}t          |d¬¦  «        |k    sJ ‚t	          d|¦  «        }t          ||||fŽ }||z  |z  |z  ||z  |z  |z  h}t          |d¬¦  «        |k    sJ ‚t          dd¦  «        }t	          dt          d¦  «        ¦  «        }t          ||||fŽ }||z  |z  |z  ||z  |z  |z  ||z  |z  |z  ||z  |z  |z  h}t          |d¬¦  «        |k    sJ ‚d S )NTr#   r    r2   r   r3   )r   r   r   r   r   r   r	   )	r%   r&   r'   r(   r5   Úcircuitr6   r7   r8   s	            r   Útest_generate_equivalent_ids_2r<   Ö   s:  € å'Ñ)Ô)�L€Qˆˆ1ˆaå" A 4¸Ð=Ñ=Ô=À!ÀÒDÐDÐDÐDå˜‘
”
ˆ|€HÝ" 1 Q¡3°tÐ<Ñ<Ô<ÀÒHÐHÐHÐHà�!‘�Q�q‘Sˆz€HÝ" 1 Q¡3°tÐ<Ñ<Ô<ÀÒHÐHÐHÐHà�A�˜˜A˜Ð€HÝ" 1 Q¡3Ñ'Ô'¨8Ò3Ð3Ð3Ð3å�A�q˜!�9ˆo€GØ�!‘�A‘�q˜‘s˜1‘u˜a ™c !™e Q q¡S¨¡UØ�a‘C˜‘E˜1˜Q™3˜q™5ð"€Hå" 7¸4Ð@Ñ@Ô@ÀHÒLÐLÐLÐLå�A�q˜!˜Q�<Ð €GØ�!‘�A‘�a‘˜˜1™˜Q™˜q™Ø�a‘C˜‘E˜!‘G˜Q˜q™S ™U 1™WØ�a‘C˜‘E˜!‘G˜Q˜q™S ™U 1™WØ�a‘C˜‘E˜!‘G˜Q˜q™S ™U 1™Wð&€Hõ # 7¸4Ð@Ñ@Ô@ÀHÒLÐLÐLÐLå�A�q˜!˜Q�<Ð €GØ�!‘�A‘�a‘˜˜1™˜Q™˜q™Ð!€HÝ" 7¸4Ð@Ñ@Ô@ÀHÒLÐLÐLÐLå�D˜!‰nŒn€GÝ�A�w  7Ð+Ð,€GØ�'‘	˜!‘˜GÑ# W¨Q¡Y¨wÑ%6°qÑ%8Ð9€HÝ" 7¸4Ð@Ñ@Ô@ÀHÒLÐLÐLÐLå��1‰:Œ:€DÝ�D�!˜A™$œ$ÑÔ€GÝ�D˜!˜W aÐ(Ð)€GØ�Q‘�w‘˜qÑ  ! G¡)¨A¡+¨dÑ"2Ø�d‘F˜1‘H˜WÑ$ g¨a¡i°¡n°QÑ&6ð8€Hå" 7¸4Ð@Ñ@Ô@ÀHÒLÐLÐLÐLÐLÐLr   c                  ó6  — d} d}t          d¦  «        f}t          || |¦  «        }|du sJ ‚t          d¦  «        }||f}t          || |¦  «        }|du sJ ‚t          d¦  «        }t          d¦  «        }||f}t          || |¦  «        }|du sJ ‚t	          d¦  «        }	|||	f}
t          |
| |¦  «        }|du sJ ‚t          dd¦  «        }||f}t          || |¦  «        }|du sJ ‚t          d¦  «        }||f}t          || |¦  «        }|du sJ ‚t          d¦  «        }|||	|f}t          || |¦  «        }|du sJ ‚d}t          || |¦  «        }|du sJ ‚t          |
| |¦  «        }|du sJ ‚t          || |¦  «        }|du sJ ‚t          || |¦  «        }|du sJ ‚d S )Né   Fr    Tr   )r   r   r   r   r	   r   r
   )Ú	numqubitsÚid_onlyÚid_gater,   Úx0Ú
xx_circuitÚx1Úy1Ú
xy_circuitÚz1Úxyz_circuitr7   Úcnot_circuitr(   Ú
hh_circuitÚh1Úxhzh_circuits                    r   Útest_is_scalar_nonsparse_matrixrM     sù  € Ø€IØ€Gå˜A‰ŒÐ €GÝ'¨°¸GÑDÔD€FØ�Tˆ>ˆ>ˆ>ˆ>å	
ˆ1‰Œ€BØ�b�€JÝ'¨
°I¸wÑGÔG€FØ�Tˆ>ˆ>ˆ>ˆ>å	
ˆ1‰Œ€BÝ	
ˆ1‰Œ€BØ�b�€JÝ'¨
°I¸wÑGÔG€FØ�Uˆ?ˆ?ˆ?ˆ?å	
ˆ1‰Œ€BØ�r˜2�,€KÝ'¨°YÀÑHÔH€FØ�Tˆ>ˆ>ˆ>ˆ>å��1‰:Œ:€DØ˜$�<€LÝ'¨°iÀÑIÔI€FØ�Tˆ>ˆ>ˆ>ˆ>å	ˆ!‰Œ€AØ�Q�€JÝ'¨
°I¸wÑGÔG€FØ�Tˆ>ˆ>ˆ>ˆ>å	
ˆ1‰Œ€BØ˜˜B Ð#€LÝ'¨°iÀÑIÔI€FØ�Tˆ>ˆ>ˆ>ˆ>à€GÝ'¨°iÀÑIÔI€FØ�Tˆ>ˆ>ˆ>ˆ>Ý'¨°YÀÑHÔH€FØ�Uˆ?ˆ?ˆ?ˆ?Ý'¨°iÀÑIÔI€FØ�Tˆ>ˆ>ˆ>ˆ>Ý'¨
°I¸wÑGÔG€FØ�Tˆ>ˆ>ˆ>ˆ>ˆ>ˆ>r   c                  ó”  — t          d¦  «        } | st          d¦  «         t          dddgi¬¦  «        }|st          d¦  «         d}d	}t          d
¦  «        f}t          |||¦  «        du sJ ‚t	          d¦  «        }||f}t          |||¦  «        du sJ ‚t	          d
¦  «        }t          d
¦  «        }||f}	t          |	||¦  «        d	u sJ ‚t          d
¦  «        }
|||
f}t          |||¦  «        du sJ ‚t          d
d¦  «        }||f}t          |||¦  «        du sJ ‚t          d¦  «        }||f}t          |||¦  «        du sJ ‚t          d
¦  «        }|||
|f}t          |||¦  «        du sJ ‚d}t          |||¦  «        du sJ ‚t          |||¦  «        d	u sJ ‚t          |||¦  «        du sJ ‚t          |||¦  «        du sJ ‚d S )NÚnumpyznumpy not installed.ÚscipyÚfromlistÚsparse)Úimport_kwargszscipy not installed.r>   Fr    Tr   )	r   r   r   r   r   r   r	   r   r
   )ÚnprP   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r7   rI   r(   rJ   rK   rL   s                     r   Útest_is_scalar_sparse_matrixrU   4  sF  € Ý	�wÑ	Ô	€BØð %ÝÐ#Ñ$Ô$Ð$å˜'°*¸x¸jÐ1IÐJÑJÔJ€EØð %ÝÐ#Ñ$Ô$Ð$à€IØ€Gå˜A‰ŒÐ €GÝ" 7¨I°wÑ?Ô?À4ÐGÐGÐGÐGå	
ˆ1‰Œ€BØ�b�€JÝ" :¨y¸'ÑBÔBÀdÐJÐJÐJÐJå	
ˆ1‰Œ€BÝ	
ˆ1‰Œ€BØ�b�€JÝ" :¨y¸'ÑBÔBÀeÐKÐKÐKÐKå	
ˆ1‰Œ€BØ�r˜2�,€KÝ" ;°	¸7ÑCÔCÀtÐKÐKÐKÐKå��1‰:Œ:€DØ˜$�<€LÝ" <°¸GÑDÔDÈÐLÐLÐLÐLå	ˆ!‰Œ€AØ�Q�€JÝ" :¨y¸'ÑBÔBÀdÐJÐJÐJÐJõ
 
ˆ1‰Œ€BØ˜˜B Ð#€LÝ" <°¸GÑDÔDÈÐLÐLÐLÐLà€GÝ" <°¸GÑDÔDÈÐLÐLÐLÐLÝ" ;°	¸7ÑCÔCÀuÐLÐLÐLÐLÝ" <°¸GÑDÔDÈÐLÐLÐLÐLÝ" :¨y¸'ÑBÔBÀdÐJÐJÐJÐJÐJÐJr   c                  ó†   — t          ¦   «         \  } }}}t          | ||¦  «        }|h}||| f}t          ||¦  «        du sJ ‚d S )NT)r   r   r   )r%   r&   r'   r(   Úgate_idÚidsÚ
another_ids          r   Útest_is_degeneraterZ   f  sY   € Ý'Ñ)Ô)�L€Qˆˆ1ˆaå˜1˜a Ñ#Ô#€GØˆ)€Cà�Q˜�€JÝ˜˜jÑ)Ô)¨TÐ1Ð1Ð1Ð1Ð1Ð1r   c                  óF  — d} t          ¦   «         \  }}}}|||f}t          || dd¦  «        du sJ ‚|||f}t          || dd¦  «        du sJ ‚||||f}t          || dd¦  «        du sJ ‚||||f}t          || dd¦  «        du sJ ‚|||||f}t          || dd¦  «        du sJ ‚d S )	Nr>   r    é   TFr   é   é   )r   r   )Únqubitsr%   r&   r'   r(   r;   s         r   Útest_is_reducibler`   p  sú   € Ø€GÝ'Ñ)Ô)�L€Qˆˆ1ˆaà�!�Qˆi€GÝ˜ ¨!¨QÑ/Ô/°4Ð7Ð7Ð7Ð7à�!�Qˆi€GÝ˜ ¨!¨QÑ/Ô/°5Ð8Ð8Ð8Ð8à�!�Q˜ˆl€GÝ˜ ¨!¨QÑ/Ô/°4Ð7Ð7Ð7Ð7à�!�Q˜ˆl€GÝ˜ ¨!¨QÑ/Ô/°4Ð7Ð7Ð7Ð7à�!�Q˜˜1ˆo€GÝ˜ ¨!¨QÑ/Ô/°4Ð7Ð7Ð7Ð7Ð7Ð7r   c                  ó 
  — t          g d¦  «        t          ¦   «         k    sJ ‚t          ¦   «         \  } }}}| g}t          | | ¦  «        h}t          |dd¬¦  «        |k    sJ ‚| ||g}t          | | ¦  «        t          ||¦  «        t          ||¦  «        t          | ||¦  «        h}t          |d¦  «        |k    sJ ‚t          | | ¦  «        t          ||¦  «        t          ||¦  «        t          | ||¦  «        t          | || |¦  «        t          | || |¦  «        t          ||||¦  «        h}t          |dd¬¦  «        |k    sJ ‚t          |dd¬¦  «        |k    sJ ‚| |||g}t          | | ¦  «        t          ||¦  «        t          ||¦  «        t          ||¦  «        t          | ||¦  «        t          | || |¦  «        t          | || |¦  «        t          | |||¦  «        t          ||||¦  «        t          ||||¦  «        h
}t          |d¦  «        |k    sJ ‚t          | | ¦  «        t          ||¦  «        t          ||¦  «        t          ||¦  «        h}|t          |ddd¬¦  «        k    sJ ‚t          | | ¦  «        t          ||¦  «        t          ||¦  «        t          ||¦  «        t          | ||¦  «        t          | || |¦  «        t          | || |¦  «        t          | |||¦  «        t          ||||¦  «        t          ||||¦  «        t          | ||| |¦  «        t          | ||||¦  «        t          |||||¦  «        h}t          |dd¬¦  «        |k    sJ ‚t          | | ¦  «        t          ||¦  «        t          ||¦  «        t          ||¦  «        t          | |||¦  «        h}|t          |ddd¬¦  «        k    sJ ‚t	          dd	¦  «        }| |g}t          | | ¦  «        t          ||¦  «        t          | || |¦  «        h}t          |dd¬¦  «        |k    sJ ‚t          d
| ¦  «        }| |g}t          | | ¦  «        t          ||¦  «        t          | || |¦  «        h}t          |dd¬¦  «        |k    sJ ‚t          dt          d¦  «        ¦  «        }|||g}t          ||¦  «        t          ||¦  «        t          ||¦  «        t          ||||¦  «        h}t          |dd¬¦  «        |k    sJ ‚t          d	¦  «        }	t          d	¦  «        }
|	|
g}t          |	|	|	|	¦  «        h}t          |dd¬¦  «        |k    sJ ‚d S )Nr    r>   ©Ú	max_depthr]   r^   r\   T)rc   Úidentity_onlyr   r2   r3   )	r   Úsetr   r   r   r   r	   r   r   )r%   r&   r'   r(   Ú	gate_listÚid_setr7   Úcgate_xr8   ÚsÚts              r   Útest_bfs_identity_searchrk   „  sí  € Ý˜r 1Ñ%Ô%­©¬Ò.Ð.Ð.Ð.å'Ñ)Ô)�L€Qˆˆ1ˆaà�€IÝ˜1˜aÑ Ô Ð!€FÝ˜y¨!°qÐ9Ñ9Ô9¸VÒCÐCÐCÐCð �A�q�	€IÝ˜1˜aÑ Ô Ý˜q !Ñ$Ô$Ý˜q !Ñ$Ô$Ý˜q ! QÑ'Ô'ð)€Fõ ˜y¨!Ñ,Ô,°Ò6Ð6Ð6Ð6å˜1˜aÑ Ô Ý˜q !Ñ$Ô$Ý˜q !Ñ$Ô$Ý˜q ! QÑ'Ô'Ý˜q ! Q¨Ñ*Ô*Ý˜q ! Q¨Ñ*Ô*Ý˜q ! Q¨Ñ*Ô*ð,€Fõ ˜y¨!°qÐ9Ñ9Ô9¸VÒCÐCÐCÐCÝ˜y¨!°qÐ9Ñ9Ô9¸VÒCÐCÐCÐCà�A�q˜!�€IÝ˜1˜aÑ Ô Ý˜q !Ñ$Ô$Ý˜q !Ñ$Ô$Ý˜q !Ñ$Ô$Ý˜q ! QÑ'Ô'Ý˜q ! Q¨Ñ*Ô*Ý˜q ! Q¨Ñ*Ô*Ý˜q ! Q¨Ñ*Ô*Ý˜q ! Q¨Ñ*Ô*Ý˜q ! Q¨Ñ*Ô*ð	,€Fõ ˜y¨!Ñ,Ô,°Ò6Ð6Ð6Ð6å˜1˜aÑ Ô Ý˜q !Ñ$Ô$Ý˜q !Ñ$Ô$Ý˜q !Ñ$Ô$ð&€Fð Õ(¨°AÀØ7;ð=ñ =ô =ò =ð =ð =ð =õ ˜1˜aÑ Ô Ý˜q !Ñ$Ô$Ý˜q !Ñ$Ô$Ý˜q !Ñ$Ô$Ý˜q ! QÑ'Ô'Ý˜q ! Q¨Ñ*Ô*Ý˜q ! Q¨Ñ*Ô*Ý˜q ! Q¨Ñ*Ô*Ý˜q ! Q¨Ñ*Ô*Ý˜q ! Q¨Ñ*Ô*Ý˜q ! Q¨¨1Ñ-Ô-Ý˜q ! Q¨¨1Ñ-Ô-Ý˜q ! Q¨¨1Ñ-Ô-ð/€Fõ ˜y¨!°qÐ9Ñ9Ô9¸VÒCÐCÐCÐCå˜1˜aÑ Ô Ý˜q !Ñ$Ô$Ý˜q !Ñ$Ô$Ý˜q !Ñ$Ô$Ý˜q ! Q¨Ñ*Ô*ð	,€Fð
 Õ(¨°AÀØ7;ð=ñ =ô =ò =ð =ð =ð =õ ��1‰:Œ:€DØ�D�	€IÝ˜1˜aÑ Ô Ý˜t TÑ*Ô*Ý˜q $¨¨4Ñ0Ô0ð2€Fõ ˜y¨!°qÐ9Ñ9Ô9¸VÒCÐCÐCÐCå�D˜!‰nŒn€GØ�G�€IÝ˜1˜aÑ Ô Ý˜w¨Ñ0Ô0Ý˜q '¨1¨gÑ6Ô6ð8€Fõ ˜y¨!°qÐ9Ñ9Ô9¸VÒCÐCÐCÐCå�D�!˜A™$œ$ÑÔ€GØ�w Ð"€IÝ˜1˜aÑ Ô Ý˜w¨Ñ0Ô0Ý˜t TÑ*Ô*Ý˜t Q¨°Ñ3Ô3ð5€Fõ ˜y¨!°qÐ9Ñ9Ô9¸VÒCÐCÐCÐCå�!‰Œ€AÝˆa‰Œ€AØ�A�€IÝ˜1˜a  AÑ&Ô&Ð'€FÝ˜y¨!°qÐ9Ñ9Ô9¸VÒCÐCÐCÐCÐCÐCr   c                  óÒ   — t          d¦  «        } t          d¦  «        }t          | ¦  «        |g}t          t          | ¦  «        ||¦  «        h}t	          |dd¬¦  «        |k    sJ ‚d S )Nr   r    r\   rb   )r   r   r   r   r   )ri   rj   rf   rg   s       r   Útest_bfs_identity_search_xfailrm   ç  sg   € Ý�!‰Œ€AÝˆa‰Œ€AÝ˜‘”˜A�€IÝ�6 !™9œ9 a¨Ñ+Ô+Ð,€FÝ˜y¨!°qÐ9Ñ9Ô9¸VÒCÐCÐCÐCÐCÐCr   Nr3   )(Úsympy.externalr   Úsympy.core.mulr   Úsympy.core.numbersr   Úsympy.physics.quantum.daggerr   Úsympy.physics.quantum.gater   r   r	   r
   r   r   r   r   r   Ú$sympy.physics.quantum.identitysearchr   r   r   r   r   r   r   r   Úsympy.testing.pytestr   r   r-   r0   r9   r<   rM   rU   rZ   r`   rk   rm   r!   r   r   ú<module>ru      s  ðØ (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø /Ð /Ð /Ð /Ð /Ð /ð/ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ðAð Að Að Að Að Að Að Að Að Að Að Að Að Að Að Að Að Að Að Að &Ð %Ð %Ð %Ð %Ð %ðð ð ð ð
B ð B ð B ðJR ð R ð R ðj&9ð &9ð &9ðR)Mð )Mð )MðX/ð /ð /ðd/Kð /Kð /Kðd2ð 2ð 2ð8ð 8ð 8ð(`Dð `Dð `DðFDð Dð Dð Dð Dr   