145 lines
3.6 KiB
Markdown
145 lines
3.6 KiB
Markdown
|
<!--
|
||
|
|
||
|
@license Apache-2.0
|
||
|
|
||
|
Copyright (c) 2018 The Stdlib Authors.
|
||
|
|
||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
you may not use this file except in compliance with the License.
|
||
|
You may obtain a copy of the License at
|
||
|
|
||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||
|
|
||
|
Unless required by applicable law or agreed to in writing, software
|
||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
See the License for the specific language governing permissions and
|
||
|
limitations under the License.
|
||
|
|
||
|
-->
|
||
|
|
||
|
# Promotion Rules
|
||
|
|
||
|
> Return the ndarray [data type][@stdlib/ndarray/dtypes] with the smallest size and closest "kind" to which ndarray [data types][@stdlib/ndarray/dtypes] can be **safely** cast.
|
||
|
|
||
|
<!-- Section to include introductory text. Make sure to keep an empty line after the intro `section` element and another before the `/section` close. -->
|
||
|
|
||
|
<section class="intro">
|
||
|
|
||
|
</section>
|
||
|
|
||
|
<!-- /.intro -->
|
||
|
|
||
|
<!-- Package usage documentation. -->
|
||
|
|
||
|
<section class="usage">
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
```javascript
|
||
|
var promotionRules = require( '@stdlib/ndarray/promotion-rules' );
|
||
|
```
|
||
|
|
||
|
#### promotionRules( \[dtype1, dtype2] )
|
||
|
|
||
|
If provided [data types][@stdlib/ndarray/dtypes], returns the ndarray [data type][@stdlib/ndarray/dtypes] with the smallest size and closest "kind" to which ndarray [data types][@stdlib/ndarray/dtypes] can be **safely** cast.
|
||
|
|
||
|
```javascript
|
||
|
var out = promotionRules( 'float32', 'uint32' );
|
||
|
// returns 'float64'
|
||
|
```
|
||
|
|
||
|
If a [data type][@stdlib/ndarray/dtypes] to which [data types][@stdlib/ndarray/dtypes] can be safely cast does **not** exist (or is not supported), the function returns `-1`.
|
||
|
|
||
|
```javascript
|
||
|
var out = promotionRules( 'binary', 'generic' );
|
||
|
// returns -1
|
||
|
```
|
||
|
|
||
|
If not provided [data types][@stdlib/ndarray/dtypes], the function returns a promotion table.
|
||
|
|
||
|
```javascript
|
||
|
var out = promotionRules();
|
||
|
// returns {...}
|
||
|
|
||
|
var f32 = out[ 'float32' ];
|
||
|
// returns {...}
|
||
|
|
||
|
var rule = f32[ 'uint32' ];
|
||
|
// returns 'float64'
|
||
|
```
|
||
|
|
||
|
If provided an unrecognized or unsupported `dtype`, the function returns `null`.
|
||
|
|
||
|
```javascript
|
||
|
var out = promotionRules( 'foo', 'generic' );
|
||
|
// returns null
|
||
|
```
|
||
|
|
||
|
</section>
|
||
|
|
||
|
<!-- /.usage -->
|
||
|
|
||
|
<!-- Package usage notes. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
|
||
|
|
||
|
<section class="notes">
|
||
|
|
||
|
</section>
|
||
|
|
||
|
<!-- /.notes -->
|
||
|
|
||
|
<!-- Package usage examples. -->
|
||
|
|
||
|
<section class="examples">
|
||
|
|
||
|
## Examples
|
||
|
|
||
|
<!-- eslint no-undef: "error" -->
|
||
|
|
||
|
```javascript
|
||
|
var dtypes = require( '@stdlib/ndarray/dtypes' );
|
||
|
var promotionRules = require( '@stdlib/ndarray/promotion-rules' );
|
||
|
|
||
|
var DTYPES;
|
||
|
var dt1;
|
||
|
var dt2;
|
||
|
var dt;
|
||
|
var i;
|
||
|
var j;
|
||
|
|
||
|
// Get the list of supported ndarray data types:
|
||
|
DTYPES = dtypes();
|
||
|
|
||
|
// Print the promotion rule for each pair of ndarray data types...
|
||
|
for ( i = 0; i < DTYPES.length; i++ ) {
|
||
|
dt1 = DTYPES[ i ];
|
||
|
for ( j = 0; j < DTYPES.length; j++ ) {
|
||
|
dt2 = DTYPES[ j ];
|
||
|
dt = promotionRules( dt1, dt2 );
|
||
|
console.log( '(%s, %s) => %s', dt1, dt2, dt );
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
</section>
|
||
|
|
||
|
<!-- /.examples -->
|
||
|
|
||
|
<!-- Section to include cited references. If references are included, add a horizontal rule *before* the section. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
|
||
|
|
||
|
<section class="references">
|
||
|
|
||
|
</section>
|
||
|
|
||
|
<!-- /.references -->
|
||
|
|
||
|
<!-- Section for all links. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
|
||
|
|
||
|
<section class="links">
|
||
|
|
||
|
[@stdlib/ndarray/dtypes]: https://www.npmjs.com/package/@stdlib/ndarray/tree/main/dtypes
|
||
|
|
||
|
</section>
|
||
|
|
||
|
<!-- /.links -->
|