GSoC 2014 Application Anurag Hota Quantum Mechanics Module

Anurag Hota edited this page Mar 20, 2014 · 14 revisions

About Me:

  • Name: Anurag Hota
  • University :Birla Institute Of Technology and Science,Pilani
  • Branch:B.E.Computer Science, M.Sc Physics
  • Email:
  • Github: anuraghota


I am a 3rd year undergraduate of BITS Pilani,K.K.Birla Goa Campus,India pursuing dual degree in B.E. Computer Science and M.Sc.Physics. Being a Physics dualite, i have covered all major topics in Physics like Quantum Mechanics 1,Quantum Mechanics 2,Nuclear Physics, Computational Physics etc.

Programming Background:

I am quite comfortable with Python as I have been using it for past 2 years. The other languages I am comfortable with are C and Java. Being a dualite in Physics, using SymPy for the physics module has been of great help and I am willing to expand it further and complete the other incomplete modules. I am new to Git and I am still trying to understand its working.

Contributions To Sympy:

I will make sure I will try to merge the unmerged issues soon.

  • 2978 - Time Dependent/Independent Perturbation - Expansion Of Physics Quantum Module

  • 2720 -eliminate() - An eliminate function- Pull request referencing it is 3005

Why This Project:

Extending the Physics Quantum Mechanics module would be an important addition in SymPy which will help further in the extension of Nuclear Physics module as well as Advanced Quantum mechanics. I am quite acquainted with the Physics theories and thus would love to work in its extension.


Being a Physics dualite, i have completed formal course in Quantum Mechanics I, Quantum Mechanics II and currently studying the Nuclear Mechanics course. Along with this, i have completed Computational Physics etc which might help further.

Project Idea:


Dirac notation:

Currently, in sympy.physics.quantum there is some code for symbolic Dirac notation. I would like to continue to improve this code by adding additional features from quantum mechanics and implement it. I am planning to complete the Perturbation Theory ( both time dependent and time independent) as well as the Scattering Theory (elastic Scattering) as well as the s-wave Scattering Theory.

Perturbation Theory/Scattering Theory:

In sympy.physics.quantum module, there is no code related to Perturbation theory. I am planning to implement both time dependent/independent Perturbation Theory and the Scattering Theory initially. Then, I am planning to make the Perturbation theory more general so that it can be used for other mathematical calculations for approximate solutions.


  • Perturbation Class with Methods like:
    • Time_Independent_Perturbation
    • Time_Dependent Perturbation
  • Scattering Class with Methods like:
    • Fermi_Golden_Rule
    • Optical_Theorem
    • Differential_Cross_Section
    • Total_Cross_Section
    • Lippmann_Schwinger
    • Elastic Scattering
    • S_Wave_Scattering etc.



Using the sympy.physics.module, I am planning to pass the perturbed term inside the class. This searches for the term 't' and categorizes as time independent/dependent. e.g. Perturbation(2m,kx,1) : Here the first term '2m' will be Ho ( unperturbed Hamiltonian to be passed for other use), 'kx' is the perturbed Hamiltonian. So it will check for term 't' in it and accordingly categorizes.Here it is time independent whereas Perturbation(2m,kt,1) would give time dependent Perturbation.

Time Independent Perturbation:

My Task here would be to return the nth order correction for the perturbed energy term for time independent perturbation. e.g. Perturbation(2m,kx,1) would return the 1st order energy correction term whereas Perturbation(2m,kx,2) would give the 2nd order energy correction term.

Time Dependent Perturbation:

My task here would be to return the transition rate for the time dependent Perturbation as it is one important factor for further calculations.e.g. Passing Perturbation(2m,kt,1) would categorize into time dependent perturbation but here 1, would mean nothing and it will just return the transition rate.

Scattering Theory:

My task here would be implementing the scattering theory from both quantum/classical point of view, implementing the differential cross section/total cross section. The total cross section can further be divided into elastic/inelastic cross section. I will try to implement a branch() method that would branch the total cross section into different terms. The differential cross section can then be passed on to get the classical differential cross section which will depend on the impact parameter 'b' or 'θ'. Further, I will implement the Fermi's Golden Rule, Coulomb Scattering , Lippmann Schwinger equation,Scattering Amplitude and attractive square well Scattering etc.


>>> Perturbation(2m,kx,1)

      Time Independent:
      First Order Correction:
      This checks if it is time independent and returns the nth( Here, 1) order correction for energy term.


Time Independent:
Second Order Correction:
    This will return 2nd order energy correction term(time independent perturbation)


	Time dependent:
	Transition Rate:
	This will return the transition rate for the time dependent perturbation.

>>> = Differential_Cross_Section(N,J)

          This will return the differential cross section with N being the No. of particles and J as the Incident flux.


         This will return the total cross section with c being the differential cross section.


     (b/sin(θ))* abs(differentiate(b,θ))
     This will return the classical differential cross section in terms of b(impact parameter) and theta.


       For Coulomb Scattering, V(r) follows a hyperbolic trajectory.This  will return the Rutherford formula for Scattering. 


    (exp(2iδ(k)) - 1)/2ik
     Returns the partial wave scattering amplitude. Here it is defined in terms of phase shifts.


    Im(f(0)) = (k/4π)*σtot
    Returns the Optical Theorem or the sum rule


    Will return the Fermi_Golden_Rule for given k,k',V.

These codes are just a rough prototype of the proposed module.With my work with the module, we can come up with better techniques. Further, we can improve the Scattering theory by adding Scattering methods like Scattering for atomic lattice etc.


This is a rough estimate of my activities in the GSoC period.Before the actual coding period starts off, I will make sure I prepare a more detailed description and methods to be used plus I will try to have a more closer insight on already implemented techniques related to it.

Community Bonding Period:


Go through the Quantum module more thoroughly and play around with it to get more comfortable,make a detailed description of all the classes and the methods for the entire module. Write a blog post about this. Will involve clearing doubts from mentors in this stage.

Week 1:

Objectives- Map the different classes, structure it. Start off by extending the Quantum module with some basic function to be required for further use.This should take a couple of days.

Week 2-4:

Objectives- Implement the basic structure of Perturbation.Implement the Perturbation class with different methods like Time_Dependent_Perturbation and Time_Independent_Perturbation.

Week 5-6:

Objectives- Once all the basic functionalities of Perturbation are in place, Will try to make it more general and dynamic. Check for different format and types of test cases and ensure it works completely.

Week 7-9:

Objectives- Implement the basic structure of Scattering.Implement the Scattering class with different methods like Fermi_Golden_Rule,Diff_Cross_Section,Lippmann_Schwinger, S_Wave_Scattering,Coulomb_Scattering.

Week 10-11:

Objectives- Ensure all basic methods of Scattering Theory is in place. Check for different test cases and ensure it works for all cases.

###Week 12-13: Objectives- Complete the documentation and finish off any pending work(If any).

Post GSoC:

I will study the Advanced Quantum Mechanics more thoroughly and try to implement the remaining modules of Quantum Mechanics and Nuclear Physics.


Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.