Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 37 additions & 28 deletions FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,34 +10,43 @@

The following table summarises the available methods and routines for the ansatz currently treated by code generation, in the three spin cases:

| Ansatz | E | T | Λ | IP | EA | EE | DM1 | DM2 | BDM |
| :---------: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| MP2 | RUG | - | - | RUG | RUG | G | RUG | RUG | - |
| MP3 | RUG | | | | | | | | - |
| CCD | RUG | RUG | RUG | RUG | RUG | G | RUG | RUG | - |
| CCSD | RUG | RUG | RUG | RUG | RUG | G | RUG | RUG | - |
| CCSDT | RUG | RUG | RUG | | | | RUG | RUG | - |
| CCSDTQ | g | g | | | | | | | - |
| CCSD(T) | RUG | RUG | | | | | | | - |
| CCSDt' | RUG | RUG | | | | | | | - |
| CC2 | RUG | RUG | RUG | RUG | RUG | G | RUG | RUG | - |
| CC3 | RUG | RUG | | | | | | | - |
| LCCD | RUG | RUG | | | | | | | - |
| LCCSD | RUG | RUG | | | | | | | - |
| QCISD | RUG | RUG | | | | | | | - |
| DCD | RU | RU | | | | | | | - |
| DCSD | RU | RU | | | | | | | - |
| DF-CCD | RU | RU | RU | RU | RU | | RU | RU | - |
| DF-CCSD | RU | RU | RU | RU | RU | | RU | RU | - |
| DF-CC2 | RU | RU | RU | RU | RU | | RU | RU | - |
| DF-LCCD | RU | RU | | | | | | | - |
| DF-LCCSD | RU | RU | | | | | | | - |
| DF-QCISD | RU | RU | | | | | | | - |
| DF-DCD | RU | RU | | | | | | | - |
| DF-DCSD | RU | RU | | | | | | | - |
| CCSD-S-1-1 | RUG | RUG | RUG | | | | RUG | RUG | RUG |
| CCSD-SD-1-1 | RUG | RUG | RUG | | | | RUG | RUG | RUG |
| CCSD-SD-1-2 | RUG | RUG | RUG | | | | RUG | RUG | RUG |
| Ansatz | E | T | Λ | IP | EA | EE | DM1 | DM2 | BDM |
| :-------------: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| MP2 | RUG | - | - | RUG | RUG | G | RUG | RUG | - |
| MP3 | RUG | | | | | | | | - |
| CCD | RUG | RUG | RUG | RUG | RUG | G | RUG | RUG | - |
| CCSD | RUG | RUG | RUG | RUG | RUG | G | RUG | RUG | - |
| CCSDT | RUG | RUG | RUG | | | | RUG | RUG | - |
| CCSDTQ | g | g | | | | | | | - |
| CCSD(T) | RUG | RUG | | | | | | | - |
| CCSDt'[^1] | RUG | RUG | | | | | | | - |
| CC2 | RUG | RUG | RUG | RUG | RUG | G | RUG | RUG | - |
| CC3 | RUG | RUG | | | | | | | - |
| LCCD | RUG | RUG | | | | | | | - |
| LCCSD | RUG | RUG | | | | | | | - |
| QCISD | RUG | RUG | | | | | | | - |
| DCD[^2] | RU | RU | | | | | | | - |
| DCSD[^2] | RU | RU | | | | | | | - |
| rCCD[^3] | RUG | RUG | | | | | | | - |
| drCCD[^3] | RUG | RUG | | | | | | | - |
| DF-CCD | RU | RU | RU | RU | RU | | RU | RU | - |
| DF-CCSD | RU | RU | RU | RU | RU | | RU | RU | - |
| DF-CC2 | RU | RU | RU | RU | RU | | RU | RU | - |
| DF-LCCD | RU | RU | | | | | | | - |
| DF-LCCSD | RU | RU | | | | | | | - |
| DF-QCISD | RU | RU | | | | | | | - |
| DF-DCD[^2] | RU | RU | | | | | | | - |
| DF-DCSD[^2] | RU | RU | | | | | | | - |
| DF-rCCD[^3] | RU | RU | | | | | | | - |
| DF-drCCD[^3] | RU | RU | | | | | | | - |
| CCSD-S-1-1[^4] | RUG | RUG | RUG | | | | RUG | RUG | RUG |
| CCSD-SD-1-1[^4] | RUG | RUG | RUG | | | | RUG | RUG | RUG |
| CCSD-SD-1-2[^4] | RUG | RUG | RUG | | | | RUG | RUG | RUG |

