Skip to content

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

Open
@jeffzyliu

Description

@jeffzyliu

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.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions