{-# 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.ModelMetrics
-- 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.ModelMetrics 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.Bias
import Amazonka.SageMaker.Types.Explainability
import Amazonka.SageMaker.Types.ModelDataQuality
import Amazonka.SageMaker.Types.ModelQuality

-- | Contains metrics captured from a model.
--
-- /See:/ 'newModelMetrics' smart constructor.
data ModelMetrics = ModelMetrics'
  { -- | Metrics that measure bais in a model.
    ModelMetrics -> Maybe Bias
bias :: Prelude.Maybe Bias,
    -- | Metrics that help explain a model.
    ModelMetrics -> Maybe Explainability
explainability :: Prelude.Maybe Explainability,
    -- | Metrics that measure the quality of the input data for a model.
    ModelMetrics -> Maybe ModelDataQuality
modelDataQuality :: Prelude.Maybe ModelDataQuality,
    -- | Metrics that measure the quality of a model.
    ModelMetrics -> Maybe ModelQuality
modelQuality :: Prelude.Maybe ModelQuality
  }
  deriving (ModelMetrics -> ModelMetrics -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ModelMetrics -> ModelMetrics -> Bool
$c/= :: ModelMetrics -> ModelMetrics -> Bool
== :: ModelMetrics -> ModelMetrics -> Bool
$c== :: ModelMetrics -> ModelMetrics -> Bool
Prelude.Eq, ReadPrec [ModelMetrics]
ReadPrec ModelMetrics
Int -> ReadS ModelMetrics
ReadS [ModelMetrics]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ModelMetrics]
$creadListPrec :: ReadPrec [ModelMetrics]
readPrec :: ReadPrec ModelMetrics
$creadPrec :: ReadPrec ModelMetrics
readList :: ReadS [ModelMetrics]
$creadList :: ReadS [ModelMetrics]
readsPrec :: Int -> ReadS ModelMetrics
$creadsPrec :: Int -> ReadS ModelMetrics
Prelude.Read, Int -> ModelMetrics -> ShowS
[ModelMetrics] -> ShowS
ModelMetrics -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ModelMetrics] -> ShowS
$cshowList :: [ModelMetrics] -> ShowS
show :: ModelMetrics -> String
$cshow :: ModelMetrics -> String
showsPrec :: Int -> ModelMetrics -> ShowS
$cshowsPrec :: Int -> ModelMetrics -> ShowS
Prelude.Show, forall x. Rep ModelMetrics x -> ModelMetrics
forall x. ModelMetrics -> Rep ModelMetrics x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ModelMetrics x -> ModelMetrics
$cfrom :: forall x. ModelMetrics -> Rep ModelMetrics x
Prelude.Generic)

-- |
-- Create a value of 'ModelMetrics' 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:
--
-- 'bias', 'modelMetrics_bias' - Metrics that measure bais in a model.
--
-- 'explainability', 'modelMetrics_explainability' - Metrics that help explain a model.
--
-- 'modelDataQuality', 'modelMetrics_modelDataQuality' - Metrics that measure the quality of the input data for a model.
--
-- 'modelQuality', 'modelMetrics_modelQuality' - Metrics that measure the quality of a model.
newModelMetrics ::
  ModelMetrics
newModelMetrics :: ModelMetrics
newModelMetrics =
  ModelMetrics'
    { $sel:bias:ModelMetrics' :: Maybe Bias
bias = forall a. Maybe a
Prelude.Nothing,
      $sel:explainability:ModelMetrics' :: Maybe Explainability
explainability = forall a. Maybe a
Prelude.Nothing,
      $sel:modelDataQuality:ModelMetrics' :: Maybe ModelDataQuality
modelDataQuality = forall a. Maybe a
Prelude.Nothing,
      $sel:modelQuality:ModelMetrics' :: Maybe ModelQuality
modelQuality = forall a. Maybe a
Prelude.Nothing
    }

-- | Metrics that measure bais in a model.
modelMetrics_bias :: Lens.Lens' ModelMetrics (Prelude.Maybe Bias)
modelMetrics_bias :: Lens' ModelMetrics (Maybe Bias)
modelMetrics_bias = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ModelMetrics' {Maybe Bias
bias :: Maybe Bias
$sel:bias:ModelMetrics' :: ModelMetrics -> Maybe Bias
bias} -> Maybe Bias
bias) (\s :: ModelMetrics
s@ModelMetrics' {} Maybe Bias
a -> ModelMetrics
s {$sel:bias:ModelMetrics' :: Maybe Bias
bias = Maybe Bias
a} :: ModelMetrics)

-- | Metrics that help explain a model.
modelMetrics_explainability :: Lens.Lens' ModelMetrics (Prelude.Maybe Explainability)
modelMetrics_explainability :: Lens' ModelMetrics (Maybe Explainability)
modelMetrics_explainability = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ModelMetrics' {Maybe Explainability
explainability :: Maybe Explainability
$sel:explainability:ModelMetrics' :: ModelMetrics -> Maybe Explainability
explainability} -> Maybe Explainability
explainability) (\s :: ModelMetrics
s@ModelMetrics' {} Maybe Explainability
a -> ModelMetrics
s {$sel:explainability:ModelMetrics' :: Maybe Explainability
explainability = Maybe Explainability
a} :: ModelMetrics)

