diff --git a/complex3/script.js b/complex3/script.js index 2754176..664f8b2 100644 --- a/complex3/script.js +++ b/complex3/script.js @@ -28,11 +28,6 @@ document.body.onload = function (event) { // .concat(BuiltInMathFunctions.rawMathFunctionsC) .concat(BuiltInMathFunctions.rawMathFunctionsR) ); - // MathFunctions['zeta'][1].langs.glslc = "mc_zeta_fast(%1)"; - // for (var i = 0; i < 3; i++) { - // var funname = ['logzeta', 'lnzeta', 'lzeta'][i]; - // MathFunctions[funname][1].langs.glslc = "mc_lnzeta_fast(%1)"; - // } MathParser.IndependentVariables = { 'z_real': "z_real", 'z_imag': "z_imag", diff --git a/scripts/codegen.js b/scripts/codegen.js index 25d33ba..85f05ae 100644 --- a/scripts/codegen.js +++ b/scripts/codegen.js @@ -9,7 +9,7 @@ let CodeGenerator = { @inherit: inherit math function definitions from these languages if not specified @extensions: additional required functions/definitions, don't inherit */ - langsOrder: ['glsl', 'glslc', 'cppf', 'cppd', 'js'], + langsOrder: ['glsl', 'cppf', 'cppd', 'js'], langs: {} }; @@ -289,41 +289,6 @@ CodeGenerator.langs.glsl = { ], }; -// complex-valued GLSL -CodeGenerator.langs.glslc = { - inherit: [], - config: null, - presets: { - complex: { - fun: "vec2 {%funname%}(vec2 z) {\n\ -{%funbody%}\n\ - return {%val%};\n\ -}", - prefix: 'v', - def: " vec2 {%varname%} = {%expr%};", - joiner: "\n" - }, - }, - extensions: [ - { - name: 'mc_gamma', - source: "" - }, - { - name: 'mc_lgamma', - source: "" - }, - { - name: 'mc_zeta', - source: "#define NO_AA" - }, - { - name: 'mc_lzeta', - source: "#define NO_AA" - } - ], -}; - // C++, float CodeGenerator.langs.cppf = { inherit: ['glsl'], diff --git a/scripts/functions.js b/scripts/functions.js index b8ce7a3..42afdda 100644 --- a/scripts/functions.js +++ b/scripts/functions.js @@ -175,14 +175,12 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ D: "0", latex: '%1', glsl: '%1', - glslc: 'vec2(%1,0)', cppf: '%1f', }), new MathFunction(['iTime'], 1, { D: "0", latex: '\\mathrm{iTime}', glsl: '(iTime)', - glslc: 'vec2((iTime),0)', cppf: 'iTime', cppfExt: ['iTime'], cppd: 'iTime', @@ -194,46 +192,39 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["a1+a2", "b1+b2"], latex: '(%1+%2)', glsl: '%1+%2', - glslc: '%1+%2', }), new MathFunction(['SUB'], 2, { D: "g1-g2", C: ["a1-a2", "b1-b2"], latex: '%1-%2', glsl: '%1-%2', - glslc: '%1-%2', }), new MathFunction(['MUL'], 2, { D: "g1*f2+f1*g2", C: ["a1*a2-b1*b2", "a1*b2+a2*b1"], latex: '%1\\cdot %2', glsl: '%1*%2', - glslc: 'vec2(%1.x*%2.x-%1.y*%2.y,%1.x*%2.y+%1.y*%2.x)', }), new MathFunction(['DIV'], 2, { D: "(g1*f2-f1*g2)/(f2*f2)", C: ["(a1*a2+b1*b2)/(a2*a2+b2*b2)", "(a2*b1-a1*b2)/(a2*a2+b2*b2)"], latex: '\\frac{%1}{%2}', glsl: '%1/%2', - glslc: 'vec2(%1.x*%2.x+%1.y*%2.y, %1.y*%2.x-%1.x*%2.y)/dot(%2,%2)', }), new MathFunction(['divconst'], 2, { D: "g1/f2", C: ["(a1*a2+b1*b2)/(a2*a2+b2*b2)", "(a2*b1-a1*b2)/(a2*a2+b2*b2)"], glsl: '%1/%2', - glslc: 'vec2(%1.x*%2.x+%1.y*%2.y, %1.y*%2.x-%1.x*%2.y)/dot(%2,%2)', }), new MathFunction(['inverse', 'inv'], 1, { latex: '\\left(%1\\right)^{-1}', C: ["a1/(a1*a1+b1*b1)", "-b1/(a1*a1+b1*b1)"], - glslc: 'vec2(%1.x,-%1.y)/dot(%1,%1)', }), new MathFunction(['sqrt'], 1, { D: "g1/(2sqrt(f1))", C: ["sqrt(0.5*(hypot(a1,b1)+a1))", "sign(b1)sqrt(0.5*(hypot(a1,b1)-a1))"], latex: '\\sqrt{%1}', glsl: 'sqrt(%1)', - glslc: 'mc_sqrt(%1)', js: 'Math.sqrt(%1)', }, new Interval(0, Infinity), new Interval(0, Infinity), Math.sqrt), new MathFunction(['cbrt'], 1, { @@ -242,7 +233,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ "(a1^2+b1^2)^(1/6)sin(atan2(b1,a1)/3)"], latex: '\\sqrt[3]{%1}', glsl: 'sign(%1)*pow(abs(%1),1./3.)', - glslc: 'mc_cbrt(%1)', js: 'Math.cbrt(%1)', }, Math.cbrt), new MathFunction(['nthroot', 'root'], 2, { @@ -250,7 +240,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: "z2^inv(z1)", latex: '\\sqrt[{%1}]{%2}', glsl: 'pow(%2,1.0/%1)', - glslc: 'mc_root(%1,%2)', cppf: 'pow(%2,1.0f/%1)', js: 'Math.pow(%2,1.0/%1)', }), @@ -260,13 +249,11 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ "(a1^2+b1^2)^(a2/2)exp(-b2atan2(b1,a1))sin(b2ln(a1^2+b1^2)/2+a2atan2(b1,a1))"], latex: '\\left(%1\\right)^{%2}', glsl: 'pow(%1,%2)', - glslc: 'mc_pow(%1, %2)', js: 'Math.pow(%1,%2)', }), new MathFunction(['powconst'], 2, { D: "g1*f2*f1^(f2-1)", glsl: 'pow(%1,%2)', - glslc: 'mc_pow(%1, %2)', js: 'Math.pow(%1,%2)', }), new MathFunction(['exp'], 1, { @@ -274,7 +261,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["exp(a1)*cos(b1)", "exp(a1)*sin(b1)"], latex: '\\exp\\left(%1\\right)', glsl: 'exp(%1)', - glslc: 'mc_exp(%1)', js: 'Math.exp(%1)', }, new Interval(), new Interval(0, Infinity), Math.exp), new MathFunction(['log', 'ln'], 1, { @@ -282,7 +268,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["ln(a1^2+b1^2)/2", "atan2(b1,a1)"], latex: '\\ln\\left(%1\\right)', glsl: 'log(%1)', - glslc: 'mc_ln(%1)', js: 'Math.log(%1)', }, new Interval(0, Infinity), new Interval(), Math.log), new MathFunction(['sin'], 1, { @@ -290,7 +275,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["sin(a1)*cosh(b1)", "cos(a1)*sinh(b1)"], latex: '\\sin\\left(%1\\right)', glsl: 'sin(%1)', - glslc: 'mc_sin(%1)', js: 'Math.sin(%1)', }, new Interval(), new Interval(-1, 1)), new MathFunction(['cos'], 1, { @@ -298,7 +282,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["cos(a1)*cosh(b1)", "-sin(a1)*sinh(b1)"], latex: '\\cos\\left(%1\\right)', glsl: 'cos(%1)', - glslc: 'mc_cos(%1)', js: 'Math.cos(%1)', }, new Interval(), new Interval(-1, 1)), new MathFunction(['tan'], 1, { @@ -306,7 +289,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["sin(2a1)/(cos(2a1)+cosh(2b1))", "sinh(2b1)/(cos(2a1)+cosh(2b1))"], latex: '\\tan\\left(%1\\right)', glsl: 'tan(%1)', - glslc: 'mc_tan(%1)', js: 'Math.tan(%1)', }), new MathFunction(['csc'], 1, { @@ -314,7 +296,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["2sin(a1)cosh(b1)/(cosh(2b1)-cos(2a1))", "-2cos(a1)sinh(b1)/(cosh(2b1)-cos(2a1))"], latex: '\\csc\\left(%1\\right)', glsl: '1.0/sin(%1)', - glslc: 'mc_csc(%1)', cppf: '1.0f/sin(%1)', js: '1.0/Math.sin(%1)', }), @@ -323,7 +304,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["2cos(a1)cosh(b1)/(cosh(2b1)+cos(2a1))", "2sin(a1)sinh(b1)/(cosh(2b1)+cos(2a1))"], latex: '\\sec\\left(%1\\right)', glsl: '1.0/cos(%1)', - glslc: 'mc_sec(%1)', cppf: '1.0f/cos(%1)', js: '1.0/Math.cos(%1)', }), @@ -332,7 +312,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["-sin(2a1)/(cos(2a1)-cosh(2b1))", "sinh(2b1)/(cos(2a1)-cosh(2b1))"], latex: '\\cot\\left(%1\\right)', glsl: 'cos(%1)/sin(%1)', - glslc: 'mc_cot(%1)', js: 'Math.cos(%1)/Math.sin(%1)', }), new MathFunction(['sinh'], 1, { @@ -340,7 +319,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["sinh(a1)*cos(b1)", "cosh(a1)*sin(b1)"], latex: '\\sinh\\left(%1\\right)', glsl: 'sinh(%1)', - glslc: 'mc_sinh(%1)', js: 'Math.sinh(%1)', }, new Interval(), new Interval(), Math.sinh), new MathFunction(['cosh'], 1, { @@ -348,7 +326,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["cosh(a1)*cos(b1)", "sinh(a1)*sin(b1)"], latex: '\\cosh\\left(%1\\right)', glsl: 'cosh(%1)', - glslc: 'mc_cosh(%1)', js: 'Math.cosh(%1)', }, new Interval(), new Interval(1, Infinity)), new MathFunction(['tanh'], 1, { @@ -356,7 +333,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["sinh(2a1)/(cosh(2a1)+cos(2b1))", "sin(2b1)/(cosh(2a1)+cos(2b1))"], latex: '\\tanh\\left(%1\\right)', glsl: 'tanh(%1)', - glslc: 'mc_tanh(%1)', js: 'Math.tanh(%1)', }, new Interval(), new Interval(-1, 1), Math.tanh), new MathFunction(['csch'], 1, { @@ -364,7 +340,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["-2sinh(a1)cos(b1)/(cos(2b1)-cosh(2a1))", "2cosh(a1)sin(b1)/(cos(2b1)-cosh(2a1))"], latex: '\\mathrm{csch}\\left(%1\\right)', glsl: '1.0/sinh(%1)', - glslc: 'mc_csch(%1)', cppf: '1.0f/sinh(%1)', js: '1.0/Math.sinh(%1)', }), @@ -373,7 +348,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["2cosh(a1)cos(b1)/(cos(2b1)+cosh(2a1))", "-2sinh(a1)sin(b1)/(cos(2b1)+cosh(2a1))"], latex: '\\mathrm{sech}\\left(%1\\right)', glsl: '1.0/cosh(%1)', - glslc: 'mc_sech(%1)', cppf: '1.0f/cosh(%1)', js: '1.0/Math.cosh(%1)', }, new Interval(), new Interval(0, 1)), @@ -382,7 +356,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ["sinh(2a1)/(cosh(2a1)-cos(2b1))", "-sin(2b1)/(cosh(2a1)-cos(2b1))"], latex: '\\mathrm{coth}\\left(%1\\right)', glsl: '1.0/tanh(%1)', - glslc: 'mc_coth(%1)', cppf: '1.0f/tanh(%1)', js: '1.0/Math.tanh(%1)', }), @@ -391,7 +364,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: "-i*ln(iz1+sqrt(1-z1*z1))", latex: '\\arcsin\\left(%1\\right)', glsl: 'asin(%1)', - glslc: 'mc_arcsin(%1)', js: 'Math.asin(%1)', }, new Interval(-1, 1), new Interval(-0.5 * PI, 0.5 * PI), Math.asin), new MathFunction(['arccos', 'arcos', 'acos'], 1, { @@ -399,7 +371,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: "-i*ln(z1+i*sqrt(1-z1*z1))", latex: '\\arccos\\left(%1\\right)', glsl: 'acos(%1)', - glslc: 'mc_arccos(%1)', js: 'Math.acos(%1)', }, new Interval(-1, 1), new Interval(0.0, PI), Math.acos), new MathFunction(['arctan', 'artan', 'atan'], 1, { @@ -407,7 +378,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: "-0.5i*ln((i-z1)/(i+z1))", latex: '\\arctan\\left(%1\\right)', glsl: 'atan(%1)', - glslc: 'mc_arctan(%1)', js: 'Math.atan(%1)', }, new Interval(), new Interval(-0.5 * PI, 0.5 * PI), Math.atan), new MathFunction(['arccot', 'arcot', 'acot'], 1, { @@ -415,7 +385,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: "-0.5i*ln((z1+i)/(z1-i))", latex: '\\mathrm{arccot}\\left(%1\\right)', glsl: '1.5707963267948966-atan(%1)', - glslc: 'mc_arccot(%1)', cppf: '1.5707963267948966f-atan(%1)', js: '1.5707963267948966-Math.atan(%1)', }, new Interval(), new Interval(-0.5 * PI, 0.5 * PI), (x) => 0.5 * PI - Math.atan(x)), @@ -424,7 +393,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: "-i*ln(i*sqrt(1-inv(z1*z1))+inv(z1))", latex: '\\mathrm{arcsec}\\left(%1\\right)', glsl: 'acos(1.0/%1)', - glslc: 'mc_arcsec(%1)', js: 'Math.acos(1.0/%1)', }, new Interval(0, 0), new Interval(0, PI)), new MathFunction(['arccsc', 'arcsc', 'acsc'], 1, { @@ -432,7 +400,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: "-i*ln(sqrt(1-inv(z1*z1))+i/z1)", latex: '\\mathrm{arccsc}\\left(%1\\right)', glsl: 'asin(1.0/%1)', - glslc: 'mc_arccsc(%1)', js: 'Math.asin(1.0/%1)', }, new Interval(0, 0), new Interval(-0.5 * PI, 0.5 * PI)), new MathFunction(['arcsinh', 'arsinh', 'asinh'], 1, { @@ -440,7 +407,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: "ln(z1+sqrt(z1*z1+1))", latex: '\\mathrm{arcsinh}\\left(%1\\right)', glsl: 'asinh(%1)', - glslc: 'mc_arcsinh(%1)', js: 'Math.asinh(%1)', }, new Interval(), new Interval(), Math.asinh), new MathFunction(['arccosh', 'arcosh', 'acosh'], 1, { @@ -448,7 +414,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: "ln(z1+sqrt(z1*z1-1))sign(a1)", latex: '\\mathrm{arccosh}\\left(%1\\right)', glsl: 'acosh(%1)', - glslc: 'mc_arccosh(%1)', js: 'Math.acosh(%1)', }, new Interval(1, Infinity), new Interval(0, Infinity), Math.acosh), new MathFunction(['arctanh', 'artanh', 'atanh'], 1, { @@ -456,7 +421,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: "0.5*ln((1+z1)/(1-z1))", latex: '\\mathrm{arctanh}\\left(%1\\right)', glsl: 'atanh(%1)', - glslc: 'mc_arctanh(%1)', js: 'Math.atanh(%1)', }, new Interval(-1, 1), new Interval(), Math.atanh), new MathFunction(['arccoth', 'arcoth', 'acoth'], 1, { @@ -464,7 +428,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: "0.5*ln((z1+1)/(z1-1))", latex: '\\mathrm{arccoth}\\left(%1\\right)', glsl: 'atanh(1.0/%1)', - glslc: 'mc_arccoth(%1)', cppf: 'atanh(1.0f/%1)', js: 'Math.atanh(1.0/%1)', }), @@ -473,7 +436,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: "ln(sqrt(inv(z1*z1)-1)+inv(z1))sign(a1)", latex: '\\mathrm{arcsech}\\left(%1\\right)', glsl: 'acosh(1.0/%1)', - glslc: 'mc_arcsech(%1)', cppf: 'acosh(1.0f/%1)', js: 'Math.acosh(1.0/%1)', }, new Interval(0, 1), new Interval(0, Infinity), (x) => Math.acosh(1 / x)), @@ -482,10 +444,40 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: "ln(sqrt(inv(z1*z1)+1)+inv(z1))", latex: '\\mathrm{arccsch}\\left(%1\\right)', glsl: 'asinh(1.0/%1)', - glslc: 'mc_arccsch(%1)', cppf: 'asinh(1.0f/%1)', js: 'Math.asinh(1.0/%1)', }, new Interval(), new Interval()), + new MathFunction(['sigmoid'], 1, { + D: "sigmoid(f1)*(1-sigmoid(f1))*g1", + C: "1/(1+exp(-z1))", + latex: '\\mathrm{sigmoid}\\left(%1\\right)', + glsl: '1.0/(1.0+exp(-%1))', + cppf: '1.0f/(1.0f+exp(-%1))', + js: '1/(1+Math.exp(-%1))', + }, new Interval(), new Interval(0.0, 1.0), (x) => 1/(1+Math.exp(-x))), + new MathFunction(['logit'], 1, { + D: "g1/f1+g1/(1-f1)", + C: "log(z1/(1-z1))", + latex: '\\mathrm{logit}\\left(%1\\right)', + glsl: 'log(%1/(1.0-%1))', + js: 'Math.log(%1/(1-%1))', + }, new Interval(0.0, 1.0), new Interval(), (x) => Math.log(x/(1-x))), + new MathFunction(['relu', 'ReLU'], 1, { + D: "if(f1,g1,0)", + latex: '\\mathrm{ReLU}\\left(%1\\right)', + glsl: 'max(%1,0.0)', + cppf: 'fmax(%1,0.0f)', + cppd: 'fmax(%1,0.0)', + js: 'Math.max(%1,0)', + }, new Interval(), new Interval(0.0, Infinity), (x) => Math.max(x, 0)), + new MathFunction(['step', 'heaviside', 'Heaviside'], 1, { + D: "0", + latex: '\\operatorname{if}\\left\\{%1>0:1,0\\right\\}', + glsl: '0.5+0.5*sign(%1)', + cppf: '%1>0.0f?1.0f:0.0f', + cppd: '%1>0.0?1.0:0.0', + js: '%1>0?1:0', + }, new Interval(), new Interval(0.0, 1.0), (x) => x > 0 ? 1 : 0), new MathFunction(['magnitude', 'mag', 'length', 'abs', 'norm'], 1, { D: "g1*sign(f1)", C: ["hypot(a1,b1)", "0"], @@ -781,7 +773,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ C: ['lgammaRe(a1,b1)', 'lgammaIm(a1,b1)'], glsl: 'mf_loggamma(%1)', glslExt: ['mf_lgamma_1', 'loggamma'], - glslc: 'mc_lngamma(%1)', glslExt: ['mc_lgamma'], cppf: 'lgamma(%1)', cppd: 'lgamma(%1)', @@ -800,7 +791,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ new MathFunction(['zeta'], 1, { latex: '\\zeta\\left(%1\\right)', C: ['zetaRe(a1,b1)', 'zetaIm(a1,b1)'], - glslc: 'mc_zeta(%1)', glslExt: ["mc_zeta"], js: null, }), @@ -817,7 +807,6 @@ BuiltInMathFunctions.rawMathFunctionsShared = [ new MathFunction(['logzeta', 'lnzeta', 'lzeta'], 1, { latex: '\\ln\\zeta\\left(%1\\right)', C: ['lzetaRe(a1,b1)', 'lzetaIm(a1,b1)'], - glslc: 'mc_lnzeta(%1)', glslExt: ["mc_lzeta"], js: null, }),