def with_params(
        self,
        *,
        gate_times_ns: None | float | dict[type[cirq.Gate], float] = None,
        t1_ns: None | float | dict[cirq.Qid, float] = None,
        tphi_ns: None | float | dict[cirq.Qid, float] = None,
        readout_errors: None | Sequence[float] | dict[cirq.Qid, Sequence[float]] = None,
        gate_pauli_errors: (
            None | float | dict[type[cirq.Gate] | noise_utils.OpIdentifier, float]
        ) = None,
        fsim_errors: (
            None
            | cirq.PhasedFSimGate
            | dict[type[cirq.Gate] | noise_utils.OpIdentifier, cirq.PhasedFSimGate]
        ) = None,
    ):
        """Returns a copy of this object with the given params overridden.

        This method supports partial replacement: each arg can accept a single
        value (which will replace all existing values) or a mapping (which will
        replace matching entries in the old object). Otherwise, all fields are
        the same as those used in the constructor.

        Args:
        gate_times_ns: float or dict[type[`cirq.Gate`], float].
        t1_ns: float or dict[`cirq.Qid`, float].
        tphi_ns: float or dict[`cirq.Qid`, float].
        readout_errors: Sequence or dict[`cirq.Qid`, Sequence]. Converted to
            list[float] if not provided in that format.
        gate_pauli_errors: float or dict[`cirq.OpIdentifier`, float].
            Dict key can also be type[`cirq.Gate`]; this will apply the given
            error to all placements of that gate that appear in the original
            object.
        fsim_errors: `cirq.PhasedFSimGate` or dict[`cirq.OpIdentifier`,
            `cirq.PhasedFSimGate`] Dict key can also be type[`cirq.Gate`]; this
            will apply the given error to all placements of that gate that
            appear in the original object.

        """
        replace_args: dict[str, Any] = {}
        if gate_times_ns is not None:
            replace_args['gate_times_ns'] = _with_values(self.gate_times_ns, gate_times_ns)
        if t1_ns is not None:
            replace_args['t1_ns'] = _with_values(self.t1_ns, t1_ns)
        if tphi_ns is not None:
            replace_args['tphi_ns'] = _with_values(self.tphi_ns, tphi_ns)
        if readout_errors is not None:
            if isinstance(readout_errors, dict):
                replace_args['readout_errors'] = _with_values(
                    self.readout_errors, {k: list(v) for k, v in readout_errors.items()}
                )
            else:
                replace_args['readout_errors'] = _with_values(
                    self.readout_errors, list(readout_errors)
                )
        if gate_pauli_errors is not None:
            if isinstance(gate_pauli_errors, dict):
                combined_pauli_errors: dict[type[cirq.Gate] | noise_utils.OpIdentifier, float] = {}
                for op_id in self.gate_pauli_errors:
                    if op_id in gate_pauli_errors:
                        combined_pauli_errors[op_id] = gate_pauli_errors[op_id]
                    elif op_id.gate_type in gate_pauli_errors:
                        combined_pauli_errors[op_id] = gate_pauli_errors[op_id.gate_type]
                gate_pauli_errors = combined_pauli_errors
            replace_args['gate_pauli_errors'] = _with_values(
                self.gate_pauli_errors, gate_pauli_errors
            )
        if fsim_errors is not None:
            if isinstance(fsim_errors, dict):
                combined_fsim_errors: dict[
                    type[cirq.Gate] | noise_utils.OpIdentifier, cirq.PhasedFSimGate
                ] = {}
                for op_id in self.fsim_errors:
                    op_id_swapped = noise_utils.OpIdentifier(op_id.gate_type, *op_id.qubits[::-1])
                    if op_id in fsim_errors:
                        combined_fsim_errors[op_id] = fsim_errors[op_id]
                        combined_fsim_errors[op_id_swapped] = fsim_errors[op_id]
                    elif op_id_swapped in fsim_errors:
                        combined_fsim_errors[op_id] = fsim_errors[op_id_swapped]
                        combined_fsim_errors[op_id_swapped] = fsim_errors[op_id_swapped]
                    elif op_id.gate_type in fsim_errors:
                        combined_fsim_errors[op_id] = fsim_errors[op_id.gate_type]
                fsim_errors = combined_fsim_errors
            replace_args['fsim_errors'] = _with_values(self.fsim_errors, fsim_errors)
        return dataclasses.replace(self, **replace_args)
Returns a copy of this object with the given params overridden.

        This method supports partial replacement: each arg can accept a single
        value (which will replace all existing values) or a mapping (which will
        replace matching entries in the old object). Otherwise, all fields are
        the same as those used in the constructor.

        Args:
        gate_times_ns: float or dict[type[`cirq.Gate`], float].
        t1_ns: float or dict[`cirq.Qid`, float].
        tphi_ns: float or dict[`cirq.Qid`, float].
        readout_errors: Sequence or dict[`cirq.Qid`, Sequence]. Converted to
            list[float] if not provided in that format.
        gate_pauli_errors: float or dict[`cirq.OpIdentifier`, float].
            Dict key can also be type[`cirq.Gate`]; this will apply the given
            error to all placements of that gate that appear in the original
            object.
        fsim_errors: `cirq.PhasedFSimGate` or dict[`cirq.OpIdentifier`,
            `cirq.PhasedFSimGate`] Dict key can also be type[`cirq.Gate`]; this
            will apply the given error to all placements of that gate that
            appear in the original object.

        
cirq-google/cirq_google/devices/google_noise_properties.py