Dramatically reduce memory use
This commit is contained in:
parent
0d217e9326
commit
6772b579ca
|
@ -140,32 +140,21 @@ def audio_bytestream(data: numpy.ndarray, step: int, lookahead_steps: int,
|
|||
next_tick = int(eta.i * dlen / 1000)
|
||||
|
||||
if frame_offset >= 2043: # XXX
|
||||
lookahead_steps = min_lookahead_steps + 120 # XXX parametrize
|
||||
lookahead_steps = min_lookahead_steps + 130 # XXX parametrize
|
||||
else:
|
||||
lookahead_steps = min_lookahead_steps
|
||||
|
||||
# Compute all possible opcode sequences for this frame offset
|
||||
candidate_opcodes, voltages, lookahead_steps = \
|
||||
next_candidate_opcodes, voltages, lookahead_steps = \
|
||||
opcodes.candidate_opcodes(
|
||||
frame_horizon(frame_offset, lookahead_steps),
|
||||
lookahead_steps, opcode if frame_offset == 2047 else None)
|
||||
# print(frame_offset, voltages.shape, voltages.nbytes)
|
||||
opcode_idx = lookahead.evolve_return_best(
|
||||
sp, y1, y2, voltage1, voltage2, voltage1 * voltages,
|
||||
data[i:i+lookahead_steps])
|
||||
|
||||
# Pick the opcode sequence that minimizes the total squared error
|
||||
# relative to the data waveform.
|
||||
# errors = total_error(
|
||||
# all_positions * sp.scale, data[i:i + lookahead_steps])
|
||||
# opcode_idx = numpy.argmin(errors).item()
|
||||
# if frame_offset == 2046:
|
||||
# print("XXX", lookahead_steps)
|
||||
# print(opcode_idx)
|
||||
# for i, e in enumerate(errors):
|
||||
# print(i, e, candidate_opcodes[i])
|
||||
# Next opcode
|
||||
opcode = candidate_opcodes[opcode_idx][0]
|
||||
# opcode = opcode_seq.__next__()
|
||||
opcode = next_candidate_opcodes[opcode_idx]
|
||||
|
||||
opcode_length = opcodes.cycle_length(opcode)
|
||||
opcode_counts[opcode] += 1
|
||||
|
@ -190,8 +179,7 @@ def audio_bytestream(data: numpy.ndarray, step: int, lookahead_steps: int,
|
|||
if new_error > 0.3:
|
||||
clicks += 1
|
||||
print(frame_offset, i / sample_rate, opcode, new_error,
|
||||
numpy.mean(data[i:i + opcode_length])) # , "<----" if \
|
||||
# new_error > 0.3 else "")
|
||||
numpy.mean(data[i:i + opcode_length]))
|
||||
|
||||
# print(frame_offset, i / sample_rate, opcode)
|
||||
for v in all_positions[0]:
|
||||
|
|
10
opcodes.py
10
opcodes.py
|
@ -20,7 +20,7 @@ def voltage_schedule(op: player_op.PlayerOp) -> numpy.ndarray:
|
|||
return op.toggles
|
||||
|
||||
|
||||
@functools.lru_cache(None)
|
||||
#@functools.lru_cache(None)
|
||||
def opcode_choices(
|
||||
frame_offset: int,
|
||||
eof_stage_1_op: player_op.PlayerOp = None) -> List[player_op.PlayerOp]:
|
||||
|
@ -39,7 +39,7 @@ def opcode_choices(
|
|||
list(opcodes_generated.AUDIO_OPS), key=cycle_length, reverse=True)
|
||||
|
||||
|
||||
@functools.lru_cache(None)
|
||||
#@functools.lru_cache(None)
|
||||
def opcode_lookahead(
|
||||
frame_offset: int,
|
||||
lookahead_cycles: int,
|
||||
|
@ -68,7 +68,7 @@ def opcode_lookahead(
|
|||
return tuple(ops) # TODO: fix return type
|
||||
|
||||
|
||||
@functools.lru_cache(None)
|
||||
#@functools.lru_cache(None)
|
||||
def cycle_lookahead(
|
||||
opcodes: Tuple[player_op.PlayerOp],
|
||||
lookahead_cycles: int) -> Tuple[float]:
|
||||
|
@ -89,7 +89,7 @@ def cycle_lookahead(
|
|||
def candidate_opcodes(
|
||||
frame_offset: int, lookahead_cycles: int,
|
||||
eof_stage_1_op: player_op.PlayerOp
|
||||
) -> Tuple[Tuple[Tuple[player_op.PlayerOp]], numpy.ndarray, int]:
|
||||
) -> Tuple[Tuple[player_op.PlayerOp], numpy.ndarray, int]:
|
||||
"""Deduplicate a tuple of opcode sequences that are equivalent.
|
||||
|
||||
For each opcode sequence whose effect is the same when truncated to
|
||||
|
@ -114,7 +114,7 @@ def candidate_opcodes(
|
|||
# print("Dropping", ops, cycles, seen_cycles[cycles])
|
||||
continue
|
||||
seen_cycles[cycles] = ops
|
||||
pruned_opcodes.append(ops)
|
||||
pruned_opcodes.append(ops[0])
|
||||
pruned_cycles.append(cycles)
|
||||
|
||||
pruned_opcodes = tuple(pruned_opcodes)
|
||||
|
|
Loading…
Reference in New Issue