def cotan(self, other, third=None):
        if third is not None :
            try :
                nself, nother = coerce(VectorN(self), other)
                nself, nthird = coerce(VectorN(self), third)
                assert len(nself) == len(nother) == len(nthird) == 4
            except :
                raise TypeError, "cotan is defined for 3 vectors of size 4 representing 3D points"
            nself, nother = (nother-nself)[:3], (nthird-nself)[:3]
        else :
            try :
                nself, nother = coerce(VectorN(self), other)
                assert len(nself) == len(nother) == 3
            except :
                raise TypeError, "cotan is defined for 2 vectors of size 3 representing 3D vectors"
        return (nself.dot(nother)) / (nself.cross(nother)).length()
u.cotan(v) <==> cotan(u, v)
dataset/ETHPy150Open CountZer0/PipelineConstructionSet/python/maya/site-packages/pymel-1.0.3/pymel/util/arrays.py/VectorN.cotan