Esempio n. 1
0
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])
Esempio n. 3
0
    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