Skip to content

Commit fe67aa5

Browse files
konieczny: add init mem fn
1 parent 1801686 commit fe67aa5

2 files changed

Lines changed: 58 additions & 7 deletions

File tree

src/konieczny.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,20 @@ occur in *gens*.
101101
if the items in *gens* do not all have the same degree.
102102
)pbdoc");
103103

104+
thing.def("init",
105+
&Konieczny_::init,
106+
R"pbdoc(
107+
:sig=(self: Konieczny) -> Konieczny:
108+
109+
Reinitialize an existing :any:`Konieczny` object.
110+
111+
This function re-initializes a :any:`Konieczny` instance so that it is in the
112+
same (logical) state as if it had just been default-constructed.
113+
114+
:returns: ``self``.
115+
:rtype: Konieczny
116+
)pbdoc");
117+
104118
// This constructor can't be used directly so isn't documented.
105119
thing.def(py::init<>(), R"pbdoc(
106120
:sig=(self: Konieczny, gens: list[Element]) -> None:
@@ -726,7 +740,7 @@ not already known.
726740
int
727741
)pbdoc");
728742
} // bind_konieczny
729-
} // namespace
743+
} // namespace
730744

731745
void init_konieczny(py::module& m) {
732746
bind_konieczny<BMat8>(m, "BMat8");

tests/test_konieczny.py

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ def test_case_031():
4747
)
4848
assert k.size() == 3125
4949

50-
val = sum(k.D_class_of_element(x.rep()).number_of_idempotents() for x in k.D_classes())
50+
val = sum(
51+
k.D_class_of_element(x.rep()).number_of_idempotents()
52+
for x in k.D_classes()
53+
)
5154
assert val == 196
5255
assert k.number_of_idempotents() == 196
5356
assert list(k.generators()) == [
@@ -73,7 +76,10 @@ def test_case_032():
7376
]
7477
)
7578
assert S.size() == 597369
76-
val = sum(S.D_class_of_element(x.rep()).number_of_idempotents() for x in S.D_classes())
79+
val = sum(
80+
S.D_class_of_element(x.rep()).number_of_idempotents()
81+
for x in S.D_classes()
82+
)
7783
assert val == 8194
7884
assert S.number_of_idempotents() == 8194
7985

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

281287
assert S.current_number_of_regular_D_classes() < 5
282-
assert S.current_number_of_D_classes() - S.number_of_regular_D_classes() < 2117
288+
assert (
289+
S.current_number_of_D_classes() - S.number_of_regular_D_classes() < 2117
290+
)
283291

284292

285293
def test_case_041():
@@ -299,7 +307,10 @@ def test_case_041():
299307
S.run_until(lambda: S.current_number_of_regular_D_classes() > 2)
300308
S.run()
301309
assert S.current_number_of_regular_D_classes() == 5
302-
assert S.current_number_of_D_classes() - S.number_of_regular_D_classes() == 2117
310+
assert (
311+
S.current_number_of_D_classes() - S.number_of_regular_D_classes()
312+
== 2117
313+
)
303314

304315

305316
def check_case_000(Mat):
@@ -403,7 +414,9 @@ def test_case_028():
403414
assert x in S
404415
assert x in S.D_class_of_element(x)
405416
assert PPerm([0, 1, 2, 3, 4, 5, 6, 7], [1, 7, 2, 6, 0, 4, 8, 5], 9) not in S
406-
assert not S.contains(PPerm([0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 8], 9))
417+
assert not S.contains(
418+
PPerm([0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 8], 9)
419+
)
407420
assert S.contains(PPerm([], [], 9))
408421
assert S.size() == 21033
409422
assert S.number_of_D_classes() == 3242
@@ -425,6 +438,27 @@ def test_case_029():
425438
assert S.number_of_D_classes() == 9
426439

427440

441+
def test_konieczny_init():
442+
"symmetric inverse monoid n = 7"
443+
ReportGuard(False)
444+
S = Konieczny(
445+
[
446+
PPerm([0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7], 8),
447+
PPerm([0, 1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7, 0], 8),
448+
PPerm([0, 1, 2, 3, 4, 5, 6, 7], [1, 0, 2, 3, 4, 5, 6, 7], 8),
449+
PPerm([0, 1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7], 8),
450+
]
451+
)
452+
assert S.size() == 1441729
453+
assert S.number_of_D_classes() == 9
454+
S.init()
455+
assert S.number_of_generators() == 0
456+
S.add_generator(
457+
PPerm([0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7], 8)
458+
)
459+
assert S.size() == 1
460+
461+
428462
def test_case_030():
429463
"exceptions"
430464
ReportGuard(False)
@@ -460,4 +494,7 @@ def test_konieczny_return_policy():
460494
assert S.add_generators(gens) is S
461495
assert S.D_class_of_element(gens[0]) is S.D_class_of_element(gens[0])
462496
assert S.generator(0) is S.generator(0)
463-
assert S.D_class_of_element(gens[0]).rep() is S.D_class_of_element(gens[0]).rep()
497+
assert (
498+
S.D_class_of_element(gens[0]).rep()
499+
is S.D_class_of_element(gens[0]).rep()
500+
)

0 commit comments

Comments
 (0)