static op(a, b, numNum, axisNum, numAxis, axisAxis) {
        let ca = Axis.classify(a);
        let cb = Axis.classify(b);
        if (ca && cb) {
            return axisAxis(a, b);
        }
        if (!ca && !cb) {
            return numNum(a, b);
        }
        if (ca) {
            return axisNum(a, b);
        }
        return numAxis(a, b);
    }
@param {!number|!Axis} a
@param {!number|!Axis} b
@param {!function(!number, !number): (!number|!Axis)} numNum
@param {!function(!Axis, !number): (!number|!Axis)} axisNum
@param {!function(!number, !Axis): (!number|!Axis)} numAxis
@param {!function(!Axis, !Axis): (!number|!Axis)} axisAxis
@returns {!number|!Axis}