GitLab Repo

amachine.am_create.am_random_structured_composition

 1from ..am_hmm import HMM
 2from ..am_structured_symbol_set import StructuredSymbolSet
 3from .am_structured_isomorphic_rotation import structured_isomorphic_rotation
 4from .am_structured_composition import structured_composition
 5
 6def random_structured_composition(
 7    composition_id                  : str, 
 8    composition_rigidity            : float,
 9    instances_per_component         : int,
10    composition_connectivity_factor : float,
11    component_repetition_pentalty   : float,
12    component_residency_factor      : float,
13    component_sizes                 : list[int],
14    component_connectedness         : list[float],
15    component_randomness            : list[float],
16    symbol_set                      : StructuredSymbolSet,
17    end_of_component_symbols        : set[str],
18    max_search_time                 : int = 60,
19    random_seed                     : int | None = None
20) -> HMM : 
21
22    all_components : dict[str,list[am.HMM] ] = {}
23    component_instance_counts : dict[str,list[int]] = {}
24
25    for iso_idx, component_size in enumerate( component_sizes ) :
26
27        iso_id = f"{iso_idx}"
28
29        all_components[ iso_id ] = structured_isomorphic_rotation(
30            isoclass_name=f"c{composition_id}.{iso_idx}",
31            n_states=component_size,
32            symbol_set=symbol_set,
33            connectedness=component_connectedness[ iso_idx ],
34            randomness=component_randomness[ iso_idx ],
35            star_joined=False,
36            max_search_time=max_search_time,
37            random_seed=random_seed
38        )
39
40        component_instance_counts[ iso_id ] = [
41            instances_per_component for _ in all_components[ iso_id ] 
42        ]
43
44    return structured_composition(
45        composition_id=composition_id,
46        core_alphabet=symbol_set.symbols,
47        composition_rigidity=composition_rigidity,
48        component_groups=all_components,
49        instances_per_component=component_instance_counts,
50        component_residency_factor=component_residency_factor,
51        component_repetition_penalty=component_repetition_pentalty,
52        composition_connectivity_factor=composition_connectivity_factor,
53        instance_cohesion_randomness=0.2,
54        end_of_component_symbols=end_of_component_symbols,
55        symbol_cohesion=symbol_set.symbol_cohesion,
56        max_search_time=max_search_time,
57        random_seed=random_seed
58    )
def random_structured_composition( composition_id: str, composition_rigidity: float, instances_per_component: int, composition_connectivity_factor: float, component_repetition_pentalty: float, component_residency_factor: float, component_sizes: list[int], component_connectedness: list[float], component_randomness: list[float], symbol_set: amachine.am_structured_symbol_set.StructuredSymbolSet, end_of_component_symbols: set[str], max_search_time: int = 60, random_seed: int | None = None) -> amachine.am_hmm.HMM:
 8def random_structured_composition(
 9    composition_id                  : str, 
10    composition_rigidity            : float,
11    instances_per_component         : int,
12    composition_connectivity_factor : float,
13    component_repetition_pentalty   : float,
14    component_residency_factor      : float,
15    component_sizes                 : list[int],
16    component_connectedness         : list[float],
17    component_randomness            : list[float],
18    symbol_set                      : StructuredSymbolSet,
19    end_of_component_symbols        : set[str],
20    max_search_time                 : int = 60,
21    random_seed                     : int | None = None
22) -> HMM : 
23
24    all_components : dict[str,list[am.HMM] ] = {}
25    component_instance_counts : dict[str,list[int]] = {}
26
27    for iso_idx, component_size in enumerate( component_sizes ) :
28
29        iso_id = f"{iso_idx}"
30
31        all_components[ iso_id ] = structured_isomorphic_rotation(
32            isoclass_name=f"c{composition_id}.{iso_idx}",
33            n_states=component_size,
34            symbol_set=symbol_set,
35            connectedness=component_connectedness[ iso_idx ],
36            randomness=component_randomness[ iso_idx ],
37            star_joined=False,
38            max_search_time=max_search_time,
39            random_seed=random_seed
40        )
41
42        component_instance_counts[ iso_id ] = [
43            instances_per_component for _ in all_components[ iso_id ] 
44        ]
45
46    return structured_composition(
47        composition_id=composition_id,
48        core_alphabet=symbol_set.symbols,
49        composition_rigidity=composition_rigidity,
50        component_groups=all_components,
51        instances_per_component=component_instance_counts,
52        component_residency_factor=component_residency_factor,
53        component_repetition_penalty=component_repetition_pentalty,
54        composition_connectivity_factor=composition_connectivity_factor,
55        instance_cohesion_randomness=0.2,
56        end_of_component_symbols=end_of_component_symbols,
57        symbol_cohesion=symbol_set.symbol_cohesion,
58        max_search_time=max_search_time,
59        random_seed=random_seed
60    )