numpy-ts 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -159,4 +159,53 @@ export declare function remainder(a: ArrayStorage, b: ArrayStorage | number): Ar
159
159
  * @returns Result storage with heaviside values
160
160
  */
161
161
  export declare function heaviside(x1: ArrayStorage, x2: ArrayStorage | number): ArrayStorage;
162
+ /**
163
+ * First array raised to power of second, always promoting to float
164
+ * @param x1 - Base values
165
+ * @param x2 - Exponent values
166
+ * @returns Result in float64
167
+ */
168
+ export declare function float_power(x1: ArrayStorage, x2: ArrayStorage | number): ArrayStorage;
169
+ /**
170
+ * Element-wise remainder of division (fmod)
171
+ * Unlike mod/remainder, fmod matches C fmod behavior
172
+ * @param x1 - Dividend
173
+ * @param x2 - Divisor
174
+ * @returns Remainder
175
+ */
176
+ export declare function fmod(x1: ArrayStorage, x2: ArrayStorage | number): ArrayStorage;
177
+ /**
178
+ * Decompose floating point numbers into mantissa and exponent
179
+ * Returns [mantissa, exponent] where x = mantissa * 2^exponent
180
+ * @param x - Input array
181
+ * @returns Tuple of [mantissa, exponent] arrays
182
+ */
183
+ export declare function frexp(x: ArrayStorage): [ArrayStorage, ArrayStorage];
184
+ /**
185
+ * Greatest common divisor
186
+ * @param x1 - First array
187
+ * @param x2 - Second array or scalar
188
+ * @returns GCD
189
+ */
190
+ export declare function gcd(x1: ArrayStorage, x2: ArrayStorage | number): ArrayStorage;
191
+ /**
192
+ * Least common multiple
193
+ * @param x1 - First array
194
+ * @param x2 - Second array or scalar
195
+ * @returns LCM
196
+ */
197
+ export declare function lcm(x1: ArrayStorage, x2: ArrayStorage | number): ArrayStorage;
198
+ /**
199
+ * Returns x1 * 2^x2, element-wise
200
+ * @param x1 - Mantissa
201
+ * @param x2 - Exponent
202
+ * @returns Result
203
+ */
204
+ export declare function ldexp(x1: ArrayStorage, x2: ArrayStorage | number): ArrayStorage;
205
+ /**
206
+ * Return fractional and integral parts of array
207
+ * @param x - Input array
208
+ * @returns Tuple of [fractional, integral] arrays
209
+ */
210
+ export declare function modf(x: ArrayStorage): [ArrayStorage, ArrayStorage];
162
211
  //# sourceMappingURL=arithmetic.d.ts.map
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Logic operations
3
+ *
4
+ * Pure functions for element-wise logical operations:
5
+ * logical_and, logical_or, logical_not, logical_xor,
6
+ * isfinite, isinf, isnan, isnat, copysign, signbit, nextafter, spacing
7
+ *
8
+ * These operations convert values to boolean (non-zero = true, zero = false)
9
+ * and return boolean arrays (dtype: 'bool').
10
+ */
11
+ import { ArrayStorage } from '../core/storage';
12
+ import { type DType } from '../core/dtype';
13
+ /**
14
+ * Logical AND of two arrays or array and scalar
15
+ *
16
+ * Returns a boolean array where each element is the logical AND
17
+ * of corresponding elements (non-zero = true, zero = false).
18
+ *
19
+ * @param a - First array storage
20
+ * @param b - Second array storage or scalar
21
+ * @returns Boolean result storage
22
+ */
23
+ export declare function logical_and(a: ArrayStorage, b: ArrayStorage | number): ArrayStorage;
24
+ /**
25
+ * Logical OR of two arrays or array and scalar
26
+ *
27
+ * Returns a boolean array where each element is the logical OR
28
+ * of corresponding elements (non-zero = true, zero = false).
29
+ *
30
+ * @param a - First array storage
31
+ * @param b - Second array storage or scalar
32
+ * @returns Boolean result storage
33
+ */
34
+ export declare function logical_or(a: ArrayStorage, b: ArrayStorage | number): ArrayStorage;
35
+ /**
36
+ * Logical NOT of an array
37
+ *
38
+ * Returns a boolean array where each element is the logical NOT
39
+ * of the input (non-zero = false, zero = true).
40
+ *
41
+ * @param a - Input array storage
42
+ * @returns Boolean result storage
43
+ */
44
+ export declare function logical_not(a: ArrayStorage): ArrayStorage;
45
+ /**
46
+ * Logical XOR of two arrays or array and scalar
47
+ *
48
+ * Returns a boolean array where each element is the logical XOR
49
+ * of corresponding elements (non-zero = true, zero = false).
50
+ *
51
+ * @param a - First array storage
52
+ * @param b - Second array storage or scalar
53
+ * @returns Boolean result storage
54
+ */
55
+ export declare function logical_xor(a: ArrayStorage, b: ArrayStorage | number): ArrayStorage;
56
+ /**
57
+ * Test element-wise for finiteness (not infinity and not NaN)
58
+ *
59
+ * @param a - Input array storage
60
+ * @returns Boolean result storage
61
+ */
62
+ export declare function isfinite(a: ArrayStorage): ArrayStorage;
63
+ /**
64
+ * Test element-wise for positive or negative infinity
65
+ *
66
+ * @param a - Input array storage
67
+ * @returns Boolean result storage
68
+ */
69
+ export declare function isinf(a: ArrayStorage): ArrayStorage;
70
+ /**
71
+ * Test element-wise for NaN (Not a Number)
72
+ *
73
+ * @param a - Input array storage
74
+ * @returns Boolean result storage
75
+ */
76
+ export declare function isnan(a: ArrayStorage): ArrayStorage;
77
+ /**
78
+ * Test element-wise for NaT (Not a Time)
79
+ *
80
+ * In NumPy, NaT is the datetime equivalent of NaN.
81
+ * Since we don't have datetime support, this always returns false.
82
+ *
83
+ * @param a - Input array storage
84
+ * @returns Boolean result storage (all false)
85
+ */
86
+ export declare function isnat(a: ArrayStorage): ArrayStorage;
87
+ /**
88
+ * Change the sign of x1 to that of x2, element-wise
89
+ *
90
+ * Returns a value with the magnitude of x1 and the sign of x2.
91
+ *
92
+ * @param x1 - Values to change sign of (magnitude source)
93
+ * @param x2 - Values whose sign is used (sign source)
94
+ * @returns Array with magnitude from x1 and sign from x2
95
+ */
96
+ export declare function copysign(x1: ArrayStorage, x2: ArrayStorage | number): ArrayStorage;
97
+ /**
98
+ * Returns element-wise True where signbit is set (less than zero)
99
+ *
100
+ * @param a - Input array storage
101
+ * @returns Boolean result storage
102
+ */
103
+ export declare function signbit(a: ArrayStorage): ArrayStorage;
104
+ /**
105
+ * Return the next floating-point value after x1 towards x2, element-wise
106
+ *
107
+ * @param x1 - Values to find the next representable value of
108
+ * @param x2 - Direction to look in for the next representable value
109
+ * @returns Array of next representable values
110
+ */
111
+ export declare function nextafter(x1: ArrayStorage, x2: ArrayStorage | number): ArrayStorage;
112
+ /**
113
+ * Return the distance between x and the nearest adjacent number
114
+ *
115
+ * This is the difference between x and the next representable floating-point value.
116
+ *
117
+ * @param a - Input array storage
118
+ * @returns Array of spacing values
119
+ */
120
+ export declare function spacing(a: ArrayStorage): ArrayStorage;
121
+ /**
122
+ * Test element-wise for complex number
123
+ * Since numpy-ts doesn't support complex numbers, always returns false
124
+ * @param a - Input array storage
125
+ * @returns Boolean array (all false)
126
+ */
127
+ export declare function iscomplex(a: ArrayStorage): ArrayStorage;
128
+ /**
129
+ * Check whether object is complex type array
130
+ * Since numpy-ts doesn't support complex numbers, always returns false
131
+ * @param _a - Input array storage (unused)
132
+ * @returns false
133
+ */
134
+ export declare function iscomplexobj(_a: ArrayStorage): boolean;
135
+ /**
136
+ * Test element-wise for real number (not complex)
137
+ * Since numpy-ts doesn't support complex numbers, always returns true
138
+ * @param a - Input array storage
139
+ * @returns Boolean array (all true)
140
+ */
141
+ export declare function isreal(a: ArrayStorage): ArrayStorage;
142
+ /**
143
+ * Check whether object is real type array (not complex)
144
+ * Since numpy-ts doesn't support complex numbers, always returns true
145
+ * @param _a - Input array storage (unused)
146
+ * @returns true
147
+ */
148
+ export declare function isrealobj(_a: ArrayStorage): boolean;
149
+ /**
150
+ * Test element-wise for negative infinity
151
+ * @param a - Input array storage
152
+ * @returns Boolean array
153
+ */
154
+ export declare function isneginf(a: ArrayStorage): ArrayStorage;
155
+ /**
156
+ * Test element-wise for positive infinity
157
+ * @param a - Input array storage
158
+ * @returns Boolean array
159
+ */
160
+ export declare function isposinf(a: ArrayStorage): ArrayStorage;
161
+ /**
162
+ * Check if array is Fortran contiguous (column-major order)
163
+ * @param a - Input array storage
164
+ * @returns true if F-contiguous
165
+ */
166
+ export declare function isfortran(a: ArrayStorage): boolean;
167
+ /**
168
+ * Returns complex array with complex parts close to zero set to real
169
+ * Since numpy-ts doesn't support complex numbers, returns copy
170
+ * @param a - Input array storage
171
+ * @param _tol - Tolerance (unused, for API compatibility)
172
+ * @returns Copy of input array
173
+ */
174
+ export declare function real_if_close(a: ArrayStorage, _tol?: number): ArrayStorage;
175
+ /**
176
+ * Check if element is a scalar type
177
+ * @param val - Value to check
178
+ * @returns true if scalar
179
+ */
180
+ export declare function isscalar(val: unknown): boolean;
181
+ /**
182
+ * Check if object is iterable
183
+ * @param obj - Object to check
184
+ * @returns true if iterable
185
+ */
186
+ export declare function iterable(obj: unknown): boolean;
187
+ /**
188
+ * Check if dtype meets specified criteria
189
+ * @param dtype - Dtype to check
190
+ * @param kind - Kind of dtype ('b' bool, 'i' int, 'u' uint, 'f' float)
191
+ * @returns true if dtype matches kind
192
+ */
193
+ export declare function isdtype(dtype: DType, kind: string): boolean;
194
+ /**
195
+ * Find the dtype that can represent both input dtypes
196
+ * @param dtype1 - First dtype
197
+ * @param dtype2 - Second dtype
198
+ * @returns Promoted dtype
199
+ */
200
+ export declare function promote_types(dtype1: DType, dtype2: DType): DType;
201
+ //# sourceMappingURL=logic.d.ts.map
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Random number generation module
3
+ *
4
+ * Implements NumPy-compatible random functions:
5
+ * - Legacy API (np.random.seed, random, rand, uniform, etc.) uses MT19937
6
+ * - Modern API (np.random.default_rng) uses PCG64 with SeedSequence
7
+ *
8
+ * Both implementations produce identical output to NumPy when seeded.
9
+ */
10
+ import { ArrayStorage } from '../core/storage';
11
+ import { type DType } from '../core/dtype';
12
+ /**
13
+ * Random number generator class (matches NumPy's Generator from default_rng)
14
+ */
15
+ export declare class Generator {
16
+ private _pcgState;
17
+ constructor(seedValue?: number);
18
+ private _randomFloat;
19
+ random(size?: number | number[]): ArrayStorage | number;
20
+ integers(low: number, high?: number, size?: number | number[]): ArrayStorage | number;
21
+ standard_normal(size?: number | number[]): ArrayStorage | number;
22
+ normal(loc?: number, scale?: number, size?: number | number[]): ArrayStorage | number;
23
+ uniform(low?: number, high?: number, size?: number | number[]): ArrayStorage | number;
24
+ choice(a: number | ArrayStorage, size?: number | number[], replace?: boolean, p?: ArrayStorage | number[]): ArrayStorage | number;
25
+ permutation(x: number | ArrayStorage): ArrayStorage;
26
+ shuffle(x: ArrayStorage): void;
27
+ exponential(scale?: number, size?: number | number[]): ArrayStorage | number;
28
+ poisson(lam?: number, size?: number | number[]): ArrayStorage | number;
29
+ binomial(n: number, p: number, size?: number | number[]): ArrayStorage | number;
30
+ }
31
+ /**
32
+ * Create a new Generator instance (matches np.random.default_rng)
33
+ * @param seedValue - Optional seed value
34
+ */
35
+ export declare function default_rng(seedValue?: number): Generator;
36
+ /**
37
+ * Seed the random number generator (legacy API)
38
+ * @param seedValue - Seed value (integer)
39
+ */
40
+ export declare function seed(seedValue?: number | null): void;
41
+ /**
42
+ * Get the internal state of the random number generator
43
+ * @returns State object that can be used with set_state
44
+ */
45
+ export declare function get_state(): {
46
+ mt: number[];
47
+ mti: number;
48
+ };
49
+ /**
50
+ * Set the internal state of the random number generator
51
+ * @param state - State object from get_state
52
+ */
53
+ export declare function set_state(state: {
54
+ mt: number[];
55
+ mti: number;
56
+ }): void;
57
+ /**
58
+ * Generate random floats in the half-open interval [0.0, 1.0)
59
+ * @param size - Output shape. If not provided, returns a single float.
60
+ */
61
+ export declare function random(size?: number | number[]): ArrayStorage | number;
62
+ /**
63
+ * Random values in a given shape (alias for random with shape)
64
+ * @param d0, d1, ..., dn - The dimensions of the returned array
65
+ */
66
+ export declare function rand(...shape: number[]): ArrayStorage | number;
67
+ /**
68
+ * Return random floats from standard normal distribution
69
+ * @param d0, d1, ..., dn - The dimensions of the returned array
70
+ */
71
+ export declare function randn(...shape: number[]): ArrayStorage | number;
72
+ /**
73
+ * Return random integers from low (inclusive) to high (exclusive)
74
+ * @param low - Lowest integer (or high if high is not provided)
75
+ * @param high - One above the highest integer (optional)
76
+ * @param size - Output shape
77
+ * @param dtype - Output dtype (default 'int64')
78
+ */
79
+ export declare function randint(low: number, high?: number | null, size?: number | number[], dtype?: DType): ArrayStorage | number;
80
+ /**
81
+ * Draw samples from a uniform distribution
82
+ * @param low - Lower boundary (default 0)
83
+ * @param high - Upper boundary (default 1)
84
+ * @param size - Output shape
85
+ */
86
+ export declare function uniform(low?: number, high?: number, size?: number | number[]): ArrayStorage | number;
87
+ /**
88
+ * Draw samples from a normal (Gaussian) distribution
89
+ * @param loc - Mean of the distribution (default 0)
90
+ * @param scale - Standard deviation (default 1)
91
+ * @param size - Output shape
92
+ */
93
+ export declare function normal(loc?: number, scale?: number, size?: number | number[]): ArrayStorage | number;
94
+ /**
95
+ * Draw samples from a standard normal distribution (mean=0, std=1)
96
+ * @param size - Output shape
97
+ */
98
+ export declare function standard_normal(size?: number | number[]): ArrayStorage | number;
99
+ /**
100
+ * Draw samples from an exponential distribution
101
+ * @param scale - The scale parameter (beta = 1/lambda) (default 1)
102
+ * @param size - Output shape
103
+ */
104
+ export declare function exponential(scale?: number, size?: number | number[]): ArrayStorage | number;
105
+ /**
106
+ * Draw samples from a Poisson distribution
107
+ * @param lam - Expected number of events (lambda) (default 1)
108
+ * @param size - Output shape
109
+ */
110
+ export declare function poisson(lam?: number, size?: number | number[]): ArrayStorage | number;
111
+ /**
112
+ * Draw samples from a binomial distribution
113
+ * @param n - Number of trials
114
+ * @param p - Probability of success
115
+ * @param size - Output shape
116
+ */
117
+ export declare function binomial(n: number, p: number, size?: number | number[]): ArrayStorage | number;
118
+ /**
119
+ * Generate a random sample from a given 1-D array
120
+ * @param a - Input array or int. If int, samples from arange(a)
121
+ * @param size - Output shape
122
+ * @param replace - Whether sampling with replacement (default true)
123
+ * @param p - Probabilities associated with each entry
124
+ */
125
+ export declare function choice(a: number | ArrayStorage, size?: number | number[], replace?: boolean, p?: ArrayStorage | number[]): ArrayStorage | number;
126
+ /**
127
+ * Randomly permute a sequence, or return a permuted range
128
+ * @param x - Input array or int. If int, returns permutation of arange(x)
129
+ */
130
+ export declare function permutation(x: number | ArrayStorage): ArrayStorage;
131
+ /**
132
+ * Modify a sequence in-place by shuffling its contents
133
+ * @param x - Array to be shuffled
134
+ */
135
+ export declare function shuffle(x: ArrayStorage): void;
136
+ //# sourceMappingURL=random.d.ts.map
@@ -56,6 +56,14 @@ export declare function sort_complex(storage: ArrayStorage): ArrayStorage;
56
56
  * @returns Tuple of arrays, one for each dimension
