{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.SageMaker.Types.Experiment
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.SageMaker.Types.Experiment where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import Amazonka.SageMaker.Types.ExperimentSource
import Amazonka.SageMaker.Types.Tag
import Amazonka.SageMaker.Types.UserContext

-- | The properties of an experiment as returned by the Search API.
--
-- /See:/ 'newExperiment' smart constructor.
data Experiment = Experiment'
  { -- | Who created the experiment.
    Experiment -> Maybe UserContext
createdBy :: Prelude.Maybe UserContext,
    -- | When the experiment was created.
    Experiment -> Maybe POSIX
creationTime :: Prelude.Maybe Data.POSIX,
    -- | The description of the experiment.
    Experiment -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The name of the experiment as displayed. If @DisplayName@ isn\'t
    -- specified, @ExperimentName@ is displayed.
    Experiment -> Maybe Text
displayName :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the experiment.
    Experiment -> Maybe Text
experimentArn :: Prelude.Maybe Prelude.Text,
    -- | The name of the experiment.
    Experiment -> Maybe Text
experimentName :: Prelude.Maybe Prelude.Text,
    Experiment -> Maybe UserContext
lastModifiedBy :: Prelude.Maybe UserContext,
    -- | When the experiment was last modified.
    Experiment -> Maybe POSIX
lastModifiedTime :: Prelude.Maybe Data.POSIX,
    Experiment -> Maybe ExperimentSource
source :: Prelude.Maybe ExperimentSource,
    -- | The list of tags that are associated with the experiment. You can use
    -- Search API to search on the tags.
    Experiment -> Maybe [Tag]
tags :: Prelude.Maybe [Tag]
  }
  deriving (Experiment -> Experiment -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Experiment -> Experiment -> Bool
$c/= :: Experiment -> Experiment -> Bool
== :: Experiment -> Experiment -> Bool
$c== :: Experiment -> Experiment -> Bool
Prelude.Eq, ReadPrec [Experiment]
ReadPrec Experiment
Int -> ReadS Experiment
ReadS [Experiment]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Experiment]
$creadListPrec :: ReadPrec [Experiment]
readPrec :: ReadPrec Experiment
$creadPrec :: ReadPrec Experiment
readList :: ReadS [Experiment]
$creadList :: ReadS [Experiment]
readsPrec :: Int -> ReadS Experiment
$creadsPrec :: Int -> ReadS Experiment
Prelude.Read, Int -> Experiment -> ShowS
[Experiment] -> ShowS
Experiment -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Experiment] -> ShowS
$cshowList :: [Experiment] -> ShowS
show :: Experiment -> String
$cshow :: Experiment -> String
showsPrec :: Int -> Experiment -> ShowS
$cshowsPrec :: Int -> Experiment -> ShowS
Prelude.Show, forall x. Rep Experiment x -> Experiment
forall x. Experiment -> Rep Experiment x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Experiment x -> Experiment
$cfrom :: forall x. Experiment -> Rep Experiment x
Prelude.Generic)

-- |
-- Create a value of 'Experiment' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'createdBy', 'experiment_createdBy' - Who created the experiment.
--
-- 'creationTime', 'experiment_creationTime' - When the experiment was created.
--
-- 'description', 'experiment_description' - The description of the experiment.
--
-- 'displayName', 'experiment_displayName' - The name of the experiment as displayed. If @DisplayName@ isn\'t
-- specified, @ExperimentName@ is displayed.
--
-- 'experimentArn', 'experiment_experimentArn' - The Amazon Resource Name (ARN) of the experiment.
--
-- 'experimentName', 'experiment_experimentName' - The name of the experiment.
--
-- 'lastModifiedBy', 'experiment_lastModifiedBy' - Undocumented member.
--
-- 'lastModifiedTime', 'experiment_lastModifiedTime' - When the experiment was last modified.
--
-- 'source', 'experiment_source' - Undocumented member.
--
-- 'tags', 'experiment_tags' - The list of tags that are associated with the experiment. You can use
-- Search API to search on the tags.
newExperiment ::
  Experiment
newExperiment :: Experiment
newExperiment =
  Experiment'
    { $sel:createdBy:Experiment' :: Maybe UserContext
createdBy = forall a. Maybe a
Prelude.Nothing,
      $sel:creationTime:Experiment' :: Maybe POSIX
creationTime = forall a. Maybe a
Prelude.Nothing,
      $sel:description:Experiment' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:displayName:Experiment' :: Maybe Text
displayName = forall a. Maybe a
Prelude.Nothing,
      $sel:experimentArn:Experiment' :: Maybe Text
experimentArn = forall a. Maybe a
Prelude.Nothing,
      $sel:experimentName:Experiment' :: Maybe Text
experimentName = forall a. Maybe a
Prelude.Nothing,
      $sel:lastModifiedBy:Experiment' :: Maybe UserContext
lastModifiedBy = forall a. Maybe a
Prelude.Nothing,
      $sel:lastModifiedTime:Experiment' :: Maybe POSIX
lastModifiedTime = forall a. Maybe a
Prelude.Nothing,
      $sel:source:Experiment' :: Maybe ExperimentSource
source = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:Experiment' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing
    }

