Cleanup
This commit is contained in:
@@ -82,41 +82,6 @@ class Library:
|
||||
object.__setattr__(self, 'chains', {})
|
||||
def connecting(self, count: int, displacement: int | None = None) -> tuple[Sequence, ...]:
|
||||
return tuple(s for s in self.paths.get(count, ()) if displacement is None or s.offsets()[-1] == displacement)
|
||||
def chained(self, count):
|
||||
return self.retrieve(count)
|
||||
def retrieve(self, count, displacement=0, direction=0):
|
||||
key = (count, displacement, direction)
|
||||
if key in self.chains:
|
||||
return self.chains[key]
|
||||
if not 1 <= count <= 16:
|
||||
return ()
|
||||
states, remaining = (Path((), ()),), count - 1
|
||||
while remaining:
|
||||
size = min(3, remaining)
|
||||
options = self.connecting(size + 1)
|
||||
if not options:
|
||||
size = next((n for n in range(size - 1, 0, -1) if self.connecting(n + 1)), 0)
|
||||
if not size:
|
||||
return ()
|
||||
options = self.connecting(size + 1)
|
||||
desired = displacement * (count - 1 - remaining + size) / max(1, count - 1)
|
||||
def rank(path):
|
||||
offsets = path.offsets()
|
||||
motion = offsets[-1]
|
||||
return abs(motion - desired) + (2 if direction and motion * direction < 0 else 0), max(offsets) - min(offsets), max(map(abs, path.steps), default=0), path.sources
|
||||
# Retrieve from the entire authored vocabulary, conditioned on each prefix.
|
||||
following = []
|
||||
for prior in states:
|
||||
if count > 4:
|
||||
local = self.retrieve(size + 1, round(desired - prior.offsets()[-1]), direction)
|
||||
paths = (Path(prior.steps + s.steps, prior.sources + s.sources) for s in local)
|
||||
else:
|
||||
paths = (Path(prior.steps + s.steps, prior.sources + (s.id,)) for s in options)
|
||||
following.extend(diverse(paths, rank, lambda p: family(p.steps), generator.solo.policy.DEFAULT.retrieval))
|
||||
states = diverse(following, rank, lambda p: (family(p.steps), (p.offsets()[-1] > 0) - (p.offsets()[-1] < 0)), generator.solo.policy.DEFAULT.retrieval)
|
||||
remaining -= size
|
||||
self.chains[key] = states
|
||||
return states
|
||||
|
||||
def read(path: pathlib.Path, identifier: str, count: int) -> Sequence:
|
||||
document = generator.musicxml.load_musicxml(path)
|
||||
|
||||
Reference in New Issue
Block a user