import PocomathInstance from '../core/PocomathInstance.mjs' import * as Complex from './Types/Complex.mjs' import gcdType from '../generic/gcdType.mjs' const gcdComplexRaw = {} Object.assign(gcdComplexRaw, gcdType('Complex')) Object.assign(gcdComplexRaw, gcdType('Complex')) const imps = { gcdComplexRaw, gcd: { // Only return gcds with positive real part 'Complex,Complex': ({ 'gcdComplexRaw(Complex,Complex)': gcdRaw, 'sign(T)': sgn, 'one(T)': uno, 'negate(Complex)': neg }) => (z,m) => { const raw = gcdRaw(z, m) if (sgn(raw.re) === uno(raw.re)) return raw return neg(raw) } } } export const gcd = PocomathInstance.merge(Complex, imps)