code: def do_draw(self, data):
      if self.element_strategy.is_empty:
          assert self.min_size == 0
          return []
  
      elements = cu.many(
          data,
          min_size=self.min_size,
          max_size=self.max_size,
          average_size=self.average_size,
      )
      seen_sets = tuple(set() for _ in self.keys)
      result = []
  
      # We construct a filtered strategy here rather than using a check-and-reject
      # approach because some strategies have special logic for generation under a
      # filter, and FilteredStrategy can consolidate multiple filters.
      def not_yet_in_unique_list(val):
          return all(
              key(val) not in seen
              for key, seen in zip(self.keys, seen_sets)
          )
  
      filtered = self.element_strategy._filter_for_filtered_draw(
          not_yet_in_unique_list
      )
      while elements.more():
          value = filtered.do_filtered_draw(data)
          if value is filter_not_satisfied:
              elements.reject(
                  f"Aborted test because unable to satisfy {filtered!r}"
              )
          else:
              for key, seen in zip(self.keys, seen_sets):
                  seen.add(key(value))
              if self.tuple_suffixes is not None:
                  value = (value, *data.draw(self.tuple_suffixes))
              result.append(value)
      assert self.max_size >= len(result) >= self.min_size
      return result
  
imports: import copy
  from typing import Any, Iterable, Tuple, overload
  from hypothesis.errors import InvalidArgument
  from hypothesis.internal.conjecture import utils
  from hypothesis.internal.conjecture.junkdrawer import LazySequenceCopy
  from hypothesis.internal.conjecture.utils import combine_labels
  from hypothesis.internal.reflection import is_identity_function
  from hypothesis.strategies._internal.strategies import T3, T4, T5, Ex, MappedSearchStrategy, SearchStrategy, T, check_strategy, filter_not_satisfied
  from hypothesis.strategies._internal.utils import cacheable, defines_strategy
label_desc: Use image node_id 2 for calling the UniqueListStrategy obj's underlying member method code with example usage: obj.do_draw(data) and returns: result, list, all