Skip to content
Merged
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
16 changes: 15 additions & 1 deletion src/konieczny.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,20 @@ occur in *gens*.
if the items in *gens* do not all have the same degree.
)pbdoc");

thing.def("init",
&Konieczny_::init,
R"pbdoc(
:sig=(self: Konieczny) -> Konieczny:

Reinitialize an existing :any:`Konieczny` object.

This function re-initializes a :any:`Konieczny` instance so that it is in the
same (logical) state as if it had just been default-constructed.

:returns: ``self``.
:rtype: Konieczny
)pbdoc");

// This constructor can't be used directly so isn't documented.
thing.def(py::init<>(), R"pbdoc(
:sig=(self: Konieczny, gens: list[Element]) -> None:
Expand Down Expand Up @@ -726,7 +740,7 @@ not already known.
int
)pbdoc");
} // bind_konieczny
} // namespace
} // namespace

void init_konieczny(py::module& m) {
bind_konieczny<BMat8>(m, "BMat8");
Expand Down
49 changes: 43 additions & 6 deletions tests/test_konieczny.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,10 @@ def test_case_031():
)
assert k.size() == 3125

val = sum(k.D_class_of_element(x.rep()).number_of_idempotents() for x in k.D_classes())
val = sum(
k.D_class_of_element(x.rep()).number_of_idempotents()
for x in k.D_classes()
)
assert val == 196
assert k.number_of_idempotents() == 196
assert list(k.generators()) == [
Expand All @@ -73,7 +76,10 @@ def test_case_032():
]
)
assert S.size() == 597369
val = sum(S.D_class_of_element(x.rep()).number_of_idempotents() for x in S.D_classes())
val = sum(
S.D_class_of_element(x.rep()).number_of_idempotents()
for x in S.D_classes()
)
assert val == 8194
assert S.number_of_idempotents() == 8194

Expand Down Expand Up @@ -279,7 +285,9 @@ def test_case_040():
S.run_until(lambda: S.current_number_of_regular_D_classes() > 2)

assert S.current_number_of_regular_D_classes() < 5
assert S.current_number_of_D_classes() - S.number_of_regular_D_classes() < 2117
assert (
S.current_number_of_D_classes() - S.number_of_regular_D_classes() < 2117
)


def test_case_041():
Expand All @@ -299,7 +307,10 @@ def test_case_041():
S.run_until(lambda: S.current_number_of_regular_D_classes() > 2)
S.run()
assert S.current_number_of_regular_D_classes() == 5
assert S.current_number_of_D_classes() - S.number_of_regular_D_classes() == 2117
assert (
S.current_number_of_D_classes() - S.number_of_regular_D_classes()
== 2117
)


def check_case_000(Mat):
Expand Down Expand Up @@ -403,7 +414,9 @@ def test_case_028():
assert x in S
assert x in S.D_class_of_element(x)
assert PPerm([0, 1, 2, 3, 4, 5, 6, 7], [1, 7, 2, 6, 0, 4, 8, 5], 9) not in S
assert not S.contains(PPerm([0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 8], 9))
assert not S.contains(
PPerm([0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 8], 9)
)
assert S.contains(PPerm([], [], 9))
assert S.size() == 21033
assert S.number_of_D_classes() == 3242
Expand All @@ -425,6 +438,27 @@ def test_case_029():
assert S.number_of_D_classes() == 9


def test_konieczny_init():
"symmetric inverse monoid n = 7"
ReportGuard(False)
S = Konieczny(
[
PPerm([0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7], 8),
PPerm([0, 1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7, 0], 8),
PPerm([0, 1, 2, 3, 4, 5, 6, 7], [1, 0, 2, 3, 4, 5, 6, 7], 8),
PPerm([0, 1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7], 8),
]
)
assert S.size() == 1441729
assert S.number_of_D_classes() == 9
S.init()
assert S.number_of_generators() == 0
S.add_generator(
PPerm([0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7], 8)
)
assert S.size() == 1


def test_case_030():
"exceptions"
ReportGuard(False)
Expand Down Expand Up @@ -460,4 +494,7 @@ def test_konieczny_return_policy():
assert S.add_generators(gens) is S
assert S.D_class_of_element(gens[0]) is S.D_class_of_element(gens[0])
assert S.generator(0) is S.generator(0)
assert S.D_class_of_element(gens[0]).rep() is S.D_class_of_element(gens[0]).rep()
assert (
S.D_class_of_element(gens[0]).rep()
is S.D_class_of_element(gens[0]).rep()
)