import heurams.kernel.particles as pt import heurams.kernel.puzzles as puz import random from .states import PhaserState class Fission: """裂变器: 单原子调度展开器""" def __init__(self, atom: pt.Atom, phase=PhaserState.RECOGNITION): self.atom = atom #print(f"{phase.value}") self.orbital_schedule = atom.registry["orbital"]["schedule"][phase.value] # type: ignore self.orbital_puzzles = atom.registry["orbital"]["puzzles"] # print(self.orbital_schedule) self.puzzles = list() for item, possibility in self.orbital_schedule: # type: ignore print(f"ad:{item}") if not isinstance(possibility, float): possibility = float(possibility) while possibility > 1: self.puzzles.append( { "puzzle": puz.puzzles[self.orbital_puzzles[item]["__origin__"]], "alia": item, } ) possibility -= 1 if random.random() <= possibility: self.puzzles.append( { "puzzle": puz.puzzles[self.orbital_puzzles[item]["__origin__"]], "alia": item, } ) print(f"ok:{item}") def generate(self): yield from self.puzzles