code: def test_struct(self):
      class BoundingBox(ElementType):
          def __str__(self):
              return "bounding box from detection model"
  
          def fields(self):
              return ("X", "Y", "W", "H")
  
      # ALSO ADD new, user-defined, axis kind
      class AxisKind2(AxisKindAbstract):
          Image = 0
  
      T1 = NeuralType(
          elements_type=BoundingBox(),
          axes=(
              AxisType(kind=AxisKind.Batch, size=None, is_list=True),
              AxisType(kind=AxisKind2.Image, size=None, is_list=True),
          ),
      )
  
      class BadBoundingBox(ElementType):
          def __str__(self):
              return "bad bounding box from detection model"
  
          def fields(self):
              return ("X", "Y", "H")
  
      T2 = NeuralType(
          elements_type=BadBoundingBox(),
          axes=(
              AxisType(kind=AxisKind.Batch, size=None, is_list=True),
              AxisType(kind=AxisKind2.Image, size=None, is_list=True),
          ),
      )
      assert T2.compare(T1) == NeuralTypeComparisonResult.INCOMPATIBLE
  
file_path: NeMo/tests/core/test_neural_types.py
imports: import pytest
  from nemo.core.neural_types import AcousticEncodedRepresentation, AudioSignal, AxisKind, AxisKindAbstract, AxisType, ChannelType, ElementType, MelSpectrogramType, MFCCSpectrogramType, NeuralType, NeuralTypeComparisonResult, SpectrogramType, VoidType
label_desc: Use image node_id 12 for calling the TestNeuralTypeSystem obj's underlying member method code with example usage: obj.test_struct() and returns: str, str,  str,  str,  str, str, str,  str,  str