[^1]: Third order amplitudes in an active space ([10.1063/1.478517](https://doi.org/10.1063/1.478517))
[^2]: Distinguishable cluster approaches ([10.1063/1.4944087](https://doi.org/10.1063/1.4944087))
[^3]: Standard and direct ring-CCD approaches, equivalent to RPA and dRPA ([10.1063/1.5032314](https://doi.org/10.1063/1.5032314))
[^4]: Electron-boson coupled cluster approaches ([10.1063/5.0033132](https://doi.org/10.1063/5.0033132))

- R, U, G indicate availability of restricted, unrestricted, and generalised codes.
- Capital letters (R rather than r) indicates that the expressions are optimised for contraction order and subexpression elimination.
Expand Down
2 changes: 1 addition & 1 deletion ebcc/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
__version__ = "1.6.1"

"""List of supported ansatz types."""
METHOD_TYPES = ["MP", "CC", "LCC", "QCI", "QCC", "DC"]
METHOD_TYPES = ["MP", "CC", "LCC", "QCI", "QCC", "DC", "rCC", "drCC"]

import importlib
import os
Expand Down
60 changes: 60 additions & 0 deletions ebcc/codegen/GwdwwrwCCD.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
"""Code generated by `albert` version 0.0.0.

* date: 2024-12-18T11:33:54.016728
* python version: 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0]
* albert version: 0.0.0
* caller: /home/ollie/git/albert/albert/code/einsum.py
* node: ollie-desktop
* system: Linux
* processor: x86_64
* release: 6.8.0-49-generic
"""

from ebcc import numpy as np
from ebcc.util import pack_2e, einsum, dirsum, Namespace


def energy(t2=None, v=None, **kwargs):
"""Code generated by `albert` 0.0.0.

Args:
t2:
v:

Returns:
e_cc:
"""

e_cc = einsum(t2, (0, 1, 2, 3), v.oovv, (0, 1, 2, 3), ()) * 0.25

return e_cc

def update_amps(f=None, t2=None, v=None, **kwargs):
"""Code generated by `albert` 0.0.0.

Args:
f:
t2:
v:

Returns:
t2new:
"""

t2new = np.copy(v.oovv)
t2new += einsum(v.ovvo, (0, 1, 2, 3), t2, (4, 3, 5, 1), (0, 4, 2, 5))
tmp0 = einsum(f.oo, (0, 1), t2, (2, 1, 3, 4), (0, 2, 3, 4))
t2new += np.transpose(tmp0, (0, 1, 3, 2)) * -1
t2new += np.transpose(tmp0, (1, 0, 3, 2))
del tmp0
tmp1 = einsum(f.vv, (0, 1), t2, (2, 3, 4, 1), (2, 3, 0, 4))
t2new += np.transpose(tmp1, (1, 0, 2, 3))
t2new += np.transpose(tmp1, (1, 0, 3, 2)) * -1
del tmp1
tmp2 = np.copy(np.transpose(v.ovvo, (0, 3, 2, 1)))
tmp2 += einsum(v.oovv, (0, 1, 2, 3), t2, (4, 1, 5, 3), (4, 0, 5, 2))
t2new += einsum(tmp2, (0, 1, 2, 3), t2, (4, 1, 5, 3), (4, 0, 5, 2))
del tmp2

return {"t2new": t2new}

60 changes: 60 additions & 0 deletions ebcc/codegen/GwrwCCD.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
"""Code generated by `albert` version 0.0.0.

* date: 2024-12-18T11:25:15.492925
* python version: 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0]
* albert version: 0.0.0
* caller: /home/ollie/git/albert/albert/code/einsum.py
* node: ollie-desktop
* system: Linux
* processor: x86_64
* release: 6.8.0-49-generic
"""

from ebcc import numpy as np
from ebcc.util import pack_2e, einsum, dirsum, Namespace


def energy(t2=None, v=None, **kwargs):
"""Code generated by `albert` 0.0.0.

Args:
t2:
v:

Returns:
e_cc:
"""

e_cc = einsum(v.oovv, (0, 1, 2, 3), t2, (0, 1, 2, 3), ()) * 0.25

return e_cc

def update_amps(f=None, t2=None, v=None, **kwargs):
"""Code generated by `albert` 0.0.0.

Args:
f:
t2:
v:

Returns:
t2new:
"""

t2new = np.copy(v.oovv)
t2new += einsum(v.ovov, (0, 1, 2, 3), t2, (4, 2, 5, 1), (4, 0, 5, 3)) * -1
tmp0 = einsum(t2, (0, 1, 2, 3), f.vv, (4, 3), (0, 1, 4, 2))
t2new += np.transpose(tmp0, (1, 0, 2, 3))
t2new += np.transpose(tmp0, (1, 0, 3, 2)) * -1
del tmp0
tmp1 = einsum(f.oo, (0, 1), t2, (2, 1, 3, 4), (0, 2, 3, 4))
t2new += np.transpose(tmp1, (0, 1, 3, 2)) * -1
t2new += np.transpose(tmp1, (1, 0, 3, 2))
del tmp1
tmp2 = np.copy(np.transpose(v.ovov, (0, 2, 3, 1))) * -1
tmp2 += einsum(t2, (0, 1, 2, 3), v.oovv, (4, 1, 5, 3), (0, 4, 2, 5))
t2new += einsum(t2, (0, 1, 2, 3), tmp2, (4, 1, 5, 3), (4, 0, 5, 2))
del tmp2

return {"t2new": t2new}

77 changes: 77 additions & 0 deletions ebcc/codegen/RDFwdwwrwCCD.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
"""Code generated by `albert` version 0.0.0.

* date: 2024-12-18T11:59:03.642796
* python version: 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0]
* albert version: 0.0.0
* caller: /home/ollie/git/albert/albert/code/einsum.py
* node: ollie-desktop
* system: Linux
* processor: x86_64
* release: 6.8.0-49-generic
"""

from ebcc import numpy as np
from ebcc.util import pack_2e, einsum, dirsum, Namespace


def energy(t2=None, v=None, **kwargs):
"""Code generated by `albert` 0.0.0.

Args:
t2:
v:

Returns:
e_cc:
"""

tmp0 = np.copy(np.transpose(t2, (1, 0, 2, 3))) * -1
tmp0 += np.transpose(t2, (1, 0, 3, 2)) * 2
tmp1 = einsum(v.xov, (0, 1, 2), tmp0, (1, 3, 2, 4), (3, 4, 0)) * 0.5
del tmp0
e_cc = einsum(v.xov, (0, 1, 2), tmp1, (1, 2, 0), ()) * 2
del tmp1

return e_cc

def update_amps(f=None, t2=None, v=None, **kwargs):
"""Code generated by `albert` 0.0.0.

Args:
f:
t2:
v:

Returns:
t2new:
"""

tmp0 = einsum(v.xov, (0, 1, 2), t2, (3, 1, 2, 4), (3, 4, 0))
t2new = einsum(tmp0, (0, 1, 2), tmp0, (3, 4, 2), (0, 3, 1, 4))
tmp1 = einsum(t2, (0, 1, 2, 3), v.xov, (4, 1, 3), (0, 2, 4))
t2new += einsum(tmp1, (0, 1, 2), tmp1, (3, 4, 2), (3, 0, 4, 1)) * 4
t2new += einsum(v.xov, (0, 1, 2), v.xov, (0, 3, 4), (3, 1, 4, 2))
tmp2 = einsum(t2, (0, 1, 2, 3), f.oo, (4, 1), (4, 0, 2, 3))
t2new += np.transpose(tmp2, (0, 1, 3, 2)) * -1
t2new += np.transpose(tmp2, (1, 0, 2, 3)) * -1
del tmp2
tmp3 = einsum(t2, (0, 1, 2, 3), f.vv, (4, 3), (0, 1, 4, 2))
t2new += np.transpose(tmp3, (0, 1, 3, 2))
t2new += np.transpose(tmp3, (1, 0, 2, 3))
del tmp3
tmp4 = einsum(v.xov, (0, 1, 2), tmp0, (3, 4, 0), (3, 1, 4, 2))
tmp7 = np.copy(tmp4)
del tmp4
tmp5 = np.copy(np.transpose(v.xov, (1, 2, 0))) * -1
tmp5 += tmp0
del tmp0
tmp6 = einsum(tmp5, (0, 1, 2), tmp1, (3, 4, 2), (3, 0, 4, 1)) * 2
del tmp1, tmp5
tmp7 += tmp6
del tmp6
t2new += tmp7 * -1
t2new += np.transpose(tmp7, (1, 0, 3, 2)) * -1
del tmp7

return {"t2new": t2new}

96 changes: 96 additions & 0 deletions ebcc/codegen/RDFwrwCCD.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
"""Code generated by `albert` version 0.0.0.

* date: 2024-12-18T11:58:51.658946
* python version: 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0]
* albert version: 0.0.0
* caller: /home/ollie/git/albert/albert/code/einsum.py
* node: ollie-desktop
* system: Linux
* processor: x86_64
* release: 6.8.0-49-generic
"""

from ebcc import numpy as np
from ebcc.util import pack_2e, einsum, dirsum, Namespace


def energy(t2=None, v=None, **kwargs):
"""Code generated by `albert` 0.0.0.

Args:
t2:
v:

Returns:
e_cc:
"""

tmp0 = np.copy(np.transpose(t2, (1, 0, 2, 3))) * 2
tmp0 += np.transpose(t2, (1, 0, 3, 2)) * -1
tmp1 = einsum(tmp0, (0, 1, 2, 3), v.xov, (4, 0, 3), (1, 2, 4)) * 0.5
del tmp0
e_cc = einsum(tmp1, (0, 1, 2), v.xov, (2, 0, 1), ()) * 2
del tmp1

return e_cc

def update_amps(f=None, t2=None, v=None, **kwargs):
"""Code generated by `albert` 0.0.0.

Args:
f:
t2:
v:

Returns:
t2new:
"""

tmp0 = einsum(v.xov, (0, 1, 2), v.xov, (0, 3, 4), (3, 1, 4, 2))
t2new = np.copy(np.transpose(tmp0, (1, 0, 3, 2)))
tmp1 = einsum(t2, (0, 1, 2, 3), v.xov, (4, 1, 2), (0, 3, 4))
t2new += einsum(tmp1, (0, 1, 2), tmp1, (3, 4, 2), (0, 3, 1, 4))
tmp2 = einsum(f.oo, (0, 1), t2, (2, 1, 3, 4), (0, 2, 3, 4))
t2new += np.transpose(tmp2, (0, 1, 3, 2)) * -1
t2new += np.transpose(tmp2, (1, 0, 2, 3)) * -1
del tmp2
tmp3 = einsum(t2, (0, 1, 2, 3), f.vv, (4, 3), (0, 1, 4, 2))
t2new += np.transpose(tmp3, (0, 1, 3, 2))
t2new += np.transpose(tmp3, (1, 0, 2, 3))
del tmp3
tmp4 = einsum(tmp1, (0, 1, 2), v.xov, (2, 3, 4), (0, 3, 1, 4))
tmp10 = np.copy(tmp4)
del tmp4
tmp5 = einsum(v.xoo, (0, 1, 2), v.xvv, (0, 3, 4), (1, 2, 3, 4))
tmp8 = np.copy(np.transpose(tmp5, (1, 0, 3, 2)))
del tmp5
tmp6 = np.copy(np.transpose(v.xov, (1, 2, 0)))
tmp6 += tmp1 * -1
del tmp1
tmp7 = einsum(tmp6, (0, 1, 2), v.xov, (2, 3, 4), (3, 0, 4, 1)) * 2
del tmp6
tmp8 += np.transpose(tmp7, (1, 0, 3, 2)) * -1
del tmp7
tmp9 = einsum(t2, (0, 1, 2, 3), tmp8, (4, 1, 5, 3), (0, 4, 2, 5))
del tmp8
tmp10 += tmp9
del tmp9
t2new += tmp10 * -1
t2new += np.transpose(tmp10, (1, 0, 3, 2)) * -1
del tmp10
tmp11 = einsum(tmp0, (0, 1, 2, 3), t2, (4, 1, 5, 2), (4, 0, 5, 3))
tmp12 = einsum(tmp11, (0, 1, 2, 3), t2, (4, 1, 3, 5), (0, 4, 2, 5))
del tmp11
t2new += tmp12
t2new += np.transpose(tmp12, (1, 0, 3, 2))
del tmp12
tmp13 = np.copy(np.transpose(tmp0, (1, 0, 2, 3)))
tmp13 += np.transpose(tmp0, (1, 0, 3, 2)) * -0.5
del tmp0
tmp14 = einsum(t2, (0, 1, 2, 3), tmp13, (1, 4, 5, 3), (0, 4, 2, 5)) * 2
del tmp13
t2new += einsum(tmp14, (0, 1, 2, 3), t2, (4, 1, 5, 3), (0, 4, 2, 5)) * 2
del tmp14

return {"t2new": t2new}

Loading