{-# 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.MetricDatum
-- 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.MetricDatum 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.AutoMLMetricEnum
import Amazonka.SageMaker.Types.AutoMLMetricExtendedEnum
import Amazonka.SageMaker.Types.MetricSetSource

-- | Information about the metric for a candidate produced by an AutoML job.
--
-- /See:/ 'newMetricDatum' smart constructor.
data MetricDatum = MetricDatum'
  { -- | The name of the metric.
    MetricDatum -> Maybe AutoMLMetricEnum
metricName :: Prelude.Maybe AutoMLMetricEnum,
    -- | The dataset split from which the AutoML job produced the metric.
    MetricDatum -> Maybe MetricSetSource
set :: Prelude.Maybe MetricSetSource,
    -- | The name of the standard metric.
    --
    -- For definitions of the standard metrics, see
    -- <https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-model-support-validation.html#autopilot-metrics Autopilot candidate metrics>
    -- .
    MetricDatum -> Maybe AutoMLMetricExtendedEnum
standardMetricName :: Prelude.Maybe AutoMLMetricExtendedEnum,
    -- | The value of the metric.
    MetricDatum -> Maybe Double
value :: Prelude.Maybe Prelude.Double
  }
  deriving (MetricDatum -> MetricDatum -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MetricDatum -> MetricDatum -> Bool
$c/= :: MetricDatum -> MetricDatum -> Bool
== :: MetricDatum -> MetricDatum -> Bool
$c== :: MetricDatum -> MetricDatum -> Bool
Prelude.Eq, ReadPrec [MetricDatum]
ReadPrec MetricDatum
Int -> ReadS MetricDatum
ReadS [MetricDatum]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MetricDatum]
$creadListPrec :: ReadPrec [MetricDatum]
readPrec :: ReadPrec MetricDatum
$creadPrec :: ReadPrec MetricDatum
readList :: ReadS [MetricDatum]
$creadList :: ReadS [MetricDatum]
readsPrec :: Int -> ReadS MetricDatum
$creadsPrec :: Int -> ReadS MetricDatum
Prelude.Read, Int -> MetricDatum -> ShowS
[MetricDatum] -> ShowS
MetricDatum -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MetricDatum] -> ShowS
$cshowList :: [MetricDatum] -> ShowS
show :: MetricDatum -> String
$cshow :: MetricDatum -> String
showsPrec :: Int -> MetricDatum -> ShowS
$cshowsPrec :: Int -> MetricDatum -> ShowS
Prelude.Show, forall x. Rep MetricDatum x -> MetricDatum
forall x. MetricDatum -> Rep MetricDatum x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep MetricDatum x -> MetricDatum
$cfrom :: forall x. MetricDatum -> Rep MetricDatum x
Prelude.Generic)

-- |
-- Create a value of 'MetricDatum' 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:
--
-- 'metricName', 'metricDatum_metricName' - The name of the metric.
--
-- 'set', 'metricDatum_set' - The dataset split from which the AutoML job produced the metric.
--
-- 'standardMetricName', 'metricDatum_standardMetricName' - The name of the standard metric.
--
-- For definitions of the standard metrics, see
-- <https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-model-support-validation.html#autopilot-metrics Autopilot candidate metrics>
-- .
--
-- 'value', 'metricDatum_value' - The value of the metric.
newMetricDatum ::
  MetricDatum
newMetricDatum :: MetricDatum
newMetricDatum =
  MetricDatum'
    { $sel:metricName:MetricDatum' :: Maybe AutoMLMetricEnum
metricName = forall a. Maybe a
Prelude.Nothing,
      $sel:set:MetricDatum' :: Maybe MetricSetSource
set = forall a. Maybe a
Prelude.Nothing,
      $sel:standardMetricName:MetricDatum' :: Maybe AutoMLMetricExtendedEnum
standardMetricName = forall a. Maybe a
Prelude.Nothing,
      $sel:value:MetricDatum' :: Maybe Double
value = forall a. Maybe a
Prelude.Nothing
    }

-- | The name of the metric.
metricDatum_metricName :: Lens.Lens' MetricDatum (Prelude.Maybe AutoMLMetricEnum)
metricDatum_metricName :: Lens' MetricDatum (Maybe AutoMLMetricEnum)
metricDatum_metricName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MetricDatum' {Maybe AutoMLMetricEnum
metricName :: Maybe AutoMLMetricEnum
$sel:metricName:MetricDatum' :: MetricDatum -> Maybe AutoMLMetricEnum
metricName} -> Maybe AutoMLMetricEnum
metricName) (\s :: MetricDatum
s@MetricDatum' {} Maybe AutoMLMetricEnum
a -> MetricDatum
s {$sel:metricName:MetricDatum' :: Maybe AutoMLMetricEnum
metricName = Maybe AutoMLMetricEnum
a} :: MetricDatum)

