{"id":48073021,"url":"https://github.com/joselado/dmrgpy","last_synced_at":"2026-04-04T14:46:49.602Z","repository":{"id":41299533,"uuid":"140876043","full_name":"joselado/dmrgpy","owner":"joselado","description":"DMRGPy is a Python library to compute quasi-one-dimensional spin chains and fermionic systems using matrix product states with DMRG as implemented in ITensor. Most of the computations can be performed both with DMRG and exact diagonalization for small systems, which allows one to benchmark the results.","archived":false,"fork":false,"pushed_at":"2026-01-23T07:16:24.000Z","size":56671,"stargazers_count":110,"open_issues_count":0,"forks_count":21,"subscribers_count":8,"default_branch":"master","last_synced_at":"2026-01-23T09:53:33.753Z","etag":null,"topics":["dmrg-algorithm","fermionchains","itensor","kernel-polynomial-method","many-body-excitations","matrix-product-states","parafermions","spinchains"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joselado.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-07-13T17:37:53.000Z","updated_at":"2026-01-23T07:16:28.000Z","dependencies_parsed_at":"2024-04-23T18:48:32.737Z","dependency_job_id":"7be6b2fd-efb3-465b-a92a-decaff333725","html_url":"https://github.com/joselado/dmrgpy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/joselado/dmrgpy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joselado%2Fdmrgpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joselado%2Fdmrgpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joselado%2Fdmrgpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joselado%2Fdmrgpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joselado","download_url":"https://codeload.github.com/joselado/dmrgpy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joselado%2Fdmrgpy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31403607,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dmrg-algorithm","fermionchains","itensor","kernel-polynomial-method","many-body-excitations","matrix-product-states","parafermions","spinchains"],"created_at":"2026-04-04T14:46:49.107Z","updated_at":"2026-04-04T14:46:49.595Z","avatar_url":"https://github.com/joselado.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"## DMRGPY ##\n\n# Summary #\n\nThis is a Python library to compute quasi-one-dimensional\nspin chains and fermionic systems using matrix product states\nwith the density matrix renormalization group as implemented in ITensor\n(C++ and Julia versions). Most\nof the computations can be performed both with DMRG and exact\ndiagonalization for small systems, which allows to benchmark the\nresults.\n\nSeveral examples can be found in the examples folder.\n\n# Disclaimer #\n\nThis library is still under heavy development.\n\n# How to install #\n\n## Linux and Mac ##\n\nExecute the script \n\n```bash\npython install.py \n```\n\nand it will compile both ITensor and a C++ program\nthat uses it. \n\nIf your default C++ compiler is not g++ (version 6 or higher), execute the installation script providing the specific compiler to use (g++-6 for example)\n\n```bash\npython install.py gpp=g++-6 \n```\n\nAlternatively, in case you just want to use the Julia version,\nexecute the script \n\n```bash\npython install_julia.py\n```\n\nThe installation scripts will\nalso add dmrgpy to the PYTHONPATH of the python interpreter you used\nto execute them. Compiling the C++ program requires having installed LAPACK and BLAS in your system.\n\nAfterwards you can import the dmrgpy sublibrary that you want, for example\n\n```python\nfrom dmrgpy import spinchain\n```\n\n## Windows ##\n\nFor using this program in Windows, the easiest solution is to create a virtual\nmachine using [Virtual Box](https://www.virtualbox.org/), installing\na version of [Ubuntu](https://releases.ubuntu.com/20.04/)\nin that virtual machine, and following the previous\ninstructions.\n\n# Tutorials #\nYou can find several tutorials [here](https://github.com/joselado/Advanced_Computational_Methods_Physics_2024), in particular organized around the following topics\n\n- [Many-body quantum magnets](https://github.com/joselado/Advanced_Computational_Methods_Physics_2024/blob/main/jupyter-notebooks/quantum_magnetism.ipynb)\n- [Many-body correlated fermionic systems](https://github.com/joselado/Advanced_Computational_Methods_Physics_2024/blob/main/jupyter-notebooks/quantum_interacting_fermions.ipynb)\n- [Tensor networks for many-body quantum magnets](https://github.com/joselado/Advanced_Computational_Methods_Physics_2024/blob/main/jupyter-notebooks/mps_quantum_magnets.ipynb)\n- [Tensor netowrks for many-body correlated fermionic systems](https://github.com/joselado/Advanced_Computational_Methods_Physics_2024/blob/main/jupyter-notebooks/mps_many_body_fermionic.ipynb)\n\n\n# Capabilities #\n- Possible models include spinless fermions, spinful fermions, spins, parafermions and bosons\n- Ground state energy\n- Ground state wavefunction\n- Excitation energies\n- Excited wavefunctions\n- Arbitrary expectation values, including static correlation functions\n- Time evolution of arbitrary states\n- MPS algebra: sum of MPS, application of operators, exponential and inverse\n- MPO algebra: sums, products, trace, trace of inverse for generic operators\n- Dynamical correlation functions computed with the Kernel polynomial method\n- Dynamical correlation functions with time dependent DMRG\n- Generic operator distributions computed with the Kernel polynomial method\n- Iterative MPS Hermitian and non-Hermitian diagonalization solvers \n- Hermitian and non-Hermitian degeneracy detection\n\n# Examples\n\n## Ground state energy of an S=1/2 spin chain\n```python\nfrom dmrgpy import spinchain\nspins = [\"S=1/2\" for i in range(30)] # spins in each site\nsc = spinchain.Spin_Chain(spins) # create spin chain object\nh = 0 # initialize Hamiltonian\nfor i in range(len(spins)-1): \n  h = h + sc.Sx[i]*sc.Sx[i+1]\n  h = h + sc.Sy[i]*sc.Sy[i+1]\n  h = h + sc.Sz[i]*sc.Sz[i+1]\nsc.set_hamiltonian(h) # create the Hamiltonian\nprint(\"Ground state energy\",sc.gs_energy())\n```\n\n\n## Static correlator of an S=1/2 spin chain\n```python\nfrom dmrgpy import spinchain\nn = 30\nspins = [\"S=1/2\" for i in range(n)] # S=1 in each site\nsc = spinchain.Spin_Chain(spins) # create spin chain object\nh = 0 # initialize Hamiltonian\nfor i in range(len(spins)-1):\n  h = h + sc.Sx[i]*sc.Sx[i+1]\n  h = h + sc.Sy[i]*sc.Sy[i+1]\n  h = h + sc.Sz[i]*sc.Sz[i+1]\nsc.set_hamiltonian(h) # create the Hamiltonian\ncs = [sc.vev(sc.Sz[0]*sc.Sz[i]).real for i in range(n)]\n```\n![Alt text](images/S12chain_correlator.png?raw=true \"Static correlator in an S=1/2 chain, showing power-law decay of correlations\")\n\n\n## Static correlator of an S=1 spin chain\n```python\nfrom dmrgpy import spinchain\nn = 30\nspins = [\"S=1\" for i in range(n)] # S=1 in each site\nsc = spinchain.Spin_Chain(spins) # create spin chain object\nh = 0 # initialize Hamiltonian\nfor i in range(len(spins)-1): \n  h = h + sc.Sx[i]*sc.Sx[i+1]\n  h = h + sc.Sy[i]*sc.Sy[i+1]\n  h = h + sc.Sz[i]*sc.Sz[i+1]\nsc.set_hamiltonian(h) # create the Hamiltonian\ncs = [sc.vev(sc.Sz[0]*sc.Sz[i]).real for i in range(n)]\n```\n![Alt text](images/S1chain_correlator.png?raw=true \"Static correlator in an S=1 chain, showing coupling of the emergent edge excitations\")\n\n\n## Conformal field theory central charge of a critical Ising model\n```python\nfrom dmrgpy import spinchain\nn = 100 # number of sites\nspins = [\"S=1/2\" for i in range(n)] # spin 1/2 heisenberg chain\nsc = spinchain.Spin_Chain(spins) # create the spin chain\nh = 0 # initialize\nfor i in range(n-1): h = h + sc.Sz[i]*sc.Sz[i+1] # Ising coupling\nfor i in range(n): h = h + 0.5*sc.Sx[i] # transverse field\nsc.set_hamiltonian(h) # set the Hamiltonian\nsc.maxm = 200 # increase bond dimension for a critical system\nwf = sc.get_gs() # compute ground state\nprint(\"Central charge\",wf.get_CFT_central_charge()) # compute central charge\n```\n\n## Ground state energy of a bilinear-biquadratic Hamiltonian\n```python\nfrom dmrgpy import spinchain\nns = 6 # number of sites in the spin chain\nspins = [\"S=1\" for i in range(ns)] # S=1 chain\nsc = spinchain.Spin_Chain(spins) # create spin chain object\nh = 0 # initialize Hamiltonian\nSi = [sc.Sx,sc.Sy,sc.Sz] # store the three components\nfor i in range(ns-1): # loop \n    for S in Si: h = h + S[i]*S[i+1]  # bilinear\n    for S in Si: h = h + 1./3.*S[i]*S[i+1]*S[i]*S[i+1]  # biquadratic\nsc.set_hamiltonian(h) # create the Hamiltonian\nprint(\"Energy with DMRG\",sc.gs_energy(mode=\"DMRG\"))\nprint(\"Energy with ED\",sc.gs_energy(mode=\"ED\"))\n```\n\n## Magnetization of an S=1 spin chain with an edge magnetic field\n```python\nfrom dmrgpy import spinchain\nn = 40\nspins = [\"S=1\" for i in range(n)] # S=1 chain\nsc = spinchain.Spin_Chain(spins) # create spin chain object\nh = 0 # initialize Hamiltonian\nfor i in range(len(spins)-1): \n  h = h + sc.Sx[i]*sc.Sx[i+1]\n  h = h + sc.Sy[i]*sc.Sy[i+1]\n  h = h + sc.Sz[i]*sc.Sz[i+1]\nh = h + sc.Sz[0]*0.1 # edge magnetic field\nsc.set_hamiltonian(h) # create the Hamiltonian\nmz = [sc.vev(sc.Sz[i]).real for i in range(n)]\nprint(\"Mz\",mz)\n```\n\n## Bond dimension energy convergence for an S=1/2 Heisenberg chain\n```python\nfrom dmrgpy import spinchain\nimport numpy as np\nn= 30 # size of the chain\nspins = [\"S=1/2\" for i in range(n)] # S=1/2 chain\nsc = spinchain.Spin_Chain(spins) # create spin chain object\nh = 0 # initialize Hamiltonian\nfor i in range(len(spins)-1):\n  h = h + sc.Sx[i]*sc.Sx[i+1]\n  h = h + sc.Sy[i]*sc.Sy[i+1]\n  h = h + sc.Sz[i]*sc.Sz[i+1]\nbds = range(3,20,2) # bond dimension\nes,des = [],[] # storage of energies and fluctuations\nfor maxm in bds: # loop over bond dimension\n  sc.set_hamiltonian(h) # create the Hamiltonian\n  sc.maxm = maxm # set the bond dimension\n  e = sc.gs_energy() # get the ground state energy\n  wf = sc.get_gs() ; de = wf.dot(h*(h*wf)) # Energy square\n  de = np.sqrt(np.abs(de-e**2)) # energy fluctuation\n  es.append(e/n) # store energy\n  des.append(de/n) # energy fluctuation\n```\n\n![Alt text](images/bond_dimension.png?raw=true \"Convergence of the energy as a function of the bond dimension for an S=1/2 chain\")\n\n## Excited states with DMRG and ED \n```python\nfrom dmrgpy import spinchain\nspins = [\"S=1/2\" for i in range(12)] # 2*S+1=2 for S=1/2\nsc = spinchain.Spin_Chain(spins) # create spin chain object\nh = 0 # initialize Hamiltonian\nfor i in range(len(spins)-1): \n  h = h + sc.Sx[i]*sc.Sx[i+1]\n  h = h + sc.Sy[i]*sc.Sy[i+1]\n  h = h + sc.Sz[i]*sc.Sz[i+1]\nsc.set_hamiltonian(h)\nes1 = sc.get_excited(n=6,mode=\"DMRG\")\nes2 = sc.get_excited(n=6,mode=\"ED\")\nprint(\"Excited states with DMRG\",es1)\nprint(\"Excited states with ED\",es2)\n```\n\n## Singlet-triplet gap of the Haldane Heisenberg S=1 spin chain\n```python\nfrom dmrgpy import spinchain\n# Haldane chain with S=1/2 on the edge to remove the topological modes\nspins = [\"S=1/2\"]+[\"S=1\" for i in range(40)]+[\"S=1/2\"]\nsc = spinchain.Spin_Chain(spins) # create spin chain object\nh = 0 # initialize Hamiltonian\nfor i in range(len(spins)-1): \n  h = h + sc.Sx[i]*sc.Sx[i+1]\n  h = h + sc.Sy[i]*sc.Sy[i+1]\n  h = h + sc.Sz[i]*sc.Sz[i+1]\nsc.set_hamiltonian(h)\nes = sc.get_excited(n=2,mode=\"DMRG\")\ngap = es[1]-es[0] # compute gap\nprint(\"Gap of the Haldane chain\",gap)\n```\n\n\n\n## Local dynamical spin correlator of an S=1/2 chain\n```python\nimport numpy as np\nfrom dmrgpy import spinchain\nn = 40\n# create an S=1/2 spin chain\nspins = [\"S=1/2\" for i in range(n)] # spin 1/2 heisenberg chain\n# create first neighbor exchange\nsc = spinchain.Spin_Chain(spins) # create the spin chain\nh = 0\nfor i in range(n-1):\n    h = h + sc.Sx[i]*sc.Sx[i+1]\n    h = h + sc.Sy[i]*sc.Sy[i+1]\n    h = h + sc.Sz[i]*sc.Sz[i+1]\nsc.set_hamiltonian(h)\nzs = [] # empty list\nfor i in range(n): # loop over sites\n  name = (sc.Sz[i],sc.Sz[i])\n  (e,s) = sc.get_dynamical_correlator(mode=\"DMRG\",name=name,\n          es=np.linspace(-0.5,4.0,200),delta=0.05)\n  zs.append(s) # store\n```\n\n![Alt text](images/dyn_corr_spatial_long.png?raw=true \"Dynamical spin correlator for different sites of an S=1/2 chain\")\n\n## Local dynamical spin correlator of an S=1 chain\n```python\nimport numpy as np\nfrom dmrgpy import spinchain\nn = 40\n# create an S=1/2 spin chain\nspins = [\"S=1\" for i in range(n)] # spin 1/2 heisenberg chain\n# create first neighbor exchange\nsc = spinchain.Spin_Chain(spins) # create the spin chain\nh = 0\nfor i in range(n-1):\n    h = h + sc.Sx[i]*sc.Sx[i+1]\n    h = h + sc.Sy[i]*sc.Sy[i+1]\n    h = h + sc.Sz[i]*sc.Sz[i+1]\nsc.set_hamiltonian(h)\nzs = [] # empty list\nfor i in range(n): # loop over sites\n  name = (sc.Sz[i],sc.Sz[i])\n  (e,s) = sc.get_dynamical_correlator(mode=\"DMRG\",name=name,\n          es=np.linspace(-0.5,4.0,200),delta=0.05)\n  zs.append(s) # store\n```\n\n![Alt text](images/dyn_corr_spatial_long_S1.png?raw=true \"Dynamical spin correlator for different sites of an S=1 chain\")\n\n\n\n## Local dynamical spin correlator of an S=1/2 chain with a S=1 impurity\n```python\nimport numpy as np\nfrom dmrgpy import spinchain\nspins = [\"S=1/2\" for i in range(14)] # spin 1/2 heisenberg chain\nspins = spins + [\"S=1\"] + spins # put S=1 in the middle\nn = len(spins) # total number of spins\n# create first neighbor exchange\nsc = spinchain.Spin_Chain(spins) # create the spin chain\nh = 0\nfor i in range(n-1):\n    h = h + sc.Sx[i]*sc.Sx[i+1]\n    h = h + sc.Sy[i]*sc.Sy[i+1]\n    h = h + sc.Sz[i]*sc.Sz[i+1]\nsc.set_hamiltonian(h)\nzs = [] # empty list\nfor i in range(n): # loop over sites\n  name = (sc.Sz[i],sc.Sz[i])\n  (e,s) = sc.get_dynamical_correlator(mode=\"DMRG\",name=name,\n          es=np.linspace(-0.5,4.0,200),delta=0.05)\n  zs.append(s.real) # store\n```\n\n![Alt text](images/dyn_corr_spatial_impurity.png?raw=true \"Dynamical spin correlator for an S=1/2 with an S=1 impurity in the middle\")\n\n\n\n## Non-local dynamical spin correlator of an S=1/2 chain\n```python\nimport numpy as np\nfrom dmrgpy import spinchain\nn = 10\n# create an S=1/2 spin chain\nspins = [\"S=1/2\" for i in range(n)] # spin 1/2 heisenberg chain\n# create first neighbor exchange\nsc = spinchain.Spin_Chain(spins) # create the spin chain\nh = 0\nfor i in range(n-1):\n    h = h + sc.Sx[i]*sc.Sx[i+1]\n    h = h + sc.Sy[i]*sc.Sy[i+1]\n    h = h + sc.Sz[i]*sc.Sz[i+1]\nsc.set_hamiltonian(h)\nxs = [] # empty list\nys = [] # empty list\nzs = [] # empty list\nfor i in range(n): # loop over sites\n  name = (sc.Sz[0],sc.Sz[i])\n  (e,s) = sc.get_dynamical_correlator(mode=\"DMRG\",name=name,\n          es=np.linspace(-0.5,4.0,200),delta=0.05)\n  zs.append(s) # store\n```\n\n![Alt text](images/dyn_corr_nonlocal_spatial.png?raw=true \"Dynamical non-local spin correlator for different sites of an S=1/2 chain\")\n\n\n## Bulk and edge dynamical correlator of a Haldane chain\n```python\nfrom dmrgpy import spinchain\nn = 20 ; spins = [\"S=1\" for i in range(n)] # S=1 chain\nsc = spinchain.Spin_Chain(spins) # create spin chain object\nh = 0 # initialize Hamiltonian\nfor i in range(len(spins)-1):\n  h = h + sc.Sx[i]*sc.Sx[i+1]\n  h = h + sc.Sy[i]*sc.Sy[i+1]\n  h = h + sc.Sz[i]*sc.Sz[i+1]\nsc.set_hamiltonian(h)\n(e0,d0) = sc.get_dynamical_correlator(name=(sc.Sz[0],sc.Sz[0]))\n(eb,db) = sc.get_dynamical_correlator(name=(sc.Sz[n//2],sc.Sz[n//2]))\n```\n\n![Alt text](images/dyn_corr_bulk_edge.png?raw=true \"Dynamical spin correlator for different sites of an S=1 chain\")\n\n## Spin and charge correlator of the 1D Hubbard model\n```python\nfrom dmrgpy import fermionchain\nn = 20 # number of sites\nfc = fermionchain.Spinful_Fermionic_Chain(n)\n# first neighbor hopping\nh = 0\nfor i in range(n-1):\n  h = h + fc.Cdagup[i]*fc.Cup[i+1]\n  h = h + fc.Cdagdn[i]*fc.Cdn[i+1]\nh = h + h.get_dagger() # Make Hermitian\n# Hubbard term\nfor i in range(n):\n  h = h + 4.*(fc.Nup[i]-.5)*(fc.Ndn[i]-.5)\nfc.set_hamiltonian(h) # initialize the Hamiltonian\n# compute the two correlators\nzz = [fc.vev(fc.Sz[0]*fc.Sz[i]).real for i in range(n)]\ncc = [fc.vev(fc.Cdagup[0]*fc.Cup[i]).real for i in range(n)]\n```\n\n![Alt text](images/hubbard_correlator.png?raw=true \"Spin and charge correlator in the Hubbard model\")\n\n\n\n## Spin correlator in the Hubbard model as function of the interaction\n```python\nfrom dmrgpy import fermionchain\nimport numpy as np\nn = 14 # number of sites\nfc = fermionchain.Spinful_Fermionic_Chain(n)\n# first neighbor hopping\nh = 0\nfor i in range(n-1):\n  h = h + fc.Cdagup[i]*fc.Cup[i+1]\n  h = h + fc.Cdagdn[i]*fc.Cdn[i+1]\nh = h + h.get_dagger() # Make Hermitian\n# Hubbard term\nhU = 0\nfor i in range(n):\n  hU = hU + (fc.Nup[i]-.5)*(fc.Ndn[i]-.5)\n\nzzs = [] # storage for correlators\nUs = np.linspace(0.,4.,6) # Hubbard Us \nfor U in Us:\n  fc.set_hamiltonian(h+U*hU) # initialize the Hamiltonian\n  zz = [fc.vev(fc.Sz[0]*fc.Sz[i]).real for i in range(n)]\n  zzs.append(zz) # store zz correlator\n```\n\n![Alt text](images/hubbard_correlator_VS_U.png?raw=true \"Spin correlator in the Hubbard model for different interactions U\")\n\n\n\n\n## Generic interacting fermionic Hamiltonian\n```python\nimport numpy as np\nfrom dmrgpy import fermionchain\nn = 6 # number of different spinless fermionic orbitals\n# fc is an object that contains the information of the many body system\nfc = fermionchain.Fermionic_Chain(n) # create the object\nh = 0\n# create random hoppings\nfor i in range(n):\n  for j in range(i):\n    h = h + fc.Cdag[i]*fc.C[j]*np.random.random()\n# create random density interactions\nfor i in range(n):\n  for j in range(i):\n    h = h + fc.N[i]*fc.N[j]*np.random.random()\nh = h + h.get_dagger() # make the Hamiltonian Hermitian\nfc.set_hamiltonian(h) # set the Hamiltonian in the object\nprint(\"GS energy with ED\",fc.gs_energy(mode=\"ED\")) # energy with exact diag\nprint(\"GS energy with DMRG\",fc.gs_energy(mode=\"DMRG\")) # energy with DMRG\n```\n\n\n# Choosing between the C++ and Julia backend #\nThe library uses ITensor in the background. Currently dmrgpy allows to \nchoose between\nITensor2 (C++), or ITensors (Julia). The default version executed is\nthe the C++ v2 version, if you want to instead use the Julia version\nexecute the method \".setup_julia()\", for example\n\n```python\nfrom dmrgpy import spinchain\nspins = [\"S=1/2\" for i in range(30)] # spins in each site\nsc = spinchain.Spin_Chain(spins) # create spin chain object\nsc.setup_julia()\n```\n\nand all the subsequent computations will be performed with Julia.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoselado%2Fdmrgpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoselado%2Fdmrgpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoselado%2Fdmrgpy/lists"}