57
57
  */
58
58
  export declare function nonzero(storage: ArrayStorage): ArrayStorage[];
59
+ /**
60
+ * Find the indices of array elements that are non-zero, grouped by element
61
+ * Returns a 2D array where each row is the index of a non-zero element.
62
+ * This is equivalent to transpose(nonzero(a)).
63
+ * @param storage - Input array storage
64
+ * @returns 2D array of shape (N, ndim) where N is number of non-zero elements
65
+ */
66
+ export declare function argwhere(storage: ArrayStorage): ArrayStorage;
59
67
  /**
60
68
  * Return indices of non-zero elements in flattened array
61
69
  * @param storage - Input array storage
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Statistics operations (histogram, bincount, correlate, cov, etc.)
3
+ *
4
+ * Pure functions for statistical analysis.
5
+ * @module ops/statistics
6
+ */
7
+ import { ArrayStorage } from '../core/storage';
8
+ /**
9
+ * Count number of occurrences of each value in array of non-negative ints.
10
+ *
11
+ * @param x - Input array (must contain non-negative integers)
12
+ * @param weights - Optional weights, same shape as x
13
+ * @param minlength - Minimum number of bins for output (default: 0)
14
+ * @returns Array of bin counts
15
+ */
16
+ export declare function bincount(x: ArrayStorage, weights?: ArrayStorage, minlength?: number): ArrayStorage;
17
+ /**
18
+ * Return the indices of the bins to which each value in input array belongs.
19
+ *
20
+ * @param x - Input array to be binned
21
+ * @param bins - Array of bins (monotonically increasing or decreasing)
22
+ * @param right - If true, intervals are closed on the right (default: false)
23
+ * @returns Array of bin indices
24
+ */
25
+ export declare function digitize(x: ArrayStorage, bins: ArrayStorage, right?: boolean): ArrayStorage;
26
+ /**
27
+ * Compute the histogram of a set of data.
28
+ *
29
+ * @param a - Input data (flattened if not 1D)
30
+ * @param bins - Number of bins (default: 10) or array of bin edges
31
+ * @param range - Lower and upper range of bins. If not provided, uses [a.min(), a.max()]
32
+ * @param density - If true, return probability density function (default: false)
33
+ * @param weights - Optional weights for each data point
34
+ * @returns Tuple of [hist, bin_edges]
35
+ */
36
+ export declare function histogram(a: ArrayStorage, bins?: number | ArrayStorage, range?: [number, number], density?: boolean, weights?: ArrayStorage): {
37
+ hist: ArrayStorage;
38
+ bin_edges: ArrayStorage;
39
+ };
40
+ /**
41
+ * Compute the bi-dimensional histogram of two data samples.
42
+ *
43
+ * @param x - Array of x coordinates
44
+ * @param y - Array of y coordinates (must have same length as x)
45
+ * @param bins - Number of bins or [nx, ny] or [x_edges, y_edges]
46
+ * @param range - [[xmin, xmax], [ymin, ymax]]
47
+ * @param density - If true, return probability density function
48
+ * @param weights - Optional weights for each data point
49
+ * @returns Object with hist, x_edges, y_edges
50
+ */
51
+ export declare function histogram2d(x: ArrayStorage, y: ArrayStorage, bins?: number | [number, number] | [ArrayStorage, ArrayStorage], range?: [[number, number], [number, number]], density?: boolean, weights?: ArrayStorage): {
52
+ hist: ArrayStorage;
53
+ x_edges: ArrayStorage;
54
+ y_edges: ArrayStorage;
55
+ };
56
+ /**
57
+ * Compute the multidimensional histogram of some data.
58
+ *
59
+ * @param sample - Array of shape (N, D) where N is number of samples and D is number of dimensions
60
+ * @param bins - Number of bins for all axes, or array of bin counts per axis
61
+ * @param range - Array of [min, max] for each dimension
62
+ * @param density - If true, return probability density function
63
+ * @param weights - Optional weights for each sample
64
+ * @returns Object with hist and edges (array of edge arrays)
65
+ */
66
+ export declare function histogramdd(sample: ArrayStorage, bins?: number | number[], range?: [number, number][], density?: boolean, weights?: ArrayStorage): {
67
+ hist: ArrayStorage;
68
+ edges: ArrayStorage[];
69
+ };
70
+ /**
71
+ * Cross-correlation of two 1-dimensional sequences.
72
+ *
73
+ * @param a - First input sequence
74
+ * @param v - Second input sequence
75
+ * @param mode - 'full', 'same', or 'valid' (default: 'full')
76
+ * @returns Cross-correlation of a and v
77
+ */
78
+ export declare function correlate(a: ArrayStorage, v: ArrayStorage, mode?: 'full' | 'same' | 'valid'): ArrayStorage;
79
+ /**
80
+ * Discrete, linear convolution of two one-dimensional sequences.
81
+ *
82
+ * @param a - First input sequence
83
+ * @param v - Second input sequence
84
+ * @param mode - 'full', 'same', or 'valid' (default: 'full')
85
+ * @returns Convolution of a and v
86
+ */
87
+ export declare function convolve(a: ArrayStorage, v: ArrayStorage, mode?: 'full' | 'same' | 'valid'): ArrayStorage;
88
+ /**
89
+ * Estimate a covariance matrix.
90
+ *
91
+ * @param m - Input array (1D or 2D). Each row represents a variable, columns are observations.
92
+ * @param y - Optional second array (for 2 variable case)
93
+ * @param rowvar - If true, each row is a variable (default: true)
94
+ * @param bias - If true, use N for normalization; if false, use N-1 (default: false)
95
+ * @param ddof - Delta degrees of freedom (overrides bias if provided)
96
+ * @returns Covariance matrix
97
+ */
98
+ export declare function cov(m: ArrayStorage, y?: ArrayStorage, rowvar?: boolean, bias?: boolean, ddof?: number): ArrayStorage;
99
+ /**
100
+ * Return Pearson product-moment correlation coefficients.
101
+ *
102
+ * @param x - Input array (1D or 2D)
103
+ * @param y - Optional second array (for 2 variable case)
104
+ * @param rowvar - If true, each row is a variable (default: true)
105
+ * @returns Correlation coefficient matrix
106
+ */
107
+ export declare function corrcoef(x: ArrayStorage, y?: ArrayStorage, rowvar?: boolean): ArrayStorage;
108
+ //# sourceMappingURL=statistics.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "numpy-ts",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "Complete NumPy implementation for TypeScript and JavaScript (under construction)",
5
5
  "main": "dist/numpy-ts.node.cjs",
6
6
  "browser": "dist/numpy-ts.browser.js",
@@ -90,7 +90,7 @@
90
90
  "license": "MIT",
91
91
  "repository": {
92
92
  "type": "git",
93
- "url": "https://github.com/dupontcyborg/numpy-ts.git"
93
+ "url": "git+https://github.com/dupontcyborg/numpy-ts.git"
94
94
  },
95
95
  "bugs": {
96
96
  "url": "https://github.com/dupontcyborg/numpy-ts/issues"