Ë
    7^(h°L  ã                   ó  — d 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 g d	¢Z G d
„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zy)zMHilbert spaces for quantum mechanics.

Authors:
* Brian Granger
* Matt Curry
é    )Úreduce)ÚBasic)ÚS)Úsympify)ÚInterval©Ú
prettyForm)ÚQuantumError)ÚHilbertSpaceErrorÚHilbertSpaceÚTensorProductHilbertSpaceÚTensorPowerHilbertSpaceÚDirectSumHilbertSpaceÚComplexSpaceÚL2Ú	FockSpacec                   ó   — e Zd Zy)r   N)Ú__name__Ú
__module__Ú__qualname__© ó    ú[/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/physics/quantum/hilbert.pyr   r   "   s   „ Ør   r   c                   ó^   — e Zd ZdZd„ Zed„ «       Zd„ Zd„ Zd„ Z	d„ Z
dd	„Zd
„ Zd„ Zd„ Zd„ Zy)r   a†  An abstract Hilbert space for quantum mechanics.

    In short, a Hilbert space is an abstract vector space that is complete
    with inner products defined [1]_.

    Examples
    ========

    >>> from sympy.physics.quantum.hilbert import HilbertSpace
    >>> hs = HilbertSpace()
    >>> hs
    H

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Hilbert_space
    c                 ó0   — t        j                  | «      }|S ©N©r   Ú__new__©ÚclsÚobjs     r   r   zHilbertSpace.__new__>   ó   € Ü�m‰m˜CÓ ˆØˆ
r   c                 ó   — t        d«      ‚)z*Return the Hilbert dimension of the space.z$This Hilbert space has no dimension.)ÚNotImplementedError©Úselfs    r   Ú	dimensionzHilbertSpace.dimensionB   s   € ô "Ð"HÓIÐIr   c                 ó   — t        | |«      S r   ©r   ©r&   Úothers     r   Ú__add__zHilbertSpace.__add__G   s   € Ü$ T¨5Ó1Ð1r   c                 ó   — t        || «      S r   r)   r*   s     r   Ú__radd__zHilbertSpace.__radd__J   s   € Ü$ U¨DÓ1Ð1r   c                 ó   — t        | |«      S r   ©r   r*   s     r   Ú__mul__zHilbertSpace.__mul__M   s   € Ü(¨¨uÓ5Ð5r   c                 ó   — t        || «      S r   r0   r*   s     r   Ú__rmul__zHilbertSpace.__rmul__P   s   € Ü(¨°Ó5Ð5r   Nc                 ó4   — |�t        d«      ‚t        | |«      S )NzNThe third argument to __pow__ is not supported             for Hilbert spaces.)Ú
ValueErrorr   )r&   r+   Úmods      r   Ú__pow__zHilbertSpace.__pow__S   s&   € Øˆ?Üð !ó "ð "ä& t¨UÓ3Ð3r   c                 óL   — |j                   j                  | j                  k(  ryy)zÞIs the operator or state in this Hilbert space.

        This is checked by comparing the classes of the Hilbert spaces, not
        the instances. This is to allow Hilbert Spaces with symbolic
        dimensions.
        TF)Úhilbert_spaceÚ	__class__r*   s     r   Ú__contains__zHilbertSpace.__contains__Y   s"   € ð ×Ñ×(Ñ(¨D¯N©NÒ:Øàr   c                  ó   — y©NÚHr   ©r&   ÚprinterÚargss      r   Ú	_sympystrzHilbertSpace._sympystre   ó   € Ør   c                 ó   — d}t        |«      S r=   r   ©r&   r@   rA   Úustrs       r   Ú_prettyzHilbertSpace._prettyh   ó   € Ø+ˆÜ˜$ÓÐr   c                  ó   — y)Nz\mathcal{H}r   r?   s      r   Ú_latexzHilbertSpace._latexl   ó   € Ør   r   )r   r   r   Ú__doc__r   Úpropertyr'   r,   r.   r1   r3   r7   r;   rB   rG   rJ   r   r   r   r   r   *   sO   „ ñò&ð ñJó ðJò2ò2ò6ò6ó4ò
