fock_basis

edrixs.fock_basis.combination(n, m)[source]

Calculate the combination \(C_{n}^{m}\),

\[C_{n}^{m} = \frac{n!}{m!(n-m)!}.\]
Parameters
n: int

Number n.

m: int

Number m.

Returns
res: int

The calculated result.

Examples

>>> import edrixs
>>> edrixs.combination(6, 2)
15
edrixs.fock_basis.fock_bin(n, k)[source]

Return all the possible \(n\)-length binary where \(k\) of \(n\) digitals are set to 1.

Parameters
n: int

Binary length \(n\).

k: int

How many digitals are set to be 1.

Returns
res: list of int-lists

A list of list containing the binary digitals.

Examples

>>> import edrixs
>>> edrixs.fock_bin(4, 2)
[[1, 1, 0, 0],
 [1, 0, 1, 0],
 [1, 0, 0, 1],
 [0, 1, 1, 0],
 [0, 1, 0, 1],
 [0, 0, 1, 1]]
edrixs.fock_basis.get_fock_basis_by_NJz(norb, N, jz_list)[source]

Get decimal digitals to represent Fock states, use good quantum number:

  • total angular momentum \(J_{z}\)

Parameters
norb: int

Number of orbitals.

N: int

Number of total occupancy.

jz_list: list of int

Quantum number \(j_{z}\) for each orbital.

Returns
res: dict

A dictionary containing the decimal digitals, the key is good quantum numbers \(j_{z}\), the value is a list of int.

Examples

>>> import edrixs
>>> edrixs.get_fock_basis_by_NJz(6, 2, [-1, 1, -3, -1, 1, 3])
{
 -6: [],
 -5: [],
 -4: [5, 12],
 -3: [],
 -2: [6, 9, 20],
 -1: [],
  0: [3, 10, 17, 36, 24],
  1: [],
  2: [18, 33, 40],
  3: [],
  4: [34, 48],
  5: [],
  6: []
}
edrixs.fock_basis.get_fock_basis_by_NLz(norb, N, lz_list)[source]

Get decimal digitals to represent Fock states, use good quantum number:

  • orbital angular momentum \(L_{z}\)

Parameters
norb: int

Number of orbitals.

N: int

Number of total occupancy.

lz_list: list of int

Quantum number \(l_{z}\) for each orbital.

Returns
res: dict

A dictionary containing the decimal digitals, the key is good quantum numbers \(L_{z}\), the value is a list of int.

Examples

>>> import edrixs
>>> edrixs.get_fock_basis_by_NLz(6, 2, [-1, -1, 0, 0, 1, 1])
{
 -2: [3],
 -1: [5, 6, 9, 10],
  0: [12, 17, 18, 33, 34],
  1: [20, 36, 24, 40],
  2: [48]
}
edrixs.fock_basis.get_fock_basis_by_NSz(norb, N, sz_list)[source]

Get decimal digitals to represent Fock states, use good quantum number:

  • spin angular momentum \(S_{z}\)

Parameters
norb: int

Number of orbitals.

N: int

Number of total occupancy.

sz_list: list of int

Quantum number \(s_{z}\) for each orbital.

Returns
res: dict

A dictionary containing the decimal digitals, the key is good quantum numbers \(S_{z}\), the value is a list of int.

Examples

>>> import edrixs
>>> edrixs.get_fock_basis_by_NSz(6, 2, [1, -1, 1, -1, 1, -1])
{
 -2: [10, 34, 40],
 -1: [],
  0: [3, 6, 9, 12, 18, 33, 36, 24, 48],
  1: [],
  2: [5, 17, 20]
}
edrixs.fock_basis.get_fock_basis_by_N_LzSz(norb, N, lz_list, sz_list)[source]

Get decimal digitals to represent Fock states, use good quantum number:

  • orbital angular momentum \(L_{z}\)

  • spin angular momentum \(S_{z}\)

Parameters
norb: int

Number of orbitals.

N: int

Number of total occupancy.

lz_list: list of int

Quantum number \(l_{z}\) for each orbital.

sz_list: list of int

Quantum number \(s_{z}\) for each orbital.

Returns
basis: dict

A dictionary containing the decimal digitals, the key is a tuple containing good quantum numbers ( \(l_{z}\), \(s_{z}\)), the value is a list of int.

