(obj, params, **kwargs)
Evaluates the normal vector of the curves or surfaces at the input parameter values.

    This function is designed to evaluate normal vectors of the B-Spline and NURBS shapes at single or
    multiple parameter positions.

    :param obj: input geometry
    :type obj: abstract.Curve or abstract.Surface
    :param params: parameters
    :type params: float, list or tuple
    :return: a list containing "point" and "vector" pairs
    :rtype: tuple
Evaluates the normal vector of the curves or surfaces at the input parameter values.
Evaluates the normal vector of the curves or surfaces at the input parameter values .
def normal(obj, params, **kwargs):
    """ Evaluates the normal vector of the curves or surfaces at the input parameter values.

    This function is designed to evaluate normal vectors of the B-Spline and NURBS shapes at single or
    multiple parameter positions.

    :param obj: input geometry
    :type obj: abstract.Curve or abstract.Surface
    :param params: parameters
    :type params: float, list or tuple
    :return: a list containing "point" and "vector" pairs
    :rtype: tuple
    """
    normalize = kwargs.get('normalize', True)
    if isinstance(obj, abstract.Curve):
        raise GeomdlException("Not implemented for curves")
    if isinstance(obj, abstract.Surface):
        if isinstance(params[0], float):
            return ops.normal_surface_single(obj, params, normalize)
        else:
            return ops.normal_surface_single_list(obj, params, normalize)
def normal ( obj , params , * * kwargs ) : normalize = kwargs . get ( 'normalize' , True ) if isinstance ( obj , abstract . Curve ) : raise GeomdlException ( "Not implemented for curves" ) if isinstance ( obj , abstract . Surface ) : if isinstance ( params [ 0 ] , float ) : return ops . normal_surface_single ( obj , params , normalize ) else : return ops . normal_surface_single_list ( obj , params , normalize )