def METHOD_NAME(self):
    """
    Finds a decomposition of a UC rotation gate into elementary gates
    (C-NOTs and single-qubit rotations).
    """
    q = QuantumRegister(self.num_qubits)
    circuit = QuantumCircuit(q)
    q_target = q[0]
    q_controls = q[1:]
    if not q_controls:  # equivalent to: if len(q_controls) == 0
        if self.rot_axes == "X":
            if np.abs(self.params[0]) > _EPS:
                circuit.rx(self.params[0], q_target)
        if self.rot_axes == "Y":
            if np.abs(self.params[0]) > _EPS:
                circuit.ry(self.params[0], q_target)
        if self.rot_axes == "Z":
            if np.abs(self.params[0]) > _EPS:
                circuit.rz(self.params[0], q_target)
    else:
        # First, we find the rotation angles of the single-qubit rotations acting
        #  on the target qubit
        angles = self.params.copy()
        UCPauliRotGate._dec_uc_rotations(angles, 0, len(angles), False)
        # Now, it is easy to place the C-NOT gates to get back the full decomposition.
        for (i, angle) in enumerate(angles):
            if self.rot_axes == "X":
                if np.abs(angle) > _EPS:
                    circuit.rx(angle, q_target)
            if self.rot_axes == "Y":
                if np.abs(angle) > _EPS:
                    circuit.ry(angle, q_target)
            if self.rot_axes == "Z":
                if np.abs(angle) > _EPS:
                    circuit.rz(angle, q_target)
            # Determine the index of the qubit we want to control the C-NOT gate.
            # Note that it corresponds
            # to the number of trailing zeros in the binary representation of i+1
            if not i == len(angles) - 1:
                binary_rep = np.binary_repr(i + 1)
                q_contr_index = len(binary_rep) - len(binary_rep.rstrip("0"))
            else:
                # Handle special case:
                q_contr_index = len(q_controls) - 1
            # For X rotations, we have to additionally place some Ry gates around the
            # C-NOT gates. They change the basis of the NOT operation, such that the
            # decomposition of for uniformly controlled X rotations works correctly by symmetry
            # with the decomposition of uniformly controlled Z or Y rotations
            if self.rot_axes == "X":
                circuit.ry(np.pi / 2, q_target)
            circuit.cx(q_controls[q_contr_index], q_target)
            if self.rot_axes == "X":
                circuit.ry(-np.pi / 2, q_target)
    return circuit