// Copyright (c) 2017, Apple Inc. All rights reserved.
//
// Use of this source code is governed by a BSD-3-clause license that can be
// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause

syntax = "proto3";
option optimize_for = LITE_RUNTIME;

import public "DataStructures.proto";

package CoreML.Specification;

/*
 * Transforms a categorical feature into an array. The array will be all
 * zeros expect a single entry of one.
 *
 * Each categorical value will map to an index, this mapping is given by
 * either the ``stringCategories`` parameter or the ``int64Categories``
 * parameter.
 */
message OneHotEncoder {
    enum HandleUnknown {
        ErrorOnUnknown = 0;
        IgnoreUnknown = 1;   // Output will be all zeros for unknown values.
    }

    /*
     * Mapping to be used for the encoding. The position of the category in
     * the below vector determines where the single one entry will be in the
     * output.
     */
    oneof CategoryType {
        StringVector stringCategories = 1;
        Int64Vector int64Categories = 2;
    }

    // Output can be a dictionary with only one entry, instead of an array.
    bool outputSparse = 10;

    HandleUnknown handleUnknown = 11;
}
