Commit 9ab15352 authored by Blais, Chris's avatar Blais, Chris
Browse files

updates to linear and bilinear test

parent c02a7a4e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -125,7 +125,7 @@ def test_bilinear_soar(user_layouts=[], plot=False):
    # results = get_pareto_front(pgraph, objective="bilinear", verbose=5)

    # load pareto optimal layouts if they exist, run and save if they don't
    results_path = os.path.join(os.path.dirname(__file__), "bilinear_pareto_front.pkl")
    results_path = os.path.join(module_path, "documenting_failures", "pareto_fronts", "bilinear_pareto_front.pkl")
    if os.path.exists(results_path):
        with open(results_path, "rb") as f:
            results = pickle.load(f)
+41 −9
Original line number Diff line number Diff line
@@ -37,8 +37,9 @@ def log_err(error_log, e, result, method=""):
    err_trace = traceback.format_exc()
    if result not in error_log.keys():
        error_log[result] = {}
        error_log[result]['rref'] = {
        "error":e, "type":"obs", "method":method, "trace":err_trace,

    error_log[result][method] = {
        "error":e, "method":method, "trace":err_trace,
    }

    return error_log
@@ -56,10 +57,26 @@ def log_fail(result, failures, error_log, method, or_method, or_soar, layout):
            "method":or_method, "soar":or_soar, "layout":layout,
            }
    else: 
        failures[result]["rref"] = "error"
        failures[result][method] = "error"
    
    return failures

def log_success(result, successes, method, soar, lu, layout):
    """
    method: results for method (could be tuple of obs and red)
    soar: results for soar
    lu: results for lu
    layout: bool array of measured vars
    """
    successes[result]= {
        "method":method, 
        "soar":soar, 
        "lu":lu, 
        "layout":layout,
        }
    
    return successes

def check_incidence(iIncidence):
    """
    simple check that in nodes equal to out nodes (graph is closed)
@@ -103,6 +120,7 @@ def test_linear_soar(plot=False):
    # results = get_pareto_front(pgraph, objective="linear", verbose=5)
    # instead of getting pareto front, just cycle through the sensor
    _, _, _ = get_one_result(pgraph, 0, objective="linear", verbose=5)
    
    X = pgraph.xSensorCandidate
    nSensor = np.sum(X).astype(int)
    nLayout = int(2**nSensor)
@@ -118,7 +136,7 @@ def test_linear_soar(plot=False):
    constr_lin, varbs_lin = constr_mem_lin()
    jac_lin = jacsym(constr_lin.values(), varbs_lin.values())

    successes = {}
    success_log = {}
    failures = {}
    error_log = {}
    for result in results:
@@ -180,9 +198,15 @@ def test_linear_soar(plot=False):
        if not red_qr_equ:
            failures = log_fail(result, failures, error_log, "red_qr", red_qr, red_soar, layout)
        
        # success = (obs_rref_equ and red_rref_equ) and not (obs_lu_equ or red_lu_eq)
        # if success: 
            
        if (obs_rref_equ and red_rref_equ) and (not obs_lu_equ or not red_lu_equ):
            success_log = log_success(
                    result=result, 
                    successes=success_log, 
                    method=(obs_rref, red_rref), 
                    soar=(obs_soar, red_soar), 
                    lu=(obs_lu, red_lu),
                    layout = layout,
                    )

    if len(error_log) > 0:
        err_log = os.path.join(r".\documenting_failures\errors\linear_errors.pkl")
@@ -204,10 +228,18 @@ def test_linear_soar(plot=False):
            pickle.dump(obj=failures, file=f)
        print(f"failures in {len(fail_log)} layouts out of {len(results)}")

    
    else: 
        print("all layouts pass for linear system")

    if len(success_log) > 0:
        success_path = os.path.join(r".\documenting_failures\successes\linear_successes.pkl")
        if not os.path.exists(os.path.dirname(success_path)):
            os.mkdir(os.path.dirname(success_path))
        
        with open(success_path, "wb") as f: 
            pickle.dump(obj=success_log, file=f)
        print(f"successes in {len(success_log)} layouts out of {len(results)}")


if __name__ == "__main__":
    test_linear_soar()