code: def iOS14Features(spec):
      features_list = []
  
      if spec.WhichOneof("Type") == "neuralNetwork":
          nn_spec = spec.neuralNetwork
      elif spec.WhichOneof("Type") in "neuralNetworkClassifier":
          nn_spec = spec.neuralNetworkClassifier
      elif spec.WhichOneof("Type") in "neuralNetworkRegressor":
          nn_spec = spec.neuralNetworkRegressor
      else:
          raise ValueError(
              "Invalid neural network specification for the model"
          )
  
      # Non-zero default optional values
      for idx, input in enumerate(spec.description.input):
          value = 0
          if input.type.isOptional:
              value = max(
                  value, input.type.multiArrayType.floatDefaultValue
              )
              value = max(
                  value, input.type.multiArrayType.doubleDefaultValue
              )
              value = max(
                  value, input.type.multiArrayType.intDefaultValue
              )
  
          if value != 0:
              msg = "Support of non-zero default optional values for inputs."
              features_list.append(msg)
              break
  
      # Layers or modifications introduced in iOS14
      new_layers = [
          "oneHot",
          "cumSum",
          "clampedReLU",
          "argSort",
          "pooling3d",
          "convolution3d",
          "globalPooling3d",
      ]
      for layer in nn_spec.layers:
          layer_type = layer.WhichOneof("layer")
  
          msg = ""
  
          if layer_type in new_layers:
              msg = "{} {}".format(layer_type.capitalize(), "operation")
  
          if layer_type == "tile" and len(layer.input) == 2:
              msg = "Dynamic Tile operation"
  
          if (
              layer_type == "upsample"
              and layer.upsample.linearUpsampleMode in [1, 2]
          ):
              msg = "Upsample operation with Align Corners mode"
  
          if (
              layer_type == "reorganizeData"
              and layer.reorganizeData.mode == 2
          ):
              msg = "Pixel Shuffle operation"
  
          if (
              layer_type == "sliceDynamic"
              and layer.sliceDynamic.squeezeMasks
          ):
              msg = "Squeeze mask for dynamic slice operation"
  
          if (
              layer_type == "sliceStatic"
              and layer.sliceDynamic.squeezeMasks
          ):
              msg = "Squeeze mask for static slice operation"
  
          if layer_type == "concatND" and layer.concatND.interleave:
              msg = "Concat layer with interleave operation"
  
          if msg != "" and (msg not in features_list):
              features_list.append(msg)
  
      return features_list
  
file_path: coremltools/coremltools/converters/mil/_deployment_compatibility.py
imports: from enum import IntEnum
  from coremltools import _SPECIFICATION_VERSION_IOS_13, _SPECIFICATION_VERSION_IOS_14, _SPECIFICATION_VERSION_IOS_15, _SPECIFICATION_VERSION_IOS_16, _SPECIFICATION_VERSION_IOS_17
label_desc: Use image node_id 2 for calling a global function with example usage: iOS14Features(spec) and returns: features_list