amachine.am_syntagmatics
1from abc import ABC, abstractmethod 2import warnings 3from dataclasses import dataclass, field 4from typing import Callable 5 6from .am_symbol import Symbol 7from .am_machine import Machine 8from .am_cohesion import CohesionKernel 9 10TNorm = Callable[[float, float], float] 11 12PRODUCT : TNorm = lambda a, b: a * b 13MINIMUM : TNorm = lambda a, b: min(a, b) 14LUKASIEWICZ : TNorm = lambda a, b: max(0.0, a + b - 1.0) 15 16class SyntagmaticRule(ABC): 17 @abstractmethod 18 def applies(self, domain ) -> bool:... 19 def cohesion_scores(self, symbol : Symbol) -> dict[str, float]:... 20 21@dataclass 22class ExplicitCohesionRule(SyntagmaticRule): 23 24 machine : Machine 25 domains : set[str] 26 kernel : CohesionKernel 27 28 def applies(self,domain) : 29 return domain in self.domains 30 31 def cohesion_score(self, source : Symbol, symbols : set[Symbol] ) -> dict[str, float]: 32 return self.kernel.cohesion_scores( source, symbols ) 33 34@dataclass 35class Syntagmatics: 36 """ 37 Defines the syntagmatic structure encompassing selection, 38 cohesion, variability, and scope constraints. 39 40 Also defines a context (e.g., the model topology) dependent stochastic groupoid 41 """ 42 rules : list[SyntagmaticRule] = field(default_factory=list) 43 t_norm : TNorm = field(default=PRODUCT) 44 45 def _combine_cohesion_scores(self, source: str, domain: set[str]) -> dict[str, float]: 46 active = [r for r in self.rules if r.applies(domain)] 47 symbols = set.intersection(*(set(r.symbols) for r in active)) 48 scores = {s: 1.0 for s in symbols} 49 for rule in active: 50 for s, w in rule.cohesion_scores(source, symbols).items(): 51 scores[s] = self.t_norm(scores[s], w) 52 return scores 53 54 def selection_probabilities(self, source: str, domain: set[str]) -> dict[str, float]: 55 return self._normalize(source, self._combine_cohesion_scores(source, domain))
TNorm =
typing.Callable[[float, float], float]
def
PRODUCT(a, b):
13PRODUCT : TNorm = lambda a, b: a * b
def
MINIMUM(a, b):
14MINIMUM : TNorm = lambda a, b: min(a, b)
def
LUKASIEWICZ(a, b):
15LUKASIEWICZ : TNorm = lambda a, b: max(0.0, a + b - 1.0)
class
SyntagmaticRule(abc.ABC):
17class SyntagmaticRule(ABC): 18 @abstractmethod 19 def applies(self, domain ) -> bool:... 20 def cohesion_scores(self, symbol : Symbol) -> dict[str, float]:...
Helper class that provides a standard way to create an ABC using inheritance.
20 def cohesion_scores(self, symbol : Symbol) -> dict[str, float]:...
22@dataclass 23class ExplicitCohesionRule(SyntagmaticRule): 24 25 machine : Machine 26 domains : set[str] 27 kernel : CohesionKernel 28 29 def applies(self,domain) : 30 return domain in self.domains 31 32 def cohesion_score(self, source : Symbol, symbols : set[Symbol] ) -> dict[str, float]: 33 return self.kernel.cohesion_scores( source, symbols )
ExplicitCohesionRule( machine: amachine.am_machine.Machine, domains: set[str], kernel: amachine.am_cohesion.CohesionKernel)
machine: amachine.am_machine.Machine
def
cohesion_score( self, source: amachine.am_symbol.Symbol, symbols: set[amachine.am_symbol.Symbol]) -> dict[str, float]:
Inherited Members
@dataclass
class
Syntagmatics:
35@dataclass 36class Syntagmatics: 37 """ 38 Defines the syntagmatic structure encompassing selection, 39 cohesion, variability, and scope constraints. 40 41 Also defines a context (e.g., the model topology) dependent stochastic groupoid 42 """ 43 rules : list[SyntagmaticRule] = field(default_factory=list) 44 t_norm : TNorm = field(default=PRODUCT) 45 46 def _combine_cohesion_scores(self, source: str, domain: set[str]) -> dict[str, float]: 47 active = [r for r in self.rules if r.applies(domain)] 48 symbols = set.intersection(*(set(r.symbols) for r in active)) 49 scores = {s: 1.0 for s in symbols} 50 for rule in active: 51 for s, w in rule.cohesion_scores(source, symbols).items(): 52 scores[s] = self.t_norm(scores[s], w) 53 return scores 54 55 def selection_probabilities(self, source: str, domain: set[str]) -> dict[str, float]: 56 return self._normalize(source, self._combine_cohesion_scores(source, domain))
Defines the syntagmatic structure encompassing selection, cohesion, variability, and scope constraints.
Also defines a context (e.g., the model topology) dependent stochastic groupoid
Syntagmatics( rules: list[SyntagmaticRule] = <factory>, t_norm: Callable[[float, float], float] = <function <lambda>>)
rules: list[SyntagmaticRule]