def test_resolve_call(): explorer = Explorer() # Simple call @explorer.add_function(provides='version') def version(): return 12 ver = explorer.get_variable('version') assert ver == 12 # Complex call @explorer.add_function(provides=('surname','middlename'), requires='name') def surname(name): return {'John': ('Doe', None), 'Martin':('King', 'Luther')}[name] @explorer.add_function(provides='age', requires=('name',)) def age(name): return {'John': 12, 'Martin': 15}[name] @explorer.add_function(provides=('person', ), requires=('name','age','surname')) def make_person(name, surname, age): return Person(name, surname, age) person = explorer.get_variable('person', name='John') print(person) assert person.age == 12 assert person.surname == 'Doe' person = explorer.get_variable('person', name='Martin') print(person) assert person.age == 15 middle = explorer.get_variable('middlename', name='Martin') assert middle == 'Luther' people = explorer.map_variable('person', name=['Martin', 'John']) assert len(people) == 2 assert people[0].name == 'Martin' assert people[0].age == 15
def test_add_with_provider(): explorer = Explorer() @explorer.provider def y(x, m): return x*2 + m calls_z = 0 @explorer.provider(cache=False) def z(y): nonlocal calls_z calls_z += 1 return calls_z + y zv = explorer.get_variable('z', x=1, m=5) assert zv == 1*2+1+5 zs = explorer.map_variable('z', x=[1, 2, 3], m=[2]) print(zs) assert all(zs == [6, 9, 12])
sim.simulate(circuit) data = backend._profile_results return tuple(tuple([tuple(x[0]), x[1]]) for x in data.values()) @ex.provider def step_sim_time(sim_profile, tn): ignored_vars = tn.bra_vars+tn.ket_vars times = [x[1] for x in sim_profile] return tuple(times[len(ignored_vars):]) # - f = ex.draw_dependency_graph(figsize=(7,6), node_size=20) estimators = ex.map_variable('step_flops', d=ds, edge_idx=edge_indices, n=[N], p=[p]) times = ex.map_variable('step_sim_time', d=ds, edge_idx=edge_indices, n=[N], p=[p]) est_flat = np.concatenate(estimators.flatten()) times_flat = np.concatenate(times.flatten()) filt = times_flat<1e-1 plt.scatter(est_flat[filt], times_flat[filt]) plt.grid() plt.xlabel('estimated FLOP') plt.ylabel('Runtime') # ### Analyze simulator FLOP/s # #### Plot time vs estimated FLOP