carstenblank / dc-qiskit-stochastics

Apache License 2.0
2 stars 0 forks source link

Tests fail for the Circuit creation #3

Open carstenblank opened 2 years ago

carstenblank commented 2 years ago

Some tests fail because the phase is not correct. I suspect that the phases are correct, but that the test cannot catch the correct phase. We should look into this.

FAILED [ 46%]
test_circuit_building.py:116 (QiskitDspCircuitTests.test_create_circuit_05)
self = <test_circuit_building.QiskitDspCircuitTests testMethod=test_create_circuit_05>
scaling = 0.3333, initial_value = 4.0
probabilities = array([[0.1, 0.9],
       [0.8, 0.2],
       [0.3, 0.7],
       [0.5, 0.5]])
realizations = array([[-1. ,  1. ],
       [-0.4,  0.5],
       [-2.3,  1.1],
       [-1. ,  0.1]])
apply_func = <function apply_level_two_realizations at 0x000001F78EFC6160>

    @test_data(*dsp_data.testing_data)
    @unpack
    def test_create_circuit(self, scaling: float, initial_value: float, probabilities: np.ndarray,
                            realizations: np.ndarray, apply_func):
        LOG.info(f"Data: scaling={scaling}, initial value={initial_value}, "
                 f"probabilities={list(probabilities)}, realizations={list(realizations)},"
                 f"applied function={apply_func.__name__}.")

        qc = qiskit.QuantumCircuit(name='dsp_simulation')

        LOG.info(f"Initializing with {initial_value} and scaling {scaling}.")
        init_qc = apply_initial(initial_value, scaling)
        qc.extend(init_qc)

        for level, (p, r) in enumerate(zip(probabilities, realizations)):
            LOG.info(f"Adding level {level}: {p} with {r} and scaling {scaling}.")
            qc_index = index_independent_prep(level, p)
            qc_level_l = apply_func(level, r, scaling)
            qc.extend(qc_index)
            qc.extend(qc_level_l)

        LOG.info(f"Circuit:\n{qc.draw(output='text', fold=-1)}")

        qc_compiled = qiskit.transpile(qc, optimization_level=3,basis_gates=['id', 'u1', 'u2', 'u3', 'cx'])
        LOG.info(f"Circuit:\n{qc_compiled.draw(output='text', fold=-1)}")

        backend: qiskit.providers.aer.StatevectorSimulator = qiskit.Aer.get_backend('statevector_simulator')

        job: qiskit.providers.aer.AerJob = qiskit.execute(qc_compiled, backend)
        job.wait_for_final_state(callback=QiskitDspCircuitTests.report_progress, wait=1)

>       self.assert_statevector(probabilities, realizations, scaling, initial_value, job)

test_circuit_building.py:148: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_circuit_building.py:100: in assert_statevector
    [self.assertAlmostEqual(x, y, delta=10e-3, msg='Phase Differences have to negligible.')
test_circuit_building.py:100: in <listcomp>
    [self.assertAlmostEqual(x, y, delta=10e-3, msg='Phase Differences have to negligible.')
E   AssertionError: 6.28318530717959 != 5.983215307179592 within 0.01 delta (0.2999699999999974 difference) : Phase Differences have to negligible.