2 from funcsigs
import signature
4 from inspect
import signature
7 from hep_ipython_tools
import calculation_queue
10 def create_all_calculations(parameter_creator_function, **calculation_lists):
12 Create all calculations.
15 parameter_names_in_list = calculation_lists.keys()
16 parameter_values_in_list = calculation_lists.values()
18 every_parameter_combination = create_every_parameter_combination(parameter_names_in_list,
19 parameter_values_in_list)
21 all_queues = [calculation_queue.CalculationQueue()
for _
in every_parameter_combination]
23 def add_queue_if_needed(c_queue, param_combination):
24 param_combination_copy = param_combination.copy()
25 args = signature(parameter_creator_function).parameters
27 param_combination_copy.update({
"queue": c_queue})
29 return param_combination_copy
31 every_parameter_combination_with_queue = [add_queue_if_needed(c_queue, parameters)
for
32 c_queue, parameters
in zip(all_queues, every_parameter_combination)]
34 def call_creator(param_combination):
35 calculation_kwargs = parameter_creator_function(**param_combination)
36 return calculation_kwargs
38 all_calculation_kwargs = map(call_creator, every_parameter_combination_with_queue)
39 return all_calculation_kwargs, all_queues, every_parameter_combination
42 def create_every_parameter_combination(parameter_names, parameter_values):
44 Combine all parameter values with all other parameter values and form dictionaries with the correct
48 parameter_names: A list of names of the parameters.
49 parameter_values: A list of lists with parameter values. Each list stands
50 for one parameter (so the len of parameter_names must be the len of
54 A list of dictionaries, each a single combination of parameters.
57 assert len(parameter_names) == len(parameter_values)
59 every_parameter_combination = itertools.product(*parameter_values)
60 every_parameter_combination_with_names = [
61 {parameter_name: value
for parameter_name, value
in zip(
62 parameter_names, values)}
for values
in every_parameter_combination]
63 return every_parameter_combination_with_names