òò ór   r   c                   óN   — e Zd ZdZd„ Zed„ «       Zed„ «       Zd„ Z	d„ Z
d„ Zd„ Zy	)
r   a%  Finite dimensional Hilbert space of complex vectors.

    The elements of this Hilbert space are n-dimensional complex valued
    vectors with the usual inner product that takes the complex conjugate
    of the vector on the right.

    A classic example of this type of Hilbert space is spin-1/2, which is
    ``ComplexSpace(2)``. Generalizing to spin-s, the space is
    ``ComplexSpace(2*s+1)``.  Quantum computing with N qubits is done with the
    direct product space ``ComplexSpace(2)**N``.

    Examples
    ========

    >>> from sympy import symbols
    >>> from sympy.physics.quantum.hilbert import ComplexSpace
    >>> c1 = ComplexSpace(2)
    >>> c1
    C(2)
    >>> c1.dimension
    2

    >>> n = symbols('n')
    >>> c2 = ComplexSpace(n)
    >>> c2
    C(n)
    >>> c2.dimension
    n

    c                 óŽ   — t        |«      }| j                  |«      }t        |t        «      r|S t        j                  | |«      }|S r   )r   ÚevalÚ
isinstancer   r   )r    r'   Úrr!   s       r   r   zComplexSpace.__new__�   s>   € Ü˜IÓ&ˆ	Ø�H‰H�YÓˆÜ�aœÔØˆHÜ�m‰m˜C Ó+ˆØˆ
r   c                 óZ  — t        |j                  «       «      dk(  r@|j                  r|dkD  s.|t        j                  u s|j
                  st        d|z  «      ‚y y y |j                  «       D ]<  }|j                  rŒ|t        j                  u rŒ#|j
                  rŒ0t        d|z  «      ‚ y )Né   r   zRThe dimension of a ComplexSpace can onlybe a positive integer, oo, or a Symbol: %rzNThe dimension of a ComplexSpace can only contain integers, oo, or a Symbol: %r)ÚlenÚatomsÚ
is_Integerr   ÚInfinityÚ	is_SymbolÚ	TypeError)r    r'   Údims      r   rP   zComplexSpace.eval˜   s¬   € äˆy�‰Ó Ó! QÒ&Ø×(Ò(¨Y¸ª]¸iÌ1Ï:É:Ñ>UØ×"Ò"Üð !Mà"+ñ!,ó -ð -ð #ð ?V¨]ð !—‘Ó(ò +�ØŸ›¨#´·±Ò*;¸s¿}»}Ü#ð %Mà&)ñ%*ó +ð +ñ+r   c                 ó    — | j                   d   S ©Nr   ©rA   r%   s    r   r'   zComplexSpace.dimension§   ó   € à�y‰y˜‰|Ðr   c                 óp   — | j                   j                  ›d |j                  | j                  g|¢­Ž ›d�S )Nú(ú))r:   r   Ú_printr'   r?   s      r   Ú
_sympyreprzComplexSpace._sympyrepr«   s2   € ØŸ>™>×2Ó2Ø)˜7Ÿ>™>¨$¯.©.Ð@¸4Ô@ðBð 	Br   c                 óB   — d |j                   | j                  g|¢­Ž z  S )NzC(%s)©rc   r'   r?   s      r   rB   zComplexSpace._sympystr¯   s!   € Ø˜˜Ÿ™¨¯©Ð>¸Ò>Ñ>Ð>r   c                 ó`   — d} |j                   | j                  g|¢­Ž }t        |«      }||z  S )NÚC)rc   r'   r	   )r&   r@   rA   rF   Ú	pform_expÚ
pform_bases         r   rG   zComplexSpace._pretty²   s5   € Ø+ˆØ"�G—N‘N 4§>¡>Ð9°DÒ9ˆ	Ü Ó%ˆ
Ø˜9Ñ$Ð$r   c                 óB   — d |j                   | j                  g|¢­Ž z  S )Nz\mathcal{C}^{%s}rf   r?   s      r   rJ   zComplexSpace._latex¸   s!   € Ø" ^ W§^¡^°D·N±NÐ%JÀTÒ%JÑJÐJr   N)r   r   r   rL   r   ÚclassmethodrP   rM   r'   rd   rB   rG   rJ   r   r   r   r   r   p   sJ   „ ñò>ð ñ+ó ð+ð ñó ðòBò?ò%óKr   r   c                   óN   — e Zd ZdZd„ Zed„ «       Zed„ «       Zd„ Zd„ Z	d„ Z
d„ Zy	)
r   aË  The Hilbert space of square integrable functions on an interval.

    An L2 object takes in a single SymPy Interval argument which represents
    the interval its functions (vectors) are defined on.

    Examples
    ========

    >>> from sympy import Interval, oo
    >>> from sympy.physics.quantum.hilbert import L2
    >>> hs = L2(Interval(0,oo))
    >>> hs
    L2(Interval(0, oo))
    >>> hs.dimension
    oo
    >>> hs.interval
    Interval(0, oo)

    c                 ón   — t        |t        «      st        d|z  «      ‚t        j                  | |«      }|S )Nz,L2 interval must be an Interval instance: %r)rQ   r   rZ   r   r   )r    Úintervalr!   s      r   r   z
