rapydscript-ns 0.8.2 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agignore +1 -1
- package/.github/workflows/ci.yml +38 -38
- package/=template.pyj +5 -5
- package/CHANGELOG.md +39 -0
- package/HACKING.md +103 -103
- package/LICENSE +24 -24
- package/PYTHON_DIFFERENCES_REPORT.md +291 -0
- package/PYTHON_FEATURE_COVERAGE.md +106 -15
- package/README.md +831 -52
- package/TODO.md +4 -286
- package/add-toc-to-readme +2 -2
- package/bin/export +75 -75
- package/bin/rapydscript +70 -70
- package/bin/web-repl-export +102 -102
- package/build +2 -2
- package/language-service/index.js +4623 -0
- package/language-service/language-service.d.ts +40 -0
- package/package.json +9 -7
- package/publish.py +37 -37
- package/release/baselib-plain-pretty.js +2006 -229
- package/release/baselib-plain-ugly.js +70 -3
- package/release/compiler.js +11554 -3870
- package/release/signatures.json +31 -29
- package/session.vim +4 -4
- package/setup.cfg +2 -2
- package/src/ast.pyj +93 -1
- package/src/baselib-builtins.pyj +99 -2
- package/src/baselib-containers.pyj +107 -4
- package/src/baselib-errors.pyj +44 -0
- package/src/baselib-internal.pyj +124 -5
- package/src/baselib-itertools.pyj +97 -97
- package/src/baselib-str.pyj +32 -1
- package/src/compiler.pyj +36 -36
- package/src/errors.pyj +30 -30
- package/src/lib/aes.pyj +646 -646
- package/src/lib/collections.pyj +1 -1
- package/src/lib/copy.pyj +120 -0
- package/src/lib/elementmaker.pyj +83 -83
- package/src/lib/encodings.pyj +126 -126
- package/src/lib/gettext.pyj +569 -569
- package/src/lib/itertools.pyj +580 -580
- package/src/lib/math.pyj +193 -193
- package/src/lib/numpy.pyj +10 -10
- package/src/lib/operator.pyj +11 -11
- package/src/lib/pythonize.pyj +20 -20
- package/src/lib/random.pyj +118 -118
- package/src/lib/re.pyj +470 -470
- package/src/lib/react.pyj +74 -0
- package/src/lib/traceback.pyj +63 -63
- package/src/lib/uuid.pyj +77 -77
- package/src/monaco-language-service/analyzer.js +131 -9
- package/src/monaco-language-service/builtins.js +17 -2
- package/src/monaco-language-service/completions.js +170 -1
- package/src/monaco-language-service/diagnostics.js +25 -3
- package/src/monaco-language-service/dts.js +550 -550
- package/src/monaco-language-service/index.js +17 -0
- package/src/monaco-language-service/scope.js +3 -0
- package/src/output/classes.pyj +128 -11
- package/src/output/codegen.pyj +17 -3
- package/src/output/comments.pyj +45 -45
- package/src/output/exceptions.pyj +201 -105
- package/src/output/functions.pyj +13 -16
- package/src/output/jsx.pyj +164 -0
- package/src/output/literals.pyj +28 -2
- package/src/output/loops.pyj +0 -9
- package/src/output/modules.pyj +2 -5
- package/src/output/operators.pyj +22 -2
- package/src/output/statements.pyj +2 -2
- package/src/output/stream.pyj +1 -13
- package/src/output/treeshake.pyj +182 -182
- package/src/output/utils.pyj +72 -72
- package/src/parse.pyj +434 -114
- package/src/string_interpolation.pyj +72 -72
- package/src/tokenizer.pyj +29 -0
- package/src/unicode_aliases.pyj +576 -576
- package/src/utils.pyj +192 -192
- package/test/_import_one.pyj +37 -37
- package/test/_import_two/__init__.pyj +11 -11
- package/test/_import_two/level2/deep.pyj +4 -4
- package/test/_import_two/other.pyj +6 -6
- package/test/_import_two/sub.pyj +13 -13
- package/test/aes_vectors.pyj +421 -421
- package/test/annotations.pyj +80 -80
- package/test/baselib.pyj +4 -4
- package/test/classes.pyj +56 -17
- package/test/collections.pyj +5 -5
- package/test/decorators.pyj +77 -77
- package/test/docstrings.pyj +39 -39
- package/test/elementmaker_test.pyj +45 -45
- package/test/functions.pyj +151 -151
- package/test/generators.pyj +41 -41
- package/test/generic.pyj +370 -370
- package/test/imports.pyj +72 -72
- package/test/internationalization.pyj +73 -73
- package/test/lint.pyj +164 -164
- package/test/loops.pyj +85 -85
- package/test/numpy.pyj +734 -734
- package/test/omit_function_metadata.pyj +20 -20
- package/test/python_compat.pyj +326 -0
- package/test/python_features.pyj +129 -29
- package/test/regexp.pyj +55 -55
- package/test/repl.pyj +121 -121
- package/test/scoped_flags.pyj +76 -76
- package/test/slice.pyj +105 -0
- package/test/str.pyj +25 -0
- package/test/unit/fixtures/fibonacci_expected.js +1 -1
- package/test/unit/index.js +2296 -71
- package/test/unit/language-service-builtins.js +70 -0
- package/test/unit/language-service-bundle.js +5 -5
- package/test/unit/language-service-completions.js +180 -0
- package/test/unit/language-service-dts.js +543 -543
- package/test/unit/language-service-hover.js +455 -455
- package/test/unit/language-service-index.js +350 -0
- package/test/unit/language-service-scope.js +255 -0
- package/test/unit/language-service.js +625 -4
- package/test/unit/run-language-service.js +1 -0
- package/test/unit/web-repl.js +437 -0
- package/tools/build-language-service.js +2 -2
- package/tools/cli.js +547 -547
- package/tools/compile.js +219 -219
- package/tools/compiler.js +0 -24
- package/tools/completer.js +131 -131
- package/tools/embedded_compiler.js +251 -251
- package/tools/export.js +3 -37
- package/tools/gettext.js +185 -185
- package/tools/ini.js +65 -65
- package/tools/msgfmt.js +187 -187
- package/tools/repl.js +223 -223
- package/tools/test.js +118 -118
- package/tools/utils.js +128 -128
- package/tools/web_repl.js +95 -95
- package/try +41 -41
- package/web-repl/env.js +196 -74
- package/web-repl/index.html +163 -163
- package/web-repl/main.js +252 -254
- package/web-repl/prism.css +139 -139
- package/web-repl/prism.js +113 -113
- package/web-repl/rapydscript.js +227 -139
- package/web-repl/sha1.js +25 -25
- package/hack_demo.pyj +0 -112
- package/web-repl/language-service.js +0 -4187
package/src/lib/math.pyj
CHANGED
|
@@ -1,193 +1,193 @@
|
|
|
1
|
-
###########################################################
|
|
2
|
-
# RapydScript Standard Library
|
|
3
|
-
# Author: Alexander Tsepkov
|
|
4
|
-
# Copyright 2013 Pyjeon Software LLC
|
|
5
|
-
# License: Apache License 2.0
|
|
6
|
-
# This library is covered under Apache license, so that
|
|
7
|
-
# you can distribute it with your RapydScript applications.
|
|
8
|
-
###########################################################
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
# basic implementation of Python's 'math' library
|
|
12
|
-
|
|
13
|
-
# NOTE: this is only meant to aid those porting lots of Python code into RapydScript,
|
|
14
|
-
# if you're writing a new RapydScript application, in most cases you probably want to
|
|
15
|
-
# use JavaScript's Math module directly instead
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
pi = Math.PI
|
|
19
|
-
e = Math.E
|
|
20
|
-
inf = Infinity
|
|
21
|
-
|
|
22
|
-
########################################
|
|
23
|
-
# Number-theoretic and representation functions
|
|
24
|
-
########################################
|
|
25
|
-
def ceil(x):
|
|
26
|
-
return Math.ceil(x)
|
|
27
|
-
def copysign(x, y):
|
|
28
|
-
x = Math.abs(x)
|
|
29
|
-
if y < 0:
|
|
30
|
-
return -x
|
|
31
|
-
else:
|
|
32
|
-
return x
|
|
33
|
-
def fabs(x):
|
|
34
|
-
return Math.abs(x)
|
|
35
|
-
def factorial(x):
|
|
36
|
-
if Math.abs(int(x)) is not x:
|
|
37
|
-
raise ValueError("factorial() only accepts integral values")
|
|
38
|
-
factorial.cache = []
|
|
39
|
-
r = def(n):
|
|
40
|
-
if n is 0 or n is 1:
|
|
41
|
-
return 1
|
|
42
|
-
if not factorial.cache[n]:
|
|
43
|
-
factorial.cache[n] = r(n-1) * n
|
|
44
|
-
return factorial.cache[n]
|
|
45
|
-
return r(x)
|
|
46
|
-
def floor(x):
|
|
47
|
-
return Math.floor(x)
|
|
48
|
-
def fmod(x, y):
|
|
49
|
-
# javascript's % operator isn't consistent with C fmod implementation, this function is
|
|
50
|
-
while y <= x:
|
|
51
|
-
x -= y
|
|
52
|
-
return x
|
|
53
|
-
def fsum(iterable):
|
|
54
|
-
# like Python's fsum, this method is much more resilient to rounding errors than regular sum
|
|
55
|
-
partials = [] # sorted, non-overlapping partial sums
|
|
56
|
-
for x in iterable:
|
|
57
|
-
i = 0
|
|
58
|
-
for y in partials:
|
|
59
|
-
if Math.abs(x) < Math.abs(y):
|
|
60
|
-
x, y = y, x
|
|
61
|
-
hi = x + y
|
|
62
|
-
lo = y - (hi - x)
|
|
63
|
-
if lo:
|
|
64
|
-
partials[i] = lo
|
|
65
|
-
i += 1
|
|
66
|
-
x = hi
|
|
67
|
-
#partials[i:] = [x]
|
|
68
|
-
partials.splice(i, partials.length-i, x)
|
|
69
|
-
return sum(partials)
|
|
70
|
-
def isinf(x):
|
|
71
|
-
return not isFinite(x)
|
|
72
|
-
def isnan(x):
|
|
73
|
-
return isNaN(x)
|
|
74
|
-
def modf(x):
|
|
75
|
-
m = fmod(x, 1)
|
|
76
|
-
return m, x-m
|
|
77
|
-
def trunc(x):
|
|
78
|
-
return x | 0
|
|
79
|
-
|
|
80
|
-
########################################
|
|
81
|
-
# Power and logarithmic functions
|
|
82
|
-
########################################
|
|
83
|
-
def exp(x):
|
|
84
|
-
return Math.exp(x)
|
|
85
|
-
def expm1(x):
|
|
86
|
-
# NOTE: Math.expm1() is currently only implemented in Firefox, this provides alternative implementation
|
|
87
|
-
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/expm1
|
|
88
|
-
#return Math.expm1(x)
|
|
89
|
-
if Math.abs(x) < 1e-5:
|
|
90
|
-
return x + 0.5*x*x
|
|
91
|
-
else:
|
|
92
|
-
return Math.exp(x) - 1
|
|
93
|
-
def log(x, base=e):
|
|
94
|
-
return Math.log(x)/Math.log(base)
|
|
95
|
-
def log1p(x):
|
|
96
|
-
# NOTE: Math.log1p() is currently only implemented in Firefox, this provides alternative implementation
|
|
97
|
-
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log1p
|
|
98
|
-
# this version has been taken from http://phpjs.org/functions/log1p/
|
|
99
|
-
# admittedly it's not as accurate as MDN version, as you can see from math.log1p(1) result
|
|
100
|
-
ret = 0
|
|
101
|
-
n = 50
|
|
102
|
-
if x <= -1:
|
|
103
|
-
return Number.NEGATIVE_INFINITY
|
|
104
|
-
if x < 0 or x > 1:
|
|
105
|
-
return Math.log(1 + x)
|
|
106
|
-
for i in range(1, n):
|
|
107
|
-
if i % 2 is 0:
|
|
108
|
-
ret -= Math.pow(x, i) / i
|
|
109
|
-
else:
|
|
110
|
-
ret += Math.pow(x, i) / i
|
|
111
|
-
return ret
|
|
112
|
-
def log10(x):
|
|
113
|
-
# NOTE: Math.log10() is currently only implemented in Firefox, this provides alternative implementation
|
|
114
|
-
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10
|
|
115
|
-
# I didn't find a more accurate algorithm so I'm using the basic implementation
|
|
116
|
-
return Math.log(x)/Math.LN10
|
|
117
|
-
def pow(x, y):
|
|
118
|
-
if x < 0 and int(y) is not y:
|
|
119
|
-
raise ValueError('math domain error')
|
|
120
|
-
if isnan(y) and x is 1:
|
|
121
|
-
return 1
|
|
122
|
-
return Math.pow(x, y)
|
|
123
|
-
def sqrt(x):
|
|
124
|
-
return Math.sqrt(x)
|
|
125
|
-
|
|
126
|
-
########################################
|
|
127
|
-
# Trigonometric functions
|
|
128
|
-
########################################
|
|
129
|
-
def acos(x): return Math.acos(x)
|
|
130
|
-
def asin(x): return Math.asin(x)
|
|
131
|
-
def atan(x): return Math.atan(x)
|
|
132
|
-
def atan2(y, x): return Math.atan2(y, x)
|
|
133
|
-
def cos(x): return Math.cos(x)
|
|
134
|
-
def sin(x): return Math.sin(x)
|
|
135
|
-
def hypot(x, y): return Math.sqrt(x*x + y*y)
|
|
136
|
-
def tan(x): return Math.tan(x)
|
|
137
|
-
|
|
138
|
-
########################################
|
|
139
|
-
# Angular conversion
|
|
140
|
-
########################################
|
|
141
|
-
def degrees(x): return x*180/pi
|
|
142
|
-
def radians(x): return x*pi/180
|
|
143
|
-
|
|
144
|
-
########################################
|
|
145
|
-
# Hyperbolic functions
|
|
146
|
-
########################################
|
|
147
|
-
def acosh(x):
|
|
148
|
-
# NOTE: will be replaced with official, when it becomes mainstream
|
|
149
|
-
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acosh
|
|
150
|
-
return Math.log(x + Math.sqrt(x*x - 1))
|
|
151
|
-
def asinh(x):
|
|
152
|
-
# NOTE: will be replaced with official, when it becomes mainstream
|
|
153
|
-
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asinh
|
|
154
|
-
return Math.log(x + Math.sqrt(x*x + 1))
|
|
155
|
-
def atanh(x):
|
|
156
|
-
# NOTE: will be replaced with official, when it becomes mainstream
|
|
157
|
-
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atanh
|
|
158
|
-
return 0.5 * Math.log((1 + x) / (1 - x))
|
|
159
|
-
def cosh(x):
|
|
160
|
-
# NOTE: will be replaced with official, when it becomes mainstream
|
|
161
|
-
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cosh
|
|
162
|
-
return (Math.exp(x) + Math.exp(-x)) / 2
|
|
163
|
-
def sinh(x):
|
|
164
|
-
# NOTE: will be replaced with official, when it becomes mainstream
|
|
165
|
-
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sinh
|
|
166
|
-
return (Math.exp(x) - Math.exp(-x)) / 2
|
|
167
|
-
def tanh(x):
|
|
168
|
-
# NOTE: will be replaced with official, when it becomes mainstream
|
|
169
|
-
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tanh
|
|
170
|
-
return (Math.exp(x) - Math.exp(-x)) / (Math.exp(x) + Math.exp(-x))
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
#import stdlib
|
|
175
|
-
#print(math.ceil(4.2))
|
|
176
|
-
#print(math.floor(4.2))
|
|
177
|
-
#print(math.fabs(-6))
|
|
178
|
-
#print(math.copysign(-5, 7))
|
|
179
|
-
#print(math.factorial(4))
|
|
180
|
-
#print(math.fmod(-1e100, 1e100))
|
|
181
|
-
#
|
|
182
|
-
#d = [0.9999999, 1, 2, 3]
|
|
183
|
-
#print(sum(d), math.fsum(d))
|
|
184
|
-
#print(math.isinf(5), math.isinf(Infinity))
|
|
185
|
-
#print(math.modf(5.5))
|
|
186
|
-
#print(math.trunc(2.6), math.trunc(-2.6))
|
|
187
|
-
#print(math.exp(1e-5), math.expm1(1e-5))
|
|
188
|
-
#print(math.log(10), math.log(10, 1000))
|
|
189
|
-
#print(math.log1p(1e-15), math.log1p(1))
|
|
190
|
-
#print(math.log10(1000), math.log(1000, 10))
|
|
191
|
-
#print(math.pow(1, 0), math.pow(1, NaN), math.pow(0, 0), math.pow(NaN, 0), math.pow(4,3), math.pow(100, -2))
|
|
192
|
-
#print(math.hypot(3,4))
|
|
193
|
-
#print(math.acosh(2), math.asinh(1), math.atanh(0.5), math.cosh(1), math.cosh(-1), math.sinh(1), math.tanh(1))
|
|
1
|
+
###########################################################
|
|
2
|
+
# RapydScript Standard Library
|
|
3
|
+
# Author: Alexander Tsepkov
|
|
4
|
+
# Copyright 2013 Pyjeon Software LLC
|
|
5
|
+
# License: Apache License 2.0
|
|
6
|
+
# This library is covered under Apache license, so that
|
|
7
|
+
# you can distribute it with your RapydScript applications.
|
|
8
|
+
###########################################################
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# basic implementation of Python's 'math' library
|
|
12
|
+
|
|
13
|
+
# NOTE: this is only meant to aid those porting lots of Python code into RapydScript,
|
|
14
|
+
# if you're writing a new RapydScript application, in most cases you probably want to
|
|
15
|
+
# use JavaScript's Math module directly instead
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
pi = Math.PI
|
|
19
|
+
e = Math.E
|
|
20
|
+
inf = Infinity
|
|
21
|
+
|
|
22
|
+
########################################
|
|
23
|
+
# Number-theoretic and representation functions
|
|
24
|
+
########################################
|
|
25
|
+
def ceil(x):
|
|
26
|
+
return Math.ceil(x)
|
|
27
|
+
def copysign(x, y):
|
|
28
|
+
x = Math.abs(x)
|
|
29
|
+
if y < 0:
|
|
30
|
+
return -x
|
|
31
|
+
else:
|
|
32
|
+
return x
|
|
33
|
+
def fabs(x):
|
|
34
|
+
return Math.abs(x)
|
|
35
|
+
def factorial(x):
|
|
36
|
+
if Math.abs(int(x)) is not x:
|
|
37
|
+
raise ValueError("factorial() only accepts integral values")
|
|
38
|
+
factorial.cache = []
|
|
39
|
+
r = def(n):
|
|
40
|
+
if n is 0 or n is 1:
|
|
41
|
+
return 1
|
|
42
|
+
if not factorial.cache[n]:
|
|
43
|
+
factorial.cache[n] = r(n-1) * n
|
|
44
|
+
return factorial.cache[n]
|
|
45
|
+
return r(x)
|
|
46
|
+
def floor(x):
|
|
47
|
+
return Math.floor(x)
|
|
48
|
+
def fmod(x, y):
|
|
49
|
+
# javascript's % operator isn't consistent with C fmod implementation, this function is
|
|
50
|
+
while y <= x:
|
|
51
|
+
x -= y
|
|
52
|
+
return x
|
|
53
|
+
def fsum(iterable):
|
|
54
|
+
# like Python's fsum, this method is much more resilient to rounding errors than regular sum
|
|
55
|
+
partials = [] # sorted, non-overlapping partial sums
|
|
56
|
+
for x in iterable:
|
|
57
|
+
i = 0
|
|
58
|
+
for y in partials:
|
|
59
|
+
if Math.abs(x) < Math.abs(y):
|
|
60
|
+
x, y = y, x
|
|
61
|
+
hi = x + y
|
|
62
|
+
lo = y - (hi - x)
|
|
63
|
+
if lo:
|
|
64
|
+
partials[i] = lo
|
|
65
|
+
i += 1
|
|
66
|
+
x = hi
|
|
67
|
+
#partials[i:] = [x]
|
|
68
|
+
partials.splice(i, partials.length-i, x)
|
|
69
|
+
return sum(partials)
|
|
70
|
+
def isinf(x):
|
|
71
|
+
return not isFinite(x)
|
|
72
|
+
def isnan(x):
|
|
73
|
+
return isNaN(x)
|
|
74
|
+
def modf(x):
|
|
75
|
+
m = fmod(x, 1)
|
|
76
|
+
return m, x-m
|
|
77
|
+
def trunc(x):
|
|
78
|
+
return x | 0
|
|
79
|
+
|
|
80
|
+
########################################
|
|
81
|
+
# Power and logarithmic functions
|
|
82
|
+
########################################
|
|
83
|
+
def exp(x):
|
|
84
|
+
return Math.exp(x)
|
|
85
|
+
def expm1(x):
|
|
86
|
+
# NOTE: Math.expm1() is currently only implemented in Firefox, this provides alternative implementation
|
|
87
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/expm1
|
|
88
|
+
#return Math.expm1(x)
|
|
89
|
+
if Math.abs(x) < 1e-5:
|
|
90
|
+
return x + 0.5*x*x
|
|
91
|
+
else:
|
|
92
|
+
return Math.exp(x) - 1
|
|
93
|
+
def log(x, base=e):
|
|
94
|
+
return Math.log(x)/Math.log(base)
|
|
95
|
+
def log1p(x):
|
|
96
|
+
# NOTE: Math.log1p() is currently only implemented in Firefox, this provides alternative implementation
|
|
97
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log1p
|
|
98
|
+
# this version has been taken from http://phpjs.org/functions/log1p/
|
|
99
|
+
# admittedly it's not as accurate as MDN version, as you can see from math.log1p(1) result
|
|
100
|
+
ret = 0
|
|
101
|
+
n = 50
|
|
102
|
+
if x <= -1:
|
|
103
|
+
return Number.NEGATIVE_INFINITY
|
|
104
|
+
if x < 0 or x > 1:
|
|
105
|
+
return Math.log(1 + x)
|
|
106
|
+
for i in range(1, n):
|
|
107
|
+
if i % 2 is 0:
|
|
108
|
+
ret -= Math.pow(x, i) / i
|
|
109
|
+
else:
|
|
110
|
+
ret += Math.pow(x, i) / i
|
|
111
|
+
return ret
|
|
112
|
+
def log10(x):
|
|
113
|
+
# NOTE: Math.log10() is currently only implemented in Firefox, this provides alternative implementation
|
|
114
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10
|
|
115
|
+
# I didn't find a more accurate algorithm so I'm using the basic implementation
|
|
116
|
+
return Math.log(x)/Math.LN10
|
|
117
|
+
def pow(x, y):
|
|
118
|
+
if x < 0 and int(y) is not y:
|
|
119
|
+
raise ValueError('math domain error')
|
|
120
|
+
if isnan(y) and x is 1:
|
|
121
|
+
return 1
|
|
122
|
+
return Math.pow(x, y)
|
|
123
|
+
def sqrt(x):
|
|
124
|
+
return Math.sqrt(x)
|
|
125
|
+
|
|
126
|
+
########################################
|
|
127
|
+
# Trigonometric functions
|
|
128
|
+
########################################
|
|
129
|
+
def acos(x): return Math.acos(x)
|
|
130
|
+
def asin(x): return Math.asin(x)
|
|
131
|
+
def atan(x): return Math.atan(x)
|
|
132
|
+
def atan2(y, x): return Math.atan2(y, x)
|
|
133
|
+
def cos(x): return Math.cos(x)
|
|
134
|
+
def sin(x): return Math.sin(x)
|
|
135
|
+
def hypot(x, y): return Math.sqrt(x*x + y*y)
|
|
136
|
+
def tan(x): return Math.tan(x)
|
|
137
|
+
|
|
138
|
+
########################################
|
|
139
|
+
# Angular conversion
|
|
140
|
+
########################################
|
|
141
|
+
def degrees(x): return x*180/pi
|
|
142
|
+
def radians(x): return x*pi/180
|
|
143
|
+
|
|
144
|
+
########################################
|
|
145
|
+
# Hyperbolic functions
|
|
146
|
+
########################################
|
|
147
|
+
def acosh(x):
|
|
148
|
+
# NOTE: will be replaced with official, when it becomes mainstream
|
|
149
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acosh
|
|
150
|
+
return Math.log(x + Math.sqrt(x*x - 1))
|
|
151
|
+
def asinh(x):
|
|
152
|
+
# NOTE: will be replaced with official, when it becomes mainstream
|
|
153
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asinh
|
|
154
|
+
return Math.log(x + Math.sqrt(x*x + 1))
|
|
155
|
+
def atanh(x):
|
|
156
|
+
# NOTE: will be replaced with official, when it becomes mainstream
|
|
157
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atanh
|
|
158
|
+
return 0.5 * Math.log((1 + x) / (1 - x))
|
|
159
|
+
def cosh(x):
|
|
160
|
+
# NOTE: will be replaced with official, when it becomes mainstream
|
|
161
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cosh
|
|
162
|
+
return (Math.exp(x) + Math.exp(-x)) / 2
|
|
163
|
+
def sinh(x):
|
|
164
|
+
# NOTE: will be replaced with official, when it becomes mainstream
|
|
165
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sinh
|
|
166
|
+
return (Math.exp(x) - Math.exp(-x)) / 2
|
|
167
|
+
def tanh(x):
|
|
168
|
+
# NOTE: will be replaced with official, when it becomes mainstream
|
|
169
|
+
# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tanh
|
|
170
|
+
return (Math.exp(x) - Math.exp(-x)) / (Math.exp(x) + Math.exp(-x))
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
#import stdlib
|
|
175
|
+
#print(math.ceil(4.2))
|
|
176
|
+
#print(math.floor(4.2))
|
|
177
|
+
#print(math.fabs(-6))
|
|
178
|
+
#print(math.copysign(-5, 7))
|
|
179
|
+
#print(math.factorial(4))
|
|
180
|
+
#print(math.fmod(-1e100, 1e100))
|
|
181
|
+
#
|
|
182
|
+
#d = [0.9999999, 1, 2, 3]
|
|
183
|
+
#print(sum(d), math.fsum(d))
|
|
184
|
+
#print(math.isinf(5), math.isinf(Infinity))
|
|
185
|
+
#print(math.modf(5.5))
|
|
186
|
+
#print(math.trunc(2.6), math.trunc(-2.6))
|
|
187
|
+
#print(math.exp(1e-5), math.expm1(1e-5))
|
|
188
|
+
#print(math.log(10), math.log(10, 1000))
|
|
189
|
+
#print(math.log1p(1e-15), math.log1p(1))
|
|
190
|
+
#print(math.log10(1000), math.log(1000, 10))
|
|
191
|
+
#print(math.pow(1, 0), math.pow(1, NaN), math.pow(0, 0), math.pow(NaN, 0), math.pow(4,3), math.pow(100, -2))
|
|
192
|
+
#print(math.hypot(3,4))
|
|
193
|
+
#print(math.acosh(2), math.asinh(1), math.atanh(0.5), math.cosh(1), math.cosh(-1), math.sinh(1), math.tanh(1))
|
package/src/lib/numpy.pyj
CHANGED
|
@@ -1055,7 +1055,7 @@ def sort(a, axis=-1):
|
|
|
1055
1055
|
a = asarray(a)
|
|
1056
1056
|
if a.ndim is 1 or axis is None:
|
|
1057
1057
|
data = a._data.slice()
|
|
1058
|
-
data.
|
|
1058
|
+
data.jssort(def(x, y): return x - y;)
|
|
1059
1059
|
return ndarray(a.shape.slice(), a.dtype, data, True)
|
|
1060
1060
|
# 2D sort along last axis (axis=1 or axis=-1)
|
|
1061
1061
|
if axis < 0:
|
|
@@ -1066,7 +1066,7 @@ def sort(a, axis=-1):
|
|
|
1066
1066
|
if axis is 1:
|
|
1067
1067
|
for i in range(rows):
|
|
1068
1068
|
row = a._data.slice(i * cols, (i + 1) * cols)
|
|
1069
|
-
row.
|
|
1069
|
+
row.jssort(def(x, y): return x - y;)
|
|
1070
1070
|
for v in row:
|
|
1071
1071
|
new_data.push(v)
|
|
1072
1072
|
elif axis is 0:
|
|
@@ -1074,7 +1074,7 @@ def sort(a, axis=-1):
|
|
|
1074
1074
|
col = []
|
|
1075
1075
|
for i in range(rows):
|
|
1076
1076
|
col.push(a._data[i * cols + j])
|
|
1077
|
-
col.
|
|
1077
|
+
col.jssort(def(x, y): return x - y;)
|
|
1078
1078
|
for i in range(rows):
|
|
1079
1079
|
new_data[i * cols + j] = col[i]
|
|
1080
1080
|
if new_data.length is 0:
|
|
@@ -1089,14 +1089,14 @@ def argsort(a, axis=-1):
|
|
|
1089
1089
|
for i in range(a.size):
|
|
1090
1090
|
indices.push(i)
|
|
1091
1091
|
data = a._data.slice()
|
|
1092
|
-
indices.
|
|
1092
|
+
indices.jssort(def(i, j): return data[i] - data[j];)
|
|
1093
1093
|
return ndarray([a.size], 'int32', indices, True)
|
|
1094
1094
|
# Flatten and sort
|
|
1095
1095
|
data = a._data.slice()
|
|
1096
1096
|
indices = []
|
|
1097
1097
|
for i in range(data.length):
|
|
1098
1098
|
indices.push(i)
|
|
1099
|
-
indices.
|
|
1099
|
+
indices.jssort(def(i, j): return data[i] - data[j];)
|
|
1100
1100
|
return ndarray([indices.length], 'int32', indices, True)
|
|
1101
1101
|
|
|
1102
1102
|
def searchsorted(a, v, side='left'):
|
|
@@ -1157,7 +1157,7 @@ def where(condition, x=None, y=None):
|
|
|
1157
1157
|
def median(a, axis=None):
|
|
1158
1158
|
a = asarray(a)
|
|
1159
1159
|
data = a._data.slice()
|
|
1160
|
-
data.
|
|
1160
|
+
data.jssort(def(x, y): return x - y;)
|
|
1161
1161
|
n = data.length
|
|
1162
1162
|
if n % 2 is 1:
|
|
1163
1163
|
return data[Math.floor(n / 2)]
|
|
@@ -1166,7 +1166,7 @@ def median(a, axis=None):
|
|
|
1166
1166
|
def percentile(a, q, axis=None):
|
|
1167
1167
|
a = asarray(a)
|
|
1168
1168
|
data = a._data.slice()
|
|
1169
|
-
data.
|
|
1169
|
+
data.jssort(def(x, y): return x - y;)
|
|
1170
1170
|
n = data.length
|
|
1171
1171
|
idx = q / 100.0 * (n - 1)
|
|
1172
1172
|
lo = Math.floor(idx)
|
|
@@ -1497,7 +1497,7 @@ def union1d(ar1, ar2):
|
|
|
1497
1497
|
if not seen[key]:
|
|
1498
1498
|
seen[key] = True
|
|
1499
1499
|
unique.push(v)
|
|
1500
|
-
unique.
|
|
1500
|
+
unique.jssort(def(a, b): return a - b;)
|
|
1501
1501
|
return ndarray([unique.length], 'float64', unique, True)
|
|
1502
1502
|
|
|
1503
1503
|
def intersect1d(ar1, ar2):
|
|
@@ -1513,7 +1513,7 @@ def intersect1d(ar1, ar2):
|
|
|
1513
1513
|
if s[key] and not seen[key]:
|
|
1514
1514
|
seen[key] = True
|
|
1515
1515
|
result.push(v)
|
|
1516
|
-
result.
|
|
1516
|
+
result.jssort(def(a, b): return a - b;)
|
|
1517
1517
|
return ndarray([result.length], 'float64', result, True)
|
|
1518
1518
|
|
|
1519
1519
|
def setdiff1d(ar1, ar2):
|
|
@@ -1529,7 +1529,7 @@ def setdiff1d(ar1, ar2):
|
|
|
1529
1529
|
if not s[key] and not seen[key]:
|
|
1530
1530
|
seen[key] = True
|
|
1531
1531
|
result.push(v)
|
|
1532
|
-
result.
|
|
1532
|
+
result.jssort(def(a, b): return a - b;)
|
|
1533
1533
|
return ndarray([result.length], 'float64', result, True)
|
|
1534
1534
|
|
|
1535
1535
|
def in1d(ar1, ar2):
|
package/src/lib/operator.pyj
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
add = __add__ = def(x, y): return x + y
|
|
2
|
-
sub = __sub__ = def(x, y): return x - y
|
|
3
|
-
mul = __mul__ = def(x, y): return x * y
|
|
4
|
-
div = __div__ = def(x, y): return x / y
|
|
5
|
-
|
|
6
|
-
lt = __lt__ = def(x, y): return x < y
|
|
7
|
-
le = __le__ = def(x, y): return x <= y
|
|
8
|
-
eq = __eq__ = def(x, y): return x is y
|
|
9
|
-
ne = __ne__ = def(x, y): return x is not y
|
|
10
|
-
ge = __ge__ = def(x, y): return x >= y
|
|
11
|
-
gt = __gt__ = def(x, y): return x > y
|
|
1
|
+
add = __add__ = def(x, y): return x + y
|
|
2
|
+
sub = __sub__ = def(x, y): return x - y
|
|
3
|
+
mul = __mul__ = def(x, y): return x * y
|
|
4
|
+
div = __div__ = def(x, y): return x / y
|
|
5
|
+
|
|
6
|
+
lt = __lt__ = def(x, y): return x < y
|
|
7
|
+
le = __le__ = def(x, y): return x <= y
|
|
8
|
+
eq = __eq__ = def(x, y): return x is y
|
|
9
|
+
ne = __ne__ = def(x, y): return x is not y
|
|
10
|
+
ge = __ge__ = def(x, y): return x >= y
|
|
11
|
+
gt = __gt__ = def(x, y): return x > y
|
package/src/lib/pythonize.pyj
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
# vim:fileencoding=utf-8
|
|
2
|
-
# License: BSD Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
|
3
|
-
# globals: ρσ_str
|
|
4
|
-
|
|
5
|
-
def strings():
|
|
6
|
-
string_funcs = set((
|
|
7
|
-
'capitalize strip lstrip rstrip islower isupper isspace lower upper swapcase title'
|
|
8
|
-
' center count endswith startswith find rfind index rindex format join ljust rjust'
|
|
9
|
-
' partition rpartition replace split rsplit splitlines zfill').split(' '))
|
|
10
|
-
|
|
11
|
-
if not arguments.length:
|
|
12
|
-
exclude = {'split', 'replace'}
|
|
13
|
-
elif arguments[0]:
|
|
14
|
-
exclude = Array.prototype.slice.call(arguments)
|
|
15
|
-
else:
|
|
16
|
-
exclude = None
|
|
17
|
-
if exclude:
|
|
18
|
-
string_funcs = string_funcs.difference(set(exclude))
|
|
19
|
-
for name in string_funcs:
|
|
20
|
-
String.prototype[name] = ρσ_str.prototype[name]
|
|
1
|
+
# vim:fileencoding=utf-8
|
|
2
|
+
# License: BSD Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
|
3
|
+
# globals: ρσ_str
|
|
4
|
+
|
|
5
|
+
def strings():
|
|
6
|
+
string_funcs = set((
|
|
7
|
+
'capitalize strip lstrip rstrip islower isupper isspace lower upper swapcase title'
|
|
8
|
+
' center count endswith startswith find rfind index rindex format join ljust rjust'
|
|
9
|
+
' partition rpartition replace split rsplit splitlines zfill expandtabs').split(' '))
|
|
10
|
+
|
|
11
|
+
if not arguments.length:
|
|
12
|
+
exclude = {'split', 'replace'}
|
|
13
|
+
elif arguments[0]:
|
|
14
|
+
exclude = Array.prototype.slice.call(arguments)
|
|
15
|
+
else:
|
|
16
|
+
exclude = None
|
|
17
|
+
if exclude:
|
|
18
|
+
string_funcs = string_funcs.difference(set(exclude))
|
|
19
|
+
for name in string_funcs:
|
|
20
|
+
String.prototype[name] = ρσ_str.prototype[name]
|