-- | The dataset split from which the AutoML job produced the metric.
metricDatum_set :: Lens.Lens' MetricDatum (Prelude.Maybe MetricSetSource)
metricDatum_set :: Lens' MetricDatum (Maybe MetricSetSource)
metricDatum_set = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MetricDatum' {Maybe MetricSetSource
set :: Maybe MetricSetSource
$sel:set:MetricDatum' :: MetricDatum -> Maybe MetricSetSource
set} -> Maybe MetricSetSource
set) (\s :: MetricDatum
s@MetricDatum' {} Maybe MetricSetSource
a -> MetricDatum
s {$sel:set:MetricDatum' :: Maybe MetricSetSource
set = Maybe MetricSetSource
a} :: MetricDatum)

-- | The name of the standard metric.
--
-- For definitions of the standard metrics, see
-- <https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-model-support-validation.html#autopilot-metrics Autopilot candidate metrics>
-- .
metricDatum_standardMetricName :: Lens.Lens' MetricDatum (Prelude.Maybe AutoMLMetricExtendedEnum)
metricDatum_standardMetricName :: Lens' MetricDatum (Maybe AutoMLMetricExtendedEnum)
metricDatum_standardMetricName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MetricDatum' {Maybe AutoMLMetricExtendedEnum
standardMetricName :: Maybe AutoMLMetricExtendedEnum
$sel:standardMetricName:MetricDatum' :: MetricDatum -> Maybe AutoMLMetricExtendedEnum
standardMetricName} -> Maybe AutoMLMetricExtendedEnum
standardMetricName) (\s :: MetricDatum
s@MetricDatum' {} Maybe AutoMLMetricExtendedEnum
a -> MetricDatum
s {$sel:standardMetricName:MetricDatum' :: Maybe AutoMLMetricExtendedEnum
standardMetricName = Maybe AutoMLMetricExtendedEnum
a} :: MetricDatum)

-- | The value of the metric.
metricDatum_value :: Lens.Lens' MetricDatum (Prelude.Maybe Prelude.Double)
metricDatum_value :: Lens' MetricDatum (Maybe Double)
metricDatum_value = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MetricDatum' {Maybe Double
value :: Maybe Double
$sel:value:MetricDatum' :: MetricDatum -> Maybe Double
value} -> Maybe Double
value) (\s :: MetricDatum
s@MetricDatum' {} Maybe Double
a -> MetricDatum
s {$sel:value:MetricDatum' :: Maybe Double
value = Maybe Double
a} :: MetricDatum)

instance Data.FromJSON MetricDatum where
  parseJSON :: Value -> Parser MetricDatum
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"MetricDatum"
      ( \Object
x ->
          Maybe AutoMLMetricEnum
-> Maybe MetricSetSource
-> Maybe AutoMLMetricExtendedEnum
-> Maybe Double
-> MetricDatum
MetricDatum'
            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
"MetricName")
            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
"Set")
            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
"StandardMetricName")
            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
"Value")
      )

instance Prelude.Hashable MetricDatum where
  hashWithSalt :: Int -> MetricDatum -> Int
hashWithSalt Int
_salt MetricDatum' {Maybe Double
Maybe AutoMLMetricEnum
Maybe AutoMLMetricExtendedEnum
Maybe MetricSetSource
value :: Maybe Double
standardMetricName :: Maybe AutoMLMetricExtendedEnum
set :: Maybe MetricSetSource
metricName :: Maybe AutoMLMetricEnum
$sel:value:MetricDatum' :: MetricDatum -> Maybe Double
$sel:standardMetricName:MetricDatum' :: MetricDatum -> Maybe AutoMLMetricExtendedEnum
$sel:set:MetricDatum' :: MetricDatum -> Maybe MetricSetSource
$sel:metricName:MetricDatum' :: MetricDatum -> Maybe AutoMLMetricEnum
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AutoMLMetricEnum
metricName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MetricSetSource
set
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AutoMLMetricExtendedEnum
standardMetricName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Double
value

instance Prelude.NFData MetricDatum where
  rnf :: MetricDatum -> ()
rnf MetricDatum' {Maybe Double
Maybe AutoMLMetricEnum
Maybe AutoMLMetricExtendedEnum
Maybe MetricSetSource
value :: Maybe Double
standardMetricName :: Maybe AutoMLMetricExtendedEnum
set :: Maybe MetricSetSource
metricName :: Maybe AutoMLMetricEnum
$sel:value:MetricDatum' :: MetricDatum -> Maybe Double
$sel:standardMetricName:MetricDatum' :: MetricDatum -> Maybe AutoMLMetricExtendedEnum
$sel:set:MetricDatum' :: MetricDatum -> Maybe MetricSetSource
$sel:metricName:MetricDatum' :: MetricDatum -> Maybe AutoMLMetricEnum
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AutoMLMetricEnum
metricName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe MetricSetSource
set
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AutoMLMetricExtendedEnum
standardMetricName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Double
value