packages feed

moonlight-category-0.1.0.0: bench/simplicial/SimplicialWeight.hs

module SimplicialWeight
  ( naturalListWeight,
    naturalSSetWeight,
    naturalSimplicesWeight,
    naturalWeight,
    obstructionWeight,
  )
where

import Data.Function ((&))
import Data.List.NonEmpty (NonEmpty)
import Data.List.NonEmpty qualified as NonEmpty
import Moonlight.Category.Simplicial
  ( TruncatedNormalizedSSet,
    simplicesAtDimension,
    truncationBound,
  )
import Numeric.Natural (Natural)

naturalSSetWeight :: TruncatedNormalizedSSet [Natural] -> Int
naturalSSetWeight simplicialSet =
  [0 .. truncationBound simplicialSet]
    & fmap (naturalSimplicesWeight . simplicesAtDimension simplicialSet)
    & sum

naturalSimplicesWeight :: [[Natural]] -> Int
naturalSimplicesWeight =
  sum . fmap naturalSimplexWeight

naturalSimplexWeight :: [Natural] -> Int
naturalSimplexWeight values =
  length values + naturalListWeight values

naturalListWeight :: [Natural] -> Int
naturalListWeight =
  sum . fmap naturalWeight

naturalWeight :: Natural -> Int
naturalWeight =
  fromIntegral

obstructionWeight :: NonEmpty obstruction -> Int
obstructionWeight =
  length . NonEmpty.toList