default="png") # Parse command line arguments arguments = parser.parse_args() # Format inputs for use in this script directory_to_analyse = arguments.results_directory log_file = arguments.log_file all_bayes_csv = arguments.bayes_csv qhl_mode = bool(arguments.qhl_mode) further_qhl_mode = bool(arguments.further_qhl_mode) run_info_file = arguments.run_info_file system_measurements_file = arguments.system_measurements_file exploration_rule = arguments.exploration_rules gather_summary_results = bool(arguments.gather_summary_results) true_exploration_class = qmla.get_exploration_class( exploration_rules=exploration_rule, log_file=log_file) latex_mapping_file = arguments.latex_mapping_file figure_format = arguments.figure_format probes_plot_file = arguments.probes_plot_file results_collection_file = "{}/collect_analyses.p".format(directory_to_analyse) if run_info_file is not None: true_params_info = pickle.load(open(run_info_file, 'rb')) true_params_dict = true_params_info['params_dict'] true_model = true_params_info['true_model'] else: true_params_dict = None true_model = true_exploration_class.true_model true_model_latex = true_exploration_class.latex_name(true_model) if not directory_to_analyse.endswith('/'): directory_to_analyse += '/'
run_directory = arguments.run_directory # Generate ES instances exploration_class_attributes = { 'true_params_path': arguments.run_info_file, 'plot_probes_path': probes_plot_file, 'log_file': log_file } all_exploration_strategies = [exploration_rules] alternative_exploration_strategies = arguments.alternative_exploration_strategies all_exploration_strategies.extend(alternative_exploration_strategies) all_exploration_strategies = list(set(all_exploration_strategies)) unique_exploration_classes = { gr: qmla.get_exploration_class(exploration_rules=gr, **exploration_class_attributes) for gr in all_exploration_strategies } exploration_class = unique_exploration_classes[exploration_rules] probe_max_num_qubits_all_exploration_strategies = max( [gr.max_num_probe_qubits for gr in unique_exploration_classes.values()]) # Use setup so far to generate parameters true_model = exploration_class.true_model qmla.set_shared_parameters( exploration_class=exploration_class, run_info_file=arguments.run_info_file, all_exploration_strategies=all_exploration_strategies, run_directory=run_directory,
def time_required( exploration_rule, # ie true growth generator for QHL exploration_strategies, num_particles, num_experiments, num_processes=1, resource_reallocation=False, # num_bayes_times=None, minimum_allowed_time=100, insurance_factor=2.5, **kwargs): times_reqd = {} num_hamiltonians_per_model = (num_particles * (2 * num_experiments)) parallelisability = {} print("exploration strategies:", exploration_strategies) # print("num models by shape:", generator_max_num_models_by_shape) total_time_required = 0 for gen in exploration_strategies: try: exploration_class = qmla.get_exploration_class( exploration_rules=gen) generator_max_num_models_by_shape = exploration_class.max_num_models_by_shape print("Got time required from growth generator {}".format(gen)) print("Num models by num qubits:", generator_max_num_models_by_shape) except BaseException: generator_max_num_models_by_shape = max_num_models_by_shape[gen] parallelisability[ gen] = exploration_class.num_processes_to_parallelise_over max_num_qubits = exploration_class.max_num_qubits for q in range(1, max_num_qubits + 1): time_per_hamiltonian = hamiltonian_exponentiation_times[q] try: num_models_this_dimension = generator_max_num_models_by_shape[ q] except BaseException: print( "num models {} not in generator_max_num_models_by_shape; taking default" .format(q)) num_models_this_dimension = generator_max_num_models_by_shape[ 'other'] print("ES:", gen, "max num models for ", q, "qubits:", num_models_this_dimension) time_this_dimension = (num_hamiltonians_per_model * time_per_hamiltonian * num_models_this_dimension) total_time_required += time_this_dimension total_time_required = (insurance_factor * np.round(total_time_required)) times_reqd['qmd'] = max(minimum_allowed_time, int(total_time_required)) # Get time for QHL try: true_model = exploration_class.true_model except BaseException: raise highest_parallelisability = max(parallelisability.values()) times_reqd['num_processes'] = highest_parallelisability true_dimension = qmla.get_num_qubits(true_model) qhl_insurance_factor = 1.5 # buffer to ensure finished in time qhl_time = (qhl_insurance_factor * hamiltonian_exponentiation_times[true_dimension] * num_particles * num_experiments) times_reqd['qhl'] = max(minimum_allowed_time, int(qhl_time)) # For further qhl, want to account for possibility # that winning model is of maximum allowed dimension, # so need to request enough time for that case. further_qhl_time = (hamiltonian_exponentiation_times[max_num_qubits] * num_hamiltonians_per_model) times_reqd['fqhl'] = max(minimum_allowed_time, int(further_qhl_time)) for k in ['qmd', 'qhl', 'fqhl']: times_reqd[k] *= exploration_class.timing_insurance_factor times_reqd[k] = max(minimum_allowed_time, int(times_reqd[k])) times_reqd[k] = int(times_reqd[k]) print("Time to request:\n", times_reqd) return times_reqd
type=str, default='Unknown') parser.add_argument('-exp', '--experimental_data', help='Use experimental data if provided', type=int, default=0) arguments = parser.parse_args() results_directory = arguments.results_directory output_file_name = arguments.output_file_name exploration_rules = arguments.exploration_rules exploration_class = qmla.get_exploration_class( exploration_rules=exploration_rules, use_experimental_data=arguments.experimental_data, log_file=arguments.log_file) variables = vars(arguments) # and some others arguments not explicitly set in launch script # variables['measurement_type'] = exploration_class.measurement_type variables[ 'expectation_value_func'] = exploration_class.expectation_value_subroutine.__name__ variables['heuristic'] = exploration_class.model_heuristic_subroutine.__name__ variables[ 'probe_generation_function'] = exploration_class.plot_probes_generation_subroutine.__name__ variables[ 'plot_probes_generation_subroutine'] = exploration_class.plot_probes_generation_subroutine.__name__ qmla.analysis.combine_analysis_plots(results_directory=results_directory,
# Parse command line arguments arguments = parser.parse_args() # Format inputs for use in this script directory_to_analyse = arguments.results_directory log_file = arguments.log_file all_bayes_csv = arguments.bayes_csv qhl_mode = bool(arguments.qhl_mode) further_qhl_mode = bool(arguments.further_qhl_mode) run_info_file = arguments.run_info_file system_measurements_file = arguments.system_measurements_file exploration_rule = arguments.exploration_rules gather_summary_results = bool(arguments.gather_summary_results) true_exploration_class = qmla.get_exploration_class( exploration_rules=exploration_rule, true_params_path=arguments.run_info_file, plot_probes_path=arguments.probes_plot_file, log_file=log_file) true_exploration_class.get_true_parameters() latex_mapping_file = arguments.latex_mapping_file figure_format = arguments.figure_format probes_plot_file = arguments.probes_plot_file results_collection_file = "{}/collect_analyses.p".format(directory_to_analyse) if run_info_file is not None: true_params_info = pickle.load(open(run_info_file, 'rb')) true_params_dict = true_params_info['params_dict'] true_model = true_params_info['true_model'] else: true_params_dict = None true_model = true_exploration_class.true_model