L2.__new__Ñ   s9   € Ü˜(¤HÔ-ÜÐJØñó ð ä�m‰m˜C Ó*ˆØˆ
r   c                 ó"   — t         j                  S r   ©r   rX   r%   s    r   r'   zL2.dimensionØ   ó   € ä�z‰zÐr   c                 ó    — | j                   d   S r]   r^   r%   s    r   ro   zL2.intervalÜ   r_   r   c                 óB   — d |j                   | j                  g|¢­Ž z  S ©NzL2(%s)©rc   ro   r?   s      r   rd   zL2._sympyreprà   ó!   € Ø˜.˜'Ÿ.™.¨¯©Ð>¸Ò>Ñ>Ð>r   c                 óB   — d |j                   | j                  g|¢­Ž z  S ru   rv   r?   s      r   rB   zL2._sympystrã   rw   r   c                 ó8   — t        d«      }t        d«      }||z  S )NÚ2ÚLr   ©r&   r@   rA   ri   rj   s        r   rG   z
L2._prettyæ   s   € Ü˜s“Oˆ	Ü “_ˆ
Ø˜9Ñ$Ð$r   c                 óF   —  |j                   | j                  g|¢­Ž }d|z  S )Nz {\mathcal{L}^2}\left( %s \right)rv   )r&   r@   rA   ro   s       r   rJ   z	L2._latexë   s&   € Ø!�7—>‘> $§-¡-Ð7°$Ò7ˆØ2°XÑ=Ð=r   N)r   r   r   rL   r   rM   r'   ro   rd   rB   rG   rJ   r   r   r   r   r   ¼   sH   „ ñò(ð ñó ðð ñó ðò?ò?ò%ó
>r   r   c                   ó>   — e Zd ZdZd„ Zed„ «       Zd„ Zd„ Zd„ Z	d„ Z
y)	r   aß  The Hilbert space for second quantization.

    Technically, this Hilbert space is a infinite direct sum of direct
    products of single particle Hilbert spaces [1]_. This is a mess, so we have
    a class to represent it directly.

    Examples
    ========

    >>> from sympy.physics.quantum.hilbert import FockSpace
    >>> hs = FockSpace()
    >>> hs
    F
    >>> hs.dimension
    oo

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Fock_space
    c                 ó0   — t        j                  | «      }|S r   r   r   s     r   r   zFockSpace.__new__  r"   r   c                 ó"   — t         j                  S r   rq   r%   s    r   r'   zFockSpace.dimension  rr   r   c                  ó   — y)NzFockSpace()r   r?   s      r   rd   zFockSpace._sympyrepr  s   € Ør   c                  ó   — y©NÚFr   r?   s      r   rB   zFockSpace._sympystr  rC   r   c                 ó   — d}t        |«      S rƒ   r   rE   s       r   rG   zFockSpace._pretty  rH   r   c                  ó   — y)Nz\mathcal{F}r   r?   s      r   rJ   zFockSpace._latex  rK   r   N)r   r   r   rL   r   rM   r'   rd   rB   rG   rJ   r   r   r   r   r   ð   s4   „ ñò,ð ñó ðòòò ór   r   c                   ód   — e Zd ZdZd„ Zed„ «       Zed„ «       Zed„ «       Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zy)r   aæ  A tensor product of Hilbert spaces [1]_.

    The tensor product between Hilbert spaces is represented by the
    operator ``*`` Products of the same Hilbert space will be combined into
    tensor powers.

    A ``TensorProductHilbertSpace`` object takes in an arbitrary number of
    ``HilbertSpace`` objects as its arguments. In addition, multiplication of
    ``HilbertSpace`` objects will automatically return this tensor product
    object.

    Examples
    ========

    >>> from sympy.physics.quantum.hilbert import ComplexSpace, FockSpace
    >>> from sympy import symbols

    >>> c = ComplexSpace(2)
    >>> f = FockSpace()
    >>> hs = c*f
    >>> hs
    C(2)*F
    >>> hs.dimension
    oo
    >>> hs.spaces
    (C(2), F)

    >>> c1 = ComplexSpace(2)
    >>> n = symbols('n')
    >>> c2 = ComplexSpace(n)
    >>> hs = c1*c2
    >>> hs
    C(2)*C(n)
    >>> hs.dimension
    2*n

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Hilbert_space#Tensor_products
    c                 óx   — | j                  |«      }t        |t        «      r|S t        j                  | g|¢­Ž }|S r   ©rP   rQ   r   r   ©r    rA   rR   r!   s       r   r   z!TensorProductHilbertSpace.__new__H  ó6   € Ø�H‰H�T‹NˆÜ�aœÔØˆHÜ�m‰m˜CÐ' $Ò'ˆØˆ