-- | Who created the experiment.
experiment_createdBy :: Lens.Lens' Experiment (Prelude.Maybe UserContext)
experiment_createdBy :: Lens' Experiment (Maybe UserContext)
experiment_createdBy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Experiment' {Maybe UserContext
createdBy :: Maybe UserContext
$sel:createdBy:Experiment' :: Experiment -> Maybe UserContext
createdBy} -> Maybe UserContext
createdBy) (\s :: Experiment
s@Experiment' {} Maybe UserContext
a -> Experiment
s {$sel:createdBy:Experiment' :: Maybe UserContext
createdBy = Maybe UserContext
a} :: Experiment)

-- | When the experiment was created.
experiment_creationTime :: Lens.Lens' Experiment (Prelude.Maybe Prelude.UTCTime)
experiment_creationTime :: Lens' Experiment (Maybe UTCTime)
experiment_creationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Experiment' {Maybe POSIX
creationTime :: Maybe POSIX
$sel:creationTime:Experiment' :: Experiment -> Maybe POSIX
creationTime} -> Maybe POSIX
creationTime) (\s :: Experiment
s@Experiment' {} Maybe POSIX
a -> Experiment
s {$sel:creationTime:Experiment' :: Maybe POSIX
creationTime = Maybe POSIX
a} :: Experiment) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The description of the experiment.
experiment_description :: Lens.Lens' Experiment (Prelude.Maybe Prelude.Text)
experiment_description :: Lens' Experiment (Maybe Text)
experiment_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Experiment' {Maybe Text
description :: Maybe Text
$sel:description:Experiment' :: Experiment -> Maybe Text
description} -> Maybe Text
description) (\s :: Experiment
s@Experiment' {} Maybe Text
a -> Experiment
s {$sel:description:Experiment' :: Maybe Text
description = Maybe Text
a} :: Experiment)

-- | The name of the experiment as displayed. If @DisplayName@ isn\'t
-- specified, @ExperimentName@ is displayed.
experiment_displayName :: Lens.Lens' Experiment (Prelude.Maybe Prelude.Text)
experiment_displayName :: Lens' Experiment (Maybe Text)
experiment_displayName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Experiment' {Maybe Text
displayName :: Maybe Text
$sel:displayName:Experiment' :: Experiment -> Maybe Text
displayName} -> Maybe Text
displayName) (\s :: Experiment
s@Experiment' {} Maybe Text
a -> Experiment
s {$sel:displayName:Experiment' :: Maybe Text
displayName = Maybe Text
a} :: Experiment)

-- | The Amazon Resource Name (ARN) of the experiment.
experiment_experimentArn :: Lens.Lens' Experiment (Prelude.Maybe Prelude.Text)
experiment_experimentArn :: Lens' Experiment (Maybe Text)
experiment_experimentArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Experiment' {Maybe Text
experimentArn :: Maybe Text
$sel:experimentArn:Experiment' :: Experiment -> Maybe Text
experimentArn} -> Maybe Text
experimentArn) (\s :: Experiment
s@Experiment' {} Maybe Text
a -> Experiment
s {$sel:experimentArn:Experiment' :: Maybe Text
experimentArn = Maybe Text
a} :: Experiment)

-- | The name of the experiment.
experiment_experimentName :: Lens.Lens' Experiment (Prelude.Maybe Prelude.Text)
experiment_experimentName :: Lens' Experiment (Maybe Text)
experiment_experimentName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Experiment' {Maybe Text
experimentName :: Maybe Text
$sel:experimentName:Experiment' :: Experiment -> Maybe Text
experimentName} -> Maybe Text
experimentName) (\s :: Experiment
s@Experiment' {} Maybe Text
a -> Experiment
s {$sel:experimentName:Experiment' :: Maybe Text
experimentName = Maybe Text
a} :: Experiment)

-- | Undocumented member.
experiment_lastModifiedBy :: Lens.Lens' Experiment (Prelude.Maybe UserContext)
experiment_lastModifiedBy :: Lens' Experiment (Maybe UserContext)
experiment_lastModifiedBy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Experiment' {Maybe UserContext
lastModifiedBy :: Maybe UserContext
$sel:lastModifiedBy:Experiment' :: Experiment -> Maybe UserContext
lastModifiedBy} -> Maybe UserContext
lastModifiedBy) (\s :: Experiment
s@Experiment' {} Maybe UserContext
a -> Experiment
s {$sel:lastModifiedBy:Experiment' :: Maybe UserContext
lastModifiedBy = Maybe UserContext
a} :: Experiment)

