Ë
    7^(hö%  ã                   ó6  — 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	 d dl
mZmZmZ d dlmZ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 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% d dl&m'Z' d dl(m)Z) d„ Z*d„ Z+d„ Z,d„ Z-d„ Z.d„ Z/d„ Z0d„ Z1d„ Z2d„ Z3d„ Z4y)é    )ÚRational)ÚS)Úsymbols)Úlog)Úimport_module)ÚDensityÚentropyÚfidelity)ÚKetÚ
TimeDepKet)ÚQubit)Ú	represent)ÚDagger)ÚXKetÚPxKetÚPxOpÚXOp)ÚJzKet)ÚOuterProduct)ÚTr)Úsqrt)Úraises)Úscipy_sparse_matrix)ÚTensorProductc            
      óÞ  — t        t        t        d«      dgt        d«      dg«      t        «      sJ ‚t        t        t        d«      dt	        d«      z  gt        d«      dt	        d«      z  g«      t        «      sJ ‚t        t        d«      dt	        d«      z  gt        d«      dt	        d«      z  g«      } | j
                  D ]  \  }}t        |t        «      rŒJ ‚ t        t        d„ «       y )Nr   ç      à?é   Ú00é   Ú11c                  óB   — t        t        d«      gt        d«      g«      S )Nr   r   )r   r   © ó    úf/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/physics/quantum/tests/test_density.pyú<lambda>z test_eval_args.<locals>.<lambda>!   s   € œw¬¨A« x´#°a³&°Ó:€ r#   )Ú
