josdejong/mathjs

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

开放

#3,160 创建于 2024年2月19日

 (3 条评论) (0 个反应) (0 位负责人)JavaScript (1,314 个派生)batch import
bughelp wantedtypescript

仓库指标

星标
 (15,065 个星标)
PR 合并指标
 (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.

贡献者指南