def strong_scaling(timing_stats, scaling_var, data_points):
timing_data = dict()<EOL>proc_counts = []<EOL>bench_means = []<EOL>bench_mins = []<EOL>bench_maxs = []<EOL>model_means = []<EOL>model_mins = []<EOL>model_maxs = []<EOL>for point in data_points:<EOL><INDENT>size = point[<NUM_LIT:0>]<EOL>proc = point[<NUM_LIT:1>]<EOL>try:<EOL><INDENT>model_data = timing_stats[size][proc]['<STR_LIT>'][scaling_var]<EOL>bench_data = timing_stats[size][proc]['<STR_LIT>'][scaling_var]<EOL><DEDENT>except KeyError:<EOL><INDENT>continue<EOL><DEDENT>proc_counts.append(proc)<EOL>model_means.append(model_data['<STR_LIT>'])<EOL>model_mins.append(model_data['<STR_LIT>'])<EOL>model_maxs.append(model_data['<STR_LIT>'])<EOL>bench_means.append(bench_data['<STR_LIT>'])<EOL>bench_mins.append(bench_data['<STR_LIT>'])<EOL>bench_maxs.append(bench_data['<STR_LIT>'])<EOL><DEDENT>timing_data['<STR_LIT>'] = dict(mins=bench_mins, means=bench_means, maxs=bench_maxs)<EOL>timing_data['<STR_LIT>'] = dict(mins=model_mins, means=model_means, maxs=model_maxs)<EOL>timing_data['<STR_LIT>'] = [int(pc[<NUM_LIT:1>:]) for pc in proc_counts]<EOL>return timing_data<EOL>
Generate data for plotting strong scaling.  The data points keep
the problem size the same and varies the number of processors
used to complete the job.

Args:
    timing_stats: the result of the generate_timing_stats function
    scaling_var: the variable to select from the timing_stats dictionary
                 (can be provided in configurations via the 'scaling_var' key)
    data_points: the list of size and processor counts to use as data
                 (can be provided in configurations via the 'strong_scaling_points' key)

Returns:
    A dict of the form:
        {'bench' : {'mins' : [], 'means' : [], 'maxs' : []},
         'model' : {'mins' : [], 'means' : [], 'maxs' : []},
         'proc_counts' : []}