| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- var $builtinmodule = function (name) {
- var mod = {};
- mod.pi = new Sk.builtin.float_(Math.PI);
- mod.e = new Sk.builtin.float_(Math.E);
- mod.fabs = new Sk.builtin.func(function (x) {
- Sk.builtin.pyCheckArgs("fabs", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- return new Sk.builtin.float_(Math.abs(Sk.builtin.asnum$(x)));
- });
- mod.asin = new Sk.builtin.func(function (rad) {
- Sk.builtin.pyCheckArgs("asin", arguments, 1, 1);
- Sk.builtin.pyCheckType("rad", "number", Sk.builtin.checkNumber(rad));
- return new Sk.builtin.float_(Math.asin(Sk.builtin.asnum$(rad)));
- });
- mod.acos = new Sk.builtin.func(function (rad) {
- Sk.builtin.pyCheckArgs("acos", arguments, 1, 1);
- Sk.builtin.pyCheckType("rad", "number", Sk.builtin.checkNumber(rad));
- return new Sk.builtin.float_(Math.acos(Sk.builtin.asnum$(rad)));
- });
- mod.atan = new Sk.builtin.func(function (rad) {
- Sk.builtin.pyCheckArgs("atan", arguments, 1, 1);
- Sk.builtin.pyCheckType("rad", "number", Sk.builtin.checkNumber(rad));
- return new Sk.builtin.float_(Math.atan(Sk.builtin.asnum$(rad)));
- });
- mod.atan2 = new Sk.builtin.func(function (y, x) {
- Sk.builtin.pyCheckArgs("atan2", arguments, 2, 2);
- Sk.builtin.pyCheckType("y", "number", Sk.builtin.checkNumber(y));
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- return new Sk.builtin.float_(Math.atan2(Sk.builtin.asnum$(y), Sk.builtin.asnum$(x)));
- });
- mod.sin = new Sk.builtin.func(function (rad) {
- Sk.builtin.pyCheckArgs("sin", arguments, 1, 1);
- Sk.builtin.pyCheckType("rad", "number", Sk.builtin.checkNumber(rad));
- return new Sk.builtin.float_(Math.sin(Sk.builtin.asnum$(rad)));
- });
- mod.cos = new Sk.builtin.func(function (rad) {
- Sk.builtin.pyCheckArgs("cos", arguments, 1, 1);
- Sk.builtin.pyCheckType("rad", "number", Sk.builtin.checkNumber(rad));
- return new Sk.builtin.float_(Math.cos(Sk.builtin.asnum$(rad)));
- });
- mod.tan = new Sk.builtin.func(function (rad) {
- Sk.builtin.pyCheckArgs("tan", arguments, 1, 1);
- Sk.builtin.pyCheckType("rad", "number", Sk.builtin.checkNumber(rad));
- return new Sk.builtin.float_(Math.tan(Sk.builtin.asnum$(rad)));
- });
- mod.asinh = new Sk.builtin.func(function (x) {
- Sk.builtin.pyCheckArgs("asinh", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- x = Sk.builtin.asnum$(x);
- var L = x + Math.sqrt(x * x + 1);
- return new Sk.builtin.float_(Math.log(L));
- });
- mod.acosh = new Sk.builtin.func(function (x) {
- Sk.builtin.pyCheckArgs("acosh", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- x = Sk.builtin.asnum$(x);
- var L = x + Math.sqrt(x * x - 1);
- return new Sk.builtin.float_(Math.log(L));
- });
- mod.atanh = new Sk.builtin.func(function (x) {
- Sk.builtin.pyCheckArgs("atanh", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- x = Sk.builtin.asnum$(x);
- var L = (1 + x) / (1 - x);
- return new Sk.builtin.float_(Math.log(L) / 2);
- });
- mod.sinh = new Sk.builtin.func(function (x) {
- Sk.builtin.pyCheckArgs("sinh", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- x = Sk.builtin.asnum$(x);
- var e = Math.E;
- var p = Math.pow(e, x);
- var n = 1 / p;
- var result = (p - n) / 2;
- return new Sk.builtin.float_(result);
- });
- mod.cosh = new Sk.builtin.func(function (x) {
- Sk.builtin.pyCheckArgs("cosh", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- x = Sk.builtin.asnum$(x);
- var e = Math.E;
- var p = Math.pow(e, x);
- var n = 1 / p;
- var result = (p + n) / 2;
- return new Sk.builtin.float_(result);
- });
- mod.tanh = new Sk.builtin.func(function (x) {
- Sk.builtin.pyCheckArgs("tanh", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- x = Sk.builtin.asnum$(x);
- var e = Math.E;
- var p = Math.pow(e, x);
- var n = 1 / p;
- var result = ((p - n) / 2) / ((p + n) / 2);
- return new Sk.builtin.float_(result);
- });
- mod.ceil = new Sk.builtin.func(function (x) {
- Sk.builtin.pyCheckArgs("ceil", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- return new Sk.builtin.float_(Math.ceil(Sk.builtin.asnum$(x)));
- });
- // returns y with the sign of x
- mod.copysign = new Sk.builtin.func(function (x, y) {
- Sk.builtin.pyCheckArgs("ceil", arguments, 2, 2);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- Sk.builtin.pyCheckType("y", "number", Sk.builtin.checkNumber(y));
- var _x = Sk.ffi.remapToJs(x);
- var _y = Sk.ffi.remapToJs(y);
- var res;
- var isNeg_x = _x < 0;
- var isNeg_y = _x < 0;
- // special case for floats with negative zero
- if(Sk.builtin.checkFloat(x)) {
- if(_x === 0) {
- isNeg_x = 1/_x === -Infinity ? true : false;
- }
- }
- if(Sk.builtin.checkFloat(y)) {
- if(_y === 0) {
- isNeg_y = 1/_y === -Infinity ? true : false;
- }
- }
- // if both signs are equal, just return _y
- if((isNeg_x && isNeg_y) || (!isNeg_x && !isNeg_y)) {
- res = _y;
- } else if((isNeg_x && !isNeg_y) || (!isNeg_x && isNeg_y)) {
- // if different, invert sign
- if(y === 0) {
- // special case for zero
- res = isNeg_x ? -0.0 : 0.0;
- } else {
- res = _y * -1;
- }
- }
- return new Sk.builtin.float_(res);
- });
- mod.floor = new Sk.builtin.func(function (x) {
- Sk.builtin.pyCheckArgs("floor", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- return new Sk.builtin.float_(Math.floor(Sk.builtin.asnum$(x)));
- });
- mod.sqrt = new Sk.builtin.func(function (x) {
- Sk.builtin.pyCheckArgs("sqrt", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- return new Sk.builtin.float_(Math.sqrt(Sk.builtin.asnum$(x)));
- });
- mod.trunc = new Sk.builtin.func(function (x) {
- Sk.builtin.pyCheckArgs("trunc", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- return new Sk.builtin.int_(Sk.builtin.asnum$(x) | 0);
- });
- mod.log = new Sk.builtin.func(function (x, base) {
- Sk.builtin.pyCheckArgs("log", arguments, 1, 2);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- if (base === undefined) {
- return new Sk.builtin.float_(Math.log(Sk.builtin.asnum$(x)));
- } else {
- Sk.builtin.pyCheckType("base", "number", Sk.builtin.checkNumber(base));
- var ret = Math.log(Sk.builtin.asnum$(x)) / Math.log(Sk.builtin.asnum$(base));
- return new Sk.builtin.float_(ret);
- }
- });
- mod.log10 = new Sk.builtin.func(function (x) {
- Sk.builtin.pyCheckArgs("log10", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- var ret = Math.log(Sk.builtin.asnum$(x)) / Math.log(10);
- return new Sk.builtin.float_(ret);
- });
- /* Return True if x is infinite, and False otherwise. */
- mod.isinf = new Sk.builtin.func(function(x) {
- Sk.builtin.pyCheckArgs("isinf", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- var _x = Sk.builtin.asnum$(x);
- if(isFinite(_x) && !isNaN(_x)) {
- return Sk.builtin.bool.false$;
- } else {
- return Sk.builtin.bool.true$
- }
- });
- /* Return True if x is a NaN (not a number), and False otherwise. */
- mod.isnan = new Sk.builtin.func(function(x) {
- Sk.builtin.pyCheckArgs("isnan", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "float", Sk.builtin.checkFloat(x));
- var _x = Sk.builtin.asnum$(x);
- if(isNaN(_x)) {
- return Sk.builtin.bool.true$;
- } else {
- return Sk.builtin.bool.false$;
- }
- });
- mod.exp = new Sk.builtin.func(function (x) {
- Sk.builtin.pyCheckArgs("exp", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- return new Sk.builtin.float_(Math.exp(Sk.builtin.asnum$(x)));
- });
- mod.pow = new Sk.builtin.func(function (x, y) {
- Sk.builtin.pyCheckArgs("pow", arguments, 2, 2);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- Sk.builtin.pyCheckType("y", "number", Sk.builtin.checkNumber(y));
- return new Sk.builtin.float_(Math.pow(Sk.builtin.asnum$(x), Sk.builtin.asnum$(y)));
- });
- mod.radians = new Sk.builtin.func(function (deg) {
- Sk.builtin.pyCheckArgs("radians", arguments, 1, 1);
- Sk.builtin.pyCheckType("deg", "number", Sk.builtin.checkNumber(deg));
- var ret = Math.PI / 180.0 * Sk.builtin.asnum$(deg);
- return new Sk.builtin.float_(ret);
- });
- mod.degrees = new Sk.builtin.func(function (rad) {
- Sk.builtin.pyCheckArgs("degrees", arguments, 1, 1);
- Sk.builtin.pyCheckType("rad", "number", Sk.builtin.checkNumber(rad));
- var ret = 180.0 / Math.PI * Sk.builtin.asnum$(rad);
- return new Sk.builtin.float_(ret);
- });
- mod.hypot = new Sk.builtin.func(function (x, y) {
- Sk.builtin.pyCheckArgs("hypot", arguments, 2, 2);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- Sk.builtin.pyCheckType("y", "number", Sk.builtin.checkNumber(y));
- x = Sk.builtin.asnum$(x);
- y = Sk.builtin.asnum$(y);
- return new Sk.builtin.float_(Math.sqrt((x * x) + (y * y)));
- });
- mod.factorial = new Sk.builtin.func(function (x) {
- Sk.builtin.pyCheckArgs("factorial", arguments, 1, 1);
- Sk.builtin.pyCheckType("x", "number", Sk.builtin.checkNumber(x));
- x = Math.floor(Sk.builtin.asnum$(x));
- var r = 1;
- for (var i = 2; i <= x; i++) {
- r *= i;
- }
- return new Sk.builtin.int_(r);
- });
- return mod;
- }
|