r   c                 óh  — g }d}|D ]e  }t        |t        «      r|j                  |j                  «       d}Œ1t        |t        t
        f«      r|j                  |«       ŒYt        d|z  «      ‚ g }d}|D ]ì  }|�ãt        |t
        «      rPt        |t
        «      r@|j                  |j                  k(  r'|j                  |j                  |j                  z   z  }Œet        |t
        «      r"|j                  |k(  r||j                  dz   z  }Œ—t        |t
        «      r"||j                  k(  r||j                  dz   z  }ŒÉ||k(  r|dz  }ŒÔ|j                  |«       |}Œè|�Œë|}Œî |j                  |«       |rt        |Ž S t        |«      dk(  r&t        |d   j                  |d   j                  «      S y)úEvaluates the direct product.FTzQHilbert spaces can only be multiplied by                 other Hilbert spaces: %rNrT   é   r   )rQ   r   ÚextendrA   r   r   ÚappendrZ   ÚbaseÚexprU   )r    rA   Únew_argsÚrecallÚargÚ	comb_argsÚprev_argÚnew_args           r   rP   zTensorProductHilbertSpace.evalO  s¥  € ð ˆØˆàò 	1ˆCÜ˜#Ô8Ô9Ø—‘ §¡Ô)Ø‘Ü˜C¤,Ô0GÐ!HÔIØ—‘ Õ$äð !*Ø,/ñ!0ó 1ð 1ð	1ð ˆ	ØˆØò 	#ˆGØÐ#Ü˜gÔ'>Ô?Ü˜xÔ)@ÔAØŸ™¨¯©Ò5Ø&Ÿ|™|¨g¯k©k¸H¿L¹LÑ.HÑI‘HÜ Ô)@ÔAØŸ™¨Ò0Ø'¨'¯+©+¸©/Ñ:‘HÜ Ô*AÔBØ 8§=¡=Ò0Ø&¨¯©¸Ñ)9Ñ:‘HØ Ò(Ø&¨™z‘Hà×$Ñ$ XÔ.Ø&‘HØÑ!Ø"‘ð%	#ð& 	×Ñ˜Ô"ÙÜ,¨iÐ8Ð8Ü�‹^˜qÒ Ü*¨9°Q©<×+<Ñ+<¸iÈ¹l×>NÑ>NÓOÐOàr   c                 ó°   — | j                   D �cg c]  }|j                  ‘Œ }}t        j                  |v rt        j                  S t	        d„ |«      S c c}w )Nc                 ó   — | |z  S r   r   ©ÚxÚys     r   ú<lambda>z5TensorProductHilbertSpace.dimension.<locals>.<lambda>‚  s
   €  q¨¡s€ r   ©rA   r'   r   rX   r   ©r&   r•   Úarg_lists      r   r'   z#TensorProductHilbertSpace.dimension|  sF   € à-1¯Y©YÖ7 c�C—M“MÐ7ˆÐ7Ü�:‰:˜Ñ!Ü—:‘:ÐäÑ*¨HÓ5Ð5ùò	 8ó   �Ac                 ó   — | j                   S )z5A tuple of the Hilbert spaces in this tensor product.r^   r%   s    r   Úspacesz TensorProductHilbertSpace.spaces„  ó   € ð �y‰yÐr   c                 óž   — g }| j                   D ];  } |j                  |g|¢­Ž }t        |t        «      rd|z  }|j	                  |«       Œ= |S )Nz(%s))rA   rc   rQ   r   r�   )r&   r@   rA   Úspaces_strsr•   Úss         r   Ú_spaces_printerz)TensorProductHilbertSpace._spaces_printer‰  sY   € ØˆØ—9‘9ò 	"ˆCØ�—‘˜sÐ* TÒ*ˆAÜ˜#Ô4Ô5Ø˜Q‘J�Ø×Ñ˜qÕ!ð		"ð
 Ðr   c                 óP   —  | j                   |g|¢­Ž }ddj                  |«      z  S )NzTensorProductHilbertSpace(%s)ú,©r©   Újoin)r&   r@   rA   Úspaces_reprss       r   rd   z$TensorProductHilbertSpace._sympyrepr’  s-   € Ø+�t×+Ñ+¨GÐ;°dÒ;ˆØ.°·±¸,Ó1GÑGÐGr   c                 óJ   —  | j                   |g|¢­Ž }dj                  |«      S )NÚ*r¬   )r&   r@   rA   r§   s       r   rB   z#TensorProductHilbertSpace._sympystr–  s(   € Ø*�d×*Ñ*¨7Ð:°TÒ:ˆØ�x‰x˜Ó$Ð$r   c                 óä  — t        | j                  «      } |j                  dg|¢­Ž }t        |«      D ]¹  } |j                  | j                  |   g|¢­Ž }t	        | j                  |   t
        t        f«      rt        |j                  dd¬«      Ž }t        |j                  |«      Ž }||dz
  k7  sŒ|j                  rt        |j                  d«      Ž }Œ£t        |j                  d«      Ž }Œ» |S )NÚ ra   rb   ©ÚleftÚrightrT   u    â¨‚ z x ©rU   rA   rc   ÚrangerQ   r   r   r	   Úparensrµ   Ú_use_unicode©r&   r@   rA   ÚlengthÚpformÚiÚ
next_pforms          r   rG   z!TensorProductHilbertSpace._prettyš  så   € Ü�T—Y‘Y“ˆØ�—‘˜rÐ) DÒ)ˆÜ�v“ò 	<ˆAØ'˜Ÿ™¨¯	©	°!©Ð<°tÒ<ˆJÜ˜$Ÿ)™) A™,Ô)>Ü3ð)5ô 6ä'Ø×&Ñ&¨C°sÐ&Ó;ð�
ô  §¡¨JÓ 7Ð8ˆEØ�F˜Q‘J‹Ø×'Ò'Ü&¨¯©Ð4bÓ(cÐd‘Eä&¨¯©°EÓ(:Ð;‘Eð	<ð ˆr   c                 ó
  — t        | j                  «      }d}t        |«      D ]]  } |j                  | j                  |   g|¢­Ž }t	        | j                  |   t
        t        f«      rd|z  }||z   }||dz
  k7  sŒY|dz   }Œ_ |S )Nr²   ú\left(%s\right)rT   z\otimes ©rU   rA   r·   rc   rQ   r   r   ©r&   r@   rA   r»   r¨   r½   Úarg_ss          r   rJ   z TensorProductHilbertSpace._latex¬  s�   € Ü�T—Y‘Y“ˆØˆÜ�v“ò 	$ˆAØ"�G—N‘N 4§9¡9¨Q¡<Ð7°$Ò7ˆEÜ˜$Ÿ)™) A™,Ô)>Ü*ð),ô -à*¨UÑ2�Ø�E‘	ˆAØ�F˜Q‘J‹Ø˜‘O‘ð	$ð ˆr   N)r   r   r   rL   r   rl   rP   rM   r'   r¤   r©   rd   rB   rG   rJ   r   r   r   r   r     sd   „ ñ(òTð ñ*ó ð*ðX ñ6ó ð6ð ñó ðòòHò%òó$r   r   c                   ó^   — e Zd ZdZd„ Zed„ «       Zed„ «       Zed„ «       Z	d„ Z
