text: #
  # Copyright 2016 The BigDL Authors.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  #
  
  # The Clear BSD License
  
  # Copyright (c) 2019 Carnegie Mellon University
  # All rights reserved.
  
  # Redistribution and use in source and binary forms, with or without modification,
  # are permitted (subject to the limitations in the disclaimer below) provided that
  # the following conditions are met:
  #     * Redistributions of source code must retain the above copyright notice,
  #       this list of conditions and the following disclaimer.
  #     * Redistributions in binary form must reproduce the above copyright notice,
  #       this list of conditions and the following disclaimer in the documentation
  #       and/or other materials provided with the distribution.
  #     * Neither the name of Carnegie Mellon University nor the names of its contributors
  #       may be used to endorse or promote products derived from this software without
  #       specific prior written permission.
  
  # NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
  # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  # AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
  # OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  # POSSIBILITY OF SUCH DAMAGE.
  
  from enum import Enum
  
  
  '''
  Exactly the same as gan.output
  Add some comments for easy understanding
  '''
  
  
  class OutputType(Enum):
      CONTINUOUS = "CONTINUOUS"
      DISCRETE = "DISCRETE"
  
  
  class Normalization(Enum):
      ZERO_ONE = "ZERO_ONE"
      MINUSONE_ONE = "MINUSONE_ONE"
  
  
  class Output(object):
      def __init__(self, type_, dim, normalization=None, is_gen_flag=False):
          self.type_ = type_
          self.dim = dim
          self.normalization = normalization
          # gen flag is explained in appendix B, right below table 8.
          self.is_gen_flag = is_gen_flag
  
          if type_ == OutputType.CONTINUOUS and normalization is None:
              from bigdl.nano.utils.log4Error import invalidInputError
              invalidInputError(False,
                                "normalization must be set for continuous output")
  