def dot(self, rhs: ndarray, out: ndarray | None = None) -> ndarray:
        """a.dot(rhs, out=None)

        Return the dot product of this array with ``rhs``.

        Refer to :func:`cupynumeric.dot` for full documentation.

        See Also
        --------
        cupynumeric.dot : equivalent function

        Availability
        --------
        Multiple GPUs, Multiple CPUs

        """
        # work around circular import
        from .._module.linalg_mvp import _contract

        if self.ndim == 0 or rhs.ndim == 0:
            return self._thunk._multiply(rhs, out=out)

        (self_modes, rhs_modes, out_modes) = dot_modes(self.ndim, rhs.ndim)
        return _contract(
            self_modes,
            rhs_modes,
            out_modes,
            self,
            rhs,
            out=out,
            casting="unsafe",
        )
a.dot(rhs, out=None)

        Return the dot product of this array with ``rhs``.

        Refer to :func:`cupynumeric.dot` for full documentation.

        See Also
        --------
        cupynumeric.dot : equivalent function

        Availability
        --------
        Multiple GPUs, Multiple CPUs

        
cupynumeric/_array/array.py