def METHOD_NAME(
    self,
    operator: OperatorBase,
    params: Optional[
        Union[
            ParameterExpression,
            ParameterVector,
            List[ParameterExpression],
            Tuple[ParameterExpression, ParameterExpression],
            List[Tuple[ParameterExpression, ParameterExpression]],
        ]
    ] = None,
) -> OperatorBase:
    r"""
    Args:
        operator: The operator we are taking the gradient of
        params: The parameters we are taking the gradient wrt: ω
                If a ParameterExpression, ParameterVector or List[ParameterExpression] is given,
                then the 1st order derivative of the operator is calculated.
                If a Tuple[ParameterExpression, ParameterExpression] or
                List[Tuple[ParameterExpression, ParameterExpression]]
                is given, then the 2nd order derivative of the operator is calculated.
    Returns:
        An operator whose evaluation yields the Gradient.
    Raises:
        ValueError: If ``params`` contains a parameter not present in ``operator``.
    """
    raise NotImplementedError