On Wednesday, March 25, 2015 at 4:02:31 PM UTC-4, [email protected] wrote: > > Hi, > > You mean that a+|0> would return an explicit first-quantized wavefunction > if possible ? > Yes you are right. I want to combine first quantization and second quantization together and use a unique framework.
> > For the application of the Wicks theorem, you would like to somehow > include it into the simplify() routines ? Depending on the case, the user > may not want to apply Wicks theorem in some particular formula. > > In general, I think SymPy should not apply non-trivial transformations > unless explicitly asked to do so, but maybe others can comment on that too. > Yes you are right, I want to include it into routines like simplify(). Bun simplify() don't always use Wicks theorem. Whether to use depends on guessing what the user want. I don't quite agree with that "I think SymPy should not apply non-trivial transformations unless explicitly asked to do so", below is an example: For example: >>>a = sin(2*x)-2*sin(x)*cos(x) >>>print(a) -2*sin(x)*cos(x)+sin(2*x) >>>print(simplify(a)) 0 sin(2*x) is non-trivial, but it is applied. For me, I think trivial transformations is always applied automatically, for example x+x always 2*x, and whether non-trivial transformations is applied depends. > Le mercredi 25 mars 2015 13:39:26 UTC-4, Xiang Gao a écrit : >> >> Hi, >> >> Thank you for your example. I know that sympy.physics support second >> quantization. What I want to do is trying to make a uniform interface to do >> both first quantization and second quantization. For example, if I tell the >> computer that (a+) is the operator that put one electron into the (1 >> particle) ground state, when I put (a+)|0>, the computer automatically >> returns the ground state of system . I also hope that the computer is more >> smart, for example, the computer should know when to apply wicks theorem to >> do further calculation and you don't have to explicitly tell it to do so. >> >> Answer your question: >> I will make symbolic density matrix (if approved by GSoC). >> >> On Monday, March 23, 2015 at 11:27:35 AM UTC-4, [email protected] >> wrote: >>> >>> Hi Xiang, >>> >>> I am not familiar with GSoC and I can't comment on that, but SymPy does >>> support second quantization. There is a second quantization module with >>> fermionic and bosonic annihilation/creation operators, Wicks theorem, >>> support for contractions and normal ordering as well as evaluation of >>> Kronecker deltas. There is also a sample demonstrating derivation of the >>> CCSD (Coupled Cluster Singles and Doubles) equations here: >>> https://github.com/sympy/sympy/blob/master/examples/intermediate/coupled_cluster.py >>> >>> I am currently working to extend the second quantization module to >>> support different Fock spaces. I adopted a very simple and practical >>> approach which is to associate a Fock space label to the indices of >>> creation/annihilation operator. The indices already carry the information >>> whether they are above/below the Fermi level, hence it seemed convenient to >>> simply add the Fock space info there. >>> >>> Apparently you want to work with different Hilbert spaces in first >>> quantization, so I guess your ideas of creating new classes to handle that >>> seem good to me there. Would your density matrices be able to work with >>> completely symbolic quantities ? >>> I am going to need symbolic density matrices for my work, but I have not >>> really thought yet about how to get them into SymPy. Maybe I could derive a >>> class from Indexed which would support the special algebraic operations I >>> need. >>> >>> Le jeudi 19 mars 2015 20:04:03 UTC-4, Xiang Gao a écrit : >>>> >>>> Hi, >>>> >>>> Below are my initial thought on what to do for sympy.physics. I didn't >>>> wrote plans about second quantization because it require more thinking and >>>> discussing and it's better to work on this part first. Since there are a >>>> lot of changes, I think I need to discuss first. Do you have any >>>> suggestions about that? >>>> >>>> *Current status:* >>>> >>>> The relationship of wavefunction, bra, ket, operator, Hilbert space, >>>> and second quantization are not dealt in a good way. For example, in >>>> sympy.physics.hydrogen, sympy.physics.qho_1d, and sympy.physics.sho, >>>> the wavefunctions and energy levels are defined, however there is no >>>> corresponding object of class Ket is defined. It is impossible for me to >>>> get the corresponding Ket object of the eigenstates of these systems. >>>> Another example is that, it is impossible for me to do the following >>>> calculation: |a> is in space A, |b> is in space B, I want to deal with the >>>> direct product |a>|b> and calculate the Hilbert space it is in. Another >>>> example is, in Configuration Interaction and Coupled Cluster theory in >>>> theoretical chemistry, creation and annihilation operator is used to >>>> populate electrons of a molecule to excited state, there are a lot of >>>> algebra in this area on second quantization, but sympy don’t support it >>>> yet. >>>> >>>> *Ways of Improvement: * >>>> >>>> To solve these problems, reorganize maybe helpful. I suggest reorganize in >>>> the following way: >>>> >>>> 1. The class HilbertSpace takes a string parameter to denote different >>>> spaces. >>>> >>>> 2. When a Ket is initialized, two parameters must be given: one is the >>>> Hilbert space that this Ket is in another is can be a string or a Symbol. >>>> If the Ket is initialized with a string, the behavior of this Ket is >>>> similar to numbers (the members in sympy.core.numbers) in sympy. If the >>>> Ket is initialized with a Symbol, the behavior will be similar to a symbol >>>> (the members in sympy.core.symbol) in sympy. >>>> >>>> 3. Implement |x>, |p>, operator x, operator p, in the class >>>> sympy.physics.quantum.Space1D; implement |xyz>, |rθφ>, |pxpypz> and >>>> operators in the class sympy.physics.quantum.Space3D. The constructor of >>>> class Space1D and class Space3D takes the Hilbert space as its parameter. >>>> Implement angular momentums as sympy.physics.quantum.AngularMomentum. >>>> >>>> 4. Override the operator “in” in python, so that whether a Ket belongs to >>>> a space can be tested by: “myket in myspace” >>>> >>>> 5. Implement all exact solutions in quantum mechanics and quantum field >>>> theory as classes in package sympy.physics.quantum.ExcatSolutions. >>>> >>>> 6. Implement partial trace and trace >>>> >>>> >>>> >>>> *Expected Result:* >>>> >>>> Sample Code 1 >>>> >>>h1 = HilbertSpace(“H1”) >>>> >>>h2 = HilbertSpace(“H2”) >>>> >>>myket1 = Ket(h1,’a’) >>>> >>>myket2 = Ket(h2,’b’) >>>> >>>myket1 in h1 >>>> True >>>> >>>myket2 in h1 >>>> False >>>> >>>myket1*myket2 in h1*h2 #direct product >>>> True >>>> >>>myket1*myket1 >>>> Error: undefined operation >>>> >>>myket1+myket2 >>>> Error: undefined operation >>>> >>>> Sample code 2: >>>> >>>h1 = HilbertSpace(“H1”) # Hilbert space of particle 1 >>>> >>>sp1 = Space3D(h1) >>>> >>>hydrogen1 = HydrogenLike(h1) >>>> >>>h2 = HilbertSpace(“H2”) # Hilbert space of particle 1 >>>> >>>sp2 = Space3D(h2) >>>> >>>ho2 = HarmonicOscillator3D(h2) >>>> >>>sp1.r_theta_phi_bra*hydrogen1.eigenstate(n=0,l=0,m=0) >>>> Should output the wave function with variable r,theta,phi here >>>> >>>sp2.xyz_bra*ho2.coherent_state(n=0,l=0,m=0) >>>> Should output the wave function with variable x,y,z of coherent state >>>> of quantum harmonic oscillator. >>>> >>> sp1.r_theta_phi_bra*ho2.coherent_state(n=0,l=0,m=0) >>>> Error, incompatible space >>>> >>>> Sample code 3: >>>> >>>h1 = HilbertSpace(“H1”) >>>> >>>h2 = HilbertSpace(“H2”) >>>> >>>a1 = AngularMomentum(h1) >>>> >>>a2 = AngularMomentum(h2) >>>> >>>total_L = a1 + a2 >>>> >>>total_L.hilbert_space() >>>> should output direct product of h1 and h2 >>>> >>>(a1.eigenbra(j=1/2,m=1/2)*a2.eigenbra(j=3,m=0)) * >>>> total_L.eigenket(j=3/2,m=1/2) >>>> Should output Clebsch-Gordan coefficient >>>> >>>> Sample code 4: >>>> >>>h1 = HilbertSpace(“H1”) >>>> >>>h2 = HilbertSpace(“H2”) >>>> >>>h3 = HilbertSpace(“H3”) >>>> >>>h4 = HilbertSpace(“H4”) >>>> >>>density_matrix = … # codes that defines density matrix here >>>> >>>density_matrix.trace() >>>> Should output the trace >>>> >>>density_matrix.trace(h1,h2) >>>> Should output the result of the partial trace >>>> >>> -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/292617cc-0b3f-455c-8964-5b1166076896%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
