josdejong/mathjs

aggregation operations on 2d arrays using axis 1 don't return an array type and return only MathScalarType

Open

#3,160 opened on 2024年2月19日

GitHub で見る
 (3 comments) (0 reactions) (0 assignees)JavaScript (1,298 forks)batch import
bughelp wantedtypescript

Repository metrics

Stars
 (13,832 stars)
PR merge metrics
 (30d に merged PR はありません)

説明

Describe the bug On functions like mean, min, max, std, if you take some 2d number array and want to aggregate it along the 1 axis to retrieve a 1d array of output, you want to get some kind of array/matrix/vector type back. However, it only returns MathScalarType which causes a typescript error. I believe that this code in the types/index.d.ts file at line 2668 causes this:

  /**
   * @param A A single matrix
   * @param dimension The mean over the selected dimension
   * @returns The mean value
   */
  mean<T extends MathScalarType>(
    A: T[] | T[][],
    dimension?: number | BigNumber
  ): T

This has a return value of T, but it actually returns T[] when you have dimension=1 and we want the annotated type to match.

To Reproduce something like

const dataArray: number[][] = [[1, 2], [3, 4]];
const resultArray: number[] = math.mean(dataArray, 1);

should create an error saying "Type 'MathScalarType' is not assignable to type 'number[]'". But this works perfectly as intended and does actually return the answer correctly.

This happens on mean, min, max, std, and maybe more things that involve axis but I haven't tested them.

コントリビューターガイド