mirror of
				https://github.com/Brandon-Rozek/matmod.git
				synced 2025-11-03 03:11:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			54 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""
 | 
						|
Given a model, create a Hasse diagram.
 | 
						|
 | 
						|
Note: This has a dependency on the hasse-diagram library
 | 
						|
https://pypi.org/project/hasse-diagram/
 | 
						|
"""
 | 
						|
import argparse
 | 
						|
import os
 | 
						|
import sys
 | 
						|
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 | 
						|
 | 
						|
from model import Model
 | 
						|
from parse_magic import SourceFile, parse_matrices
 | 
						|
 | 
						|
import numpy as np
 | 
						|
import hassediagram
 | 
						|
 | 
						|
__all__ = ['plot_model_hassee']
 | 
						|
 | 
						|
def plot_model_hassee(model: Model):
 | 
						|
    assert model.ordering is not None
 | 
						|
    carrier_list = list(model.carrier_set)
 | 
						|
    hasse_ordering = []
 | 
						|
    for elem1 in carrier_list:
 | 
						|
        elem_ordering = []
 | 
						|
        for elem2 in carrier_list:
 | 
						|
            elem_ordering.append(
 | 
						|
                1 if model.ordering.is_lt(elem1, elem2) else 0
 | 
						|
            )
 | 
						|
        hasse_ordering.append(elem_ordering)
 | 
						|
    hassediagram.plot_hasse(np.array(hasse_ordering), carrier_list)
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    parser = argparse.ArgumentParser(description="Show hassee diagram for model")
 | 
						|
    parser.add_argument("uglyfile", type=str, help="Path to ugly data file")
 | 
						|
    parser.add_argument("modelname", type=str, help="Name of model within file")
 | 
						|
    args = vars(parser.parse_args())
 | 
						|
 | 
						|
    data_file = open(args['uglyfile'], "r")
 | 
						|
    solutions = parse_matrices(SourceFile(data_file))
 | 
						|
 | 
						|
    requested_model = None
 | 
						|
 | 
						|
    for model, _ in solutions:
 | 
						|
        if model.name == args['modelname']:
 | 
						|
            requested_model = model
 | 
						|
            break
 | 
						|
 | 
						|
    if requested_model is None:
 | 
						|
        print("Model name", args['modelname'], "not found.")
 | 
						|
        sys.exit(0)
 | 
						|
 | 
						|
    plot_model_hassee(requested_model)
 |