d„ Zd„ Zd	„ Zy
)r   aÌ  A direct sum of Hilbert spaces [1]_.

    This class uses the ``+`` operator to represent direct sums between
    different Hilbert spaces.

    A ``DirectSumHilbertSpace`` object takes in an arbitrary number of
    ``HilbertSpace`` objects as its arguments. Also, addition of
    ``HilbertSpace`` objects will automatically return a direct sum object.

    Examples
    ========

    >>> from sympy.physics.quantum.hilbert import ComplexSpace, FockSpace

    >>> c = ComplexSpace(2)
    >>> f = FockSpace()
    >>> hs = c+f
    >>> hs
    C(2)+F
    >>> hs.dimension
    oo
    >>> list(hs.spaces)
    [C(2), F]

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Hilbert_space#Direct_sums
    c                 óx   — | j                  |«      }t        |t        «      r|S t        j                  | g|¢­Ž }|S r   r‰   rŠ   s       r   r   zDirectSumHilbertSpace.__new__Ø  r‹   r   c                 óè   — g }d}|D ]_  }t        |t        «      r|j                  |j                  «       d}Œ1t        |t        «      r|j                  |«       ŒSt        d|z  «      ‚ |rt        |Ž S y)r�   FTzOHilbert spaces can only be summed with other                 Hilbert spaces: %rN)rQ   r   r�   rA   r   r�   rZ   )r    rA   r“   r”   r•   s        r   rP   zDirectSumHilbertSpace.evalß  s€   € ð ˆØˆàò 	+ˆCÜ˜#Ô4Ô5Ø—‘ §¡Ô)Ø‘Ü˜C¤Ô.Ø—‘ Õ$äð !$Ø&)ñ!*ó +ð +ð	+ñ Ü(¨(Ð3Ð3àr   c                 ó°   — | j                   D �cg c]  }|j                  ‘Œ }}t        j                  |v rt        j                  S t	        d„ |«      S c c}w )Nc                 ó   — | |z   S r   r   r›   s     r   rž   z1DirectSumHilbertSpace.dimension.<locals>.<lambda>ù  s
   €  q¨1¡u€ r   rŸ   r    s      r   r'   zDirectSumHilbertSpace.dimensionó  sF   € à-1¯Y©YÖ7 c�C—M“MÐ7ˆÐ7Ü�:‰:˜Ñ!Ü—:‘:ÐäÑ,¨hÓ7Ð7ùò	 8r¢   c                 ó   — | j                   S )z1A tuple of the Hilbert spaces in this direct sum.r^   r%   s    r   r¤   zDirectSumHilbertSpace.spacesû  r¥   r   c                 óˆ   — | j                   D �cg c]  } |j                  |g|¢­Ž ‘Œ }}ddj                  |«      z  S c c}w )NzDirectSumHilbertSpace(%s)r«   ©rA   rc   r­   )r&   r@   rA   r•   r®   s        r   rd   z DirectSumHilbertSpace._sympyrepr   sC   € Ø>B¿i¹iÖH°s˜˜Ÿ™ sÐ2¨TÔ2ÐHˆÐHØ*¨S¯X©X°lÓ-CÑCÐCùò Is   �?c                 ó‚   — | j                   D �cg c]  } |j                  |g|¢­Ž ‘Œ }}dj                  |«      S c c}w )Nú+rË   )r&   r@   rA   r•   r§   s        r   rB   zDirectSumHilbertSpace._sympystr  s>   € Ø=A¿Y¹YÖG°c�~�w—~‘~ cÐ1¨DÔ1ÐGˆÐGØ�x‰x˜Ó$Ð$ùò Hs   �<c                 óä  — t        | j                  «      } |j                  dg|¢­Ž }t        |«      D ]¹  } |j                  | j                  |   g|¢­Ž }t	        | j                  |   t
        t        f«      rt        |j                  dd¬«      Ž }t        |j                  |«      Ž }||dz
  k7  sŒ|j                  rt        |j                  d«      Ž }Œ£t        |j                  d«      Ž }Œ» |S )Nr²   ra   rb   r³   rT   u    âŠ• z + r¶   rº   s          r   rG   zDirectSumHilbertSpace._pretty  så   € Ü�T—Y‘Y“ˆØ�—‘˜rÐ) DÒ)ˆÜ�v“ò 	<ˆAØ'˜Ÿ™¨¯	©	°!©Ð<°tÒ<ˆJÜ˜$Ÿ)™) A™,Ô)>Ü3ð)5ô 6ä'Ø×&Ñ&¨C°sÐ&Ó;ð�
