Invariant contiguous range requirement removal
- Vertex invariants for use in isomorphism algorithm must no longer have
low upper bounds due to a hidden allocation linear in the maximum
encountered vertex invariant.
- Vertex invariants must no longer be convertible to `size_t`, but can
be any comparable and hashable types
- Build `unordered_map`-backed invariant multiplicity map efficiently
from sorted vertex invariants
max_invariant initialization
- Zero-initialize `max_invariant` and ensure no UB happens since
`invar?_array` vecs may be empty if their corresponding graph is empty
expand doc
- More explanation on why `vertex_max_invariant` is ignored
Isomorphism: Ignore vertex_max_invariant
- vertex_max_invariant and invariant2.max() are misnomers since what is
expected is an upper exclusive bound on the possible invariant values,
not their maximum value.
- The parameter can be ignored and the upper exclusive bound found
cheaply at the start of test_isomorphism
- Removes the additional requirement of a nullary max member function on
invariant2
Isomorphism docs
- The expected concept for invariant functors is AdaptableUnaryFunction,
not UnaryFunction
- Null vertices can appear in the isomorphism map output if both graphs
contain disconnected vertices, add a note to that parameter's
documentation