/* Generated by the protocol buffer compiler.  DO NOT EDIT! */
/* Generated from: Model.proto */

#ifndef PROTOBUF_C_Model_2eproto__INCLUDED
#define PROTOBUF_C_Model_2eproto__INCLUDED

#include <protobuf-c/protobuf-c.h>

PROTOBUF_C__BEGIN_DECLS

#if PROTOBUF_C_VERSION_NUMBER < 1003000
# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers.
#elif 1003003 < PROTOBUF_C_MIN_COMPILER_VERSION
# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c.
#endif

#include "NeuralNetwork.pb-c.h"

typedef struct _CoreML__Specification__FeatureDescription CoreML__Specification__FeatureDescription;
typedef struct _CoreML__Specification__Metadata CoreML__Specification__Metadata;
typedef struct _CoreML__Specification__Metadata__UserDefinedEntry CoreML__Specification__Metadata__UserDefinedEntry;
typedef struct _CoreML__Specification__ModelDescription CoreML__Specification__ModelDescription;
typedef struct _CoreML__Specification__SerializedModel CoreML__Specification__SerializedModel;
typedef struct _CoreML__Specification__Model CoreML__Specification__Model;


/* --- enums --- */


/* --- messages --- */

/*
 **
 * A feature description,
 * consisting of a name, short description, and type.
 */
struct  _CoreML__Specification__FeatureDescription
{
  ProtobufCMessage base;
  char *name;
  char *shortdescription;
  CoreML__Specification__FeatureType *type;
};
#define CORE_ML__SPECIFICATION__FEATURE_DESCRIPTION__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&core_ml__specification__feature_description__descriptor) \
    , (char *)protobuf_c_empty_string, (char *)protobuf_c_empty_string, NULL }


struct  _CoreML__Specification__Metadata__UserDefinedEntry
{
  ProtobufCMessage base;
  char *key;
  char *value;
};
#define CORE_ML__SPECIFICATION__METADATA__USER_DEFINED_ENTRY__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&core_ml__specification__metadata__user_defined_entry__descriptor) \
    , (char *)protobuf_c_empty_string, (char *)protobuf_c_empty_string }


/*
 **
 * Model metadata,
 * consisting of a short description, a version string,
 * an author, a license, and any other user defined
 * key/value meta data.
 */
struct  _CoreML__Specification__Metadata
{
  ProtobufCMessage base;
  char *shortdescription;
  char *versionstring;
  char *author;
  char *license;
  size_t n_userdefined;
  CoreML__Specification__Metadata__UserDefinedEntry **userdefined;
};
#define CORE_ML__SPECIFICATION__METADATA__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&core_ml__specification__metadata__descriptor) \
    , (char *)protobuf_c_empty_string, (char *)protobuf_c_empty_string, (char *)protobuf_c_empty_string, (char *)protobuf_c_empty_string, 0,NULL }


/*
 **
 * A description of a model,
 * consisting of descriptions of its input and output features.
 * Both regressor and classifier models require the name of the
 * primary predicted output feature (``predictedFeatureName``).
 * Classifier models can specify the output feature containing
 * probabilities for the predicted classes
 * (``predictedProbabilitiesName``).
 */
struct  _CoreML__Specification__ModelDescription
{
  ProtobufCMessage base;
  size_t n_input;
  CoreML__Specification__FeatureDescription **input;
  size_t n_output;
  CoreML__Specification__FeatureDescription **output;
  /*
   * [Required for regressor and classifier models]: the name
   * to give to an output feature containing the prediction.
   */
  char *predictedfeaturename;
  /*
   * [Optional for classifier models]: the name to give to an
   * output feature containing a dictionary mapping class
   * labels to their predicted probabilities. If not specified,
   * the dictionary will not be returned by the model.
   */
  char *predictedprobabilitiesname;
  size_t n_traininginput;
  CoreML__Specification__FeatureDescription **traininginput;
  CoreML__Specification__Metadata *metadata;
};
#define CORE_ML__SPECIFICATION__MODEL_DESCRIPTION__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&core_ml__specification__model_description__descriptor) \
    , 0,NULL, 0,NULL, (char *)protobuf_c_empty_string, (char *)protobuf_c_empty_string, 0,NULL, NULL }


struct  _CoreML__Specification__SerializedModel
{
  ProtobufCMessage base;
  /*
   * Identifier whose content describes the model type of the serialized protocol buffer message.
   */
  char *identifier;
  /*
   * Must be a valid serialized protocol buffer of the above specified type.
   */
  ProtobufCBinaryData model;
};
#define CORE_ML__SPECIFICATION__SERIALIZED_MODEL__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&core_ml__specification__serialized_model__descriptor) \
    , (char *)protobuf_c_empty_string, {0,NULL} }


