'The cross product operator for two Vectors.
Returns a Vector, expressed in the same ReferenceFrames as self.
Parameters
other : Vector
The Vector which we are crossing with
Examples
>>> from sympy.physics.vector import ReferenceFrame, Vector
>>> from sympy import symbols
>>> q1 = symbols(\'q1\')
>>> N = ReferenceFrame(\'N\')
>>> N.x ^ N.y
N.z
>>> A = N.orientnew(\'A\', \'Axis\', [q1, N.x])
>>> A.x ^ N.y
N.z
>>> N.y ^ A.x
- sin(q1)*A.y - cos(q1)*A.z'

def __xor__(self, other):

    from sympy.physics.vector.dyadic import Dyadic
    if isinstance(other, Dyadic):
        return NotImplemented
    other = _check_vector(other)
    if (other.args == []):
        return Vector(0)
    def _det(mat):
        "This    is    needed    as    a    little    method    for    to    find    the    determinant\n                                                of    a    list    in    python;    needs    to    work    for    a    3x3    list.\n                                                SymPy's    Matrix    won't    take    in    Vector,    so    need    a    custom    function.\n                                                You    shouldn't    be    calling    this.\n\n                                                "
        return (((mat[0][0] * ((mat[1][1] * mat[2][2]) - (mat[1][2] * mat[2][1]))) + (mat[0][1] * ((mat[1][2] * mat[2][0]) - (mat[1][0] * mat[2][2])))) + (mat[0][2] * ((mat[1][0] * mat[2][1]) - (mat[1][1] * mat[2][0]))))
    outlist = []
    ar = other.args
    for (i, v) in enumerate(ar):
        tempx = v[1].x
        tempy = v[1].y
        tempz = v[1].z
        tempm = [[tempx, tempy, tempz], [(self & tempx), (self & tempy), (self & tempz)], [(Vector([ar[i]]) & tempx), (Vector([ar[i]]) & tempy), (Vector([ar[i]]) & tempz)]]
        outlist += _det(tempm).args
    return Vector(outlist)
