| 
 | 1 | +import unittest  | 
 | 2 | +from unittest.mock import patch, MagicMock  | 
 | 3 | +from qutip.qip.circuit import QubitCircuit, Gate  | 
 | 4 | +from qutip.ionq import (  | 
 | 5 | +    Provider,  | 
 | 6 | +    IonQSimulator,  | 
 | 7 | +    IonQQPU,  | 
 | 8 | +    convert_qutip_circuit,  | 
 | 9 | +    Job,  | 
 | 10 | +)  | 
 | 11 | + | 
 | 12 | + | 
 | 13 | +class TestConverter(unittest.TestCase):  | 
 | 14 | +    def test_convert_qutip_circuit(self):  | 
 | 15 | +        # Create a simple QubitCircuit with one gate for testing  | 
 | 16 | +        qc = QubitCircuit(N=1)  | 
 | 17 | +        qc.add_gate("X", targets=[0])  | 
 | 18 | +        # Convert the qutip_qip circuit to IonQ format  | 
 | 19 | +        ionq_circuit = convert_qutip_circuit(qc)  | 
 | 20 | +        expected_output = [{"gate": "X", "targets": [0], "controls": []}]  | 
 | 21 | +        self.assertEqual(ionq_circuit, expected_output)  | 
 | 22 | + | 
 | 23 | + | 
 | 24 | +class TestIonQBackend(unittest.TestCase):  | 
 | 25 | +    def setUp(self):  | 
 | 26 | +        self.provider = Provider(token="dummy_token")  | 
 | 27 | + | 
 | 28 | +    @patch("qutip.ionq.Provider")  | 
 | 29 | +    def test_simulator_initialization(self, mock_provider):  | 
 | 30 | +        simulator = IonQSimulator(provider=mock_provider)  | 
 | 31 | +        self.assertEqual(simulator.provider, mock_provider)  | 
 | 32 | +        self.assertEqual(simulator.gateset, "qis")  | 
 | 33 | + | 
 | 34 | +    @patch("qutip.ionq.Provider")  | 
 | 35 | +    def test_qpu_initialization(self, mock_provider):  | 
 | 36 | +        qpu = IonQQPU(provider=mock_provider, qpu="harmony")  | 
 | 37 | +        self.assertEqual(qpu.provider, mock_provider)  | 
 | 38 | +        self.assertTrue("qpu.harmony" in qpu.provider.backend)  | 
 | 39 | + | 
 | 40 | + | 
 | 41 | +class TestJob(unittest.TestCase):  | 
 | 42 | +    @patch("requests.post")  | 
 | 43 | +    def test_submit(self, mock_post):  | 
 | 44 | +        mock_post.return_value.json.return_value = {"id": "test_job_id"}  | 
 | 45 | +        mock_post.return_value.status_code = 200  | 
 | 46 | +        job = Job(  | 
 | 47 | +            circuit={},  | 
 | 48 | +            shots=1024,  | 
 | 49 | +            backend="simulator",  | 
 | 50 | +            headers={},  | 
 | 51 | +            url="http://dummy_url",  | 
 | 52 | +        )  | 
 | 53 | +        job.submit()  | 
 | 54 | +        self.assertEqual(job.id, "test_job_id")  | 
 | 55 | + | 
 | 56 | +    @patch("requests.get")  | 
 | 57 | +    def test_get_results(self, mock_get):  | 
 | 58 | +        mock_get.return_value.json.return_value = {"0": 0.5, "1": 0.5}  | 
 | 59 | +        mock_get.return_value.status_code = 200  | 
 | 60 | +        job = Job(  | 
 | 61 | +            circuit={},  | 
 | 62 | +            shots=1024,  | 
 | 63 | +            backend="simulator",  | 
 | 64 | +            headers={},  | 
 | 65 | +            url="http://dummy_url",  | 
 | 66 | +        )  | 
 | 67 | +        job.id = (  | 
 | 68 | +            "test_job_id"  # Simulate a job that has already been submitted  | 
 | 69 | +        )  | 
 | 70 | +        results = job.get_results(polling_rate=0)  | 
 | 71 | +        self.assertEqual(results, {"0": 512, "1": 512})  | 
 | 72 | + | 
 | 73 | + | 
 | 74 | +if __name__ == "__main__":  | 
 | 75 | +    unittest.main()  | 
0 commit comments