ô  §¡¨JÓ 7Ð8ˆEØ�F˜Q‘J‹Ø×'Ò'Ü&¨¯©Ð4HÓ(IÐJ‘Eä&¨¯©°EÓ(:Ð;‘Eð	<ð ˆr   c                 ó
  — t        | j                  «      }d}t        |«      D ]]  } |j                  | j                  |   g|¢­Ž }t	        | j                  |   t
        t        f«      rd|z  }||z   }||dz
  k7  sŒY|dz   }Œ_ |S )Nr²   rÀ   rT   z\oplus rÁ   rÂ   s          r   rJ   zDirectSumHilbertSpace._latex  s�   € Ü�T—Y‘Y“ˆØˆÜ�v“ò 	#ˆAØ"�G—N‘N 4§9¡9¨Q¡<Ð7°$Ò7ˆEÜ˜$Ÿ)™) A™,Ô)>Ü*ð),ô -à*¨UÑ2�Ø�E‘	ˆAØ�F˜Q‘J‹Ø˜
‘N‘ð	#ð ˆr   N)r   r   r   rL   r   rl   rP   rM   r'   r¤   rd   rB   rG   rJ   r   r   r   r   r   º  s]   „ ñò:ð ñó ðð& ñ8ó ð8ð ñó ðòDò%òó$r   r   c                   ón   — e Zd ZdZd„ Zed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
d„ Zd„ Zd	„ Zd
„ Zy)r   a‹  An exponentiated Hilbert space [1]_.

    Tensor powers (repeated tensor products) are represented by the
    operator ``**`` Identical Hilbert spaces that are multiplied together
    will be automatically combined into a single tensor power object.

    Any Hilbert space, product, or sum may be raised to a tensor power. The
    ``TensorPowerHilbertSpace`` takes two arguments: the Hilbert space; and the
    tensor power (number).

    Examples
    ========

    >>> from sympy.physics.quantum.hilbert import ComplexSpace, FockSpace
    >>> from sympy import symbols

    >>> n = symbols('n')
    >>> c = ComplexSpace(2)
    >>> hs = c**n
    >>> hs
    C(2)**n
    >>> hs.dimension
    2**n

    >>> c = ComplexSpace(2)
    >>> c*c
    C(2)**2
    >>> f = FockSpace()
    >>> c*f*f
    C(2)*F**2

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Hilbert_space#Tensor_products
    c                 ót   — | j                  |«      }t        |t        «      r|S t        j                  | g|¢­Ž S r   r‰   )r    rA   rR   s      r   r   zTensorPowerHilbertSpace.__new__N  s2   € Ø�H‰H�T‹NˆÜ�aœÔØˆHÜ�}‰}˜SÐ% 1Ò%Ð%r   c                 ó²  — |d   t        |d   «      f}|d   }|t        j                  u r|d   S |t        j                  u rt        j                  S t	        |j                  «       «      dk(  r-|j                  r|dk\  s|j                  st        d|z  «      ‚|S |j                  «       D ])  }|j                  rŒ|j                  rŒt        d|z  «      ‚ |S )Nr   rT   zUHilbert spaces can only be raised to                 positive integers or Symbols: %rzJTensor powers can only contain integers                     or Symbols: %r)	r   r   ÚOneÚZerorU   rV   rW   rY   r5   )r    rA   r“   r’   Úpowers        r   rP   zTensorPowerHilbertSpace.evalT  sØ   € à˜‘7œG D¨¡GÓ,Ð,ˆØ�q‰kˆà”!—%‘%‰<Ø˜‘7ˆNà”!—&‘&‰=Ü—5‘5ˆLäˆs�y‰y‹{Ó˜qÒ Ø—N’N s¨a¢x°3·=²=Ü ð "2Ø47ñ"8ó 9ð 9ð ˆð	 Ÿ™›ò -�Ø×(Ó(¨E¯O«OÜ$ð &$Ø&+ñ&,ó -ð -ð-ð ˆr   c                 ó    — | j                   d   S r]   r^   r%   s    r   r‘   zTensorPowerHilbertSpace.basej  r_   r   c                 ó    — | j                   d   S )NrT   r^   r%   s    r   r’   zTensorPowerHilbertSpace.expn  r_   r   c                 ó´   — | j                   j                  t        j                  u rt        j                  S | j                   j                  | j                  z  S r   )r‘   r'   r   rX   r’   r%   s    r   r'   z!TensorPowerHilbertSpace.dimensionr  s;   € à�9‰9×Ñ¤!§*¡*Ñ,Ü—:‘:Ðà—9‘9×&Ñ&¨¯©Ñ0Ð0r   c                 ó€   — d |j                   | j                  g|¢­Ž ›d |j                   | j                  g|¢­Ž ›d�S )NzTensorPowerHilbertSpace(r«   rb   ©rc   r‘   r’   r?   s      r   rd   z"TensorPowerHilbertSpace._sympyrepry  s?   � Ø3A°7·>±>À$Ç)Á)ð 4Ø	ô4Ø�—‘˜tŸx™xÐ/¨$Ô/ð1ð 	1r   c                 ó|   —  |j                   | j                  g|¢­Ž ›d |j                   | j                  g|¢­Ž ›�S )Nz**rÚ   r?   s      r   rB   z!TensorPowerHilbertSpace._sympystr}  s:   € Ø)˜7Ÿ>™>¨$¯)©)Ð;°dÔ;Øˆ�‰�t—x‘xÐ' $Ó'ð)ð 	)r   c                 ó  —  |j                   | j                  g|¢­Ž }|j                  r!t        |j	                  t        d«      «      Ž }n t        |j	                  t        d«      «      Ž } |j                   | j
                  g|¢­Ž }||z  S )Nu   â¨‚rœ   )rc   r’   r¹   r	   r´   r‘   r|   s        r   rG   zTensorPowerHilbertSpace._pretty�  sx   € Ø"�G—N‘N 4§8¡8Ð3¨dÒ3ˆ	Ø×ÒÜ" I§N¡N´:Ð>`Ó3aÓ$bÐc‰Iä" I§N¡N´:¸c³?Ó$CÐDˆIØ#�W—^‘^ D§I¡IÐ5°Ò5ˆ
Ø˜9Ñ$Ð$r   c                 óˆ   —  |j                   | j                  g|¢­Ž } |j                   | j                  g|¢­Ž }d|›d|›d�S )Nú{z}^{\otimes ú}rÚ   )r&   r@   rA   r‘   r’   s        r   rJ   zTensorPowerHilbertSpace._latexŠ  s?   € Øˆw�~‰~˜dŸi™iÐ/¨$Ò/ˆØˆg�n‰n˜TŸX™XÐ-¨Ò-‰Ú'+ªSÐ1Ð1r   N)r   r   r   rL   r   rl   rP   rM   r‘   r’   r'   rd   rB   rG   rJ   r   r   r   r   r   (  sq   „ ñ#òJ&ð ñó ðð* ñó ðð ñó ðð ñ1ó ð1ò1ò)ò%ó2r   r   N)rL   Ú	functoolsr   Úsympy.core.basicr   Úsympy.core.singletonr   Úsympy.core.sympifyr   Úsympy.sets.setsr   Ú sympy.printing.pretty.stringpictr	   Úsympy.physics.quantum.qexprr
   Ú__all__r   r   r   r   r   r   r   r   r   r   r   ú<module>rè      sš   ðñõ å "Ý "Ý &Ý $Ý 7Ý 4ò	€ô 	˜ô 	ôC�5ô CôLIK�<ô IKôX1>ˆô 1>ôh*�ô *ôZZ ô Zôzk˜Lô kô\e2˜lõ e2r   