"""
Autogenerated python message buffer code.
Source: clad/types/proceduralFaceTypes.clad
Full command line: victor-clad/tools/message-buffers/emitters/Python_emitter.py -C src -I clad/src lib/util/source/anki/clad robot/clad/src coretech/vision/clad_src coretech/common/clad_src -o generated/cladPython clad/types/proceduralFaceTypes.clad
"""

from __future__ import absolute_import
from __future__ import print_function

def _modify_path():
  import inspect, os, sys
  search_paths = [
    '../..',
    '../../../../victor-clad/tools/message-buffers/support/python',
  ]
  currentpath = os.path.abspath(os.path.dirname(inspect.getfile(inspect.currentframe())))
  for search_path in search_paths:
    search_path = os.path.normpath(os.path.abspath(os.path.realpath(os.path.join(currentpath, search_path))))
    if search_path not in sys.path:
      sys.path.insert(0, search_path)
_modify_path()

import msgbuffers

Anki = msgbuffers.Namespace()
Anki.Vector = msgbuffers.Namespace()

class ProceduralEyeParameter(object):
  "Automatically-generated uint_8 enumeration."
  EyeCenterX        = 0
  EyeCenterY        = 1
  EyeScaleX         = 2
  EyeScaleY         = 3
  EyeAngle          = 4
  LowerInnerRadiusX = 5
  LowerInnerRadiusY = 6
  UpperInnerRadiusX = 7
  UpperInnerRadiusY = 8
  UpperOuterRadiusX = 9
  UpperOuterRadiusY = 10
  LowerOuterRadiusX = 11
  LowerOuterRadiusY = 12
  UpperLidY         = 13
  UpperLidAngle     = 14
  UpperLidBend      = 15
  LowerLidY         = 16
  LowerLidAngle     = 17
  LowerLidBend      = 18
  Saturation        = 19
  Lightness         = 20
  GlowSize          = 21
  HotSpotCenterX    = 22
  HotSpotCenterY    = 23
  GlowLightness     = 24
  NumParameters     = 25

Anki.Vector.ProceduralEyeParameter = ProceduralEyeParameter
del ProceduralEyeParameter