isinstancer   r   r   r   Úargsr   Ú
ValueError)ÚdÚstateÚprobs      r$   Útest_eval_argsr,      sÓ   € ä”gœs 1›v s˜m¬c°!«f°c¨]Ó;¼WÔEÐEÐEÜ”gœu T›{¨A¬d°1«g©IÐ6Ü$ T›{¨A¬d°1«g©IÐ6ó8Ü9@ôBð Bð Bô 	”�t“˜a¤ Q£™iÐ(¬5°«;¸¼$¸q»'¹	Ð*BÓC€AØŸ™ò (‰ˆ�Ü˜%¤Õ'Ð'Ð'ð(ô Œ:Ñ:Õ;r#   c                  óx  — t        d«      \  } }t        dd¬«      \  }}}}}}t        t        «       dgt        «       dg«      }dt        «       t	        t        «       «      z  z  dt        «       t	        t        «       «      z  z  z   |j                  «       k(  sJ ‚t        t        | |z  «      dgt        | |z  «      dg«      }	dt        | |z  «      t	        t        | |z  «      «      z  z  dt        | |z  «      t	        t        | |z  «      «      z  z  z   |	j                  «       k(  sJ ‚t        ||z   |z  dg«      }|j                  «       d|z  |z  t	        |«      z  t	        |«      z  d|z  |z  t	        |«      z  t	        |«      z  z   d|z  |z  t	        |«      z  t	        |«      z  z   d|z  |z  t	        |«      z  t	        |«      z  z   k(  sJ ‚t        |||«      }
t        |
dg«      }|j                  «       dt        |t	        |«      z  |t	        |«      z  |t	        |«      z  «      z  k(  sJ ‚t        ||«      }t        ||«      }t        |dg|dg«      }|j                  «       dt        |t	        |«      z  |t	        |«      z  «      z  dt        |t	        |«      z  |t	        |«      z  «      z  z   k(  sJ ‚t        ||z   dg«      }|j                  «       dt        |t	        |«      z  |t	        |«      z  «      z  dt        |t	        |«      z  |t	        |«      z  «      z  z   dt        |t	        |«      z  |t	        |«      z  «      z  z   dt        |t	        |«      z  |t	        |«      z  «      z  z   k(  sJ ‚t        t        dd«      t        dd«      «      }t        |dg«      }t        |«      }
|
j                  «       dk(  sJ ‚t        |d	g«      }
|
j                  «       t        dd«      t	        t        dd«      «      z  k(  sJ ‚t        |dg«      }
|
j                  «       t        dd«      t	        t        dd«      «      z  k(  sJ ‚t        t        t        j                  t        j                  «      t        t        j                  t        dd
«      «      «      }t        |dg«      }t        |«      }
|
j                  «       dk(  sJ ‚t        |d	g«      }
|
j                  «       t        t        j                  t        dd
«      «      t	        t        t        j                  t        dd
«      «      «      z  k(  sJ ‚t        |dg«      }
|
j                  «       t        t        j                  t        j                  «      t	        t        t        j                  t        j                  «      «      z  k(  sJ ‚y )Núx yzA B C D E FF)Úcommutativer   ç      ð?r   éÿÿÿÿr   r   )r   r   r   r   r   Údoitr   r   r   r   ÚHalfr   )ÚxÚyÚAÚBÚCÚDÚEÚFr)   Ú
d_with_symÚtÚt2Út3Útp1Útp2s                  r$   Ú	test_doitrB   $   s  € ä�5‹>�D€A€qÜ˜}¸%Ô@Ñ€A€qˆ!ˆQ��1Ü”“˜�¤£¨˜~Ó.€AØ”“œ¤£›Ñ(Ñ)Ø”“œœt›v›Ñ&Ñ'ñ(Ø,-¯F©F«Hò5ð 5ð 5ô œ$˜q ™s›) SÐ)¬E°!°A±#«J¸Ð+<Ó=€JØ”�q˜‘s“œF¤5¨¨1©£:Ó.Ñ.Ñ/Ø”�a˜‘c“œ6¤$ q¨¡s£)Ó,Ñ,Ñ-ñ.Ø2<·/±/Ó2CòDð Dð Dô 	�!�a‘%˜‘˜CÐ Ó!€AØ�6‰6‹8˜˜A™˜a™¤ q£	Ñ)¬&°«)Ñ3Ø˜A™˜a™¤ q£	Ñ)¬&°«)Ñ3ñ4à˜A™˜a™¤ q£	Ñ)¬&°«)Ñ3ñ4ð ˜A™˜a™¤ q£	Ñ)¬&°«)Ñ3ñ4ò 5ð 5ð 5ô 	�a˜˜AÓ€AÜ��C�Ó€AØ�6‰6‹8ØŒm˜Aœf Q›i™K¨¬6°!«9©°a¼¸q»	±kÓBÑBòCð Cð Cô 
�q˜!Ó	€BÜ	�q˜!Ó	€Bä��S�	˜B ˜9Ó%€AØ�6‰6‹8˜œm¨A¬f°Q«i©K¸¼6À!»9¹ÓEÑEØœm¨A¬f°Q«i©K¸¼6À!»9¹ÓEÑEñFò Gð Gð Gô 	��b‘˜#�Ó€AØ�6‰6‹8˜œm¨A¬f°Q«i©K¸¼6À!»9¹ÓEÑEØœm¨A¬f°Q«i©K¸¼6À!»9¹ÓEÑEñFàœm¨A¬f°Q«i©K¸¼6À!»9¹ÓEÑEñFð œm¨A¬f°Q«i©K¸¼6À!»9¹ÓEÑEñFò Gð Gð Gô œ˜a ›¤U¨1¨b£\Ó
2€CÜ��a�Ó€Aô 	ˆ1‹€AØ�6‰6‹8�qŠ=Ðˆ=ô 	ˆ1ˆqˆc‹
€AØ�6‰6‹8”u˜Q “|¤f¬U°1°b«\Ó&:Ñ:Ò:Ð:Ð:Ü
ˆ1ˆqˆc‹
€AØ�6‰6‹8”u˜Q “{¤V¬E°!°Q«KÓ%8Ñ8Ò8Ð8Ð8ô œœaŸf™f¤a§f¡fÓ-¬u´Q·V±V¼XÀbÈ!»_Ó/MÓ
N€CÜ��a�Ó€Aô 	ˆ1‹€AØ�6‰6‹8�qŠ=Ðˆ=ô 	ˆ1ˆqˆc‹
€AØ�6‰6‹8”uœQŸV™V¤X¨b°!£_Ó5¼¼uÄQÇVÁVÌXÐVXÐZ[Ë_Ó?]Ó8^Ñ^Ò^Ð^Ð^Ü
ˆ1ˆqˆc‹
€AØ�6‰6‹8”uœQŸV™V¤Q§V¡VÓ,¬v´e¼A¿F¹FÄAÇFÁFÓ6KÓ/LÑLÒLÐLÑLr#   c                  óð   — t        t        d«      dgt        d«      dg«      } | j                  t        «       «      t        t        «       t        d«      z  dgt        «       t        d«      z  dg«      k(  sJ ‚y ©Nr   r   r   )r   r   Úapply_opr   )r)   s    r$   Útest_apply_oprF   j   se   € Ü”�Q“˜�¤ A£¨˜}Ó-€AØ�:‰:”c“eÓ¤¬«¬s°1«v©°sÐ(;Ü),«¬s°1«v©°sÐ(;ó!=ò =ð =ñ =r#   c                  ó^  — t        d«      \  } }t        t        «       dgt        «       dg«      }t	        dt        «       t        t        «       «      z  z  «      t	        dt        «       t        t        «       «      z  z  «      z   t	        |«      k(  sJ ‚t        t        | |z  «      dgt        | |z  «      dg«      }t	        dt        | |z  «      t        t        | |z  «      «      z  z  «      t	        dt        | |z  «      t        t        | |z  «      «      z  z  «      z   t	        |«      k(  sJ ‚t	        dt        «       t        t        «       «      z  z  t        «       ¬«      t	        dt        «       t        t        «       «      z  z  t        «       ¬«      z   t	        |t        «       ¬«      k(  sJ ‚y )Nr.   r   )Úbasis)r   r   r   r   r   r   r   )r4   r5   r)   r<   s       r$   Útest_representrI   p   sj  € Ü�5‹>�D€A€qÜ”“˜�¤£¨˜~Ó.€AÜ�cœ5›7¤6¬%«'£?Ñ2Ñ3Ó4Ü�cœ4›6¤&¬«£.Ñ0Ñ1Ó2ñ3Ü7@À³|òDð Dð Dô œ$˜q ™s›) SÐ)¬E°!°A±#«J¸Ð+<Ó=€JÜ�cœ5  1¡›:¤f¬U°1°Q±3«ZÓ&8Ñ8Ñ9Ó:Ü�cœ4  !¡›9¤V¬D°°1±«IÓ%6Ñ6Ñ7Ó8ñ9ä�*Óòð ð ô
 �cœ4›6¤&¬«£.Ñ0Ñ1¼»Ô@Ü�cœ5›7¤6¬%«'£?Ñ2Ñ3¼4»6ÔBñCä�!œ4›6Ô"ò#ð #ñ #r#   c                  ó°   — t        t        d«      dgt        d«      dg«      } | j                  «       }|d   t        d«      k(  r|d   t        d«      k(  sJ ‚y rD   )r   r   Ústates)r)   rK   s     r$   Útest_statesrL   ‚   sQ   € Ü”�Q“˜�¤ A£¨˜}Ó-€AØ�X‰X‹Z€FØ�!‰9œ˜A›Ò 6¨!¡9´°A³Ò#6Ð6Ð6Ð#6r#   c                  ó0  — t        t        d«      dgt        d«      dg«      } | j                  «       }|d   dk(  r|d   dk(  sJ ‚t        d«      \  }}t        t        d«      |gt        d«      |g«      } | j                  «       }|d   |k(  r|d   |k(  sJ ‚y )Nr   ç      è?r   ç      Ð?r.   )r   r   Úprobsr   )r)   rP   r4   r5   s       r$   Ú
test_probsrQ   ˆ   s™   € Ü”�Q“˜�¤ A£¨˜~Ó.€AØ�G‰G‹I€EØ�‰8�tÒ  a¡¨DÒ 0Ð0Ð0ô �5‹>�D€A€qÜ”�Q“˜�œc !›f a˜[Ó)€AØ�G‰G‹I€EØ�‰8�qŠ=˜U 1™X¨š]Ð*Ð*˜]r#   c                  óð   — t        d«      \  } }t        t        d«      | gt        d«      |g«      }|j                  d«      |j                  d«      f}|d   t        d«      k(  r|d   t        d«      k(  sJ ‚y ©Nr.   r   r   )r   r   r   Ú	get_state)r4   r5   r)   rK   s       r$   Útest_get_staterU   ”   sm   € Ü�5‹>�D€A€qÜ”�Q“˜�œc !›f a˜[Ó)€AØ�k‰k˜!‹n˜aŸk™k¨!›nÐ-€FØ�!‰9œ˜A›Ò 6¨!¡9´°A³Ò#6Ð6Ð6Ð#6r#   c                  óÌ   — t        d«      \  } }t        t        d«      | gt        d«      |g«      }|j                  d«      |j                  d«      f}|d   | k(  r|d   |k(  sJ ‚y rS   )r   r   r   Úget_prob)r4   r5   r)   rP   s       r$   Útest_get_probrX   ›   sb   € Ü�5‹>�D€A€qÜ”�Q“˜�œc !›f a˜[Ó)€AØ�Z‰Z˜‹]˜AŸJ™J q›MÐ*€EØ�‰8�qŠ=˜U 1™X¨š]Ð*Ð*˜]r#   c                  óô  — t        t        j                  t        j                  «      } t        t        j                  t        dd«      «      }t	        | t        j                  f|t        j                  f«      }t        |«      }t        |«      t        d«      dz  k(  sJ ‚|j                  «       t        d«      dz  k(  sJ ‚t        dd¬«      }|rRt        |d¬«      }t        |«      }t        ||j                  «      sJ ‚|j                  dk(  sJ ‚|j                  dk(  sJ ‚t        d	d
dgi¬«      }|rE|rBt        |d¬«      }t        |t        «      sJ ‚|j                  dk(  sJ ‚|j                  dk(  sJ ‚y y y )Nr1   r   Únumpyz1.4.0)Úmin_module_version)Úformatgï9úþB.æ?r   ÚscipyÚfromlistÚsparse)Úimport_kwargszscipy.sparse)r   r   r3   r   r   r	   r   r   r   r&   ÚndarrayÚrealÚimagr   )ÚupÚdownr)   ÚentÚnpÚnp_matr]   Úmats           r$   Útest_entropyrj   ¢   sC  € Ü	Œq�v‰v”q—v‘vÓ	€BÜ”—‘œ " a›Ó)€DÜ�”Q—V‘V�˜t¤Q§V¡V˜nÓ-€Aô �!‹*€CÜ�1‹:œ˜Q› ™Ò!Ð!Ð!Ø�9‰9‹;œ#˜a›& ™(Ò"Ð"Ð"ä	�w°7Ô	;€BÙ	ä˜1 WÔ-ˆÜ�f‹oˆÜ˜& "§*¡*Ô-Ð-Ð-Ø�x‰xÐ.Ò.Ð.Ð.Ø�x‰x˜1Š}Ðˆ}ä˜'°*¸x¸jÐ1IÔJ€EÙ‘ä˜ .Ô1ˆÜ˜#Ô2Ô3Ð3Ð3Ø�x‰xÐ.Ò.Ð.Ð.Ø�x‰x˜1Š}Ð‰}ð €ur#   c                  óF  — t        t        j                  t        j                  «      } t        t        j                  t        dd«      «      }t	        | df|df«      }t        |«      }|j                  «       dk(  sJ ‚ G d„ dt        «      }t        d«      \  }} |dd«      } |dd	«      }t	        |dg|dg«      }|j                  «       dt        ||j                  «      z  dt        ||j                  «      z  z   k(  sJ ‚t        |«      }|j                  «       dk(  sJ ‚y )
Nr1   r   r   r0   c                   ó   — e Zd Zd„ Zy)ú'test_eval_trace.<locals>.TestTimeDepKetc                  ó   — y)Nr   r"   )ÚselfÚbraÚoptionss      r$   Ú_eval_tracez3test_eval_trace.<locals>.TestTimeDepKet._eval_traceÈ   s   € Ør#   N)Ú__name__Ú
__module__Ú__qualname__rr   r"   r#   r$   ÚTestTimeDepKetrm   Ç   s   „ ó	r#   rv   zx tr   r   )r   r   r3   r   r   r   r2   r   r   r   Údual)rd   re   r)   r=   rv   r4   Úk1Úk2s           r$   Útest_eval_tracerz   ¾   s  € Ü	Œq�v‰v”q—v‘vÓ	€BÜ”—‘œ " a›Ó)€DÜ��S�	˜D #˜;Ó'€Aä
ˆ1‹€AØ�6‰6‹8�sŠ?Ðˆ?ôœô ô �5‹>�D€A€qÙ	˜˜3Ó	€BÙ	˜˜1Ó	€BÜ��S�	˜B ˜9Ó%€AØ�6‰6‹8˜œl¨2¨r¯w©wÓ7Ñ7Øœl¨2¨r¯w©wÓ7Ñ7ñ8ò 9ð 9ð 9ô 	ˆ1‹€AØ�6‰6‹8�sŠ?Ð‰?r#   c                  ó®	  ‡‡‡‡— t        t        j                  t        j                  «      } t        t        j                  t        dd«      «      }t        j                  t        d«      z  | z  t        j                  t        d«      z  |z  z   }t        | t        | «      z  «      }t        |t        |«      z  «      }t        |t        |«      z  «      }t        t        ||«      dz
  «      dk  sJ ‚t        ||«      dk  sJ ‚t        t        ||«      t        j                  t        d«      z  z
  «      dk  sJ ‚t        t        ||«      t        j                  t        d«      z  z
  «      dk  sJ ‚t        | dg«      }t        |dg«      }t        |dg«      }t        t        ||«      dz
  «      dk  sJ ‚t        t        ||«      «      dk  sJ ‚t        t        ||«      t        j                  t        d«      z  z
  «      dk  sJ ‚t        t        ||«      t        j                  t        d«      z  z
  «      dk  sJ ‚t        d«      dz  | z  t        j                  |z  z   }t        |dg|dg«      }t        |dg|dg«      }t        t        ||«      d	z
  «      dk  sJ ‚t        t        ||«      t        ||«      z
  «      dk  sJ ‚t        d
