diff --git a/apps/dashboard/src/fairness/utils.ts b/apps/dashboard/src/fairness/utils.ts index 1231c429b4..743a54b7ca 100644 --- a/apps/dashboard/src/fairness/utils.ts +++ b/apps/dashboard/src/fairness/utils.ts @@ -6,6 +6,7 @@ import { IMetricRequest, IMetricResponse } from "@responsible-ai/core-ui"; +import _ from "lodash"; export const supportedBinaryClassificationPerformanceKeys = [ "accuracy_score", @@ -65,7 +66,7 @@ export function generateRandomMetrics( request: IMetricRequest, abortSignal?: AbortSignal ): Promise { - const binSize = Math.max(...request.binVector); + const binSize = _.max(request.binVector) || 0; const bins: number[] = new Array(binSize + 1) .fill(0) .map(() => Math.random() / 3 + 0.33); diff --git a/libs/core-ui/src/lib/util/JointDataset.ts b/libs/core-ui/src/lib/util/JointDataset.ts index fcc617cfbd..83fbb3fb0f 100644 --- a/libs/core-ui/src/lib/util/JointDataset.ts +++ b/libs/core-ui/src/lib/util/JointDataset.ts @@ -190,8 +190,8 @@ export class JointDataset { }; if (args.metadata.modelType === ModelTypes.Regression) { this.metaDict[JointDataset.PredictedYLabel].featureRange = { - max: Math.max(...args.predictedY), - min: Math.min(...args.predictedY), + max: _.max(args.predictedY) || 0, + min: _.min(args.predictedY) || 0, rangeType: RangeTypes.Numeric }; } @@ -223,8 +223,8 @@ export class JointDataset { abbridgedLabel: label, category: ColumnCategories.Outcome, featureRange: { - max: Math.max(...projection), - min: Math.min(...projection), + max: _.max(projection) || 0, + min: _.min(projection) || 0, rangeType: RangeTypes.Numeric }, isCategorical: false, @@ -257,8 +257,8 @@ export class JointDataset { }; if (args.metadata.modelType === ModelTypes.Regression) { this.metaDict[JointDataset.TrueYLabel].featureRange = { - max: Math.max(...args.trueY), - min: Math.min(...args.trueY), + max: _.max(args.trueY) || 0, + min: _.min(args.trueY) || 0, rangeType: RangeTypes.Numeric }; } @@ -278,8 +278,8 @@ export class JointDataset { abbridgedLabel: localization.Interpret.Columns.error, category: ColumnCategories.Outcome, featureRange: { - max: Math.max(...regressionErrorArray), - min: Math.min(...regressionErrorArray), + max: _.max(regressionErrorArray) || 0, + min: _.min(regressionErrorArray) || 0, rangeType: RangeTypes.Numeric }, isCategorical: false, diff --git a/libs/core-ui/src/lib/util/getFeatureImportanceBoxOptions.ts b/libs/core-ui/src/lib/util/getFeatureImportanceBoxOptions.ts index 3d3bdac91b..dd023a908e 100644 --- a/libs/core-ui/src/lib/util/getFeatureImportanceBoxOptions.ts +++ b/libs/core-ui/src/lib/util/getFeatureImportanceBoxOptions.ts @@ -2,6 +2,7 @@ // Licensed under the MIT License. import { SeriesOptionsType } from "highcharts"; +import _ from "lodash"; import { IGlobalSeries } from "../Highchart/FeatureImportanceBar"; import { IHighchartsConfig } from "../Highchart/IHighchartsConfig"; @@ -31,7 +32,7 @@ export function getFeatureImportanceBoxOptions( const y = base.concat( ...sortArray.map((index) => series.unsortedIndividualY?.[index] || []) ); - const curMin = Math.min(...y); + const curMin = _.min(y) || 0; yAxisMin = Math.min(yAxisMin, curMin); boxTempData.push({ color: FabricStyles.fabricColorPalette[series.colorIndex], diff --git a/libs/error-analysis/src/lib/ErrorAnalysisDashboard/Controls/TreeViewRenderer/TreeViewRenderer.tsx b/libs/error-analysis/src/lib/ErrorAnalysisDashboard/Controls/TreeViewRenderer/TreeViewRenderer.tsx index 607c715608..d173585b38 100644 --- a/libs/error-analysis/src/lib/ErrorAnalysisDashboard/Controls/TreeViewRenderer/TreeViewRenderer.tsx +++ b/libs/error-analysis/src/lib/ErrorAnalysisDashboard/Controls/TreeViewRenderer/TreeViewRenderer.tsx @@ -27,6 +27,7 @@ import { interpolateHcl as d3interpolateHcl } from "d3-interpolate"; import { scaleLinear as d3scaleLinear } from "d3-scale"; import { select } from "d3-selection"; import { linkVertical as d3linkVertical } from "d3-shape"; +import _ from "lodash"; import { getTheme, IProcessedStyleSet, @@ -261,12 +262,12 @@ export class TreeViewRenderer extends React.PureComponent< ); const x = rootDescendants.map((d) => d.x); const y = rootDescendants.map((d) => d.y); - const minX = Math.min(Math.min(...x) - 40, pathMin); + const minX = Math.min((_.min(x) || 0) - 40, pathMin); //100:tooltip width - const maxX = Math.max(Math.max(...x) + 40 + 100, pathMax); - const minY = Math.min(...y) - 40; + const maxX = Math.max((_.max(x) || 0) + 40 + 100, pathMax); + const minY = (_.min(y) || 0) - 40; //40:tooltip height - const maxY = Math.max(...y) + 40 + 40; + const maxY = (_.max(y) || 0) + 40 + 40; const containerStyles = mergeStyles({ transform: `translate(${-minX}px, ${-minY}px)` }); diff --git a/libs/interpret/src/lib/MLIDashboard/Controls/FeatureImportance/Beehive.tsx b/libs/interpret/src/lib/MLIDashboard/Controls/FeatureImportance/Beehive.tsx index 8548977d18..0cc15e2d30 100644 --- a/libs/interpret/src/lib/MLIDashboard/Controls/FeatureImportance/Beehive.tsx +++ b/libs/interpret/src/lib/MLIDashboard/Controls/FeatureImportance/Beehive.tsx @@ -82,8 +82,8 @@ export class Beehive extends React.PureComponent< const featureArray = data.testDataset.dataset?.map((row: number[]) => row[featureIndex]) || []; - const min = Math.min(...featureArray); - const max = Math.max(...featureArray); + const min = _.min(featureArray) || 0; + const max = _.max(featureArray) || 0; const range = max - min; return (value: string | number): number => { return range !== 0 && typeof value === "number" diff --git a/libs/mlchartlib/src/lib/components/ModelMetadata.ts b/libs/mlchartlib/src/lib/components/ModelMetadata.ts index 83cf84d534..095996d239 100644 --- a/libs/mlchartlib/src/lib/components/ModelMetadata.ts +++ b/libs/mlchartlib/src/lib/components/ModelMetadata.ts @@ -42,8 +42,8 @@ export class ModelMetadata { } const featureVector = testData.map((row) => row[featureIndex]); return { - max: Math.max(...featureVector), - min: Math.min(...featureVector), + max: _.max(featureVector) || 0, + min: _.min(featureVector) || 0, rangeType: featureVector.every((val) => Number.isInteger(val)) ? RangeTypes.Integer : RangeTypes.Numeric