PSMath.psm1

Set-StrictMode -Version Latest

$METHOD_LIST = @(
  [PSCustomObject]@{
    ClassInfo = [Horker.Math.ArrayMethods.LinqMethods]
    MethodNames = @(
      "Aggregate"
      "All"
      "Any"
      "AsEnumerable"
      "Concat"
      "Contains"
      "DefaultIfEmpty"
      "Distinct"
      "ElementAt"
      "ElementAtOrDefault"
      "Except"
      "First"
      "FirstOrDefault"
      "GroupBy"
      "GroupJoin"
      "Intersect"
      "Join"
      "Last"
      "LastOrDefault"
      "LongCount"
      "Max"
      "Min"
      "OrderBy"
      "OrderByDescending"
      "Reverse"
      "Select"
      "SelectMany"
      "SequenceEqual"
      "Single"
      "SingleOrDefault"
      "Skip"
      "SkipWhile"
      "Sum"
      "Take"
      "TakeWhile"
      "ToDictionary"
      "ToList"
      "ToLookup"
      "Union"
      "Where"
      "Zip"
    )
  }

  [PSCustomObject]@{
    ClassInfo = [Horker.Math.ArrayMethods.MeasuresMethods]
    MethodNames = @(
      "ContraHarmonicMean"
      "Entropy"
      "ExponentialWeightedMean"
      "ExponentialWeightedVariance"
      "GeometricMean"
      "Kurtosis"
      "LogGeometricMean"
      "LowerQuartile"
      "Mean"
      "Median"
      "Mode"
      "Quantile"
      "Quantiles"
      "Quartiles"
      "Skewness"
      "StandardDeviation"
      "StdDev"
      "StandardError"
      "TruncatedMean"
      "UpperQuartile"
      "Variance"
      "Var"
    )
  }

  [PSCustomObject]@{
    ClassInfo = [Horker.Math.ArrayMethods.ToolsMethods]
    MethodNames = @(
      "Center"
      "Rank"
      "Standardize"
      "Ties"
    )
  }

  [PSCustomObject]@{
    ClassInfo = [Horker.Math.ArrayMethods.VectorMethods]
    MethodNames = @(
      "Sample"
      "Scale"
      "Sort"
    )
  }

  [PSCustomObject]@{
    ClassInfo = [Horker.Math.ArrayMethods.MatrixMethods]
    MethodNames = @(
      "ArgMin"
      "ArgSort"
      "Bottom"
      "Cartesian"
      "Clear"
      "Concatenate"
      "Copy"
      "Cross"
      "CumulativeSum"
      "DistinctCount"
      "Expand"
      "Find"
      "First"
      "Get"
      "HasInfinity"
      "HasNaN"
      "IsEqual"
      "IsSorted"
      "Kronecker"
      "Normalize"
      "Null"
      "Outer"
      "Product"
      "Stack"
      "Swap"
      "Top"
      "Trim"
    )
  }

  [PSCustomObject]@{
    ClassInfo = [Horker.Math.ArrayMethods.AdditionalMethods]
    MethodNames = @(
      "Split"
      "Shuffle"
      "DropNa"
      "DropNaN"
    )
  }
)

foreach ($l in $METHOD_LIST) {
  $ci = $l.ClassInfo
  foreach ($m in $l.MethodNames) {
    $mi = $ci.GetMethod($m)
    Update-TypeData -TypeName System.Array -MemberName $m -MemberType CodeMethod -Value $mi -Force
  }
}