code: public function dotProduct(self $b)
      {
          $this->_checkVectorSpace($b);
  
          $bComponents = $b->components();
          $product = 0;
          foreach ($this->components() as $i => $component) {
              $product += $component * $bComponents[$i];
          }
  
          return $product;
      }
docs: Computes the dot product, or scalar product, of two vectors.
  
  @api
  @param self $b The vector to multiply with.
  @return int|float The dot product of the two vectors.
  @throws Exception if the vectors are not in the same vector space.
  @see self::_checkVectorSpace() For exception information.