Sebastien
first commit
4484b8a
import numpy as np
def generate_symetrie_reduction():
# chiffre, ligne, colonne, chiffre ligne colonne
a1_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
a2_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
a3_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
a4_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
a5_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
a6_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
a7_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
a8_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
b1_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
b2_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
b3_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
b4_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
b5_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
b6_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
b7_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
b8_array = np.zeros((9, 9, 9, 9, 9, 9), dtype=float)
for i in range(9):
for j in range(9):
for n in range(9):
a1_array[i, j, n, i, j, n] = 1.0
a2_array[autre_chiffre(i), j, n, i, j, n] = 1.0 / 8.0
a3_array[i, autre_chiffre(j), n, i, j, n] = 1.0 / 8.0
a4_array[np.ix_([i], meme_bloc(j), [n], [i], [j], [n])] = 1.0 / 8.0
a4_array[np.ix_(meme_bloc(i), [j], [n], [i], [j], [n])] = 1.0 / 8.0
a4_array[np.ix_(meme_bloc(i), meme_bloc(j), [n], [i], [j], [n])] = (
1.0 / 8.0
)
a5_array[np.ix_(meme_bloc(i), autre_bloc_b(j), [n], [i], [j], [n])] = (
1.0 / 6.0
)
a6_array[np.ix_(meme_bloc(i), autre_bloc_h(j), [n], [i], [j], [n])] = (
1.0 / 6.0
)
a7_array[np.ix_(autre_bloc_b(i), meme_bloc(j), [n], [i], [j], [n])] = (
1.0 / 6.0
)
a8_array[np.ix_(autre_bloc_h(i), meme_bloc(j), [n], [i], [j], [n])] = (
1.0 / 6.0
)
b1_array[i, j, n, i, j, autre_chiffre(n)] = 1.0 / 8.0
b2_array[
np.ix_(autre_chiffre(i), [j], autre_chiffre(n), [i], [j], [n])
] = (1.0 / 64.0)
b3_array[
np.ix_([i], autre_chiffre(j), autre_chiffre(n), [i], [j], [n])
] = (1.0 / 64.0)
b4_array[np.ix_([i], meme_bloc(j), autre_chiffre(n), [i], [j], [n])] = (
1.0 / 64.0
)
b4_array[np.ix_(meme_bloc(i), [j], autre_chiffre(n), [i], [j], [n])] = (
1.0 / 64.0
)
b4_array[
np.ix_(meme_bloc(i), meme_bloc(j), autre_chiffre(n), [i], [j], [n])
] = (1.0 / 64.0)
b5_array[
np.ix_(
meme_bloc(i), autre_bloc_b(j), autre_chiffre(n), [i], [j], [n]
)
] = (1.0 / 48.0)
b6_array[
np.ix_(
meme_bloc(i), autre_bloc_h(j), autre_chiffre(n), [i], [j], [n]
)
] = (1.0 / 48.0)
b7_array[
np.ix_(
autre_bloc_b(i), meme_bloc(j), autre_chiffre(n), [i], [j], [n]
)
] = (1.0 / 48.0)
b8_array[
np.ix_(
autre_bloc_h(i), meme_bloc(j), autre_chiffre(n), [i], [j], [n]
)
] = (1.0 / 48.0)
list_arr = [
a1_array,
a2_array,
a3_array,
a4_array,
a5_array,
a6_array,
a7_array,
a8_array,
b1_array,
b2_array,
b3_array,
b4_array,
b5_array,
b6_array,
b7_array,
b8_array,
]
full_sym = np.zeros((9, 9, 9, 9, 9, 9, len(list_arr)))
for i, arr in enumerate(list_arr):
full_sym[:, :, :, :, :, :, i] = arr
full_sym = full_sym.reshape(9 * 9 * 9, 9 * 9 * 9, len(list_arr))
return full_sym
def meme_bloc(i):
bloc_start = 3 * (i // 3)
bloc_end = bloc_start + 2
if i == bloc_start:
return [bloc_start + 1, bloc_end]
elif i == bloc_end:
return [bloc_start, bloc_start + 1]
else:
return [bloc_start, bloc_end]
def autre_bloc(i):
bloc_start = 3 * (i // 3)
all_in_bloc = [bloc_start, bloc_start + 1, bloc_start + 2]
list_to_return = []
for n in range(9):
if not (n in all_in_bloc):
list_to_return.append(n)
return list_to_return
def autre_bloc_b(i):
bloc_start = 3 * (i // 3)
all_in_bloc = [bloc_start, bloc_start + 1, bloc_start + 2]
list_to_return = []
for n in range(9):
if not (n in all_in_bloc):
list_to_return.append(n)
return list_to_return[:3]
def autre_bloc_h(i):
bloc_start = 3 * (i // 3)
all_in_bloc = [bloc_start, bloc_start + 1, bloc_start + 2]
list_to_return = []
for n in range(9):
if not (n in all_in_bloc):
list_to_return.append(n)
return list_to_return[3:]
def autre_chiffre(i):
return [n for n in range(9) if n != i]
mat_sym = generate_symetrie_reduction()
mat_sym = np.moveaxis(mat_sym, (0, 1, 2), (2, 0, 1))