def METHOD_NAME(self, op: 'cirq.Operation', moment_idx: int) -> DecomposeResult:
    """Method to rewrite the given operation using gates from this gateset.
    Args:
        op: `cirq.Operation` to be rewritten using gates from this gateset.
        moment_idx: Moment index where the given operation `op` occurs in a circuit.
    Returns:
        - An equivalent `cirq.OP_TREE` implementing `op` using gates from this gateset.
        - `None` or `NotImplemented` if does not know how to decompose `op`.
    """
    # Known matrix?
    mat = cirq.unitary(op, None) if len(op.qubits) <= 2 else None
    if mat is not None and len(op.qubits) == 1:
        gates = cirq.single_qubit_matrix_to_phased_x_z(mat)
        return [g.on(op.qubits[0]) for g in gates]
    if mat is not None and len(op.qubits) == 2:
        return cirq.two_qubit_matrix_to_cz_operations(
            op.qubits[0], op.qubits[1], mat, allow_partial_czs=False, clean_operations=True
        )
    return NotImplemented