import {implementations} from '@/core/Dispatcher' import type {CommonSignature} from '@/interfaces/type' const conservativeSqrt = (a: number) => isNaN(a) ? NaN : Math.sqrt(a) export default implementations>() .independent({ add: (a, b) => a + b, unaryMinus: a => -a, subtract: (a, b) => a - b, multiply: (a, b) => a * b, absquare: a => a * a, reciprocal: a => 1 / a, divide: (a, b) => a / b, conj: a => a, conservativeSqrt }) .dependent({config: {}, complex: {}}, { sqrt: dep => { if (dep.config().predictable || !dep.complex) return conservativeSqrt return a => { if (isNaN(a)) return NaN if (a >= 0) return Math.sqrt(a) return dep.complex(0, Math.sqrt(-a)) } }}) .ship()