#!/usr/bin/env python3

from Cryptotools.Groups.group import Group
from Cryptotools.Utils.utils import gcd
import matplotlib.pyplot as plt


n = 18
def operation(e1, e2, n) -> int:
    return e1 * e2 % n

# Generate the group G
g = list()
for i in range(1, n):
    #if gcd(i, n) == 1:
    g.append(i)

G = Group(n = n, g = g, ope=operation)
print(f"n = {n}")
print(f"G = {G.getG()}")

if G.closure() is False:
    print("The closure law is not respected. It's not an abelian (commutative) group")
else:
    print("It is a closure group")

if G.associative() is False:
    print("The associative law is not respected. It's not a group")
else:
    print("It is an associative group")

if G.identity() is False:
    print("The group hasn't an identity element")
else:
    print(f"Identity: {G.getIdentity()}")

if G.reverse() is False:
    print(f"The group hasn't a reverse")
else:
    print(f"Reverses: {G.getReverses()}")

#reverses = G.getReverses()
#plt.rcParams["figure.figsize"] = [7.00, 3.50]
#plt.rcParams["figure.autolayout"] = True
#for key, value in reverses.items():
#    x = key
#    y = value
#    plt.plot(x, y, marker="o", markersize=2, markeredgecolor="blue")
#    #plt.Circle((0, n), 0.2, color='r')
#
#plt.xlim(0, n)
#plt.ylim(0, n)
#plt.grid()
#plt.show()

