code: def get_scipy_eig_vec(self):
      
      if not self.params['has_conv']:
        matrix_m = self.sess.run(self.dual_object.matrix_m)
        min_eig_vec_val, estimated_eigen_vector = eigs(matrix_m, k=1, which='SR',
                                                       tol=1E-4)
        min_eig_vec_val = np.reshape(np.real(min_eig_vec_val), [1, 1])
        return np.reshape(estimated_eigen_vector, [-1, 1]), min_eig_vec_val
      else:
        dim = self.dual_object.matrix_m_dimension
        input_vector = tf.placeholder(tf.float32, shape=(dim, 1))
        output_vector = self.dual_object.get_psd_product(input_vector)
  
        def np_vector_prod_fn(np_vector):
          np_vector = np.reshape(np_vector, [-1, 1])
          output_np_vector = self.sess.run(output_vector, feed_dict={input_vector:np_vector})
          return output_np_vector
        linear_operator = LinearOperator((dim, dim), matvec=np_vector_prod_fn)
        # Performing shift invert scipy operation when eig val estimate is available
        min_eig_vec_val, estimated_eigen_vector = eigs(linear_operator,
                                                       k=1, which='SR', tol=1E-4)
        min_eig_vec_val = np.reshape(np.real(min_eig_vec_val), [1, 1])
        return np.reshape(estimated_eigen_vector, [-1, 1]), min_eig_vec_val
docs: Computes scipy estimate of min eigenvalue for matrix M.
  
      Returns:
        eig_vec: Minimum absolute eigen value
        eig_val: Corresponding eigen vector