def remove_input_at(self, indices: Union[int, Sequence[int]]) -> None:
        """
        This function removes the inputs in indices from the "inputs" attribute
        and sets input_masks[indices] to be False. Note that the indices are based
        on the current "inputs".

        Parameters
        ----------
        indices : Union[int, Sequence[int]]
            the index of an input or indices of multiple inputs based on the current "inputs"

        Returns
        -------
        None
        """
        if isinstance(indices, int):
            indices = [indices]
        else:
            indices = list(indices)

        curr_inputs = self._attrs["inputs"]
        curr_input_accessors = self._attrs["input_accessors"]
        num_curr_inputs = len(curr_inputs)

        assert len(curr_input_accessors) == num_curr_inputs, (
            "expected curr_input_accessors have the same length as num_curr_inputs, "
            f"but got {len(curr_input_accessors)=}, {num_curr_inputs=}, "
            f'op: {self._attrs["name"]}'
        )

        assert (
            len(indices) <= num_curr_inputs
        ), f"Expected len(indices) <= num_curr_inputs, but got {len(indices)} and {num_curr_inputs}"

        num_original_inputs = len(self._attrs["original_inputs"])
        num_input_masks = len(self._attrs["input_masks"])
        assert num_original_inputs == num_input_masks, (
            f"original_inputs and input_masks must have the same length, "
            f"but got {num_original_inputs} and {num_input_masks}"
        )

        curr_idx = 0  # index into curr_inputs
        idx = 0  # index into indices
        new_inputs = []
        new_input_accessors = []
        # we need to skip those indices where input_masks have been modified.
        for orig_idx in range(num_original_inputs):
            if not self._attrs["input_masks"][orig_idx]:
                continue
            if idx < len(indices) and curr_idx == indices[idx]:
                if not self._attrs["input_masks"][orig_idx]:
                    raise RuntimeError(
                        f'Expected input_masks at {idx} to be True for {self._attrs["name"]}'
                    )
                self._attrs["input_masks"][orig_idx] = False
                idx += 1
            else:
                new_inputs.append(curr_inputs[curr_idx])
                new_input_accessors.append(curr_input_accessors[curr_idx])
            curr_idx += 1
        num_new_inputs = len(new_inputs)
        assert num_new_inputs + len(indices) == num_curr_inputs, (
            f"Expected num_new_inputs + len(indices) == num_curr_inputs, "
            f"but got {num_new_inputs + len(indices)} and {num_curr_inputs}"
        )
        self._attrs["inputs"] = new_inputs
        self._attrs["input_accessors"] = new_input_accessors

        This function removes the inputs in indices from the "inputs" attribute
        and sets input_masks[indices] to be False. Note that the indices are based
        on the current "inputs".

        Parameters
        ----------
        indices : Union[int, Sequence[int]]
            the index of an input or indices of multiple inputs based on the current "inputs"

        Returns
        -------
        None
        
python/aitemplate/compiler/ops/tensor/concatenate.py