«      }	t        d«      }
t        j                  t        d«      z  |	z  t        j                  t        d«      z  |
z  z   }t        t        dd«      «      |	z  t        j                  t        d«      z  |
z  z   }t        |	dg«      }t        |
dg«      }t        |dg«      }t        ||«      dk(  sJ ‚t        ||«      dk(  sJ ‚t        t        ||«      dt        d«      z  z
  «      dk  sJ ‚t        t        ||«      dt        d«      z  z
  «      dk  sJ ‚t        |dg|dg«      }t        |dg|dg«      }t        t        ||«      dz
  «      dk  sJ ‚t        t        ||«      dz
  «      dk  sJ ‚t        t        ||«      t        ||«      z
  «      dk  sJ ‚ddgddgddggŠddgddggŠt        t        ˆˆfd„«       ddgddggŠg d¢g d¢g d¢gŠt        t        ˆˆfd„«       d\  ŠŠt        t        ˆˆfd„«       y )Nr1   r   r   gü©ñÒMbP?r0   é   rO   rN   gƒÀÊ¡E¶ï?Ú0Ú1r   gffffffæ?g333333Ó?gš™™™™™É?gš™™™™™é?g¬Zd;ßï?c                  ó   •— t        ‰ ‰«      S ©N©r
   ©Úmat1Úmat2s   €€r$   r%   ztest_fidelity.<locals>.<lambda>  ó   ø€ œx¨¨dÓ3€ r#   )r   r   r   c                  ó   •— t        ‰ ‰«      S r€   r�   r‚   s   €€r$   r%   ztest_fidelity.<locals>.<lambda>  r…   r#   )r   r   c                  ó   •— t        ‰ ‰«      S r€   r�   )r4   r5   s   €€r$   r%   ztest_fidelity.<locals>.<lambda>!  s   ø€ œx¨¨1›~€ r#   )r   r   r3   r   ÚOner   r   r   Úabsr
   r   r   r   r(   )rd   re   ÚupdownÚup_dmÚdown_dmÚ	updown_dmÚupdown2Úd1Úd2Ústate1Ústate2Ústate3Ústate4Ú	state1_dmÚ	state2_dmÚ	state3_dmrƒ   r„   r4   r5   s                   @@@@r$   Útest_fidelityr˜   Ö   sŠ  û€ ä	Œq�v‰v”q—v‘vÓ	€BÜ”—‘œ " a›Ó)€DÜ�e‰e”D˜“G‰m˜RÑ¤1§5¡5¬¨a«¡=°$Ñ"6Ñ6€Fô �bœ6 "›:‘oÓ&€EÜ˜œv d›|Ñ+Ó,€GÜ˜&¤6¨&£>Ñ1Ó2€IäŒx˜˜uÓ%¨Ñ)Ó*¨TÒ1Ð1Ð1Ü�E˜7Ó# dÒ*Ð*Ð*ÜŒx˜˜yÓ)¬Q¯U©U´4¸³7©]Ñ;Ó<¸tÒCÐCÐCÜŒx˜	 7Ó+¬q¯u©u´T¸!³W©}Ñ=Ó>ÀÒEÐEÐEô �R˜�IÓ€EÜ�t˜S�kÓ"€GÜ˜ ˜Ó&€IäŒx˜˜uÓ%¨Ñ)Ó*¨TÒ1Ð1Ð1ÜŒx˜˜wÓ'Ó(¨4Ò/Ð/Ð/ÜŒx˜˜yÓ)¬Q¯U©U´4¸³7©]Ñ;Ó<¸tÒCÐCÐCÜŒx˜	 7Ó+¬q¯u©u´T¸!³W©}Ñ=Ó>ÀÒEÐEÐEô �1‹g�a‰i˜‰lœQŸV™V D™[Ñ(€GÜ	�&˜$� '¨4 Ó	1€BÜ	�&˜$� '¨4 Ó	1€BÜŒx˜˜BÓ %Ñ'Ó(¨4Ò/Ð/Ð/ÜŒx˜˜BÓ¤(¨2¨rÓ"2Ñ2Ó3°dÒ:Ð:Ð:ô �3‹Z€FÜ�3‹Z€FÜ�U‰U”4˜“7‰]˜6Ñ!¤A§E¡E¬$¨q«'¡M°&Ñ$8Ñ8€FÜ”(˜1˜a“.Ó! &Ñ(¬1¯5©5´°a³©=¸Ñ+?Ñ?€Fä˜ ˜Ó$€IÜ˜ ˜Ó$€IÜ˜ ˜Ó$€Iä�I˜yÓ)¨QÒ.Ð.Ð.Ü�I˜yÓ)¨QÒ.Ð.Ð.ÜŒx˜	 9Ó-°´$°q³'±	Ñ9Ó:¸TÒAÐAÐAÜŒx˜	 9Ó-°´$°q³'±	Ñ9Ó:¸TÒAÐAÐAô 
�&˜$� &¨$ Ó	0€BÜ	�&˜$� &¨$ Ó	0€BÜŒx˜˜BÓ !Ñ#Ó$ tÒ+Ð+Ð+ÜŒx˜˜BÓ %Ñ'Ó(¨4Ò/Ð/Ð/ÜŒx˜˜BÓ¤(¨2¨rÓ"2Ñ2Ó3°dÒ:Ð:Ð:ð �ˆFØ�ˆFØ�ˆFð€Dð �ˆFØ�ˆFð€Dä
Œ:Ô3Ô4ð �ˆFØ�ˆFð€DâÚÚð€Dô Œ:Ô3Ô4ð �D€A€qÜ
Œ:Ô-Õ.r#   N)5Úsympy.core.numbersr   Úsympy.core.singletonr   Úsympy.core.symbolr   Ú&sympy.functions.elementary.exponentialr   Úsympy.externalr   Úsympy.physics.quantum.densityr   r	   r
   Úsympy.physics.quantum.stater   r   Úsympy.physics.quantum.qubitr   Úsympy.physics.quantum.representr   Úsympy.physics.quantum.daggerr   Úsympy.physics.quantum.cartesianr   r   r   r   Úsympy.physics.quantum.spinr   Úsympy.physics.quantum.operatorr   Úsympy.physics.quantum.tracer   Úsympy.functionsr   Úsympy.testing.pytestr   Ú!sympy.physics.quantum.matrixutilsr   Ú#sympy.physics.quantum.tensorproductr   r,   rB   rF   rI   rL   rQ   rU   rX   rj   rz   r˜   r"   r#   r$   ú<module>r«      s|   ðÝ 'Ý "Ý %Ý 6Ý (ß DÑ Dß 7Ý -Ý 5Ý /ß BÓ BÝ ,Ý 7Ý *Ý  Ý 'Ý AÝ =ò<òCMòL=ò#ò$7ò	+ò7ò+òò8ó0K/r#   