|
12 | 12 | """Tests for operator_utils.""" |
13 | 13 |
|
14 | 14 | import os |
| 15 | +import json |
15 | 16 |
|
16 | 17 | import itertools |
17 | 18 |
|
@@ -594,6 +595,46 @@ def test_save_bad_type(self): |
594 | 595 | with self.assertRaises(TypeError): |
595 | 596 | save_operator('ping', 'somewhere') |
596 | 597 |
|
| 598 | + def test_save_and_load_complex_json(self): |
| 599 | + fermion_op = FermionOperator('1^ 2', 1 + 2j) |
| 600 | + boson_op = BosonOperator('1^ 2', 1 + 2j) |
| 601 | + qubit_op = QubitOperator('X1 Y2', 1 + 2j) |
| 602 | + quad_op = QuadOperator('q1 p2', 1 + 2j) |
| 603 | + |
| 604 | + save_operator(fermion_op, self.file_name) |
| 605 | + loaded_op = load_operator(self.file_name) |
| 606 | + self.assertEqual(fermion_op, loaded_op) |
| 607 | + |
| 608 | + save_operator(boson_op, self.file_name, allow_overwrite=True) |
| 609 | + loaded_op = load_operator(self.file_name) |
| 610 | + self.assertEqual(boson_op, loaded_op) |
| 611 | + |
| 612 | + save_operator(qubit_op, self.file_name, allow_overwrite=True) |
| 613 | + loaded_op = load_operator(self.file_name) |
| 614 | + self.assertEqual(qubit_op, loaded_op) |
| 615 | + |
| 616 | + save_operator(quad_op, self.file_name, allow_overwrite=True) |
| 617 | + loaded_op = load_operator(self.file_name) |
| 618 | + self.assertEqual(quad_op, loaded_op) |
| 619 | + |
| 620 | + def test_saved_json_content(self): |
| 621 | + import json |
| 622 | + |
| 623 | + qubit_op = QubitOperator('X1 Y2', 1 + 2j) |
| 624 | + save_operator(qubit_op, self.file_name) |
| 625 | + |
| 626 | + file_path = get_file_path(self.file_name, None) |
| 627 | + with open(file_path, 'r') as f: |
| 628 | + data = json.load(f) |
| 629 | + |
| 630 | + self.assertEqual(len(data), 2) |
| 631 | + self.assertEqual(data[0], 'QubitOperator') |
| 632 | + |
| 633 | + # The key is stringified tuple |
| 634 | + # The value is a list [real, imag] |
| 635 | + expected_terms = {"((1, 'X'), (2, 'Y'))": [1.0, 2.0]} |
| 636 | + self.assertEqual(data[1], expected_terms) |
| 637 | + |
597 | 638 |
|
598 | 639 | class GetFileDirTest(unittest.TestCase): |
599 | 640 | def setUp(self): |
|
0 commit comments