Skip to content

Commit fa2672f

Browse files
committed
Add Typescript definition
1 parent 7966246 commit fa2672f

File tree

3 files changed

+493
-0
lines changed

3 files changed

+493
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,243 @@
1+
/*
2+
* @license Apache-2.0
3+
*
4+
* Copyright (c) 2019 The Stdlib Authors.
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
19+
// TypeScript Version: 2.0
20+
21+
/// <reference types="@stdlib/types"/>
22+
23+
import * as random from '@stdlib/types/random';
24+
25+
/**
26+
* Interface defining `factory` options.
27+
*/
28+
interface Options {
29+
/**
30+
* Pseudorandom number generator which generates uniformly distributed pseudorandom numbers.
31+
*/
32+
prng?: random.PRNG;
33+
34+
/**
35+
* Pseudorandom number generator seed.
36+
*/
37+
seed?: random.PRNGSeedMT19937;
38+
39+
/**
40+
* Pseudorandom number generator state.
41+
*/
42+
state?: random.PRNGStateMT19937;
43+
44+
/**
45+
* Specifies whether to copy a provided pseudorandom number generator state.
46+
*/
47+
copy?: boolean;
48+
}
49+
50+
/**
51+
* Interface for PRNG properties and methods.
52+
*/
53+
interface PRNG {
54+
/**
55+
* Generator name.
56+
*/
57+
readonly NAME: string;
58+
59+
/**
60+
* Underlying pseudorandom number generator.
61+
*/
62+
readonly PRNG: random.PRNG;
63+
64+
/**
65+
* PRNG seed.
66+
*/
67+
readonly seed: random.PRNGSeedMT19937;
68+
69+
/**
70+
* PRNG seed length.
71+
*/
72+
readonly seedLength: number;
73+
74+
/**
75+
* PRNG state.
76+
*/
77+
state: random.PRNGStateMT19937;
78+
79+
/**
80+
* PRNG state length.
81+
*/
82+
readonly stateLength: number;
83+
84+
/**
85+
* PRNG state size (in bytes).
86+
*/
87+
readonly byteLength: number;
88+
89+
/**
90+
* Serializes the pseudorandom number generator as a JSON object.
91+
*
92+
* @returns JSON representation
93+
*/
94+
toJSON(): string;
95+
}
96+
97+
/**
98+
* Interface for generating pseudorandom numbers from a triangular distribution with pre-specified parameter values.
99+
*/
100+
interface NullaryFunction extends PRNG {
101+
/**
102+
* Returns a pseudorandom number drawn from a triangular distribution.
103+
*
104+
* @returns pseudorandom number
105+
*/
106+
(): number;
107+
}
108+
109+
/**
110+
* Interface for generating pseudorandom numbers from a triangular distribution without pre-specified parameter values.
111+
*/
112+
interface BinaryFunction extends PRNG {
113+
/**
114+
* Returns a pseudorandom number drawn from a triangular distribution.
115+
*
116+
* @param a - minimum support
117+
* @param b - maximum support
118+
* @param c - mode
119+
* @returns pseudorandom number
120+
*/
121+
( a: number, b: number, c: number ): number;
122+
}
123+
124+
/**
125+
* Interface for generating pseudorandom numbers drawn from a triangular distribution.
126+
*/
127+
interface Random extends PRNG {
128+
/**
129+
* Returns pseudorandom number drawn from a triangular distribution.
130+
*
131+
* ## Notes
132+
*
133+
* - If the condition `a <= c <= b` is not satisfied, the function returns `NaN`.
134+
* - If either `a`, `b`, or `c` is `NaN`, the function returns `NaN`.
135+
*
136+
* @param a - minimum support
137+
* @param b - maximum support
138+
* @param c - mode
139+
* @returns pseudorandom number
140+
*
141+
* @example
142+
* var v = triangular( 2.0, 5.0, 3.33 );
143+
* // returns <number>
144+
*
145+
* @example
146+
* var v = triangular( 1.0, 2.0, 1.8 );
147+
* // returns NaN
148+
*/
149+
( a: number, b: number, c: number ): number;
150+
151+
/**
152+
* Returns a pseudorandom number generator for generating random numbers from a triangular distribution.
153+
*
154+
* ## Notes
155+
*
156+
* - When provided `a`, `b`, and `c`, the returned PRNG returns random variates drawn from the specified distribution.
157+
*
158+
* @param a - minimum support
159+
* @param b - maximum support
160+
* @param c - mode
161+
* @param options - function options
162+
* @param options.prng - pseudorandom number generator which generates uniformly distributed pseudorandom numbers
163+
* @param options.seed - pseudorandom number generator seed
164+
* @param options.state - pseudorandom number generator state
165+
* @param options.copy - boolean indicating whether to copy a provided pseudorandom number generator state (default: true)
166+
* @throws arguments must satisfy `a <= c <= b`
167+
* @throws must provide a valid state
168+
* @returns pseudorandom number generator
169+
*
170+
* @example
171+
* var rand = triangular.factory( 1.0, 3.0, 1.5 );
172+
* var v = rand();
173+
* // returns <number>
174+
*
175+
* @example
176+
* var rand = triangular.factory( 1.0, 2.0, 1.5, {
177+
* 'seed': 297
178+
* });
179+
* var v = rand();
180+
* // returns <number>
181+
*/
182+
factory( a: number, b: number, c: number, options?: Options ): NullaryFunction; // tslint-disable-line max-line-length
183+
184+
/**
185+
* Returns a pseudorandom number generator for generating random numbers from a triangular distribution.
186+
*
187+
* ## Notes
188+
*
189+
* - When not provided `a`, `b`, and `c`, the returned PRNG requires that `a`, `b`, and `c` be provided at each invocation.
190+
*
191+
* @param options - function options
192+
* @param options.prng - pseudorandom number generator which generates uniformly distributed pseudorandom numbers
193+
* @param options.seed - pseudorandom number generator seed
194+
* @param options.state - pseudorandom number generator state
195+
* @param options.copy - boolean indicating whether to copy a provided pseudorandom number generator state (default: true)
196+
* @throws must provide a valid state
197+
* @returns pseudorandom number generator
198+
*
199+
* @example
200+
* var rand = triangular.factory();
201+
* var v = rand( 1.0, 3.0, 1.5 );
202+
* // returns <number>
203+
*
204+
* @example
205+
* var rand = triangular.factory({
206+
* 'seed': 297
207+
* });
208+
* var v = rand( 1.0, 2.0, 1.5 );
209+
* // returns <number>
210+
*/
211+
factory( options?: Options ): BinaryFunction;
212+
}
213+
214+
/**
215+
* Returns pseudorandom number drawn from a triangular distribution.
216+
*
217+
* ## Notes
218+
*
219+
* - If the condition `a <= c <= b` is not satisfied, the function returns `NaN`.
220+
* - If either `a`, `b`, or `c` is `NaN`, the function returns `NaN`.
221+
*
222+
* @param a - minimum support
223+
* @param b - maximum support
224+
* @param c - mode
225+
* @returns pseudorandom number
226+
*
227+
* @example
228+
* var v = triangular( 2.0, 5.0, 3.33 );
229+
* // returns <number>
230+
*
231+
* @example
232+
* var rand = triangular.factory({
233+
* 'seed': 297
234+
* });
235+
* var v = rand( 1.0, 2.0, 1.5 );
236+
* // returns <number>
237+
*/
238+
declare var triangular: Random;
239+
240+
241+
// EXPORTS //
242+
243+
export = triangular;

0 commit comments

Comments
 (0)