def __init__(
        self,
        *,
        gates_to_accept: Sequence[type[POSSIBLE_FSIM_GATES] | POSSIBLE_FSIM_GATES] = (),
        gate_types_to_check: Sequence[type[POSSIBLE_FSIM_GATES]] = (),
        allow_symbols: bool = False,
        atol=DEFAULT_ATOL,
    ):
        """Inits `cirq_google.FSimGateFamily`.

        Args:
            gates_to_accept: List of gate types or instances to be accepted. All elements
                should be either types from `POSSIBLE_FSIM_GATES` or non-parameterized
                instances of those types.
            gate_types_to_check: List of `POSSIBLE_FSIM_GATES` types whose instances should be
                considered when trying to match against gates present in `gates_to_accept`.
                Defaults to all `POSSIBLE_FSIM_GATES` if left unspecified.
            allow_symbols: If True, both the gate conversion logic and containment predicate allow
                parameterized gate instances and return a converted gate / accept input gate if
                there exists any value of the unknown parameters which can result in a valid
                outcome.
            atol: Absolute tolerance for difference floating point comparisons.

        Raises:
            ValueError: If any gate in `gates_to_accept` is not a non-parameterized instance of /
                or a gate type from `POSSIBLE_FSIM_GATES`.
            ValueError: If any gate type in `gate_types_to_check` is not one of
                `POSSIBLE_FSIM_GATES`.
        """
        self._supported_types: dict[
            type[POSSIBLE_FSIM_GATES], Callable[[POSSIBLE_FSIM_GATES], POSSIBLE_FSIM_GATES | None]
        ] = {
            cirq.FSimGate: self._convert_to_fsim,
            cirq.PhasedFSimGate: self._convert_to_phased_fsim,
            cirq.ISwapPowGate: self._convert_to_iswap,
            cirq.PhasedISwapPowGate: self._convert_to_phased_iswap,
            cirq.CZPowGate: self._convert_to_cz,
            cirq.IdentityGate: self._convert_to_identity,
        }
        if not gate_types_to_check:
            gate_types_to_check = tuple(self._supported_types.keys())

        if any(g not in self._supported_types for g in gate_types_to_check):
            raise ValueError(
                f"All gates in gate_types_to_check: {_gates_to_str(gate_types_to_check)} must "
                f"be one of {_gates_to_str(self._supported_types.keys())}."
            )

        for g in gates_to_accept:
            if isinstance(g, tuple(self._supported_types.keys())):
                if cirq.is_parameterized(g):
                    raise ValueError(
                        f"Parameterized gate {g} cannot be used in `gates_to_accept` initializer."
                    )
            elif g not in self._supported_types:
                raise ValueError(
                    f"Gate {g} in `gates_to_accept` must be either a type from or an instance of "
                    f"{_gates_to_str(self._supported_types.keys())}"
                )
        self.gates_to_accept = tuple(dict.fromkeys(gates_to_accept))
        self.gate_types_to_check = tuple(dict.fromkeys(gate_types_to_check))
        self.allow_symbols = allow_symbols
        self.atol = atol
        super().__init__(cirq.Gate)
Inits `cirq_google.FSimGateFamily`.

        Args:
            gates_to_accept: List of gate types or instances to be accepted. All elements
                should be either types from `POSSIBLE_FSIM_GATES` or non-parameterized
                instances of those types.
            gate_types_to_check: List of `POSSIBLE_FSIM_GATES` types whose instances should be
                considered when trying to match against gates present in `gates_to_accept`.
                Defaults to all `POSSIBLE_FSIM_GATES` if left unspecified.
            allow_symbols: If True, both the gate conversion logic and containment predicate allow
                parameterized gate instances and return a converted gate / accept input gate if
                there exists any value of the unknown parameters which can result in a valid
                outcome.
            atol: Absolute tolerance for difference floating point comparisons.

        Raises:
            ValueError: If any gate in `gates_to_accept` is not a non-parameterized instance of /
                or a gate type from `POSSIBLE_FSIM_GATES`.
            ValueError: If any gate type in `gate_types_to_check` is not one of
                `POSSIBLE_FSIM_GATES`.
        
cirq-google/cirq_google/ops/fsim_gate_family.py