code: def test_efficiency(self, new_input: List) -> Tuple[Optional[float]]:
      warmups = []
      new_input_hash = hash(str(new_input))
      for input_list in self.base_inputs:
          if (
              len(warmups) < MAX_WARMUP_LIMIT
              and hash(str(input_list)) != new_input_hash
          ):
              warmups.append(input_list)
      runtime_list = [
          execute_for_runtime(
              self.contract_code, new_input, warmups, self.signature
          )
          for _ in range(RUN_REPEAT)
      ]
      if any(type(x) != float for x in runtime_list):
          return None, None
      avg = sum(runtime_list) / RUN_REPEAT
      sd = math.sqrt(
          sum((t - avg) ** 2 for t in runtime_list) / (RUN_REPEAT - 1)
      )
      return avg, sd
  
imports: import copy
  import math
  import random
  import string
  from typing import Any, Dict, List, Optional, Set, Tuple
  from multipledispatch import dispatch
  from rich.progress import track
  from evalplus._experimental.evaluate_runtime import MAX_WARMUP_LIMIT, RUN_REPEAT, execute_for_runtime
  from evalplus.gen.mut_gen import MutateGen
label_desc: Use image node_id 3 for calling the TypedMutEffGen obj's underlying member method code with example usage: obj.test_efficiency(new_input) and returns: avg,  sd, None,  None