code: def __init__(
      self,
      *,
      xp,
      api_version,
      elements_strategy,
      dtype,
      shape,
      fill,
      unique,
  ):
      self.xp = xp
      self.elements_strategy = elements_strategy
      self.dtype = dtype
      self.shape = shape
      self.fill = fill
      self.unique = unique
      self.array_size = math.prod(shape)
      self.builtin = find_castable_builtin_for_dtype(
          xp, api_version, dtype
      )
      self.finfo = (
          None if self.builtin is not float else xp.finfo(self.dtype)
      )
  
imports: import math
  import sys
  from numbers import Real
  from types import SimpleNamespace
  from typing import TYPE_CHECKING, Any, Iterable, Iterator, List, Literal, Mapping, NamedTuple, Optional, Sequence, Tuple, Type, TypeVar, Union, get_args
  from warnings import warn
  from weakref import WeakValueDictionary
  from hypothesis import strategies
  from hypothesis.errors import HypothesisWarning, InvalidArgument
  from hypothesis.extra._array_helpers import NDIM_MAX, BasicIndex, BasicIndexStrategy, BroadcastableShapes, Shape, array_shapes, broadcastable_shapes, check_argument, check_valid_dims, mutually_broadcastable_shapes, order_check, valid_tuple_axes
  from hypothesis.internal.conjecture import utils
  from hypothesis.internal.coverage import check_function
  from hypothesis.internal.floats import next_down
  from hypothesis.internal.reflection import proxies
  from hypothesis.internal.validation import check_type, check_valid_bound, check_valid_integer, check_valid_interval
  from hypothesis.strategies._internal.strategies import check_strategy
  from hypothesis.strategies._internal.utils import defines_strategy
label_desc: Use image node_id 1 to create a new ArrayStrategy object from inherited base classes: st with example: obj = ArrayStrategy()