code: def compute_weighted_doubly_robust_point_estimate(
      self,
      j_steps,
      num_j_steps,
      j_step_returns,
      infinite_step_returns,
      j_step_return_trajectories,
  ):
      (
          low_bound,
          high_bound,
      ) = WeightedSequentialDoublyRobustEstimator.confidence_bounds(
          infinite_step_returns,
          WeightedSequentialDoublyRobustEstimator.CONFIDENCE_INTERVAL,
      )
      # decompose error into bias + variance
      j_step_bias = np.zeros([num_j_steps])
      where_lower = np.where(j_step_returns < low_bound)[0]
      j_step_bias[where_lower] = low_bound - j_step_returns[where_lower]
      where_higher = np.where(j_step_returns > high_bound)[0]
      j_step_bias[where_higher] = (
          j_step_returns[where_higher] - high_bound
      )
  
      covariance = np.cov(j_step_return_trajectories)
      error = covariance + j_step_bias.T * j_step_bias
  
      # minimize mse error
      constraint = {"type": "eq", "fun": lambda x: np.sum(x) - 1.0}
  
      x = np.zeros([len(j_steps)])
      res = sp.optimize.minimize(
          mse_loss,
          x,
          args=error,
          constraints=constraint,
          bounds=[(0, 1) for _ in range(x.shape[0])],
      )
      x = np.array(res.x)
      return float(np.dot(x, j_step_returns))
  
file_path: ReAgent/reagent/evaluation/weighted_sequential_doubly_robust_estimator.py
imports: import itertools
  import logging
  import numpy
  import scipy
  from reagent.evaluation.cpe import CpeEstimate
  from reagent.evaluation.evaluation_data_page import EvaluationDataPage
label_desc: Use image node_id 3 for calling the WeightedSequentialDoublyRobustEstimator obj's underlying member method code with example usage: obj.compute_weighted_doubly_robust_point_estimate(j_steps, num_j_steps, j_step_returns, infinite_step_returns, j_step_return_trajectories) and returns: float