typedef enum {
  CORE_ML__SPECIFICATION__MODEL__TYPE__NOT_SET = 0,
  CORE_ML__SPECIFICATION__MODEL__TYPE_NEURAL_NETWORK = 500
    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(CORE_ML__SPECIFICATION__MODEL__TYPE)
} CoreML__Specification__Model__TypeCase;

/*
 **
 * A Core ML model,
 * consisting of a specification version,
 * a model description, and a model type.
 * Core ML model compatibility is indicated by
 * a monotonically increasing specification version number,
 * which is incremented anytime a backward-incompatible change is made
 * (this is functionally equivalent to the MAJOR version number
 * described by `Semantic Versioning 2.0.0 <http://semver.org/>`_).
 * Specification Versions : OS Availability (Core ML Version)
 * 1 : iOS 11, macOS 10.13, tvOS 11, watchOS 4 (Core ML 1)
 * - Feedforward & Recurrent Neural Networks
 * - General Linear Models
 * - Tree Ensembles
 * - Support Vector Machines
 * - Pipelines
 * - Feature Engineering
 * 2 : iOS 11.2, macOS 10.13.2, tvOS 11.2, watchOS 4.2 (Core ML 1.2)
 * - Custom Layers for Neural Networks
 * - Float 16 support for Neural Network layers
 * 3 : iOS 12, macOS 10.14, tvOS 12, watchOS 5 (Core ML 2)
 * - Flexible shapes and image sizes
 * - Categorical sequences
 * - Core ML Vision Feature Print, Text Classifier, Word Tagger
 * - Non Max Suppression
 * - Crop and Resize Bilinear NN layers
 * - Custom Models
 * 4 : iOS 13, macOS 10.15, tvOS 13, watchOS 6 (Core ML 3)
 * - Updatable models
 * - Exact shape / general rank mapping for neural networks
 * - Large expansion of supported neural network layers
 *   - Generalized operations
 *   - Control flow
 *   - Dynamic layers
 *   - See NeuralNetwork.proto
 * - Nearest Neighbor Classifier
 * - Sound Analysis Prepreocessing
 * - Recommender
 * - Linked Model
 * - NLP Gazeteer
 * - NLP WordEmbedding
 * 5 : iOS 14, macOS 11, tvOS 14, watchOS 7 (Core ML 4)
 * - Model Deployment
 * - Model Encryption
 * - Unified converter API with PyTorch and Tensorflow 2 Support in coremltools 4
 * - MIL builder for neural networks and composite ops in coremltools 4
 * - New layers in neural network:
 *      - CumSum
 *      - OneHot
 *      - ClampedReLu
 *      - ArgSort
 *      - SliceBySize
 *      - Convolution3D
 *      - Pool3D
 *      - Bilinear Upsample with align corners and fractional factors
 *      - PixelShuffle
 *      - MatMul with int8 weights and int8 activations
 *      - Concat interleave
 *      - See NeuralNetwork.proto
 * - Enhanced Xcode model view with interactive previews
 * - Enhanced Xcode Playground support for Core ML models
 */
struct  _CoreML__Specification__Model
{
  ProtobufCMessage base;
  int32_t specificationversion;
  CoreML__Specification__ModelDescription *description;
  /*
   * Following model types support on-device update:
   * - NeuralNetworkClassifier
   * - NeuralNetworkRegressor
   * - NeuralNetwork
   * - KNearestNeighborsClassifier
   */
  protobuf_c_boolean isupdatable;
  CoreML__Specification__Model__TypeCase type_case;
  union {
    /*
     * generic models start at 500
     */
    CoreML__Specification__NeuralNetwork *neuralnetwork;
  };
};
#define CORE_ML__SPECIFICATION__MODEL__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&core_ml__specification__model__descriptor) \
    , 0, NULL, 0, CORE_ML__SPECIFICATION__MODEL__TYPE__NOT_SET, {0} }


/* CoreML__Specification__FeatureDescription methods */
void   core_ml__specification__feature_description__init
                     (CoreML__Specification__FeatureDescription         *message);
size_t core_ml__specification__feature_description__get_packed_size
                     (const CoreML__Specification__FeatureDescription   *message);
size_t core_ml__specification__feature_description__pack
                     (const CoreML__Specification__FeatureDescription   *message,
                      uint8_t             *out);
size_t core_ml__specification__feature_description__pack_to_buffer
                     (const CoreML__Specification__FeatureDescription   *message,
                      ProtobufCBuffer     *buffer);
CoreML__Specification__FeatureDescription *
       core_ml__specification__feature_description__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   core_ml__specification__feature_description__free_unpacked
                     (CoreML__Specification__FeatureDescription *message,
                      ProtobufCAllocator *allocator);
/* CoreML__Specification__Metadata__UserDefinedEntry methods */
void   core_ml__specification__metadata__user_defined_entry__init
                     (CoreML__Specification__Metadata__UserDefinedEntry         *message);
/* CoreML__Specification__Metadata methods */
void   core_ml__specification__metadata__init
                     (CoreML__Specification__Metadata         *message);
size_t core_ml__specification__metadata__get_packed_size
                     (const CoreML__Specification__Metadata   *message);
size_t core_ml__specification__metadata__pack
                     (const CoreML__Specification__Metadata   *message,
                      uint8_t             *out);
size_t core_ml__specification__metadata__pack_to_buffer
                     (const CoreML__Specification__Metadata   *message,
                      ProtobufCBuffer     *buffer);
CoreML__Specification__Metadata *
       core_ml__specification__metadata__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   core_ml__specification__metadata__free_unpacked
                     (CoreML__Specification__Metadata *message,
                      ProtobufCAllocator *allocator);
/* CoreML__Specification__ModelDescription methods */
void   core_ml__specification__model_description__init
                     (CoreML__Specification__ModelDescription         *message);
size_t core_ml__specification__model_description__get_packed_size
                     (const CoreML__Specification__ModelDescription   *message);
size_t core_ml__specification__model_description__pack
                     (const CoreML__Specification__ModelDescription   *message,
                      uint8_t             *out);
size_t core_ml__specification__model_description__pack_to_buffer
                     (const CoreML__Specification__ModelDescription   *message,
                      ProtobufCBuffer     *buffer);
CoreML__Specification__ModelDescription *
       core_ml__specification__model_description__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   core_ml__specification__model_description__free_unpacked
                     (CoreML__Specification__ModelDescription *message,
                      ProtobufCAllocator *allocator);
/* CoreML__Specification__SerializedModel methods */
void   core_ml__specification__serialized_model__init
                     (CoreML__Specification__SerializedModel         *message);
size_t core_ml__specification__serialized_model__get_packed_size
                     (const CoreML__Specification__SerializedModel   *message);
size_t core_ml__specification__serialized_model__pack
                     (const CoreML__Specification__SerializedModel   *message,
                      uint8_t             *out);
size_t core_ml__specification__serialized_model__pack_to_buffer
                     (const CoreML__Specification__SerializedModel   *message,
                      ProtobufCBuffer     *buffer);
CoreML__Specification__SerializedModel *
       core_ml__specification__serialized_model__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   core_ml__specification__serialized_model__free_unpacked
                     (CoreML__Specification__SerializedModel *message,
                      ProtobufCAllocator *allocator);
/* CoreML__Specification__Model methods */
void   core_ml__specification__model__init
                     (CoreML__Specification__Model         *message);
size_t core_ml__specification__model__get_packed_size
                     (const CoreML__Specification__Model   *message);
size_t core_ml__specification__model__pack
                     (const CoreML__Specification__Model   *message,
                      uint8_t             *out);
size_t core_ml__specification__model__pack_to_buffer
                     (const CoreML__Specification__Model   *message,
                      ProtobufCBuffer     *buffer);
CoreML__Specification__Model *
       core_ml__specification__model__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   core_ml__specification__model__free_unpacked
                     (CoreML__Specification__Model *message,
                      ProtobufCAllocator *allocator);
/* --- per-message closures --- */

typedef void (*CoreML__Specification__FeatureDescription_Closure)
                 (const CoreML__Specification__FeatureDescription *message,
                  void *closure_data);
typedef void (*CoreML__Specification__Metadata__UserDefinedEntry_Closure)
                 (const CoreML__Specification__Metadata__UserDefinedEntry *message,
                  void *closure_data);
typedef void (*CoreML__Specification__Metadata_Closure)
                 (const CoreML__Specification__Metadata *message,
                  void *closure_data);
typedef void (*CoreML__Specification__ModelDescription_Closure)
                 (const CoreML__Specification__ModelDescription *message,
                  void *closure_data);
typedef void (*CoreML__Specification__SerializedModel_Closure)
                 (const CoreML__Specification__SerializedModel *message,
                  void *closure_data);
typedef void (*CoreML__Specification__Model_Closure)
                 (const CoreML__Specification__Model *message,
                  void *closure_data);

/* --- services --- */


/* --- descriptors --- */

extern const ProtobufCMessageDescriptor core_ml__specification__feature_description__descriptor;
extern const ProtobufCMessageDescriptor core_ml__specification__metadata__descriptor;
extern const ProtobufCMessageDescriptor core_ml__specification__metadata__user_defined_entry__descriptor;
extern const ProtobufCMessageDescriptor core_ml__specification__model_description__descriptor;
extern const ProtobufCMessageDescriptor core_ml__specification__serialized_model__descriptor;
extern const ProtobufCMessageDescriptor core_ml__specification__model__descriptor;

PROTOBUF_C__END_DECLS


#endif  /* PROTOBUF_C_Model_2eproto__INCLUDED */