class ProceduralFaceParameters(object):
  "Generated message-passing structure."

  __slots__ = (
    '_faceAngle_deg',   # float_32
    '_faceCenX',        # float_32
    '_faceCenY',        # float_32
    '_faceScaleX',      # float_32
    '_faceScaleY',      # float_32
    '_scanlineOpacity', # float_32
    '_leftEye',         # float_32[25]
    '_rightEye',        # float_32[25]
  )

  @property
  def faceAngle_deg(self):
    "float_32 faceAngle_deg struct property."
    return self._faceAngle_deg

  @faceAngle_deg.setter
  def faceAngle_deg(self, value):
    self._faceAngle_deg = msgbuffers.validate_float(
      'ProceduralFaceParameters.faceAngle_deg', value, 'f')

  @property
  def faceCenX(self):
    "float_32 faceCenX struct property."
    return self._faceCenX

  @faceCenX.setter
  def faceCenX(self, value):
    self._faceCenX = msgbuffers.validate_float(
      'ProceduralFaceParameters.faceCenX', value, 'f')

  @property
  def faceCenY(self):
    "float_32 faceCenY struct property."
    return self._faceCenY

  @faceCenY.setter
  def faceCenY(self, value):
    self._faceCenY = msgbuffers.validate_float(
      'ProceduralFaceParameters.faceCenY', value, 'f')

  @property
  def faceScaleX(self):
    "float_32 faceScaleX struct property."
    return self._faceScaleX

  @faceScaleX.setter
  def faceScaleX(self, value):
    self._faceScaleX = msgbuffers.validate_float(
      'ProceduralFaceParameters.faceScaleX', value, 'f')

  @property
  def faceScaleY(self):
    "float_32 faceScaleY struct property."
    return self._faceScaleY

  @faceScaleY.setter
  def faceScaleY(self, value):
    self._faceScaleY = msgbuffers.validate_float(
      'ProceduralFaceParameters.faceScaleY', value, 'f')

  @property
  def scanlineOpacity(self):
    "float_32 scanlineOpacity struct property."
    return self._scanlineOpacity

  @scanlineOpacity.setter
  def scanlineOpacity(self, value):
    self._scanlineOpacity = msgbuffers.validate_float(
      'ProceduralFaceParameters.scanlineOpacity', value, 'f')

  @property
  def leftEye(self):
    "float_32[25] leftEye struct property."
    return self._leftEye

  @leftEye.setter
  def leftEye(self, value):
    self._leftEye = msgbuffers.validate_farray(
      'ProceduralFaceParameters.leftEye', value, 25,
      lambda name, value_inner: msgbuffers.validate_float(
        name, value_inner, 'f'))

  @property
  def rightEye(self):
    "float_32[25] rightEye struct property."
    return self._rightEye

  @rightEye.setter
  def rightEye(self, value):
    self._rightEye = msgbuffers.validate_farray(
      'ProceduralFaceParameters.rightEye', value, 25,
      lambda name, value_inner: msgbuffers.validate_float(
        name, value_inner, 'f'))

  def __init__(self, faceAngle_deg=0.0, faceCenX=0.0, faceCenY=0.0, faceScaleX=0.0, faceScaleY=0.0, scanlineOpacity=0.0, leftEye=(0.0,) * 25, rightEye=(0.0,) * 25):
    self.faceAngle_deg = faceAngle_deg
    self.faceCenX = faceCenX
    self.faceCenY = faceCenY
    self.faceScaleX = faceScaleX
    self.faceScaleY = faceScaleY
    self.scanlineOpacity = scanlineOpacity
    self.leftEye = leftEye
    self.rightEye = rightEye

  @classmethod
  def unpack(cls, buffer):
    "Reads a new ProceduralFaceParameters from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('ProceduralFaceParameters.unpack received a buffer of length {length}, ' +
        'but only {position} bytes were read.').format(
        length=len(reader), position=reader.tell()))
    return value

  @classmethod
  def unpack_from(cls, reader):
    "Reads a new ProceduralFaceParameters from the given BinaryReader."
    _faceAngle_deg = reader.read('f')
    _faceCenX = reader.read('f')
    _faceCenY = reader.read('f')
    _faceScaleX = reader.read('f')
    _faceScaleY = reader.read('f')
    _scanlineOpacity = reader.read('f')
    _leftEye = reader.read_farray('f', 25)
    _rightEye = reader.read_farray('f', 25)
    return cls(_faceAngle_deg, _faceCenX, _faceCenY, _faceScaleX, _faceScaleY, _scanlineOpacity, _leftEye, _rightEye)

  def pack(self):
    "Writes the current ProceduralFaceParameters, returning bytes."
    writer = msgbuffers.BinaryWriter()
    self.pack_to(writer)
    return writer.dumps()

  def pack_to(self, writer):
    "Writes the current ProceduralFaceParameters to the given BinaryWriter."
    writer.write(self._faceAngle_deg, 'f')
    writer.write(self._faceCenX, 'f')
    writer.write(self._faceCenY, 'f')
    writer.write(self._faceScaleX, 'f')
    writer.write(self._faceScaleY, 'f')
    writer.write(self._scanlineOpacity, 'f')
    writer.write_farray(self._leftEye, 'f', 25)
    writer.write_farray(self._rightEye, 'f', 25)

  def __eq__(self, other):
    if type(self) is type(other):
      return (self._faceAngle_deg == other._faceAngle_deg and
        self._faceCenX == other._faceCenX and
        self._faceCenY == other._faceCenY and
        self._faceScaleX == other._faceScaleX and
        self._faceScaleY == other._faceScaleY and
        self._scanlineOpacity == other._scanlineOpacity and
        self._leftEye == other._leftEye and
        self._rightEye == other._rightEye)
    else:
      return NotImplemented

  def __ne__(self, other):
    if type(self) is type(other):
      return not self.__eq__(other)
    else:
      return NotImplemented

  def __len__(self):
    return (msgbuffers.size(self._faceAngle_deg, 'f') +
      msgbuffers.size(self._faceCenX, 'f') +
      msgbuffers.size(self._faceCenY, 'f') +
      msgbuffers.size(self._faceScaleX, 'f') +
      msgbuffers.size(self._faceScaleY, 'f') +
      msgbuffers.size(self._scanlineOpacity, 'f') +
      msgbuffers.size_farray(self._leftEye, 'f', 25) +
      msgbuffers.size_farray(self._rightEye, 'f', 25))

  def __str__(self):
    return '{type}(faceAngle_deg={faceAngle_deg}, faceCenX={faceCenX}, faceCenY={faceCenY}, faceScaleX={faceScaleX}, faceScaleY={faceScaleY}, scanlineOpacity={scanlineOpacity}, leftEye={leftEye}, rightEye={rightEye})'.format(
      type=type(self).__name__,
      faceAngle_deg=self._faceAngle_deg,
      faceCenX=self._faceCenX,
      faceCenY=self._faceCenY,
      faceScaleX=self._faceScaleX,
      faceScaleY=self._faceScaleY,
      scanlineOpacity=self._scanlineOpacity,
      leftEye=msgbuffers.shorten_sequence(self._leftEye),
      rightEye=msgbuffers.shorten_sequence(self._rightEye))

  def __repr__(self):
    return '{type}(faceAngle_deg={faceAngle_deg}, faceCenX={faceCenX}, faceCenY={faceCenY}, faceScaleX={faceScaleX}, faceScaleY={faceScaleY}, scanlineOpacity={scanlineOpacity}, leftEye={leftEye}, rightEye={rightEye})'.format(
      type=type(self).__name__,
      faceAngle_deg=repr(self._faceAngle_deg),
      faceCenX=repr(self._faceCenX),
      faceCenY=repr(self._faceCenY),
      faceScaleX=repr(self._faceScaleX),
      faceScaleY=repr(self._faceScaleY),
      scanlineOpacity=repr(self._scanlineOpacity),
      leftEye=repr(self._leftEye),
      rightEye=repr(self._rightEye))

Anki.Vector.ProceduralFaceParameters = ProceduralFaceParameters
del ProceduralFaceParameters