Examples

>>> import edrixs
>>> edrixs.get_fock_basis_by_N_LzSz(6, 2, [-1, -1, 0, 0, 1, 1], [1, -1, 1, -1, 1, -1])
{
 (-2, -2): [],
 (-2, -1): [],
  (-2, 0): [3],
  (-2, 1): [],
  (-2, 2): [],
 (-1, -2): [10],
 (-1, -1): [],
  (-1, 0): [6, 9],
  (-1, 1): [],
  (-1, 2): [5],
  (0, -2): [34],
  (0, -1): [],
   (0, 0): [12, 18, 33],
   (0, 1): [],
   (0, 2): [17],
  (1, -2): [40],
  (1, -1): [],
   (1, 0): [36, 24],
   (1, 1): [],
   (1, 2): [20],
  (2, -2): [],
  (2, -1): [],
   (2, 0): [48],
   (2, 1): [],
   (2, 2): []
}
edrixs.fock_basis.get_fock_basis_by_N_abelian(norb, N, a_list)[source]

Get decimal digitals to represent Fock states, use some Abelian good quantum number.

Parameters
norb: int

Number of orbitals.

N: int

Number of total occupancy.

a_list: list of int

Quantum number of the Abelian symmetry for each orbital.

Returns
basis: dict

A dictionary containing the decimal digitals, the key is good quantum numbers, the value is a list of int.

edrixs.fock_basis.get_fock_bin_by_N(*args)[source]

Get binary form to represent a Fock state.

Parameters
args: ints

args[0]: number of orbitals for 1st-shell,

args[1]: number of occupancy for 1st-shell,

args[2]: number of orbitals for 2nd-shell,

args[3]: number of occupancy for 2nd-shell,

args[ \(2N-2\)]: number of orbitals for \(N\) th-shell,

args[ \(2N-1\)]: number of occupancy for \(N\) th-shell.

Returns
result: list of int list

The binary form of Fock states.

Examples

>>> import edrixs
>>> edrixs.get_fock_bin_by_N(4, 2)
[[1, 1, 0, 0],
 [1, 0, 1, 0],
 [1, 0, 0, 1],
 [0, 1, 1, 0],
 [0, 1, 0, 1],
 [0, 0, 1, 1]]
>>> edrixs.get_fock_bin_by_N(4, 2, 2, 1)
[[1, 1, 0, 0, 1, 0],
 [1, 0, 1, 0, 1, 0],
 [1, 0, 0, 1, 1, 0],
 [0, 1, 1, 0, 1, 0],
 [0, 1, 0, 1, 1, 0],
 [0, 0, 1, 1, 1, 0],
 [1, 1, 0, 0, 0, 1],
 [1, 0, 1, 0, 0, 1],
 [1, 0, 0, 1, 0, 1],
 [0, 1, 1, 0, 0, 1],
 [0, 1, 0, 1, 0, 1],
 [0, 0, 1, 1, 0, 1]]
edrixs.fock_basis.get_fock_full_N(norb, N)[source]

Get the decimal digitals to represent Fock states.

Parameters
norb: int

Number of orbitals.

N: int

Number of occupancy.

Returns
res: list of int

The decimal digitals to represent Fock states.

Examples

>>> import edrixs
>>> edrixs.fock_bin(4,2)
[[1, 1, 0, 0],
 [1, 0, 1, 0],
 [0, 1, 1, 0],
 [1, 0, 0, 1],
 [0, 1, 0, 1],
 [0, 0, 1, 1]]
>>> import edrixs
>>> edrixs.get_fock_full_N(4,2)
[3, 5, 6, 9, 10, 12]
edrixs.fock_basis.write_fock_dec_by_N(N, r, fname='fock_i.in')[source]

Get decimal digitals to represent Fock states, sort them by ascending order and then write them to file.

Parameters
N: int

Number of orbitals.

r: int

Number of occuancy.

fname: string

File name.

Returns
ndim: int

The dimension of the Hilbert space

Examples

>>> import edrixs
>>> edrixs.write_fock_dec_by_N(4, 2, 'fock_i.in')
file fock_i.in looks like
15
3
5
6
9
10
12
17
18
20
24
33
34
36
40
48

where, the first line is the total numer of Fock states, and the following lines are the Fock states in decimal form.