--- a +++ b/v3/js/libs/float16.js @@ -0,0 +1,1251 @@ +/*! @petamoriken/float16 v3.6.5 | MIT License - https://github.com/petamoriken/float16 */ + +const float16 = (function (exports) { + 'use strict'; + + const THIS_IS_NOT_AN_OBJECT = "This is not an object"; + const THIS_IS_NOT_A_FLOAT16ARRAY_OBJECT = "This is not a Float16Array object"; + const THIS_CONSTRUCTOR_IS_NOT_A_SUBCLASS_OF_FLOAT16ARRAY = + "This constructor is not a subclass of Float16Array"; + const THE_CONSTRUCTOR_PROPERTY_VALUE_IS_NOT_AN_OBJECT = + "The constructor property value is not an object"; + const SPECIES_CONSTRUCTOR_DIDNT_RETURN_TYPEDARRAY_OBJECT = + "Species constructor didn't return TypedArray object"; + const DERIVED_CONSTRUCTOR_CREATED_TYPEDARRAY_OBJECT_WHICH_WAS_TOO_SMALL_LENGTH = + "Derived constructor created TypedArray object which was too small length"; + const ATTEMPTING_TO_ACCESS_DETACHED_ARRAYBUFFER = + "Attempting to access detached ArrayBuffer"; + const CANNOT_CONVERT_UNDEFINED_OR_NULL_TO_OBJECT = + "Cannot convert undefined or null to object"; + const CANNOT_CONVERT_A_BIGINT_VALUE_TO_A_NUMBER = + "Cannot convert a BigInt value to a number"; + const CANNOT_MIX_BIGINT_AND_OTHER_TYPES = + "Cannot mix BigInt and other types, use explicit conversions"; + const ITERATOR_PROPERTY_IS_NOT_CALLABLE = "@@iterator property is not callable"; + const REDUCE_OF_EMPTY_ARRAY_WITH_NO_INITIAL_VALUE = + "Reduce of empty array with no initial value"; + const OFFSET_IS_OUT_OF_BOUNDS = "Offset is out of bounds"; + + function uncurryThis(target) { + return (thisArg, ...args) => { + return ReflectApply(target, thisArg, args); + }; + } + function uncurryThisGetter(target, key) { + return uncurryThis( + ReflectGetOwnPropertyDescriptor( + target, + key + ).get + ); + } + const { + apply: ReflectApply, + construct: ReflectConstruct, + defineProperty: ReflectDefineProperty, + get: ReflectGet, + getOwnPropertyDescriptor: ReflectGetOwnPropertyDescriptor, + getPrototypeOf: ReflectGetPrototypeOf, + has: ReflectHas, + ownKeys: ReflectOwnKeys, + set: ReflectSet, + setPrototypeOf: ReflectSetPrototypeOf, + } = Reflect; + const NativeProxy = Proxy; + const NativeNumber = Number; + const { + isFinite: NumberIsFinite, + isNaN: NumberIsNaN, + } = NativeNumber; + const { + iterator: SymbolIterator, + species: SymbolSpecies, + toStringTag: SymbolToStringTag, + for: SymbolFor, + } = Symbol; + const NativeObject = Object; + const { + create: ObjectCreate, + defineProperty: ObjectDefineProperty, + freeze: ObjectFreeze, + is: ObjectIs, + } = NativeObject; + const ObjectPrototype = NativeObject.prototype; + const ObjectPrototype__lookupGetter__ = (ObjectPrototype).__lookupGetter__ + ? uncurryThis( (ObjectPrototype).__lookupGetter__) + : (object, key) => { + if (object == null) { + throw NativeTypeError( + CANNOT_CONVERT_UNDEFINED_OR_NULL_TO_OBJECT + ); + } + let target = NativeObject(object); + do { + const descriptor = ReflectGetOwnPropertyDescriptor(target, key); + if (descriptor !== undefined) { + if (ObjectHasOwn(descriptor, "get")) { + return descriptor.get; + } + return; + } + } while ((target = ReflectGetPrototypeOf(target)) !== null); + }; + const ObjectHasOwn = (NativeObject).hasOwn || + uncurryThis(ObjectPrototype.hasOwnProperty); + const NativeArray = Array; + const ArrayIsArray = NativeArray.isArray; + const ArrayPrototype = NativeArray.prototype; + const ArrayPrototypeJoin = uncurryThis(ArrayPrototype.join); + const ArrayPrototypePush = uncurryThis(ArrayPrototype.push); + const ArrayPrototypeToLocaleString = uncurryThis( + ArrayPrototype.toLocaleString + ); + const NativeArrayPrototypeSymbolIterator = ArrayPrototype[SymbolIterator]; + const ArrayPrototypeSymbolIterator = uncurryThis(NativeArrayPrototypeSymbolIterator); + const MathTrunc = Math.trunc; + const NativeArrayBuffer = ArrayBuffer; + const ArrayBufferIsView = NativeArrayBuffer.isView; + const ArrayBufferPrototype = NativeArrayBuffer.prototype; + const ArrayBufferPrototypeSlice = uncurryThis(ArrayBufferPrototype.slice); + const ArrayBufferPrototypeGetByteLength = uncurryThisGetter(ArrayBufferPrototype, "byteLength"); + const NativeSharedArrayBuffer = typeof SharedArrayBuffer !== "undefined" ? SharedArrayBuffer : null; + const SharedArrayBufferPrototypeGetByteLength = NativeSharedArrayBuffer + && uncurryThisGetter(NativeSharedArrayBuffer.prototype, "byteLength"); + const TypedArray = ReflectGetPrototypeOf(Uint8Array); + const TypedArrayFrom = TypedArray.from; + const TypedArrayPrototype = TypedArray.prototype; + const NativeTypedArrayPrototypeSymbolIterator = TypedArrayPrototype[SymbolIterator]; + const TypedArrayPrototypeKeys = uncurryThis(TypedArrayPrototype.keys); + const TypedArrayPrototypeValues = uncurryThis( + TypedArrayPrototype.values + ); + const TypedArrayPrototypeEntries = uncurryThis( + TypedArrayPrototype.entries + ); + const TypedArrayPrototypeSet = uncurryThis(TypedArrayPrototype.set); + const TypedArrayPrototypeReverse = uncurryThis( + TypedArrayPrototype.reverse + ); + const TypedArrayPrototypeFill = uncurryThis(TypedArrayPrototype.fill); + const TypedArrayPrototypeCopyWithin = uncurryThis( + TypedArrayPrototype.copyWithin + ); + const TypedArrayPrototypeSort = uncurryThis(TypedArrayPrototype.sort); + const TypedArrayPrototypeSlice = uncurryThis(TypedArrayPrototype.slice); + const TypedArrayPrototypeSubarray = uncurryThis( + TypedArrayPrototype.subarray + ); + const TypedArrayPrototypeGetBuffer = uncurryThisGetter( + TypedArrayPrototype, + "buffer" + ); + const TypedArrayPrototypeGetByteOffset = uncurryThisGetter( + TypedArrayPrototype, + "byteOffset" + ); + const TypedArrayPrototypeGetLength = uncurryThisGetter( + TypedArrayPrototype, + "length" + ); + const TypedArrayPrototypeGetSymbolToStringTag = uncurryThisGetter( + TypedArrayPrototype, + SymbolToStringTag + ); + const NativeUint16Array = Uint16Array; + const Uint16ArrayFrom = (...args) => { + return ReflectApply(TypedArrayFrom, NativeUint16Array, args); + }; + const NativeUint32Array = Uint32Array; + const NativeFloat32Array = Float32Array; + const ArrayIteratorPrototype = ReflectGetPrototypeOf([][SymbolIterator]()); + const ArrayIteratorPrototypeNext = uncurryThis(ArrayIteratorPrototype.next); + const GeneratorPrototypeNext = uncurryThis((function* () {})().next); + const IteratorPrototype = ReflectGetPrototypeOf(ArrayIteratorPrototype); + const DataViewPrototype = DataView.prototype; + const DataViewPrototypeGetUint16 = uncurryThis( + DataViewPrototype.getUint16 + ); + const DataViewPrototypeSetUint16 = uncurryThis( + DataViewPrototype.setUint16 + ); + const NativeTypeError = TypeError; + const NativeRangeError = RangeError; + const NativeWeakSet = WeakSet; + const WeakSetPrototype = NativeWeakSet.prototype; + const WeakSetPrototypeAdd = uncurryThis(WeakSetPrototype.add); + const WeakSetPrototypeHas = uncurryThis(WeakSetPrototype.has); + const NativeWeakMap = WeakMap; + const WeakMapPrototype = NativeWeakMap.prototype; + const WeakMapPrototypeGet = uncurryThis(WeakMapPrototype.get); + const WeakMapPrototypeHas = uncurryThis(WeakMapPrototype.has); + const WeakMapPrototypeSet = uncurryThis(WeakMapPrototype.set); + + const arrayIterators = new NativeWeakMap(); + const SafeIteratorPrototype = ObjectCreate(null, { + next: { + value: function next() { + const arrayIterator = WeakMapPrototypeGet(arrayIterators, this); + return ArrayIteratorPrototypeNext(arrayIterator); + }, + }, + [SymbolIterator]: { + value: function values() { + return this; + }, + }, + }); + function safeIfNeeded(array) { + if (array[SymbolIterator] === NativeArrayPrototypeSymbolIterator) { + return array; + } + const safe = ObjectCreate(SafeIteratorPrototype); + WeakMapPrototypeSet(arrayIterators, safe, ArrayPrototypeSymbolIterator(array)); + return safe; + } + const generators = new NativeWeakMap(); + const DummyArrayIteratorPrototype = ObjectCreate(IteratorPrototype, { + next: { + value: function next() { + const generator = WeakMapPrototypeGet(generators, this); + return GeneratorPrototypeNext(generator); + }, + writable: true, + configurable: true, + }, + }); + for (const key of ReflectOwnKeys(ArrayIteratorPrototype)) { + if (key === "next") { + continue; + } + ObjectDefineProperty(DummyArrayIteratorPrototype, key, ReflectGetOwnPropertyDescriptor(ArrayIteratorPrototype, key)); + } + function wrap(generator) { + const dummy = ObjectCreate(DummyArrayIteratorPrototype); + WeakMapPrototypeSet(generators, dummy, generator); + return dummy; + } + + function isObject(value) { + return (value !== null && typeof value === "object") || + typeof value === "function"; + } + function isObjectLike(value) { + return value !== null && typeof value === "object"; + } + function isNativeTypedArray(value) { + return TypedArrayPrototypeGetSymbolToStringTag(value) !== undefined; + } + function isNativeBigIntTypedArray(value) { + const typedArrayName = TypedArrayPrototypeGetSymbolToStringTag(value); + return typedArrayName === "BigInt64Array" || + typedArrayName === "BigUint64Array"; + } + function isArrayBuffer(value) { + try { + ArrayBufferPrototypeGetByteLength( (value)); + return true; + } catch (e) { + return false; + } + } + function isSharedArrayBuffer(value) { + if (NativeSharedArrayBuffer === null) { + return false; + } + try { + SharedArrayBufferPrototypeGetByteLength( (value)); + return true; + } catch (e) { + return false; + } + } + function isOrdinaryArray(value) { + if (!ArrayIsArray(value)) { + return false; + } + if (value[SymbolIterator] === NativeArrayPrototypeSymbolIterator) { + return true; + } + const iterator = value[SymbolIterator](); + return iterator[SymbolToStringTag] === "Array Iterator"; + } + function isOrdinaryNativeTypedArray(value) { + if (!isNativeTypedArray(value)) { + return false; + } + if (value[SymbolIterator] === NativeTypedArrayPrototypeSymbolIterator) { + return true; + } + const iterator = value[SymbolIterator](); + return iterator[SymbolToStringTag] === "Array Iterator"; + } + function isCanonicalIntegerIndexString(value) { + if (typeof value !== "string") { + return false; + } + const number = NativeNumber(value); + if (value !== number + "") { + return false; + } + if (!NumberIsFinite(number)) { + return false; + } + return number === MathTrunc(number); + } + + const brand = SymbolFor("__Float16Array__"); + function hasFloat16ArrayBrand(target) { + if (!isObjectLike(target)) { + return false; + } + const prototype = ReflectGetPrototypeOf(target); + if (!isObjectLike(prototype)) { + return false; + } + const constructor = prototype.constructor; + if (constructor === undefined) { + return false; + } + if (!isObject(constructor)) { + throw NativeTypeError(THE_CONSTRUCTOR_PROPERTY_VALUE_IS_NOT_AN_OBJECT); + } + return ReflectHas(constructor, brand); + } + + const buffer = new NativeArrayBuffer(4); + const floatView = new NativeFloat32Array(buffer); + const uint32View = new NativeUint32Array(buffer); + const baseTable = new NativeUint32Array(512); + const shiftTable = new NativeUint32Array(512); + for (let i = 0; i < 256; ++i) { + const e = i - 127; + if (e < -27) { + baseTable[i] = 0x0000; + baseTable[i | 0x100] = 0x8000; + shiftTable[i] = 24; + shiftTable[i | 0x100] = 24; + } else if (e < -14) { + baseTable[i] = 0x0400 >> (-e - 14); + baseTable[i | 0x100] = (0x0400 >> (-e - 14)) | 0x8000; + shiftTable[i] = -e - 1; + shiftTable[i | 0x100] = -e - 1; + } else if (e <= 15) { + baseTable[i] = (e + 15) << 10; + baseTable[i | 0x100] = ((e + 15) << 10) | 0x8000; + shiftTable[i] = 13; + shiftTable[i | 0x100] = 13; + } else if (e < 128) { + baseTable[i] = 0x7c00; + baseTable[i | 0x100] = 0xfc00; + shiftTable[i] = 24; + shiftTable[i | 0x100] = 24; + } else { + baseTable[i] = 0x7c00; + baseTable[i | 0x100] = 0xfc00; + shiftTable[i] = 13; + shiftTable[i | 0x100] = 13; + } + } + function roundToFloat16Bits(num) { + floatView[0] = (num); + const f = uint32View[0]; + const e = (f >> 23) & 0x1ff; + return baseTable[e] + ((f & 0x007fffff) >> shiftTable[e]); + } + const mantissaTable = new NativeUint32Array(2048); + const exponentTable = new NativeUint32Array(64); + const offsetTable = new NativeUint32Array(64); + for (let i = 1; i < 1024; ++i) { + let m = i << 13; + let e = 0; + while((m & 0x00800000) === 0) { + m <<= 1; + e -= 0x00800000; + } + m &= ~0x00800000; + e += 0x38800000; + mantissaTable[i] = m | e; + } + for (let i = 1024; i < 2048; ++i) { + mantissaTable[i] = 0x38000000 + ((i - 1024) << 13); + } + for (let i = 1; i < 31; ++i) { + exponentTable[i] = i << 23; + } + exponentTable[31] = 0x47800000; + exponentTable[32] = 0x80000000; + for (let i = 33; i < 63; ++i) { + exponentTable[i] = 0x80000000 + ((i - 32) << 23); + } + exponentTable[63] = 0xc7800000; + for (let i = 1; i < 64; ++i) { + if (i !== 32) { + offsetTable[i] = 1024; + } + } + function convertToNumber(float16bits) { + const m = float16bits >> 10; + uint32View[0] = mantissaTable[offsetTable[m] + (float16bits & 0x3ff)] + exponentTable[m]; + return floatView[0]; + } + + const MAX_SAFE_INTEGER = NativeNumber.MAX_SAFE_INTEGER; + function ToIntegerOrInfinity(target) { + if (typeof target === "bigint") { + throw NativeTypeError(CANNOT_CONVERT_A_BIGINT_VALUE_TO_A_NUMBER); + } + const number = NativeNumber(target); + if (NumberIsNaN(number) || number === 0) { + return 0; + } + return MathTrunc(number); + } + function ToLength(target) { + const length = ToIntegerOrInfinity(target); + if (length < 0) { + return 0; + } + return length < MAX_SAFE_INTEGER + ? length + : MAX_SAFE_INTEGER; + } + function SpeciesConstructor(target, defaultConstructor) { + if (!isObject(target)) { + throw NativeTypeError(THIS_IS_NOT_AN_OBJECT); + } + const constructor = target.constructor; + if (constructor === undefined) { + return defaultConstructor; + } + if (!isObject(constructor)) { + throw NativeTypeError(THE_CONSTRUCTOR_PROPERTY_VALUE_IS_NOT_AN_OBJECT); + } + const species = constructor[SymbolSpecies]; + if (species == null) { + return defaultConstructor; + } + return species; + } + function IsDetachedBuffer(buffer) { + if (isSharedArrayBuffer(buffer)) { + return false; + } + try { + ArrayBufferPrototypeSlice(buffer, 0, 0); + return false; + } catch (e) {} + return true; + } + function defaultCompare(x, y) { + const isXNaN = NumberIsNaN(x); + const isYNaN = NumberIsNaN(y); + if (isXNaN && isYNaN) { + return 0; + } + if (isXNaN) { + return 1; + } + if (isYNaN) { + return -1; + } + if (x < y) { + return -1; + } + if (x > y) { + return 1; + } + if (x === 0 && y === 0) { + const isXPlusZero = ObjectIs(x, 0); + const isYPlusZero = ObjectIs(y, 0); + if (!isXPlusZero && isYPlusZero) { + return -1; + } + if (isXPlusZero && !isYPlusZero) { + return 1; + } + } + return 0; + } + + const BYTES_PER_ELEMENT = 2; + const float16bitsArrays = new NativeWeakMap(); + function isFloat16Array(target) { + return WeakMapPrototypeHas(float16bitsArrays, target) || + (!ArrayBufferIsView(target) && hasFloat16ArrayBrand(target)); + } + function assertFloat16Array(target) { + if (!isFloat16Array(target)) { + throw NativeTypeError(THIS_IS_NOT_A_FLOAT16ARRAY_OBJECT); + } + } + function assertSpeciesTypedArray(target, count) { + const isTargetFloat16Array = isFloat16Array(target); + const isTargetTypedArray = isNativeTypedArray(target); + if (!isTargetFloat16Array && !isTargetTypedArray) { + throw NativeTypeError(SPECIES_CONSTRUCTOR_DIDNT_RETURN_TYPEDARRAY_OBJECT); + } + if (typeof count === "number") { + let length; + if (isTargetFloat16Array) { + const float16bitsArray = getFloat16BitsArray(target); + length = TypedArrayPrototypeGetLength(float16bitsArray); + } else { + length = TypedArrayPrototypeGetLength(target); + } + if (length < count) { + throw NativeTypeError( + DERIVED_CONSTRUCTOR_CREATED_TYPEDARRAY_OBJECT_WHICH_WAS_TOO_SMALL_LENGTH + ); + } + } + if (isNativeBigIntTypedArray(target)) { + throw NativeTypeError(CANNOT_MIX_BIGINT_AND_OTHER_TYPES); + } + } + function getFloat16BitsArray(float16) { + const float16bitsArray = WeakMapPrototypeGet(float16bitsArrays, float16); + if (float16bitsArray !== undefined) { + const buffer = TypedArrayPrototypeGetBuffer(float16bitsArray); + if (IsDetachedBuffer(buffer)) { + throw NativeTypeError(ATTEMPTING_TO_ACCESS_DETACHED_ARRAYBUFFER); + } + return float16bitsArray; + } + const buffer = (float16).buffer; + if (IsDetachedBuffer(buffer)) { + throw NativeTypeError(ATTEMPTING_TO_ACCESS_DETACHED_ARRAYBUFFER); + } + const cloned = ReflectConstruct(Float16Array, [ + buffer, + (float16).byteOffset, + (float16).length, + ], float16.constructor); + return WeakMapPrototypeGet(float16bitsArrays, cloned); + } + function copyToArray(float16bitsArray) { + const length = TypedArrayPrototypeGetLength(float16bitsArray); + const array = []; + for (let i = 0; i < length; ++i) { + array[i] = convertToNumber(float16bitsArray[i]); + } + return array; + } + const TypedArrayPrototypeGetters = new NativeWeakSet(); + for (const key of ReflectOwnKeys(TypedArrayPrototype)) { + if (key === SymbolToStringTag) { + continue; + } + const descriptor = ReflectGetOwnPropertyDescriptor(TypedArrayPrototype, key); + if (ObjectHasOwn(descriptor, "get") && typeof descriptor.get === "function") { + WeakSetPrototypeAdd(TypedArrayPrototypeGetters, descriptor.get); + } + } + const handler = ObjectFreeze( ({ + get(target, key, receiver) { + if (isCanonicalIntegerIndexString(key) && ObjectHasOwn(target, key)) { + return convertToNumber(ReflectGet(target, key)); + } + if (WeakSetPrototypeHas(TypedArrayPrototypeGetters, ObjectPrototype__lookupGetter__(target, key))) { + return ReflectGet(target, key); + } + return ReflectGet(target, key, receiver); + }, + set(target, key, value, receiver) { + if (isCanonicalIntegerIndexString(key) && ObjectHasOwn(target, key)) { + return ReflectSet(target, key, roundToFloat16Bits(value)); + } + return ReflectSet(target, key, value, receiver); + }, + getOwnPropertyDescriptor(target, key) { + if (isCanonicalIntegerIndexString(key) && ObjectHasOwn(target, key)) { + const descriptor = ReflectGetOwnPropertyDescriptor(target, key); + descriptor.value = convertToNumber(descriptor.value); + return descriptor; + } + return ReflectGetOwnPropertyDescriptor(target, key); + }, + defineProperty(target, key, descriptor) { + if ( + isCanonicalIntegerIndexString(key) && + ObjectHasOwn(target, key) && + ObjectHasOwn(descriptor, "value") + ) { + descriptor.value = roundToFloat16Bits(descriptor.value); + return ReflectDefineProperty(target, key, descriptor); + } + return ReflectDefineProperty(target, key, descriptor); + }, + })); + class Float16Array { + constructor(input, _byteOffset, _length) { + let float16bitsArray; + if (isFloat16Array(input)) { + float16bitsArray = ReflectConstruct(NativeUint16Array, [getFloat16BitsArray(input)], new.target); + } else if (isObject(input) && !isArrayBuffer(input)) { + let list; + let length; + if (isNativeTypedArray(input)) { + list = input; + length = TypedArrayPrototypeGetLength(input); + const buffer = TypedArrayPrototypeGetBuffer(input); + const BufferConstructor = !isSharedArrayBuffer(buffer) + ? (SpeciesConstructor( + buffer, + NativeArrayBuffer + )) + : NativeArrayBuffer; + if (IsDetachedBuffer(buffer)) { + throw NativeTypeError(ATTEMPTING_TO_ACCESS_DETACHED_ARRAYBUFFER); + } + if (isNativeBigIntTypedArray(input)) { + throw NativeTypeError(CANNOT_MIX_BIGINT_AND_OTHER_TYPES); + } + const data = new BufferConstructor( + length * BYTES_PER_ELEMENT + ); + float16bitsArray = ReflectConstruct(NativeUint16Array, [data], new.target); + } else { + const iterator = input[SymbolIterator]; + if (iterator != null && typeof iterator !== "function") { + throw NativeTypeError(ITERATOR_PROPERTY_IS_NOT_CALLABLE); + } + if (iterator != null) { + if (isOrdinaryArray(input)) { + list = input; + length = input.length; + } else { + list = [... (input)]; + length = list.length; + } + } else { + list = (input); + length = ToLength(list.length); + } + float16bitsArray = ReflectConstruct(NativeUint16Array, [length], new.target); + } + for (let i = 0; i < length; ++i) { + float16bitsArray[i] = roundToFloat16Bits(list[i]); + } + } else { + float16bitsArray = ReflectConstruct(NativeUint16Array, arguments, new.target); + } + const proxy = (new NativeProxy(float16bitsArray, handler)); + WeakMapPrototypeSet(float16bitsArrays, proxy, float16bitsArray); + return proxy; + } + static from(src, ...opts) { + const Constructor = this; + if (!ReflectHas(Constructor, brand)) { + throw NativeTypeError( + THIS_CONSTRUCTOR_IS_NOT_A_SUBCLASS_OF_FLOAT16ARRAY + ); + } + if (Constructor === Float16Array) { + if (isFloat16Array(src) && opts.length === 0) { + const float16bitsArray = getFloat16BitsArray(src); + const uint16 = new NativeUint16Array( + TypedArrayPrototypeGetBuffer(float16bitsArray), + TypedArrayPrototypeGetByteOffset(float16bitsArray), + TypedArrayPrototypeGetLength(float16bitsArray) + ); + return new Float16Array( + TypedArrayPrototypeGetBuffer(TypedArrayPrototypeSlice(uint16)) + ); + } + if (opts.length === 0) { + return new Float16Array( + TypedArrayPrototypeGetBuffer( + Uint16ArrayFrom(src, roundToFloat16Bits) + ) + ); + } + const mapFunc = opts[0]; + const thisArg = opts[1]; + return new Float16Array( + TypedArrayPrototypeGetBuffer( + Uint16ArrayFrom(src, function (val, ...args) { + return roundToFloat16Bits( + ReflectApply(mapFunc, this, [val, ...safeIfNeeded(args)]) + ); + }, thisArg) + ) + ); + } + let list; + let length; + const iterator = src[SymbolIterator]; + if (iterator != null && typeof iterator !== "function") { + throw NativeTypeError(ITERATOR_PROPERTY_IS_NOT_CALLABLE); + } + if (iterator != null) { + if (isOrdinaryArray(src)) { + list = src; + length = src.length; + } else if (isOrdinaryNativeTypedArray(src)) { + list = src; + length = TypedArrayPrototypeGetLength(src); + } else { + list = [...src]; + length = list.length; + } + } else { + if (src == null) { + throw NativeTypeError( + CANNOT_CONVERT_UNDEFINED_OR_NULL_TO_OBJECT + ); + } + list = NativeObject(src); + length = ToLength(list.length); + } + const array = new Constructor(length); + if (opts.length === 0) { + for (let i = 0; i < length; ++i) { + array[i] = (list[i]); + } + } else { + const mapFunc = opts[0]; + const thisArg = opts[1]; + for (let i = 0; i < length; ++i) { + array[i] = ReflectApply(mapFunc, thisArg, [list[i], i]); + } + } + return array; + } + static of(...items) { + const Constructor = this; + if (!ReflectHas(Constructor, brand)) { + throw NativeTypeError( + THIS_CONSTRUCTOR_IS_NOT_A_SUBCLASS_OF_FLOAT16ARRAY + ); + } + const length = items.length; + if (Constructor === Float16Array) { + const proxy = new Float16Array(length); + const float16bitsArray = getFloat16BitsArray(proxy); + for (let i = 0; i < length; ++i) { + float16bitsArray[i] = roundToFloat16Bits(items[i]); + } + return proxy; + } + const array = new Constructor(length); + for (let i = 0; i < length; ++i) { + array[i] = items[i]; + } + return array; + } + keys() { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + return TypedArrayPrototypeKeys(float16bitsArray); + } + values() { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + return wrap((function* () { + for (const val of TypedArrayPrototypeValues(float16bitsArray)) { + yield convertToNumber(val); + } + })()); + } + entries() { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + return wrap((function* () { + for (const [i, val] of TypedArrayPrototypeEntries(float16bitsArray)) { + yield ([i, convertToNumber(val)]); + } + })()); + } + at(index) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + const relativeIndex = ToIntegerOrInfinity(index); + const k = relativeIndex >= 0 ? relativeIndex : length + relativeIndex; + if (k < 0 || k >= length) { + return; + } + return convertToNumber(float16bitsArray[k]); + } + map(callback, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + const thisArg = opts[0]; + const Constructor = SpeciesConstructor(float16bitsArray, Float16Array); + if (Constructor === Float16Array) { + const proxy = new Float16Array(length); + const array = getFloat16BitsArray(proxy); + for (let i = 0; i < length; ++i) { + const val = convertToNumber(float16bitsArray[i]); + array[i] = roundToFloat16Bits( + ReflectApply(callback, thisArg, [val, i, this]) + ); + } + return proxy; + } + const array = new Constructor(length); + assertSpeciesTypedArray(array, length); + for (let i = 0; i < length; ++i) { + const val = convertToNumber(float16bitsArray[i]); + array[i] = ReflectApply(callback, thisArg, [val, i, this]); + } + return (array); + } + filter(callback, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + const thisArg = opts[0]; + const kept = []; + for (let i = 0; i < length; ++i) { + const val = convertToNumber(float16bitsArray[i]); + if (ReflectApply(callback, thisArg, [val, i, this])) { + ArrayPrototypePush(kept, val); + } + } + const Constructor = SpeciesConstructor(float16bitsArray, Float16Array); + const array = new Constructor(kept); + assertSpeciesTypedArray(array); + return (array); + } + reduce(callback, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + if (length === 0 && opts.length === 0) { + throw NativeTypeError(REDUCE_OF_EMPTY_ARRAY_WITH_NO_INITIAL_VALUE); + } + let accumulator, start; + if (opts.length === 0) { + accumulator = convertToNumber(float16bitsArray[0]); + start = 1; + } else { + accumulator = opts[0]; + start = 0; + } + for (let i = start; i < length; ++i) { + accumulator = callback( + accumulator, + convertToNumber(float16bitsArray[i]), + i, + this + ); + } + return accumulator; + } + reduceRight(callback, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + if (length === 0 && opts.length === 0) { + throw NativeTypeError(REDUCE_OF_EMPTY_ARRAY_WITH_NO_INITIAL_VALUE); + } + let accumulator, start; + if (opts.length === 0) { + accumulator = convertToNumber(float16bitsArray[length - 1]); + start = length - 2; + } else { + accumulator = opts[0]; + start = length - 1; + } + for (let i = start; i >= 0; --i) { + accumulator = callback( + accumulator, + convertToNumber(float16bitsArray[i]), + i, + this + ); + } + return accumulator; + } + forEach(callback, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + const thisArg = opts[0]; + for (let i = 0; i < length; ++i) { + ReflectApply(callback, thisArg, [ + convertToNumber(float16bitsArray[i]), + i, + this, + ]); + } + } + find(callback, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + const thisArg = opts[0]; + for (let i = 0; i < length; ++i) { + const value = convertToNumber(float16bitsArray[i]); + if (ReflectApply(callback, thisArg, [value, i, this])) { + return value; + } + } + } + findIndex(callback, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + const thisArg = opts[0]; + for (let i = 0; i < length; ++i) { + const value = convertToNumber(float16bitsArray[i]); + if (ReflectApply(callback, thisArg, [value, i, this])) { + return i; + } + } + return -1; + } + findLast(callback, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + const thisArg = opts[0]; + for (let i = length - 1; i >= 0; --i) { + const value = convertToNumber(float16bitsArray[i]); + if (ReflectApply(callback, thisArg, [value, i, this])) { + return value; + } + } + } + findLastIndex(callback, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + const thisArg = opts[0]; + for (let i = length - 1; i >= 0; --i) { + const value = convertToNumber(float16bitsArray[i]); + if (ReflectApply(callback, thisArg, [value, i, this])) { + return i; + } + } + return -1; + } + every(callback, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + const thisArg = opts[0]; + for (let i = 0; i < length; ++i) { + if ( + !ReflectApply(callback, thisArg, [ + convertToNumber(float16bitsArray[i]), + i, + this, + ]) + ) { + return false; + } + } + return true; + } + some(callback, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + const thisArg = opts[0]; + for (let i = 0; i < length; ++i) { + if ( + ReflectApply(callback, thisArg, [ + convertToNumber(float16bitsArray[i]), + i, + this, + ]) + ) { + return true; + } + } + return false; + } + set(input, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const targetOffset = ToIntegerOrInfinity(opts[0]); + if (targetOffset < 0) { + throw NativeRangeError(OFFSET_IS_OUT_OF_BOUNDS); + } + if (input == null) { + throw NativeTypeError( + CANNOT_CONVERT_UNDEFINED_OR_NULL_TO_OBJECT + ); + } + if (isNativeBigIntTypedArray(input)) { + throw NativeTypeError( + CANNOT_MIX_BIGINT_AND_OTHER_TYPES + ); + } + if (isFloat16Array(input)) { + return TypedArrayPrototypeSet( + getFloat16BitsArray(this), + getFloat16BitsArray(input), + targetOffset + ); + } + if (isNativeTypedArray(input)) { + const buffer = TypedArrayPrototypeGetBuffer(input); + if (IsDetachedBuffer(buffer)) { + throw NativeTypeError(ATTEMPTING_TO_ACCESS_DETACHED_ARRAYBUFFER); + } + } + const targetLength = TypedArrayPrototypeGetLength(float16bitsArray); + const src = NativeObject(input); + const srcLength = ToLength(src.length); + if (targetOffset === Infinity || srcLength + targetOffset > targetLength) { + throw NativeRangeError(OFFSET_IS_OUT_OF_BOUNDS); + } + for (let i = 0; i < srcLength; ++i) { + float16bitsArray[i + targetOffset] = roundToFloat16Bits(src[i]); + } + } + reverse() { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + TypedArrayPrototypeReverse(float16bitsArray); + return this; + } + fill(value, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + TypedArrayPrototypeFill( + float16bitsArray, + roundToFloat16Bits(value), + ...safeIfNeeded(opts) + ); + return this; + } + copyWithin(target, start, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + TypedArrayPrototypeCopyWithin(float16bitsArray, target, start, ...safeIfNeeded(opts)); + return this; + } + sort(compareFn) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const sortCompare = compareFn !== undefined ? compareFn : defaultCompare; + TypedArrayPrototypeSort(float16bitsArray, (x, y) => { + return sortCompare(convertToNumber(x), convertToNumber(y)); + }); + return this; + } + slice(start, end) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const Constructor = SpeciesConstructor(float16bitsArray, Float16Array); + if (Constructor === Float16Array) { + const uint16 = new NativeUint16Array( + TypedArrayPrototypeGetBuffer(float16bitsArray), + TypedArrayPrototypeGetByteOffset(float16bitsArray), + TypedArrayPrototypeGetLength(float16bitsArray) + ); + return new Float16Array( + TypedArrayPrototypeGetBuffer( + TypedArrayPrototypeSlice(uint16, start, end) + ) + ); + } + const length = TypedArrayPrototypeGetLength(float16bitsArray); + const relativeStart = ToIntegerOrInfinity(start); + const relativeEnd = end === undefined ? length : ToIntegerOrInfinity(end); + let k; + if (relativeStart === -Infinity) { + k = 0; + } else if (relativeStart < 0) { + k = length + relativeStart > 0 ? length + relativeStart : 0; + } else { + k = length < relativeStart ? length : relativeStart; + } + let final; + if (relativeEnd === -Infinity) { + final = 0; + } else if (relativeEnd < 0) { + final = length + relativeEnd > 0 ? length + relativeEnd : 0; + } else { + final = length < relativeEnd ? length : relativeEnd; + } + const count = final - k > 0 ? final - k : 0; + const array = new Constructor(count); + assertSpeciesTypedArray(array, count); + if (count === 0) { + return array; + } + const buffer = TypedArrayPrototypeGetBuffer(float16bitsArray); + if (IsDetachedBuffer(buffer)) { + throw NativeTypeError(ATTEMPTING_TO_ACCESS_DETACHED_ARRAYBUFFER); + } + let n = 0; + while (k < final) { + array[n] = convertToNumber(float16bitsArray[k]); + ++k; + ++n; + } + return (array); + } + subarray(begin, end) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const Constructor = SpeciesConstructor(float16bitsArray, Float16Array); + const uint16 = new NativeUint16Array( + TypedArrayPrototypeGetBuffer(float16bitsArray), + TypedArrayPrototypeGetByteOffset(float16bitsArray), + TypedArrayPrototypeGetLength(float16bitsArray) + ); + const uint16Subarray = TypedArrayPrototypeSubarray(uint16, begin, end); + const array = new Constructor( + TypedArrayPrototypeGetBuffer(uint16Subarray), + TypedArrayPrototypeGetByteOffset(uint16Subarray), + TypedArrayPrototypeGetLength(uint16Subarray) + ); + assertSpeciesTypedArray(array); + return (array); + } + indexOf(element, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + let from = ToIntegerOrInfinity(opts[0]); + if (from === Infinity) { + return -1; + } + if (from < 0) { + from += length; + if (from < 0) { + from = 0; + } + } + for (let i = from; i < length; ++i) { + if ( + ObjectHasOwn(float16bitsArray, i) && + convertToNumber(float16bitsArray[i]) === element + ) { + return i; + } + } + return -1; + } + lastIndexOf(element, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + let from = opts.length >= 1 ? ToIntegerOrInfinity(opts[0]) : length - 1; + if (from === -Infinity) { + return -1; + } + if (from >= 0) { + from = from < length - 1 ? from : length - 1; + } else { + from += length; + } + for (let i = from; i >= 0; --i) { + if ( + ObjectHasOwn(float16bitsArray, i) && + convertToNumber(float16bitsArray[i]) === element + ) { + return i; + } + } + return -1; + } + includes(element, ...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const length = TypedArrayPrototypeGetLength(float16bitsArray); + let from = ToIntegerOrInfinity(opts[0]); + if (from === Infinity) { + return false; + } + if (from < 0) { + from += length; + if (from < 0) { + from = 0; + } + } + const isNaN = NumberIsNaN(element); + for (let i = from; i < length; ++i) { + const value = convertToNumber(float16bitsArray[i]); + if (isNaN && NumberIsNaN(value)) { + return true; + } + if (value === element) { + return true; + } + } + return false; + } + join(separator) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const array = copyToArray(float16bitsArray); + return ArrayPrototypeJoin(array, separator); + } + toLocaleString(...opts) { + assertFloat16Array(this); + const float16bitsArray = getFloat16BitsArray(this); + const array = copyToArray(float16bitsArray); + return ArrayPrototypeToLocaleString(array, ...safeIfNeeded(opts)); + } + get [SymbolToStringTag]() { + if (isFloat16Array(this)) { + return ("Float16Array"); + } + } + } + ObjectDefineProperty(Float16Array, "BYTES_PER_ELEMENT", { + value: BYTES_PER_ELEMENT, + }); + ObjectDefineProperty(Float16Array, brand, {}); + ReflectSetPrototypeOf(Float16Array, TypedArray); + const Float16ArrayPrototype = Float16Array.prototype; + ObjectDefineProperty(Float16ArrayPrototype, "BYTES_PER_ELEMENT", { + value: BYTES_PER_ELEMENT, + }); + ObjectDefineProperty(Float16ArrayPrototype, SymbolIterator, { + value: Float16ArrayPrototype.values, + writable: true, + configurable: true, + }); + ReflectSetPrototypeOf(Float16ArrayPrototype, TypedArrayPrototype); + + function isTypedArray(target) { + return isNativeTypedArray(target) || isFloat16Array(target); + } + + function getFloat16(dataView, byteOffset, ...opts) { + return convertToNumber( + DataViewPrototypeGetUint16(dataView, byteOffset, ...safeIfNeeded(opts)) + ); + } + function setFloat16(dataView, byteOffset, value, ...opts) { + return DataViewPrototypeSetUint16( + dataView, + byteOffset, + roundToFloat16Bits(value), + ...safeIfNeeded(opts) + ); + } + + function hfround(num) { + if (typeof num === "bigint") { + throw NativeTypeError(CANNOT_CONVERT_A_BIGINT_VALUE_TO_A_NUMBER); + } + num = NativeNumber(num); + if (!NumberIsFinite(num) || num === 0) { + return num; + } + const x16 = roundToFloat16Bits(num); + return convertToNumber(x16); + } + + exports.Float16Array = Float16Array; + exports.getFloat16 = getFloat16; + exports.hfround = hfround; + exports.isFloat16Array = isFloat16Array; + exports.isTypedArray = isTypedArray; + exports.setFloat16 = setFloat16; + + Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); + + return exports; + +})({});