code: def test_check_has_length():
      check_has_length((1,))
      check_has_length(
          [
              1,
          ]
      )
      check_has_length(np.ndarray((1,)))
      check_has_length(
          (1,),
          exact_length=1,
          min_length=1,
          max_length=1,
          must_be_1d=True,
      )
      check_has_length((1,), exact_length=[1, 2.0])
  
      with pytest.raises(
          ValueError,
          match="'exact_length' must have integer-like values.",
      ):
          check_has_length((1,), exact_length=(1, 2.4), name="_input")
  
      msg = "_input must have a length equal to any of: 1. Got length 2 instead."
      with pytest.raises(ValueError, match=msg):
          check_has_length((1, 2), exact_length=1, name="_input")
      msg = "_input must have a length equal to any of: [3 4]. Got length 2 instead."
      with pytest.raises(ValueError, match=escape(msg)):
          check_has_length((1, 2), exact_length=[3, 4], name="_input")
  
      msg = "_input must have a maximum length of 1. Got length 2 instead."
      with pytest.raises(ValueError, match=msg):
          check_has_length((1, 2), max_length=1, name="_input")
  
      msg = "_input must have a minimum length of 2. Got length 1 instead."
      with pytest.raises(ValueError, match=msg):
          check_has_length((1,), min_length=2, name="_input")
  
      msg = "Range [4 2] must be sorted in ascending order."
      with pytest.raises(ValueError, match=escape(msg)):
          check_has_length(
              (
                  1,
                  2,
                  3,
              ),
              min_length=4,
              max_length=2,
          )
  
      msg = "Shape must be -1."
      with pytest.raises(ValueError, match=escape(msg)):
          check_has_length(((1, 2), (3, 4)), must_be_1d=True)
  
imports: from collections import namedtuple
  from re import escape
  import sys
  from typing import Union, get_args, get_origin
  import numpy
  import pytest
  from vtk import vtkTransform
  from pyvista.core import pyvista_ndarray
  from pyvista.core.input_validation.check import _validate_shape_value, check_has_length, check_has_shape, check_is_arraylike, check_is_dtypelike, check_is_finite, check_is_greater_than, check_is_in_range, check_is_instance, check_is_integerlike, check_is_iterable, check_is_iterable_of_some_type, check_is_iterable_of_strings, check_is_less_than, check_is_nonnegative, check_is_number, check_is_real, check_is_scalar, check_is_sequence, check_is_sorted, check_is_string, check_is_string_in_iterable, check_is_subdtype, check_is_type
  from pyvista.core.input_validation.validate import _set_default_kwarg_mandatory, validate_array, validate_array3, validate_arrayN, validate_arrayN_uintlike, validate_arrayNx3, validate_axes, validate_data_range, validate_dtype, validate_number, validate_transform3x3, validate_transform4x4
  from pyvista.core.utilities.arrays import cast_to_tuple_array, vtkmatrix_from_array
label_desc: Use image node_id 33 for calling a global function with example usage: test_check_has_length() without return types