class_docstr: Super class for all Vector classes.
  Ideally, neither this class nor any of its subclasses should be
  instantiated by the user.
class_docstr_tok: ["Super","class","for","all","Vector","classes",".","Ideally",",","neither","this","class","nor","any","of","its","subclasses","should","be","instantiated","by","the","user","."]
docstr: Returns the dot product of this Vector, either with another
  Vector, or a Dyadic, or a Del operator.
  If 'other' is a Vector, returns the dot product scalar (SymPy
  expression).
  If 'other' is a Dyadic, the dot product is returned as a Vector.
  If 'other' is an instance of Del, returns the directional
  derivative operator as a Python function. If this function is
  applied to a scalar expression, it returns the directional
  derivative of the scalar field wrt this Vector.
  
  Parameters
  ==========
  
  other: Vector/Dyadic/Del
      The Vector or Dyadic we are dotting with, or a Del operator .
  
  Examples
  ========
  
  >>> from sympy.vector import CoordSys3D, Del
  >>> C = CoordSys3D('C')
  >>> delop = Del()
  >>> C.i.dot(C.j)
  0
  >>> C.i & C.i
  1
  >>> v = 3*C.i + 4*C.j + 5*C.k
  >>> v.dot(C.k)
  5
  >>> (C.i & delop)(C.x*C.y*C.z)
  C.y*C.z
  >>> d = C.i.outer(C.i)
  >>> C.i.dot(d)
  C.i
code: def dot(self, other):
      """
      Returns the dot product of this Vector, either with another
      Vector, or a Dyadic, or a Del operator.
      If 'other' is a Vector, returns the dot product scalar (SymPy
      expression).
      If 'other' is a Dyadic, the dot product is returned as a Vector.
      If 'other' is an instance of Del, returns the directional
      derivative operator as a Python function. If this function is
      applied to a scalar expression, it returns the directional
      derivative of the scalar field wrt this Vector.
  
      Parameters
      ==========
  
      other: Vector/Dyadic/Del
          The Vector or Dyadic we are dotting with, or a Del operator .
  
      Examples
      ========
  
      >>> from sympy.vector import CoordSys3D, Del
      >>> C = CoordSys3D('C')
      >>> delop = Del()
      >>> C.i.dot(C.j)
      0
      >>> C.i & C.i
      1
      >>> v = 3*C.i + 4*C.j + 5*C.k
      >>> v.dot(C.k)
      5
      >>> (C.i & delop)(C.x*C.y*C.z)
      C.y*C.z
      >>> d = C.i.outer(C.i)
      >>> C.i.dot(d)
      C.i
  
      """
  
      # Check special cases
      if isinstance(other, Dyadic):
          if isinstance(self, VectorZero):
              return Vector.zero
          outvec = Vector.zero
          for k, v in other.components.items():
              vect_dot = k.args[0].dot(self)
              outvec += vect_dot * v * k.args[1]
          return outvec
      from sympy.vector.deloperator import Del
  
      if not isinstance(other, (Del, Vector)):
          raise TypeError(
              str(other)
              + " is not a vector, dyadic or "
              + "del operator"
          )
  
      # Check if the other is a del operator
      if isinstance(other, Del):
  
          def directional_derivative(field):
              from sympy.vector.functions import directional_derivative
  
              return directional_derivative(field, self)
  
          return directional_derivative
  
      return dot(self, other)
  
imports: from __future__ import annotations
  from itertools import product
  from sympy.core.add import Add
  from sympy.core.assumptions import StdFactKB
  from sympy.core.expr import AtomicExpr, Expr
  from sympy.core.power import Pow
  from sympy.core.singleton import S
  from sympy.core.sorting import default_sort_key
  from sympy.core.sympify import sympify
  from sympy.functions.elementary.miscellaneous import sqrt
  from sympy.matrices.immutable import ImmutableDenseMatrix
  from sympy.vector.basisdependent import BasisDependentZero, BasisDependent, BasisDependentMul, BasisDependentAdd
  from sympy.vector.coordsysrect import CoordSys3D
  from sympy.vector.dyadic import Dyadic, BaseDyadic, DyadicAdd
label_desc: Use image node_id 4 for calling the Vector obj's underlying member method code with example usage: obj.dot(other) and returns: dot, outvec, directional_derivative, Vector, directional_derivative