mirror of
				https://github.com/Brandon-Rozek/matmod.git
				synced 2025-11-03 03:11:12 +00:00 
			
		
		
		
	Redid parallel implementation
- Made parse_matrices into a generator - Keep track of num_proccesses results and spawn new ones when done
This commit is contained in:
		
							parent
							
								
									b1452ac672
								
							
						
					
					
						commit
						4412b6c2da
					
				
					 2 changed files with 121 additions and 47 deletions
				
			
		| 
						 | 
				
			
			@ -4,7 +4,7 @@ Parses the Magic Ugly Data File Format
 | 
			
		|||
Assumes the base logic is R with no extra connectives
 | 
			
		||||
"""
 | 
			
		||||
import re
 | 
			
		||||
from typing import TextIO, List, Optional, Tuple, Set, Dict
 | 
			
		||||
from typing import TextIO, List, Iterator, Optional, Tuple, Set, Dict
 | 
			
		||||
 | 
			
		||||
from model import Model, ModelValue, ModelFunction, OrderTable
 | 
			
		||||
from logic import (
 | 
			
		||||
| 
						 | 
				
			
			@ -167,8 +167,7 @@ def derive_stages(header: UglyHeader) -> Stages:
 | 
			
		|||
 | 
			
		||||
    return stages
 | 
			
		||||
 | 
			
		||||
def parse_matrices(infile: SourceFile) -> List[Tuple[Model, Dict]]:
 | 
			
		||||
    solutions = []
 | 
			
		||||
def parse_matrices(infile: SourceFile) -> Iterator[Tuple[Model, Dict[Operation, ModelFunction]]]:
 | 
			
		||||
    header = parse_header(infile)
 | 
			
		||||
    stages = derive_stages(header)
 | 
			
		||||
    first_run = True
 | 
			
		||||
| 
						 | 
				
			
			@ -179,7 +178,7 @@ def parse_matrices(infile: SourceFile) -> List[Tuple[Model, Dict]]:
 | 
			
		|||
            case "end":
 | 
			
		||||
                break
 | 
			
		||||
            case "process_model":
 | 
			
		||||
                process_model(stages.name(), current_model_parts, solutions)
 | 
			
		||||
                yield process_model(stages.name(), current_model_parts)
 | 
			
		||||
                stage = stage.next
 | 
			
		||||
            case "size":
 | 
			
		||||
                processed = process_sizes(infile, current_model_parts, first_run)
 | 
			
		||||
| 
						 | 
				
			
			@ -245,8 +244,6 @@ def parse_matrices(infile: SourceFile) -> List[Tuple[Model, Dict]]:
 | 
			
		|||
                    stages.reset_after(stage.name)
 | 
			
		||||
                    stage = stage.previous
 | 
			
		||||
 | 
			
		||||
    return solutions
 | 
			
		||||
 | 
			
		||||
def process_sizes(infile: SourceFile, current_model_parts: ModelBuilder, first_run: bool) -> bool:
 | 
			
		||||
    try:
 | 
			
		||||
        size = parse_size(infile, first_run)
 | 
			
		||||
| 
						 | 
				
			
			@ -325,7 +322,7 @@ def process_custom_connective(infile: SourceFile, symbol: str, adicity: int, cur
 | 
			
		|||
    current_model_parts.custom_model_functions[symbol] = mfunction
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
def process_model(model_name: str, mp: ModelBuilder,  solutions: List[Tuple[Model, Dict]]):
 | 
			
		||||
def process_model(model_name: str, mp: ModelBuilder) -> Tuple[Model, Dict[Operation, ModelFunction]]:
 | 
			
		||||
    """Create Model"""
 | 
			
		||||
    assert mp.size > 0
 | 
			
		||||
    assert mp.size + 1 == len(mp.carrier_set)
 | 
			
		||||
| 
						 | 
				
			
			@ -333,7 +330,6 @@ def process_model(model_name: str, mp: ModelBuilder,  solutions: List[Tuple[Mode
 | 
			
		|||
    assert mp.mimplication is not None
 | 
			
		||||
 | 
			
		||||
    logical_operations = { mp.mimplication }
 | 
			
		||||
    model = Model(mp.carrier_set, logical_operations, mp.designated_values, ordering=mp.ordering, name=model_name)
 | 
			
		||||
    interpretation = {
 | 
			
		||||
        Implication: mp.mimplication
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -355,8 +351,10 @@ def process_model(model_name: str, mp: ModelBuilder,  solutions: List[Tuple[Mode
 | 
			
		|||
            logical_operations.add(custom_mf)
 | 
			
		||||
            op = Operation(custom_mf.operation_name, custom_mf.arity)
 | 
			
		||||
            interpretation[op] = custom_mf
 | 
			
		||||
    
 | 
			
		||||
    model = Model(mp.carrier_set, logical_operations, mp.designated_values, ordering=mp.ordering, name=model_name)
 | 
			
		||||
    return (model, interpretation)
 | 
			
		||||
 | 
			
		||||
    solutions.append((model, interpretation))
 | 
			
		||||
 | 
			
		||||
def parse_header(infile: SourceFile) -> UglyHeader:
 | 
			
		||||
    """
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue