code: def _lstm_helper(draw):
      input_size = draw(helpers.ints(min_value=2, max_value=5))
      hidden_size = 4 * input_size
      input_length = draw(helpers.ints(min_value=2, max_value=5))
      batch_size = draw(helpers.ints(min_value=1, max_value=4)) * 2
      dtype = draw(helpers.get_dtypes("float", full=False))
      (
          time_major,
          go_backwards,
          unroll,
          zero_output_for_mask,
          return_all_outputs,
      ) = draw(helpers.array_bools(size=5))
      shape = [batch_size, input_length, input_size]
      if time_major:
          shape = [input_length, batch_size, input_size]
      inputs = draw(
          helpers.dtype_and_values(
              available_dtypes=dtype,
              shape=shape,
              min_value=-1,
              max_value=1,
              abs_smallest_val=1e-5,
              safety_factor_scale="log",
          )
      )[1][0]
      mask = draw(
          st.just([None, [None]])
          | helpers.dtype_and_values(
              available_dtypes=["bool"],
              shape=[*shape[:2], 1],
          )
      )[1][0]
      kernel, recurrent_kernel = draw(
          helpers.dtype_and_values(
              available_dtypes=dtype,
              num_arrays=2,
              shape=(input_size, hidden_size),
              min_value=-1,
              max_value=1,
              abs_smallest_val=1e-5,
              safety_factor_scale="log",
          )
      )[1]
      bias, recurrent_bias = draw(
          helpers.dtype_and_values(
              available_dtypes=dtype,
              num_arrays=2,
              shape=(1, hidden_size),
              min_value=-1,
              max_value=1,
              abs_smallest_val=1e-5,
              safety_factor_scale="log",
          )
      )[1]
      init_h, init_c = draw(
          helpers.dtype_and_values(
              available_dtypes=dtype,
              num_arrays=2,
              shape=(batch_size, input_size),
              min_value=-1,
              max_value=1,
              abs_smallest_val=1e-5,
              safety_factor_scale="log",
          )
      )[1]
      dtypes = [dtype[0] for _ in range(7)]
      if mask is not None:
          dtypes.append("bool")
      # ToDo : zero_output_for_mask doesn't work if we don't return_all_outputs
      # in tensorflow
      zero_output_for_mask = zero_output_for_mask and return_all_outputs
      return (
          dtypes,
          inputs,
          kernel,
          recurrent_kernel,
          bias,
          recurrent_bias,
          [init_h, init_c],
          go_backwards,
          mask,
          unroll,
          input_length,
          time_major,
          zero_output_for_mask,
          return_all_outputs,
      )
  
imports: import numpy
  import torch
  from hypothesis import strategies, assume
  import ivy
  import ivy_tests.test_ivy.helpers
  from ivy_tests.test_ivy.helpers import handle_test, BackendHandler
label_desc: Use image node_id 3 for calling a global function with example usage: _lstm_helper(draw) and returns: dtypes,  inputs,  kernel,  recurrent_kernel,  bias,  recurrent_bias,  list,  go_backwards,  mask,  unroll,  input_length,  time_major,  zero_output_for_mask,  return_all_outputs