-- | Metrics that measure the quality of the input data for a model.
modelMetrics_modelDataQuality :: Lens.Lens' ModelMetrics (Prelude.Maybe ModelDataQuality)
modelMetrics_modelDataQuality :: Lens' ModelMetrics (Maybe ModelDataQuality)
modelMetrics_modelDataQuality = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ModelMetrics' {Maybe ModelDataQuality
modelDataQuality :: Maybe ModelDataQuality
$sel:modelDataQuality:ModelMetrics' :: ModelMetrics -> Maybe ModelDataQuality
modelDataQuality} -> Maybe ModelDataQuality
modelDataQuality) (\s :: ModelMetrics
s@ModelMetrics' {} Maybe ModelDataQuality
a -> ModelMetrics
s {$sel:modelDataQuality:ModelMetrics' :: Maybe ModelDataQuality
modelDataQuality = Maybe ModelDataQuality
a} :: ModelMetrics)

-- | Metrics that measure the quality of a model.
modelMetrics_modelQuality :: Lens.Lens' ModelMetrics (Prelude.Maybe ModelQuality)
modelMetrics_modelQuality :: Lens' ModelMetrics (Maybe ModelQuality)
modelMetrics_modelQuality = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ModelMetrics' {Maybe ModelQuality
modelQuality :: Maybe ModelQuality
$sel:modelQuality:ModelMetrics' :: ModelMetrics -> Maybe ModelQuality
modelQuality} -> Maybe ModelQuality
modelQuality) (\s :: ModelMetrics
s@ModelMetrics' {} Maybe ModelQuality
a -> ModelMetrics
s {$sel:modelQuality:ModelMetrics' :: Maybe ModelQuality
modelQuality = Maybe ModelQuality
a} :: ModelMetrics)

instance Data.FromJSON ModelMetrics where
  parseJSON :: Value -> Parser ModelMetrics
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ModelMetrics"
      ( \Object
x ->
          Maybe Bias
-> Maybe Explainability
-> Maybe ModelDataQuality
-> Maybe ModelQuality
-> ModelMetrics
ModelMetrics'
            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
"Bias")
            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
"Explainability")
            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
"ModelDataQuality")
            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
"ModelQuality")
      )

instance Prelude.Hashable ModelMetrics where
  hashWithSalt :: Int -> ModelMetrics -> Int
hashWithSalt Int
_salt ModelMetrics' {Maybe Explainability
Maybe Bias
Maybe ModelDataQuality
Maybe ModelQuality
modelQuality :: Maybe ModelQuality
modelDataQuality :: Maybe ModelDataQuality
explainability :: Maybe Explainability
bias :: Maybe Bias
$sel:modelQuality:ModelMetrics' :: ModelMetrics -> Maybe ModelQuality
$sel:modelDataQuality:ModelMetrics' :: ModelMetrics -> Maybe ModelDataQuality
$sel:explainability:ModelMetrics' :: ModelMetrics -> Maybe Explainability
$sel:bias:ModelMetrics' :: ModelMetrics -> Maybe Bias
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bias
bias
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Explainability
explainability
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ModelDataQuality
modelDataQuality
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ModelQuality
modelQuality

instance Prelude.NFData ModelMetrics where
  rnf :: ModelMetrics -> ()
rnf ModelMetrics' {Maybe Explainability
Maybe Bias
Maybe ModelDataQuality
Maybe ModelQuality
modelQuality :: Maybe ModelQuality
modelDataQuality :: Maybe ModelDataQuality
explainability :: Maybe Explainability
bias :: Maybe Bias
$sel:modelQuality:ModelMetrics' :: ModelMetrics -> Maybe ModelQuality
$sel:modelDataQuality:ModelMetrics' :: ModelMetrics -> Maybe ModelDataQuality
$sel:explainability:ModelMetrics' :: ModelMetrics -> Maybe Explainability
$sel:bias:ModelMetrics' :: ModelMetrics -> Maybe Bias
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bias
bias
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Explainability
explainability
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ModelDataQuality
modelDataQuality
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ModelQuality
modelQuality

instance Data.ToJSON ModelMetrics where
  toJSON :: ModelMetrics -> Value
toJSON ModelMetrics' {Maybe Explainability
Maybe Bias
Maybe ModelDataQuality
Maybe ModelQuality
modelQuality :: Maybe ModelQuality
modelDataQuality :: Maybe ModelDataQuality
explainability :: Maybe Explainability
bias :: Maybe Bias
$sel:modelQuality:ModelMetrics' :: ModelMetrics -> Maybe ModelQuality
$sel:modelDataQuality:ModelMetrics' :: ModelMetrics -> Maybe ModelDataQuality
$sel:explainability:ModelMetrics' :: ModelMetrics -> Maybe Explainability
$sel:bias:ModelMetrics' :: ModelMetrics -> Maybe Bias
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Bias" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Bias
bias,
            (Key
"Explainability" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Explainability
explainability,
            (Key
"ModelDataQuality" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe ModelDataQuality
modelDataQuality,
            (Key
"ModelQuality" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe ModelQuality
modelQuality
          ]
      )