def test_to_from_json_gzip(): a, b = cirq.LineQubit.range(2) test_circuit = cirq.Circuit(cirq.H(a), cirq.CX(a, b)) gzip_data = cirq.to_json_gzip(test_circuit) unzip_circuit = cirq.read_json_gzip(gzip_raw=gzip_data) assert test_circuit == unzip_circuit with pytest.raises(ValueError): _ = cirq.read_json_gzip(io.StringIO(), gzip_raw=gzip_data) with pytest.raises(ValueError): _ = cirq.read_json_gzip()
def initialize(self, rt_config: 'cg.QuantumRuntimeConfiguration', shared_rt_info: 'cg.SharedRuntimeInfo'): """Initialize the filesystem for data saving Args: rt_config: The immutable `cg.QuantumRuntimeConfiguation` for this run. This is written once during this initialization. shared_rt_info: The initial `cg.SharedRuntimeInfo` to be saved to a file. """ os.makedirs(self._data_dir, exist_ok=False) self._egr_record = ExecutableGroupResultFilesystemRecord( runtime_configuration_path='QuantumRuntimeConfiguration.json.gz', shared_runtime_info_path='SharedRuntimeInfo.json.gz', executable_result_paths=[], run_id=self.run_id, ) cirq.to_json_gzip( rt_config, f'{self._data_dir}/{self._egr_record.runtime_configuration_path}') _update_updatable_files(self._egr_record, shared_rt_info, self._data_dir)
def test_egr_filesystem_record_from_json(tmpdir): run_id = 'my-run-id' egr_fs_record = cg.ExecutableGroupResultFilesystemRecord( runtime_configuration_path='RuntimeConfiguration.json.gz', shared_runtime_info_path='SharedRuntimeInfo.jzon.gz', executable_result_paths=['ExecutableResult.1.json.gz', 'ExecutableResult.2.json.gz'], run_id=run_id, ) # Test 1: normal os.makedirs(f'{tmpdir}/{run_id}') cirq.to_json_gzip( egr_fs_record, f'{tmpdir}/{run_id}/ExecutableGroupResultFilesystemRecord.json.gz' ) egr_fs_record2 = cg.ExecutableGroupResultFilesystemRecord.from_json( run_id=run_id, base_data_dir=tmpdir ) assert egr_fs_record == egr_fs_record2 # Test 2: bad object type cirq.to_json_gzip( cirq.Circuit(), f'{tmpdir}/{run_id}/ExecutableGroupResultFilesystemRecord.json.gz' ) with pytest.raises(ValueError, match=r'.*not an `ExecutableGroupFilesystemRecord`.'): cg.ExecutableGroupResultFilesystemRecord.from_json(run_id=run_id, base_data_dir=tmpdir) # Test 3: Mismatched run id os.makedirs(f'{tmpdir}/questionable_run_id') cirq.to_json_gzip( egr_fs_record, f'{tmpdir}/questionable_run_id/ExecutableGroupResultFilesystemRecord.json.gz' ) with pytest.raises(ValueError, match=r'.*does not match the provided run_id'): cg.ExecutableGroupResultFilesystemRecord.from_json( run_id='questionable_run_id', base_data_dir=tmpdir )
def serialize(serializer: str, num_gates: int, nesting_depth: int) -> int: """Runs a round-trip of the serializer.""" circuit = cirq.Circuit() for _ in range(num_gates): which = np.random.choice(['expz', 'expw', 'exp11']) if which == 'expw': q1 = cirq.GridQubit(0, np.random.randint(NUM_QUBITS)) circuit.append( cirq.PhasedXPowGate( phase_exponent=np.random.random(), exponent=np.random.random() ).on(q1) ) elif which == 'expz': q1 = cirq.GridQubit(0, np.random.randint(NUM_QUBITS)) circuit.append(cirq.Z(q1) ** np.random.random()) elif which == 'exp11': q1 = cirq.GridQubit(0, np.random.randint(NUM_QUBITS - 1)) q2 = cirq.GridQubit(0, q1.col + 1) circuit.append(cirq.CZ(q1, q2) ** np.random.random()) cs = [circuit] for _ in range(1, nesting_depth): fc = cs[-1].freeze() cs.append(cirq.Circuit(fc.to_op(), fc.to_op())) test_circuit = cs[-1] if serializer == _JSON: json_data = cirq.to_json(test_circuit) assert json_data is not None data_size = len(json_data) cirq.read_json(json_text=json_data) elif serializer == _JSON_GZIP: gzip_data = cirq.to_json_gzip(test_circuit) assert gzip_data is not None data_size = len(gzip_data) cirq.read_json_gzip(gzip_raw=gzip_data) return data_size
def _assert_json_roundtrip(o, tmpdir): cirq.to_json_gzip(o, f'{tmpdir}/o.json') o2 = cirq.read_json_gzip(f'{tmpdir}/o.json') assert o == o2