예제 #1
0
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()
예제 #2
0
파일: io.py 프로젝트: dstrain115/Cirq-1
    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)
예제 #3
0
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
        )
예제 #4
0
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
예제 #5
0
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