K iLdZddlmZddlmZddlmZddlmZddl m Z ddl m Z ddl mZgd ZGd d eZGd d eZGddeZGddeZGddeZGddeZGddeZGddeZy)zMHilbert spaces for quantum mechanics. Authors: * Brian Granger * Matt Curry )reduce)Basic)S)sympify)Interval prettyForm) QuantumError)HilbertSpaceError HilbertSpaceTensorProductHilbertSpaceTensorPowerHilbertSpaceDirectSumHilbertSpace ComplexSpaceL2 FockSpacec eZdZy)r N)__name__ __module__ __qualname__c/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/physics/quantum/hilbert.pyr r "srr c^eZdZdZdZedZdZdZdZ dZ dd Z d Z d Z d Zd Zy)r aAn 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 c0tj|}|SNr__new__clsobjs rrzHilbertSpace.__new__>mmC  rctd)z*Return the Hilbert dimension of the space.z$This Hilbert space has no dimension.)NotImplementedErrorselfs r dimensionzHilbertSpace.dimensionBs""HIIrct||Srrr&others r__add__zHilbertSpace.__add__Gs$T511rct||Srr)r*s r__radd__zHilbertSpace.__radd__Js$UD11rct||Srr r*s r__mul__zHilbertSpace.__mul__Ms(u55rct||Srr0r*s r__rmul__zHilbertSpace.__rmul__Ps(55rNc4| tdt||S)NzNThe third argument to __pow__ is not supported for Hilbert spaces.) ValueErrorr)r&r+mods r__pow__zHilbertSpace.__pow__Ss& ?!" "&tU33rcL|jj|jk(ryy)zIs 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__zHilbertSpace.__contains__Ys"    ( (DNN :rcyNHrr&printerargss r _sympystrzHilbertSpace._sympystrercd}t|Sr=rr&r@rAustrs r_prettyzHilbertSpace._prettyh+$rcy)Nz \mathcal{H}rr?s r_latexzHilbertSpace._latexlrr)rrr__doc__rpropertyr'r,r.r1r3r7r;rBrGrJrrrr r *sO&JJ22664  rr cNeZdZdZdZedZedZdZ dZ dZ dZ y ) ra%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 ct|}|j|}t|tr|Stj||}|Sr)reval isinstancerr)r r'rr!s rrzComplexSpace.__new__s>I& HHY  a HmmC+ rcZt|jdk(r@|jr|dkDs.|tjus|j st d|zyyy|jD]<}|jr|tjur#|j r0t d|zy)NrzRThe 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)lenatoms is_IntegerrInfinity is_Symbol TypeError)r r'dims rrPzComplexSpace.evals y !Q &((Y]i1::>U""!M"+!,--#?V] !( +#*;s}}#%M&)%*++ +rc |jdSNrrAr%s rr'zComplexSpace.dimensionyy|rcp|jjd|j|jg|dS)N())r:r_printr'r?s r _sympyreprzComplexSpace._sympyreprs2>>22)7>>$..@4@B BrcBd|j|jg|zS)NzC(%s)rcr'r?s rrBzComplexSpace._sympystrs!>>>>rc`d}|j|jg|}t|}||zS)NC)rcr'r )r&r@rArF pform_exp pform_bases rrGzComplexSpace._prettys5+"GNN4>>9D9 % 9$$rcBd|j|jg|zS)Nz\mathcal{C}^{%s}rfr?s rrJzComplexSpace._latexs!"^W^^DNN%JT%JJJrN) rrrrLr classmethodrPrMr'rdrBrGrJrrrrrpsJ> + +B?% KrrcNeZdZdZdZedZedZdZdZ dZ dZ y ) raThe 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) cnt|tstd|ztj||}|S)Nz,L2 interval must be an Interval instance: %r)rQrrZrr)r intervalr!s rrz L2.__new__s9(H-J mmC* rc"tjSrrrXr%s rr'z L2.dimension zzrc |jdSr]r^r%s rroz L2.intervalr_rcBd|j|jg|zSNzL2(%s)rcror?s rrdz L2._sympyrepr!.'..>>>>rcBd|j|jg|zSrurvr?s rrBz L2._sympystrrwrc8td}td}||zS)N2Lrr&r@rArirjs rrGz L2._prettyssO _ 9$$rcF|j|jg|}d|zS)Nz {\mathcal{L}^2}\left( %s \right)rv)r&r@rAros rrJz L2._latexs&!7>>$--7$72X==rN) rrrrLrrMr'rordrBrGrJrrrrrsH(??% >rrc>eZdZdZdZedZdZdZdZ dZ y) raThe 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 c0tj|}|Srrrs rrzFockSpace.__new__r"rc"tjSrrqr%s rr'zFockSpace.dimension rrrcy)Nz FockSpace()rr?s rrdzFockSpace._sympyreprsrcyNFrr?s rrBzFockSpace._sympystrrCrcd}t|SrrrEs rrGzFockSpace._prettyrHrcy)Nz \mathcal{F}rr?s rrJzFockSpace._latexrKrN) rrrrLrrMr'rdrBrGrJrrrrrs4, rrcdeZdZdZdZedZedZedZ dZ dZ dZ d Z d Zy ) r aA 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 cx|j|}t|tr|Stj|g|}|SrrPrQrrr rArRr!s rrz!TensorProductHilbertSpace.__new__H6 HHTN a HmmC'$' rchg}d}|D]e}t|tr|j|jd}1t|tt fr|j |Ytd|zg}d}|D]}|t|t rPt|t r@|j|jk(r'|j|j|jzz}et|t r"|j|k(r||jdzz}t|t r"||jk(r||jdzz}||k(r|dz}|j ||}||}|j ||rt|St|dk(r&t |dj|djSy)Evaluates the direct product.FTzQHilbert spaces can only be multiplied by other Hilbert spaces: %rNrTr) rQr extendrAr rappendrZbaseexprU)r rAnew_argsrecallarg comb_argsprev_argnew_args rrPzTensorProductHilbertSpace.evalOs 1C#89)C,0G!HI$!*,/!011 1  #G#g'>?x)@A  5&||gkkHLL.HIH)@A 0''++/:H*AB8==0&)9:H(&zH$$X.&H!"% #& " ,i8 8 ^q *9Q<+<+N>NO Orc|jDcgc]}|j}}tj|vrtjSt d|Scc}w)Nc ||zSrrxys rz5TensorProductHilbertSpace.dimension..s qsrrAr'rrXrr&rarg_lists rr'z#TensorProductHilbertSpace.dimension|sF-1YY7cCMM77 :: !:: *H5 5 8Ac|jS)z5A tuple of the Hilbert spaces in this tensor product.r^r%s rspacesz TensorProductHilbertSpace.spacesyyrcg}|jD];}|j|g|}t|trd|z}|j |=|S)Nz(%s))rArcrQrr)r&r@rA spaces_strsrss r_spaces_printerz)TensorProductHilbertSpace._spaces_printersY 99 "Cs*T*A#45QJ   q !  " rcP|j|g|}ddj|zS)NzTensorProductHilbertSpace(%s),rjoin)r&r@rA spaces_reprss rrdz$TensorProductHilbertSpace._sympyreprs-+t++G;d; .,1GGGrcJ|j|g|}dj|S)N*r)r&r@rArs rrBz#TensorProductHilbertSpace._sympystrs(*d**7:T: xx $$rct|j}|jdg|}t|D]}|j|j|g|}t |j|t t frt|jdd}t|j|}||dz k7s|jrt|jd}t|jd}|S)NrarbleftrightrTu ⨂ z x rUrArcrangerQrr r parensr _use_unicoder&r@rAlengthpformi next_pforms rrGz!TensorProductHilbertSpace._prettysTYYr)D)v 3)56'&&Cs&;  J 78EFQJ''& 4b(cdE& E(:;E < rc t|j}d}t|D]]}|j|j|g|}t |j|t t frd|z}||z}||dz k7sY|dz}_|S)Nr\left(%s\right)rTz\otimes rUrArrcrQrr r&r@rArrrarg_ss rrJz TensorProductHilbertSpace._latexsTYY v $A"GNN499Q<7$7E$))A,)>*),-*U2E AFQJ O $rN)rrrrLrrlrPrMr'rrrdrBrGrJrrrr r sd(T**X66H%$ rr c^eZdZdZdZedZedZedZ dZ dZ dZ d Z y ) raA 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 cx|j|}t|tr|Stj|g|}|Srrrs rrzDirectSumHilbertSpace.__new__rrcg}d}|D]_}t|tr|j|jd}1t|tr|j |St d|z|rt|Sy)rFTzOHilbert spaces can only be summed with other Hilbert spaces: %rN)rQrrrAr rrZ)r rArrrs rrPzDirectSumHilbertSpace.evals +C#45)C.$!$&)!*++ + ((3 3rc|jDcgc]}|j}}tj|vrtjSt d|Scc}w)Nc ||zSrrrs rrz1DirectSumHilbertSpace.dimension..s q1urrrs rr'zDirectSumHilbertSpace.dimensionsF-1YY7cCMM77 :: !:: ,h7 7 8rc|jS)z1A tuple of the Hilbert spaces in this direct sum.r^r%s rrzDirectSumHilbertSpace.spacesrrc|jDcgc]}|j|g|}}ddj|zScc}w)NzDirectSumHilbertSpace(%s)rrArcr)r&r@rArrs rrdz DirectSumHilbertSpace._sympyreprsC>BiiHss2T2H H*SXXl-CCCIs?c|jDcgc]}|j|g|}}dj|Scc}w)N+r)r&r@rArrs rrBzDirectSumHilbertSpace._sympystrs>=AYYGc~w~~c1D1G Gxx $$Hs<ct|j}|jdg|}t|D]}|j|j|g|}t |j|t t frt|jdd}t|j|}||dz k7s|jrt|jd}t|jd}|S)NrrarbrrTu ⊕ z + rrs rrGzDirectSumHilbertSpace._prettysTYYr)D)v 3)56'&&Cs&;  J 78EFQJ''& 4H(IJE& E(:;E < rc t|j}d}t|D]]}|j|j|g|}t |j|t t frd|z}||z}||dz k7sY|dz}_|S)NrrrTz\oplus rrs rrJzDirectSumHilbertSpace._latexsTYY v #A"GNN499Q<7$7E$))A,)>*),-*U2E AFQJ N #rN)rrrrLrrlrPrMr'rrdrBrGrJrrrrrs]:&88D%$ rrcneZdZdZdZedZedZedZ edZ dZ dZ d Z d Zy ) raAn 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 ct|j|}t|tr|Stj|g|Srr)r rArRs rrzTensorPowerHilbertSpace.__new__Ns2 HHTN a H}}S%1%%rc|dt|df}|d}|tjur|dS|tjurtjSt |j dk(r-|j r|dk\s|jstd|z|S|j D])}|j r|jrtd|z|S)NrrTzUHilbert spaces can only be raised to positive integers or Symbols: %rzJTensor powers can only contain integers or Symbols: %r) rrOneZerorUrVrWrYr5)r rArrpowers rrPzTensorPowerHilbertSpace.evalTs7GDG,,qk !%%<7N !&&=55L syy{ q NNsax3== "247"899  -((EOO$&$&+&,-- -rc |jdSr]r^r%s rrzTensorPowerHilbertSpace.basejr_rc |jdS)NrTr^r%s rrzTensorPowerHilbertSpace.expnr_rc|jjtjurtjS|jj|jzSr)rr'rrXrr%s rr'z!TensorPowerHilbertSpace.dimensionrs; 99  !** ,:: 99&&0 0rcd|j|jg|d|j|jg|dS)NzTensorPowerHilbertSpace(rrbrcrrr?s rrdz"TensorPowerHilbertSpace._sympyreprys?3A7>>$))4 4txx/$/1 1rc||j|jg|d|j|jg|S)Nz**rr?s rrBz!TensorPowerHilbertSpace._sympystr}s:)7>>$));d;txx'$') )rc|j|jg|}|jr!t|j td}n t|j td}|j|j g|}||zS)Nu⨂r)rcrrr rrr|s rrGzTensorPowerHilbertSpace._prettysx"GNN4883d3   "INN:>`3a$bcI"INN:c?$CDI#W^^DII55 9$$rc|j|jg|}|j|jg|}d|d|dS)N{z }^{\otimes }r)r&r@rArrs rrJzTensorPowerHilbertSpace._latexs?w~~dii/$/gnnTXX--'+S11rN)rrrrLrrlrPrMrrr'rdrBrGrJrrrrr(sq#J& *11 1)%2rrN)rL functoolsrsympy.core.basicrsympy.core.singletonrsympy.core.sympifyrsympy.sets.setsr sympy.printing.pretty.stringpictr sympy.physics.quantum.qexprr __all__r r rrrr rrrrrrs""&$74    C5CLIK<IKX1>1>h* *ZZ ZzkLk\e2le2r