-- | When the experiment was last modified.
experiment_lastModifiedTime :: Lens.Lens' Experiment (Prelude.Maybe Prelude.UTCTime)
experiment_lastModifiedTime :: Lens' Experiment (Maybe UTCTime)
experiment_lastModifiedTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Experiment' {Maybe POSIX
lastModifiedTime :: Maybe POSIX
$sel:lastModifiedTime:Experiment' :: Experiment -> Maybe POSIX
lastModifiedTime} -> Maybe POSIX
lastModifiedTime) (\s :: Experiment
s@Experiment' {} Maybe POSIX
a -> Experiment
s {$sel:lastModifiedTime:Experiment' :: Maybe POSIX
lastModifiedTime = Maybe POSIX
a} :: Experiment) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | Undocumented member.
experiment_source :: Lens.Lens' Experiment (Prelude.Maybe ExperimentSource)
experiment_source :: Lens' Experiment (Maybe ExperimentSource)
experiment_source = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Experiment' {Maybe ExperimentSource
source :: Maybe ExperimentSource
$sel:source:Experiment' :: Experiment -> Maybe ExperimentSource
source} -> Maybe ExperimentSource
source) (\s :: Experiment
s@Experiment' {} Maybe ExperimentSource
a -> Experiment
s {$sel:source:Experiment' :: Maybe ExperimentSource
source = Maybe ExperimentSource
a} :: Experiment)

-- | The list of tags that are associated with the experiment. You can use
-- Search API to search on the tags.
experiment_tags :: Lens.Lens' Experiment (Prelude.Maybe [Tag])
experiment_tags :: Lens' Experiment (Maybe [Tag])
experiment_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Experiment' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:Experiment' :: Experiment -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: Experiment
s@Experiment' {} Maybe [Tag]
a -> Experiment
s {$sel:tags:Experiment' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: Experiment) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Data.FromJSON Experiment where
  parseJSON :: Value -> Parser Experiment
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Experiment"
      ( \Object
x ->
          Maybe UserContext
-> Maybe POSIX
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe UserContext
-> Maybe POSIX
-> Maybe ExperimentSource
-> Maybe [Tag]
-> Experiment
Experiment'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"CreatedBy")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"CreationTime")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Description")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"DisplayName")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ExperimentArn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ExperimentName")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"LastModifiedBy")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"LastModifiedTime")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Source")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Tags" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
      )

instance Prelude.Hashable Experiment where
  hashWithSalt :: Int -> Experiment -> Int
hashWithSalt Int
_salt Experiment' {Maybe [Tag]
Maybe Text
Maybe POSIX
Maybe ExperimentSource
Maybe UserContext
tags :: Maybe [Tag]
source :: Maybe ExperimentSource
lastModifiedTime :: Maybe POSIX
lastModifiedBy :: Maybe UserContext
experimentName :: Maybe Text
experimentArn :: Maybe Text
displayName :: Maybe Text
description :: Maybe Text
creationTime :: Maybe POSIX
createdBy :: Maybe UserContext
$sel:tags:Experiment' :: Experiment -> Maybe [Tag]
$sel:source:Experiment' :: Experiment -> Maybe ExperimentSource
$sel:lastModifiedTime:Experiment' :: Experiment -> Maybe POSIX
$sel:lastModifiedBy:Experiment' :: Experiment -> Maybe UserContext
$sel:experimentName:Experiment' :: Experiment -> Maybe Text
$sel:experimentArn:Experiment' :: Experiment -> Maybe Text
$sel:displayName:Experiment' :: Experiment -> Maybe Text
$sel:description:Experiment' :: Experiment -> Maybe Text
$sel:creationTime:Experiment' :: Experiment -> Maybe POSIX
$sel:createdBy:Experiment' :: Experiment -> Maybe UserContext
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe UserContext
createdBy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
creationTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
displayName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
experimentArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
experimentName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe UserContext
lastModifiedBy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
lastModifiedTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ExperimentSource
source
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags

instance Prelude.NFData Experiment where
  rnf :: Experiment -> ()
rnf Experiment' {Maybe [Tag]
Maybe Text
Maybe POSIX
Maybe ExperimentSource
Maybe UserContext
tags :: Maybe [Tag]
source :: Maybe ExperimentSource
lastModifiedTime :: Maybe POSIX
lastModifiedBy :: Maybe UserContext
experimentName :: Maybe Text
experimentArn :: Maybe Text
displayName :: Maybe Text
description :: Maybe Text
creationTime :: Maybe POSIX
createdBy :: Maybe UserContext
$sel:tags:Experiment' :: Experiment -> Maybe [Tag]
$sel:source:Experiment' :: Experiment -> Maybe ExperimentSource
$sel:lastModifiedTime:Experiment' :: Experiment -> Maybe POSIX
$sel:lastModifiedBy:Experiment' :: Experiment -> Maybe UserContext
$sel:experimentName:Experiment' :: Experiment -> Maybe Text
$sel:experimentArn:Experiment' :: Experiment -> Maybe Text
$sel:displayName:Experiment' :: Experiment -> Maybe Text
$sel:description:Experiment' :: Experiment -> Maybe Text
$sel:creationTime:Experiment' :: Experiment -> Maybe POSIX
$sel:createdBy:Experiment' :: Experiment -> Maybe UserContext
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe UserContext
createdBy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
creationTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
displayName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
experimentArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
experimentName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe UserContext
lastModifiedBy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
lastModifiedTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ExperimentSource
source
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags