code: def add_batch_observations(
      self,
      n_obs_per_arm: Tensor,
      sum_reward_per_arm: Tensor,
      sum_reward_squared_per_arm: Tensor,
      arm_ids: Optional[List[str]] = None,
  ) -> None:
      (
          n_obs_per_arm,
          sum_reward_per_arm,
          sum_reward_squared_per_arm,
      ) = reindex_multiple_tensors(
          all_ids=self.arm_ids,
          batch_ids=arm_ids,
          value_tensors=(
              n_obs_per_arm,
              sum_reward_per_arm,
              sum_reward_squared_per_arm,
          ),
      )
  
      self.total_n_obs_per_arm += n_obs_per_arm
      self.total_sum_reward_per_arm += sum_reward_per_arm
      self.total_sum_reward_squared_per_arm += (
          sum_reward_squared_per_arm
      )
      self.total_n_obs_all_arms += int(n_obs_per_arm.sum().item())
  
imports: from abc import ABC, abstractmethod
  from typing import List, Optional, Tuple
  import torch
  from torch import Tensor
label_desc: Use image node_id 2 for calling the MABAlgo obj's underlying member method code with example usage: obj.add_batch_observations(n_obs_per_arm, sum_reward_per_arm, sum_reward_squared_per_arm, arm_ids) without return types