def sample_gate(a: cirq.Qid, b: cirq.Qid, gate: cirq.FSimGate) -> PhasedFSimCharacterization: _assert_inv_sqrt_iswap_like(gate) if (a, b) in parameters: pair_parameters = parameters[(a, b)] if not isinstance(pair_parameters, PhasedFSimCharacterization): pair_parameters = PhasedFSimCharacterization( **pair_parameters) elif (b, a) in parameters: pair_parameters = parameters[(b, a)] if not isinstance(pair_parameters, PhasedFSimCharacterization): pair_parameters = PhasedFSimCharacterization( **pair_parameters) pair_parameters = pair_parameters.parameters_for_qubits_swapped( ) elif ideal_when_missing_gate: pair_parameters = SQRT_ISWAP_INV_PARAMETERS else: raise ValueError(f'Missing parameters for pair {(a, b)}') if pair_parameters.any_none(): if not ideal_when_missing_parameter: raise ValueError( f'Missing parameter value for pair {(a, b)}, ' f'parameters={pair_parameters}') pair_parameters = pair_parameters.merge_with( SQRT_ISWAP_INV_PARAMETERS) return pair_parameters
def sample_gate(a: cirq.Qid, b: cirq.Qid, gate: cirq.FSimGate) -> PhasedFSimCharacterization: assert isinstance(gate, cirq.FSimGate), f'Expected FSimGate, got {gate}' assert np.isclose(gate.theta, np.pi / 4) and np.isclose( gate.phi, 0.0), f'Expected ISWAP ** -0.5 like gate, got {gate}' if (a, b) in parameters: pair_parameters = parameters[(a, b)] if not isinstance(pair_parameters, PhasedFSimCharacterization): pair_parameters = PhasedFSimCharacterization( **pair_parameters) elif (b, a) in parameters: pair_parameters = parameters[(b, a)] if not isinstance(pair_parameters, PhasedFSimCharacterization): pair_parameters = PhasedFSimCharacterization( **pair_parameters) pair_parameters = pair_parameters.parameters_for_qubits_swapped( ) elif ideal_when_missing_gate: pair_parameters = SQRT_ISWAP_INV_PARAMETERS else: raise ValueError(f'Missing parameters for pair {(a, b)}') if pair_parameters.any_none(): if not ideal_when_missing_parameter: raise ValueError( f'Missing parameter value for pair {(a, b)}, ' f'parameters={pair_parameters}') pair_parameters = pair_parameters.merge_with( SQRT_ISWAP_INV_PARAMETERS) return pair_parameters
def test_parameters_for_qubits_swapped(): characterization = PhasedFSimCharacterization(theta=0.1, zeta=0.2, chi=0.3, gamma=0.4, phi=0.5) assert characterization.parameters_for_qubits_swapped( ) == PhasedFSimCharacterization(theta=0.1, zeta=-0.2, chi=-0.3, gamma=0.4, phi=0.5)
def sample_gate( a: cirq.Qid, b: cirq.Qid, gate: cirq.FSimGate ) -> PhasedFSimCharacterization: pair_parameters = None swapped = False if (a, b) in parameters: pair_parameters = parameters[(a, b)].get(gate) elif (b, a) in parameters: pair_parameters = parameters[(b, a)].get(gate) swapped = True if pair_parameters is None: raise ValueError(f'Missing parameters for value for pair {(a, b)} and gate {gate}.') if not isinstance(pair_parameters, PhasedFSimCharacterization): pair_parameters = PhasedFSimCharacterization(**pair_parameters) if swapped: pair_parameters = pair_parameters.parameters_for_qubits_swapped() return pair_parameters