From a421e24544c4c746a34dc49b48bd675acc40b7a8 Mon Sep 17 00:00:00 2001 From: Brandon Rozek Date: Tue, 15 Oct 2024 10:28:16 -0400 Subject: [PATCH] Reworked hack --- parse_magic.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/parse_magic.py b/parse_magic.py index bbd0f49..f77295a 100644 --- a/parse_magic.py +++ b/parse_magic.py @@ -58,14 +58,13 @@ def parse_matrices(infile: SourceFile) -> List[Tuple[Model, Dict]]: def process_sizes(infile: SourceFile, header: UglyHeader, current_model_parts: ModelBuilder, solutions: List[Tuple[Model, Dict]]): """Stage 1""" - # NOTE: In R3-PN the first size line is -1? - if header.necessitation: - next(infile) + first_run = True while True: print("Processing next size") try: - size = parse_size(infile) + size = parse_size(infile, first_run) + first_run = False except StopIteration: # For some reason, when necessitation is enabled this doesn't # have a -1 on the last line @@ -219,11 +218,15 @@ def carrier_set_from_size(size: int): mvalue_from_index(i) for i in range(size + 1) } -def parse_size(infile: SourceFile) -> Optional[int]: +def parse_size(infile: SourceFile, first_run: bool) -> Optional[int]: """ Parse the line representing the matrix size. """ size = int(next(infile)) + # HACK: The first size line may be -1 due to a bug. Skip it + if size == -1 and first_run: + size = int(next(infile)) + if size == -1: return None assert size > 0, f"Unexpected size at line {infile.current_line}"