Loading documenting_failures/soar_compare_bilinear.py +1 −1 Original line number Diff line number Diff line Loading @@ -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) Loading documenting_failures/soar_compare_linear.py +41 −9 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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) Loading Loading @@ -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) Loading @@ -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: Loading Loading @@ -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") Loading @@ -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() Loading Loading
documenting_failures/soar_compare_bilinear.py +1 −1 Original line number Diff line number Diff line Loading @@ -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) Loading
documenting_failures/soar_compare_linear.py +41 −9 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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) Loading Loading @@ -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) Loading @@ -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: Loading Loading @@ -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") Loading @@ -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() Loading