-
Notifications
You must be signed in to change notification settings - Fork 0
/
product.py
41 lines (36 loc) · 1.13 KB
/
product.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
def get_compatible_subshell_distributions(nelec: int, max_subshell_ocupation: list):
a = [nelec] + [0 for _ in max_subshell_ocupation[1:]]
while True:
i = 0
while (
a[i] >= max_subshell_ocupation[i] + 1
and i < len(max_subshell_ocupation) - 1
):
a[i + 1] += a[i] - max_subshell_ocupation[i]
a[i] = max_subshell_ocupation[i]
i += 1
if a[-1] >= max_subshell_ocupation[-1] + 1:
return
yield a
i0 = 1
surplus = 0
while True:
for i in range(i0, len(max_subshell_ocupation)):
if a[i] < max_subshell_ocupation[i]:
a[i] += 1
surplus += 1
break
else:
surplus -= a[i]
a[i] = 0
else:
return
if a[0] >= surplus:
break
else:
surplus -= a[i0]
a[i0] = 0
i0 += 1
if i0 == len(max_subshell_ocupation):
return
a[0] -= surplus