GitLab Repo

amachine.am_create.am_structured_isomorphic_permutations

 1from typing import Literal
 2
 3from ..am_hmm import HMM
 4from ..am_structured_symbol_set import StructuredSymbolSet
 5from ..am_id_generator import next_group_id
 6
 7from .am_random_structured import random_structured
 8from .am_structured_isomorphic_permutations_of import structured_isomorphic_permutations_of
 9
10import numpy as np
11
12def structured_isomorphic_permutations(
13    n_states : int,
14    symbol_set : StructuredSymbolSet,
15    connectedness : float,
16    randomness : float,
17    n_permutations : int,
18    permutation_group : Literal[ "cyclic_product", "symmetric" ] = "symmetric",
19    selection_mode : Literal[ "sequential", "random", "cohesive" ] = "cohesive",
20    invariant_categories : set[int] | None = None,
21    np_rng : np.random.Generator | None = None ) -> tuple[ list[HMM], str ]:
22
23    group_id = next_group_id()
24
25    m = random_structured(
26        n_states=n_states,
27        symbol_set=symbol_set,
28        connectedness=connectedness,
29        randomness=randomness,
30        ensure_strongly_connected=True,
31        ensure_minimal=True,
32        np_rng=np_rng
33    )
34
35    permutations = structured_isomorphic_permutations_of(
36        m=m,
37        symbol_set=symbol_set,
38        n_permutations=n_permutations,
39        permutation_group=permutation_group,
40        selection_mode=selection_mode,
41        invariant_categories=invariant_categories,
42        np_rng=np_rng
43    )
44
45    return ( permutations, group_id )
def structured_isomorphic_permutations( n_states: int, symbol_set: amachine.am_structured_symbol_set.StructuredSymbolSet, connectedness: float, randomness: float, n_permutations: int, permutation_group: Literal['cyclic_product', 'symmetric'] = 'symmetric', selection_mode: Literal['sequential', 'random', 'cohesive'] = 'cohesive', invariant_categories: set[int] | None = None, np_rng: numpy.random._generator.Generator | None = None) -> tuple[list[amachine.am_hmm.HMM], str]:
13def structured_isomorphic_permutations(
14    n_states : int,
15    symbol_set : StructuredSymbolSet,
16    connectedness : float,
17    randomness : float,
18    n_permutations : int,
19    permutation_group : Literal[ "cyclic_product", "symmetric" ] = "symmetric",
20    selection_mode : Literal[ "sequential", "random", "cohesive" ] = "cohesive",
21    invariant_categories : set[int] | None = None,
22    np_rng : np.random.Generator | None = None ) -> tuple[ list[HMM], str ]:
23
24    group_id = next_group_id()
25
26    m = random_structured(
27        n_states=n_states,
28        symbol_set=symbol_set,
29        connectedness=connectedness,
30        randomness=randomness,
31        ensure_strongly_connected=True,
32        ensure_minimal=True,
33        np_rng=np_rng
34    )
35
36    permutations = structured_isomorphic_permutations_of(
37        m=m,
38        symbol_set=symbol_set,
39        n_permutations=n_permutations,
40        permutation_group=permutation_group,
41        selection_mode=selection_mode,
42        invariant_categories=invariant_categories,
43        np_rng=np_rng
44    )
45
46    return ( permutations, group_id )