{- This file was auto-generated from tensorflow/core/framework/function.proto by the proto-lens-protoc program. -}
{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
  FlexibleInstances, PatternSynonyms, MagicHash, NoImplicitPrelude
  #-}
{-# OPTIONS_GHC -fno-warn-unused-imports#-}
module Proto.Tensorflow.Core.Framework.Function where
import qualified Data.ProtoLens.Reexport.Prelude as Prelude
import qualified Data.ProtoLens.Reexport.Data.Int as Data.Int
import qualified Data.ProtoLens.Reexport.Data.Word as Data.Word
import qualified Data.ProtoLens.Reexport.Data.ProtoLens
       as Data.ProtoLens
import qualified
       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
       as Data.ProtoLens.Message.Enum
import qualified Data.ProtoLens.Reexport.Lens.Family2
       as Lens.Family2
import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
       as Lens.Family2.Unchecked
import qualified Data.ProtoLens.Reexport.Data.Default.Class
       as Data.Default.Class
import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
import qualified Data.ProtoLens.Reexport.Data.ByteString
       as Data.ByteString
import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
import qualified Proto.Tensorflow.Core.Framework.AttrValue
import qualified Proto.Tensorflow.Core.Framework.NodeDef
import qualified Proto.Tensorflow.Core.Framework.OpDef

data FunctionDef = FunctionDef{_FunctionDef'signature ::
                               !(Prelude.Maybe Proto.Tensorflow.Core.Framework.OpDef.OpDef),
                               _FunctionDef'attr ::
                               !(Data.Map.Map Data.Text.Text
                                   Proto.Tensorflow.Core.Framework.AttrValue.AttrValue),
                               _FunctionDef'nodeDef ::
                               ![Proto.Tensorflow.Core.Framework.NodeDef.NodeDef],
                               _FunctionDef'ret :: !(Data.Map.Map Data.Text.Text Data.Text.Text)}
                 deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)

instance (a ~ Proto.Tensorflow.Core.Framework.OpDef.OpDef,
          b ~ Proto.Tensorflow.Core.Framework.OpDef.OpDef,
          Prelude.Functor f) =>
         Lens.Labels.HasLens "signature" f FunctionDef FunctionDef a b
         where
        lensOf _
          = (Prelude..)
              (Lens.Family2.Unchecked.lens _FunctionDef'signature
                 (\ x__ y__ -> x__{_FunctionDef'signature = y__}))
              (Data.ProtoLens.maybeLens Data.Default.Class.def)

instance (a ~
            Prelude.Maybe Proto.Tensorflow.Core.Framework.OpDef.OpDef,
          b ~ Prelude.Maybe Proto.Tensorflow.Core.Framework.OpDef.OpDef,
          Prelude.Functor f) =>
         Lens.Labels.HasLens "maybe'signature" f FunctionDef FunctionDef a b
         where
        lensOf _
          = (Prelude..)
              (Lens.Family2.Unchecked.lens _FunctionDef'signature
                 (\ x__ y__ -> x__{_FunctionDef'signature = y__}))
              Prelude.id

instance (a ~
            Data.Map.Map Data.Text.Text
              Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
          b ~
            Data.Map.Map Data.Text.Text
              Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
          Prelude.Functor f) =>
         Lens.Labels.HasLens "attr" f FunctionDef FunctionDef a b
         where
        lensOf _
          = (Prelude..)
              (Lens.Family2.Unchecked.lens _FunctionDef'attr
                 (\ x__ y__ -> x__{_FunctionDef'attr = y__}))
              Prelude.id

instance (a ~ [Proto.Tensorflow.Core.Framework.NodeDef.NodeDef],
          b ~ [Proto.Tensorflow.Core.Framework.NodeDef.NodeDef],
          Prelude.Functor f) =>
         Lens.Labels.HasLens "nodeDef" f FunctionDef FunctionDef a b
         where
        lensOf _
          = (Prelude..)
              (Lens.Family2.Unchecked.lens _FunctionDef'nodeDef
                 (\ x__ y__ -> x__{_FunctionDef'nodeDef = y__}))
              Prelude.id

instance (a ~ Data.Map.Map Data.Text.Text Data.Text.Text,
          b ~ Data.Map.Map Data.Text.Text Data.Text.Text,
          Prelude.Functor f) =>
         Lens.Labels.HasLens "ret" f FunctionDef FunctionDef a b
         where
        lensOf _
          = (Prelude..)
              (Lens.Family2.Unchecked.lens _FunctionDef'ret
                 (\ x__ y__ -> x__{_FunctionDef'ret = y__}))
              Prelude.id

instance Data.Default.Class.Default FunctionDef where
        def
          = FunctionDef{_FunctionDef'signature = Prelude.Nothing,
                        _FunctionDef'attr = Data.Map.empty, _FunctionDef'nodeDef = [],
                        _FunctionDef'ret = Data.Map.empty}

instance Data.ProtoLens.Message FunctionDef where
        descriptor
          = let signature__field_descriptor
                  = Data.ProtoLens.FieldDescriptor "signature"
                      (Data.ProtoLens.MessageField ::
                         Data.ProtoLens.FieldTypeDescriptor
                           Proto.Tensorflow.Core.Framework.OpDef.OpDef)
                      (Data.ProtoLens.OptionalField maybe'signature)
                      :: Data.ProtoLens.FieldDescriptor FunctionDef
                attr__field_descriptor
                  = Data.ProtoLens.FieldDescriptor "attr"
                      (Data.ProtoLens.MessageField ::
                         Data.ProtoLens.FieldTypeDescriptor FunctionDef'AttrEntry)
                      (Data.ProtoLens.MapField key value attr)
                      :: Data.ProtoLens.FieldDescriptor FunctionDef
                nodeDef__field_descriptor
                  = Data.ProtoLens.FieldDescriptor "node_def"
                      (Data.ProtoLens.MessageField ::
                         Data.ProtoLens.FieldTypeDescriptor
                           Proto.Tensorflow.Core.Framework.NodeDef.NodeDef)
                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked nodeDef)
                      :: Data.ProtoLens.FieldDescriptor FunctionDef
                ret__field_descriptor
                  = Data.ProtoLens.FieldDescriptor "ret"
                      (Data.ProtoLens.MessageField ::
                         Data.ProtoLens.FieldTypeDescriptor FunctionDef'RetEntry)
                      (Data.ProtoLens.MapField key value ret)
                      :: Data.ProtoLens.FieldDescriptor FunctionDef
              in
              Data.ProtoLens.MessageDescriptor
                (Data.Text.pack "tensorflow.FunctionDef")
                (Data.Map.fromList
                   [(Data.ProtoLens.Tag 1, signature__field_descriptor),
                    (Data.ProtoLens.Tag 5, attr__field_descriptor),
                    (Data.ProtoLens.Tag 3, nodeDef__field_descriptor),
                    (Data.ProtoLens.Tag 4, ret__field_descriptor)])
                (Data.Map.fromList
                   [("signature", signature__field_descriptor),
                    ("attr", attr__field_descriptor),
                    ("node_def", nodeDef__field_descriptor),
                    ("ret", ret__field_descriptor)])

data FunctionDef'AttrEntry = FunctionDef'AttrEntry{_FunctionDef'AttrEntry'key
                                                   :: !Data.Text.Text,
                                                   _FunctionDef'AttrEntry'value ::
                                                   !(Prelude.Maybe
                                                       Proto.Tensorflow.Core.Framework.AttrValue.AttrValue)}
                           deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)

instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
          Prelude.Functor f) =>
         Lens.Labels.HasLens "key" f FunctionDef'AttrEntry
           FunctionDef'AttrEntry
           a
           b
         where
        lensOf _
          = (Prelude..)
              (Lens.Family2.Unchecked.lens _FunctionDef'AttrEntry'key
                 (\ x__ y__ -> x__{_FunctionDef'AttrEntry'key = y__}))
              Prelude.id

instance (a ~ Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
          b ~ Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
          Prelude.Functor f) =>
         Lens.Labels.HasLens "value" f FunctionDef'AttrEntry
           FunctionDef'AttrEntry
           a
           b
         where
        lensOf _
          = (Prelude..)
              (Lens.Family2.Unchecked.lens _FunctionDef'AttrEntry'value
                 (\ x__ y__ -> x__{_FunctionDef'AttrEntry'value = y__}))
              (Data.ProtoLens.maybeLens Data.Default.Class.def)

instance (a ~
            Prelude.Maybe Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
          b ~
            Prelude.Maybe Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
          Prelude.Functor f) =>
         Lens.Labels.HasLens "maybe'value" f FunctionDef'AttrEntry
           FunctionDef'AttrEntry
           a
           b
         where
        lensOf _
          = (Prelude..)
              (Lens.Family2.Unchecked.lens _FunctionDef'AttrEntry'value
                 (\ x__ y__ -> x__{_FunctionDef'AttrEntry'value = y__}))
              Prelude.id

instance Data.Default.Class.Default FunctionDef'AttrEntry where
        def
          = FunctionDef'AttrEntry{_FunctionDef'AttrEntry'key =
                                    Data.ProtoLens.fieldDefault,
                                  _FunctionDef'AttrEntry'value = Prelude.Nothing}

instance Data.ProtoLens.Message FunctionDef'AttrEntry where
        descriptor
          = let key__field_descriptor
                  = Data.ProtoLens.FieldDescriptor "key"
                      (Data.ProtoLens.StringField ::
                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional key)
                      :: Data.ProtoLens.FieldDescriptor FunctionDef'AttrEntry
                value__field_descriptor
                  = Data.ProtoLens.FieldDescriptor "value"
                      (Data.ProtoLens.MessageField ::
                         Data.ProtoLens.FieldTypeDescriptor
                           Proto.Tensorflow.Core.Framework.AttrValue.AttrValue)
                      (Data.ProtoLens.OptionalField maybe'value)
                      :: Data.ProtoLens.FieldDescriptor FunctionDef'AttrEntry
              in
              Data.ProtoLens.MessageDescriptor
                (Data.Text.pack "tensorflow.FunctionDef.AttrEntry")
                (Data.Map.fromList
                   [(Data.ProtoLens.Tag 1, key__field_descriptor),
                    (Data.ProtoLens.Tag 2, value__field_descriptor)])
                (Data.Map.fromList
                   [("key", key__field_descriptor),
                    ("value", value__field_descriptor)])

data FunctionDef'RetEntry = FunctionDef'RetEntry{_FunctionDef'RetEntry'key
                                                 :: !Data.Text.Text,
                                                 _FunctionDef'RetEntry'value :: !Data.Text.Text}
                          deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)

instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
          Prelude.Functor f) =>
         Lens.Labels.HasLens "key" f FunctionDef'RetEntry
           FunctionDef'RetEntry
           a
           b
         where
        lensOf _
          = (Prelude..)
              (Lens.Family2.Unchecked.lens _FunctionDef'RetEntry'key
                 (\ x__ y__ -> x__{_FunctionDef'RetEntry'key = y__}))
              Prelude.id

instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
          Prelude.Functor f) =>
         Lens.Labels.HasLens "value" f FunctionDef'RetEntry
           FunctionDef'RetEntry
           a
           b
         where
        lensOf _
          = (Prelude..)
              (Lens.Family2.Unchecked.lens _FunctionDef'RetEntry'value
                 (\ x__ y__ -> x__{_FunctionDef'RetEntry'value = y__}))
              Prelude.id

instance Data.Default.Class.Default FunctionDef'RetEntry where
        def
          = FunctionDef'RetEntry{_FunctionDef'RetEntry'key =
                                   Data.ProtoLens.fieldDefault,
                                 _FunctionDef'RetEntry'value = Data.ProtoLens.fieldDefault}

instance Data.ProtoLens.Message FunctionDef'RetEntry where
        descriptor
          = let key__field_descriptor
                  = Data.ProtoLens.FieldDescriptor "key"
                      (Data.ProtoLens.StringField ::
                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional key)
                      :: Data.ProtoLens.FieldDescriptor FunctionDef'RetEntry
                value__field_descriptor
                  = Data.ProtoLens.FieldDescriptor "value"
                      (Data.ProtoLens.StringField ::
                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional value)
                      :: Data.ProtoLens.FieldDescriptor FunctionDef'RetEntry
              in
              Data.ProtoLens.MessageDescriptor
                (Data.Text.pack "tensorflow.FunctionDef.RetEntry")
                (Data.Map.fromList
                   [(Data.ProtoLens.Tag 1, key__field_descriptor),
                    (Data.ProtoLens.Tag 2, value__field_descriptor)])
                (Data.Map.fromList
                   [("key", key__field_descriptor),
                    ("value", value__field_descriptor)])

data FunctionDefLibrary = FunctionDefLibrary{_FunctionDefLibrary'function
                                             :: ![FunctionDef],
                                             _FunctionDefLibrary'gradient :: ![GradientDef]}
                        deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)

instance (a ~ [FunctionDef], b ~ [FunctionDef],
          Prelude.Functor f) =>
         Lens.Labels.HasLens "function" f FunctionDefLibrary
           FunctionDefLibrary
           a
           b
         where
        lensOf _
          = (Prelude..)
              (Lens.Family2.Unchecked.lens _FunctionDefLibrary'function
                 (\ x__ y__ -> x__{_FunctionDefLibrary'function = y__}))
              Prelude.id

instance (a ~ [GradientDef], b ~ [GradientDef],
          Prelude.Functor f) =>
         Lens.Labels.HasLens "gradient" f FunctionDefLibrary
           FunctionDefLibrary
           a
           b
         where
        lensOf _
          = (Prelude..)
              (Lens.Family2.Unchecked.lens _FunctionDefLibrary'gradient
                 (\ x__ y__ -> x__{_FunctionDefLibrary'gradient = y__}))
              Prelude.id

instance Data.Default.Class.Default FunctionDefLibrary where
        def
          = FunctionDefLibrary{_FunctionDefLibrary'function = [],
                               _FunctionDefLibrary'gradient = []}

instance Data.ProtoLens.Message FunctionDefLibrary where
        descriptor
          = let function__field_descriptor
                  = Data.ProtoLens.FieldDescriptor "function"
                      (Data.ProtoLens.MessageField ::
                         Data.ProtoLens.FieldTypeDescriptor FunctionDef)
                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked function)
                      :: Data.ProtoLens.FieldDescriptor FunctionDefLibrary
                gradient__field_descriptor
                  = Data.ProtoLens.FieldDescriptor "gradient"
                      (Data.ProtoLens.MessageField ::
                         Data.ProtoLens.FieldTypeDescriptor GradientDef)
                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked gradient)
                      :: Data.ProtoLens.FieldDescriptor FunctionDefLibrary
              in
              Data.ProtoLens.MessageDescriptor
                (Data.Text.pack "tensorflow.FunctionDefLibrary")
                (Data.Map.fromList
                   [(Data.ProtoLens.Tag 1, function__field_descriptor),
                    (Data.ProtoLens.Tag 2, gradient__field_descriptor)])
                (Data.Map.fromList
                   [("function", function__field_descriptor),
                    ("gradient", gradient__field_descriptor)])

data GradientDef = GradientDef{_GradientDef'functionName ::
                               !Data.Text.Text,
                               _GradientDef'gradientFunc :: !Data.Text.Text}
                 deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)

instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
          Prelude.Functor f) =>
         Lens.Labels.HasLens "functionName" f GradientDef GradientDef a b
         where
        lensOf _
          = (Prelude..)
              (Lens.Family2.Unchecked.lens _GradientDef'functionName
                 (\ x__ y__ -> x__{_GradientDef'functionName = y__}))
              Prelude.id

instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
          Prelude.Functor f) =>
         Lens.Labels.HasLens "gradientFunc" f GradientDef GradientDef a b
         where
        lensOf _
          = (Prelude..)
              (Lens.Family2.Unchecked.lens _GradientDef'gradientFunc
                 (\ x__ y__ -> x__{_GradientDef'gradientFunc = y__}))
              Prelude.id

instance Data.Default.Class.Default GradientDef where
        def
          = GradientDef{_GradientDef'functionName =
                          Data.ProtoLens.fieldDefault,
                        _GradientDef'gradientFunc = Data.ProtoLens.fieldDefault}

instance Data.ProtoLens.Message GradientDef where
        descriptor
          = let functionName__field_descriptor
                  = Data.ProtoLens.FieldDescriptor "function_name"
                      (Data.ProtoLens.StringField ::
                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional functionName)
                      :: Data.ProtoLens.FieldDescriptor GradientDef
                gradientFunc__field_descriptor
                  = Data.ProtoLens.FieldDescriptor "gradient_func"
                      (Data.ProtoLens.StringField ::
                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional gradientFunc)
                      :: Data.ProtoLens.FieldDescriptor GradientDef
              in
              Data.ProtoLens.MessageDescriptor
                (Data.Text.pack "tensorflow.GradientDef")
                (Data.Map.fromList
                   [(Data.ProtoLens.Tag 1, functionName__field_descriptor),
                    (Data.ProtoLens.Tag 2, gradientFunc__field_descriptor)])
                (Data.Map.fromList
                   [("function_name", functionName__field_descriptor),
                    ("gradient_func", gradientFunc__field_descriptor)])

attr ::
     forall f s t a b . (Lens.Labels.HasLens "attr" f s t a b) =>
       Lens.Family2.LensLike f s t a b
attr
  = Lens.Labels.lensOf
      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "attr")

function ::
         forall f s t a b . (Lens.Labels.HasLens "function" f s t a b) =>
           Lens.Family2.LensLike f s t a b
function
  = Lens.Labels.lensOf
      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "function")

functionName ::
             forall f s t a b .
               (Lens.Labels.HasLens "functionName" f s t a b) =>
               Lens.Family2.LensLike f s t a b
functionName
  = Lens.Labels.lensOf
      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "functionName")

gradient ::
         forall f s t a b . (Lens.Labels.HasLens "gradient" f s t a b) =>
           Lens.Family2.LensLike f s t a b
gradient
  = Lens.Labels.lensOf
      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "gradient")

gradientFunc ::
             forall f s t a b .
               (Lens.Labels.HasLens "gradientFunc" f s t a b) =>
               Lens.Family2.LensLike f s t a b
gradientFunc
  = Lens.Labels.lensOf
      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "gradientFunc")

key ::
    forall f s t a b . (Lens.Labels.HasLens "key" f s t a b) =>
      Lens.Family2.LensLike f s t a b
key
  = Lens.Labels.lensOf
      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "key")

maybe'signature ::
                forall f s t a b .
                  (Lens.Labels.HasLens "maybe'signature" f s t a b) =>
                  Lens.Family2.LensLike f s t a b
maybe'signature
  = Lens.Labels.lensOf
      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'signature")

maybe'value ::
            forall f s t a b . (Lens.Labels.HasLens "maybe'value" f s t a b) =>
              Lens.Family2.LensLike f s t a b
maybe'value
  = Lens.Labels.lensOf
      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'value")

nodeDef ::
        forall f s t a b . (Lens.Labels.HasLens "nodeDef" f s t a b) =>
          Lens.Family2.LensLike f s t a b
nodeDef
  = Lens.Labels.lensOf
      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "nodeDef")

ret ::
    forall f s t a b . (Lens.Labels.HasLens "ret" f s t a b) =>
      Lens.Family2.LensLike f s t a b
ret
  = Lens.Labels.lensOf
      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "ret")

signature ::
          forall f s t a b . (Lens.Labels.HasLens "signature" f s t a b) =>
            Lens.Family2.LensLike f s t a b
signature
  = Lens.Labels.lensOf
      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "signature")

value ::
      forall f s t a b . (Lens.Labels.HasLens "value" f s t a b) =>
        Lens.Family2.LensLike f s t a b
value
  = Lens.Labels.lensOf
      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "value")