(obj, uv, normalize)
return tuple(point), tuple(vector_u), tuple(vector_v)
Evaluates the surface tangent vector at the given (u,v) parameter pair.

    The output returns a list containing the starting point (i.e., origin) of the vector and the vectors themselves.

    :param obj: input surface
    :type obj: abstract.Surface
    :param uv: (u,v) parameter pair
    :type uv: list or tuple
    :param normalize: if True, the returned tangent vector is converted to a unit vector
    :type normalize: bool
    :return: A list in the order of "surface point", "derivative w.r.t. u" and "derivative w.r.t. v"
    :rtype: list
Evaluates the surface tangent vector at the given (u,v) parameter pair.
Evaluates the surface tangent vector at the given ( u v ) parameter pair .
def tangent_surface_single(obj, uv, normalize):
    """ Evaluates the surface tangent vector at the given (u,v) parameter pair.

    The output returns a list containing the starting point (i.e., origin) of the vector and the vectors themselves.

    :param obj: input surface
    :type obj: abstract.Surface
    :param uv: (u,v) parameter pair
    :type uv: list or tuple
    :param normalize: if True, the returned tangent vector is converted to a unit vector
    :type normalize: bool
    :return: A list in the order of "surface point", "derivative w.r.t. u" and "derivative w.r.t. v"
    :rtype: list
    """
    # Tangent is the 1st derivative of the surface
    skl = obj.derivatives(uv[0], uv[1], 1)

    point = skl[0][0]
    vector_u = linalg.vector_normalize(skl[1][0]) if normalize else skl[1][0]
    vector_v = linalg.vector_normalize(skl[0][1]) if normalize else skl[0][1]

    return tuple(point), tuple(vector_u), tuple(vector_v)
def tangent_surface_single ( obj , uv , normalize ) : # Tangent is the 1st derivative of the surface skl = obj . derivatives ( uv [ 0 ] , uv [ 1 ] , 1 ) point = skl [ 0 ] [ 0 ] vector_u = linalg . vector_normalize ( skl [ 1 ] [ 0 ] ) if normalize else skl [ 1 ] [ 0 ] vector_v = linalg . vector_normalize ( skl [ 0 ] [ 1 ] ) if normalize else skl [ 0 ] [ 1 ] return tuple ( point ) , tuple ( vector_u ) , tuple ( vector_v )