ziko 0.0.11 → 0.0.13
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/README.md +6 -3
- package/dist/ziko.cjs +5640 -4532
- package/dist/ziko.js +5640 -4532
- package/dist/ziko.min.js +2 -2
- package/dist/ziko.mjs +5602 -4532
- package/package.json +39 -12
- package/src/__helpers__/index.js +41 -0
- package/src/app/accessibility/index.js +0 -0
- package/src/app/app.js +46 -0
- package/src/app/component/index.js +38 -0
- package/src/app/globals/index.js +20 -0
- package/src/app/index.js +12 -0
- package/src/app/params/index.js +40 -0
- package/src/app/router/index.js +67 -0
- package/src/app/seo/index.js +43 -0
- package/src/app/themes/dark.js +885 -0
- package/src/app/themes/index.js +11 -0
- package/src/app/themes/light.js +255 -0
- package/src/data/api/fetchdom.js +14 -0
- package/src/data/api/index.js +4 -0
- package/src/data/api/preload.js +11 -0
- package/src/data/converter/adoc.js +130 -0
- package/src/data/converter/array.js +43 -0
- package/src/data/converter/canvas.js +25 -0
- package/src/data/converter/csv.js +33 -0
- package/src/data/converter/idea.txt +10 -0
- package/src/data/converter/index.js +34 -0
- package/src/data/converter/json.js +80 -0
- package/src/data/converter/markdown.js +95 -0
- package/src/data/converter/object.js +70 -0
- package/src/data/converter/svg.js +11 -0
- package/src/data/decorators.js +0 -0
- package/src/data/index.js +74 -0
- package/src/data/parser/markdown.js +0 -0
- package/src/data/parser/xml.js +47 -0
- package/src/data/string/index.js +1 -0
- package/src/data/string/patterns.js +12 -0
- package/src/data/string/string.js +170 -0
- package/src/graphics/canvas/_canvas_offscreen +0 -0
- package/src/graphics/canvas/canvas.js +189 -0
- package/src/graphics/canvas/elements/Basic/arc.js +43 -0
- package/src/graphics/canvas/elements/Basic/image.js +0 -0
- package/src/graphics/canvas/elements/Basic/line.js +26 -0
- package/src/graphics/canvas/elements/Basic/path.js +0 -0
- package/src/graphics/canvas/elements/Basic/points.js +48 -0
- package/src/graphics/canvas/elements/Basic/polygon.js +7 -0
- package/src/graphics/canvas/elements/Basic/polyline.js +0 -0
- package/src/graphics/canvas/elements/Basic/rect.js +46 -0
- package/src/graphics/canvas/elements/Basic/text.js +0 -0
- package/src/graphics/canvas/elements/Chart/histogram.js +0 -0
- package/src/graphics/canvas/elements/Chart/plot.js +0 -0
- package/src/graphics/canvas/elements/Chart/scatter.js +2 -0
- package/src/graphics/canvas/elements/Chart/stem.js +0 -0
- package/src/graphics/canvas/elements/Element.js +115 -0
- package/src/graphics/canvas/elements/Groupe.js +0 -0
- package/src/graphics/canvas/elements/grid.js +0 -0
- package/src/graphics/canvas/elements/index.js +13 -0
- package/src/graphics/canvas/filter/index.js +0 -0
- package/src/graphics/canvas/index.js +15 -0
- package/src/graphics/canvas/paint/index.js +0 -0
- package/src/graphics/canvas/utils/color.js +8 -0
- package/src/graphics/canvas/utils/floodFill.js +58 -0
- package/src/graphics/index.js +69 -0
- package/src/graphics/svg/Elements/Basic/circle.js +26 -0
- package/src/graphics/svg/Elements/Basic/ellipse.js +21 -0
- package/src/graphics/svg/Elements/Basic/foreignObject.js +33 -0
- package/src/graphics/svg/Elements/Basic/groupe.js +29 -0
- package/src/graphics/svg/Elements/Basic/image.js +33 -0
- package/src/graphics/svg/Elements/Basic/line.js +29 -0
- package/src/graphics/svg/Elements/Basic/link.js +30 -0
- package/src/graphics/svg/Elements/Basic/path.js +59 -0
- package/src/graphics/svg/Elements/Basic/polygon.js +32 -0
- package/src/graphics/svg/Elements/Basic/polyline.js +4 -0
- package/src/graphics/svg/Elements/Basic/rect.js +43 -0
- package/src/graphics/svg/Elements/Basic/text.js +26 -0
- package/src/graphics/svg/Elements/Derived/grid.js +9 -0
- package/src/graphics/svg/Elements/ZikoSvgElement.js +46 -0
- package/src/graphics/svg/Elements/index.js +14 -0
- package/src/graphics/svg/index.js +2 -0
- package/src/graphics/svg/svg.js +115 -0
- package/src/index.js +88 -0
- package/src/math/absract.js +1 -0
- package/src/math/calculus/index.js +1 -0
- package/src/math/calculus/special-functions/bessel.js +31 -0
- package/src/math/calculus/special-functions/beta.js +38 -0
- package/src/math/calculus/special-functions/gamma.js +30 -0
- package/src/math/calculus/special-functions/index.js +4 -0
- package/src/math/complex/Fractals/julia.js +0 -0
- package/src/math/complex/index.js +203 -0
- package/src/math/const.js +3 -0
- package/src/math/discret/Combinaison/index.js +34 -0
- package/src/math/discret/Conversion/index.js +86 -0
- package/src/math/discret/Logic/index.js +46 -0
- package/src/math/discret/Permutation/index.js +31 -0
- package/src/math/discret/Set/index.js +2 -0
- package/src/math/discret/Set/power-set.js +15 -0
- package/src/math/discret/Set/sub-set.js +10 -0
- package/src/math/discret/index.js +23 -0
- package/src/math/functions/index.js +182 -0
- package/src/math/index.js +189 -0
- package/src/math/matrix/Decomposition.js +90 -0
- package/src/math/matrix/LinearSystem.js +10 -0
- package/src/math/matrix/Matrix.js +717 -0
- package/src/math/matrix/index.js +3 -0
- package/src/math/numeric/index.js +0 -0
- package/src/math/random/index.js +173 -0
- package/src/math/signal/__np.py.txt +40 -0
- package/src/math/signal/conv.js +175 -0
- package/src/math/signal/fft.js +55 -0
- package/src/math/signal/filter.js +39 -0
- package/src/math/signal/functions.js +146 -0
- package/src/math/signal/index.js +110 -0
- package/src/math/statistics/Functions/index.js +100 -0
- package/src/math/statistics/index.js +16 -0
- package/src/math/utils/arithmetic.js +139 -0
- package/src/math/utils/checkers.js +29 -0
- package/src/math/utils/comparaison.js +1 -0
- package/src/math/utils/conversions.js +19 -0
- package/src/math/utils/discret.js +51 -0
- package/src/math/utils/index.js +102 -0
- package/src/math/utils/mapfun.js +50 -0
- package/src/reactivity/events/Global/Click.js +56 -0
- package/src/reactivity/events/Global/Clipboard.js +84 -0
- package/src/reactivity/events/Global/CustomEvent.js +53 -0
- package/src/reactivity/events/Global/Drag.js +137 -0
- package/src/reactivity/events/Global/Focus.js +56 -0
- package/src/reactivity/events/Global/Key.js +104 -0
- package/src/reactivity/events/Global/Mouse.js +230 -0
- package/src/reactivity/events/Global/Pointer.js +234 -0
- package/src/reactivity/events/Global/Swipe.js +147 -0
- package/src/reactivity/events/Global/Touch.js +0 -0
- package/src/reactivity/events/Global/Wheel.js +44 -0
- package/src/reactivity/events/Partiel/Hash.js +44 -0
- package/src/reactivity/events/Partiel/Input.js +59 -0
- package/src/reactivity/events/Partiel/Media.js +1 -0
- package/src/reactivity/events/ZikoEvent.js +91 -0
- package/src/reactivity/events/index.js +63 -0
- package/src/reactivity/hooks/Contexte/index.js +1 -0
- package/src/reactivity/hooks/Contexte/useSuccesifKeys.js +14 -0
- package/src/reactivity/hooks/Decorators/index.js +6 -0
- package/src/reactivity/hooks/Decorators/time.js +17 -0
- package/src/reactivity/hooks/Decorators/type.js +88 -0
- package/src/reactivity/hooks/Interactions/index.js +4 -0
- package/src/reactivity/hooks/Interactions/useBluetooth.js +48 -0
- package/src/reactivity/hooks/Interactions/useChannel.js +50 -0
- package/src/reactivity/hooks/Interactions/useEventEmmiter.js +64 -0
- package/src/reactivity/hooks/Interactions/useSerial.js +0 -0
- package/src/reactivity/hooks/Interactions/useThread.js +44 -0
- package/src/reactivity/hooks/Interactions/useUsb.js +0 -0
- package/src/reactivity/hooks/Sensors/index.js +2 -0
- package/src/reactivity/hooks/Sensors/useBattery.js +36 -0
- package/src/reactivity/hooks/Sensors/useCamera.js +0 -0
- package/src/reactivity/hooks/Sensors/useGeolocation.js +17 -0
- package/src/reactivity/hooks/Sensors/useMicro.js +0 -0
- package/src/reactivity/hooks/Sensors/useOrientation.js +0 -0
- package/src/reactivity/hooks/Storage/index.js +1 -0
- package/src/reactivity/hooks/Storage/useCookie.js +0 -0
- package/src/reactivity/hooks/Storage/useIndexedDb.js +0 -0
- package/src/reactivity/hooks/Storage/useStorage.js +73 -0
- package/src/reactivity/hooks/UI/index.js +5 -0
- package/src/reactivity/hooks/UI/useCssLink.js +0 -0
- package/src/reactivity/hooks/UI/useCssText.js +21 -0
- package/src/reactivity/hooks/UI/useFavIcon.js +38 -0
- package/src/reactivity/hooks/UI/useLinearGradient.js +0 -0
- package/src/reactivity/hooks/UI/useMediaQuery.js +43 -0
- package/src/reactivity/hooks/UI/useRadialGradient.js +0 -0
- package/src/reactivity/hooks/UI/useStyle.js +79 -0
- package/src/reactivity/hooks/UI/useTheme.js +62 -0
- package/src/reactivity/hooks/UI/useTitle.js +30 -0
- package/src/reactivity/hooks/index.js +85 -0
- package/src/reactivity/hooks/todo.md +26 -0
- package/src/reactivity/idea +2 -0
- package/src/reactivity/index.js +22 -0
- package/src/reactivity/observer/attributes.js +28 -0
- package/src/reactivity/observer/children.js +37 -0
- package/src/reactivity/observer/index.js +44 -0
- package/src/reactivity/observer/intersection.js +44 -0
- package/src/reactivity/observer/mutation.js +113 -0
- package/src/reactivity/observer/resize.js +47 -0
- package/src/reactivity/observer/screen.js +45 -0
- package/src/reactivity/observer/screen.js.txt +84 -0
- package/src/reactivity/observer/screen.txt +13 -0
- package/src/time/animation.js +76 -0
- package/src/time/index.js +54 -0
- package/src/time/loop.js +87 -0
- package/src/time/utils/decorators.js +17 -0
- package/src/time/utils/ease.js +144 -0
- package/src/time/utils/index.js +18 -0
- package/src/time/utils/performance.js +16 -0
- package/src/time/utils/ui.js +26 -0
- package/src/user-interface/elements/derived/Flex.js +103 -0
- package/src/user-interface/elements/derived/Grid.js +33 -0
- package/src/user-interface/elements/derived/elements/Notification.js +0 -0
- package/src/user-interface/elements/derived/elements/Popover.js +0 -0
- package/src/user-interface/elements/derived/elements/Popup.js +0 -0
- package/src/user-interface/elements/derived/elements/Swipper.js +4 -0
- package/src/user-interface/elements/derived/elements/Timeline.js +0 -0
- package/src/user-interface/elements/derived/elements/Toast.js +0 -0
- package/src/user-interface/elements/derived/elements/Treeview.js +0 -0
- package/src/user-interface/elements/derived/elements/accordion/accordion.js +45 -0
- package/src/user-interface/elements/derived/elements/accordion/collapsible.js +82 -0
- package/src/user-interface/elements/derived/elements/accordion/index.js +2 -0
- package/src/user-interface/elements/derived/elements/alert/alert.js +80 -0
- package/src/user-interface/elements/derived/elements/alert/index.js +1 -0
- package/src/user-interface/elements/derived/elements/alert/palette.js +52 -0
- package/src/user-interface/elements/derived/elements/carousel/index.js +50 -0
- package/src/user-interface/elements/derived/elements/code-note/SubElements.js.txt +105 -0
- package/src/user-interface/elements/derived/elements/code-note/code-cell.js +195 -0
- package/src/user-interface/elements/derived/elements/code-note/code-note.js +72 -0
- package/src/user-interface/elements/derived/elements/code-note/index.js +2 -0
- package/src/user-interface/elements/derived/elements/code-note/sub-elements.js +67 -0
- package/src/user-interface/elements/derived/elements/columns.js +1 -0
- package/src/user-interface/elements/derived/elements/fab.js +0 -0
- package/src/user-interface/elements/derived/elements/index.js +9 -0
- package/src/user-interface/elements/derived/elements/menu/index.js +1 -0
- package/src/user-interface/elements/derived/elements/menu/menu3d.js +260 -0
- package/src/user-interface/elements/derived/elements/modal/index.js +92 -0
- package/src/user-interface/elements/derived/elements/pagination/breadcrumbs.js +54 -0
- package/src/user-interface/elements/derived/elements/pagination/index.js +1 -0
- package/src/user-interface/elements/derived/elements/splitter/__ZikoUISplitter__.js +62 -0
- package/src/user-interface/elements/derived/elements/splitter/hsplitter.js +40 -0
- package/src/user-interface/elements/derived/elements/splitter/index.js +2 -0
- package/src/user-interface/elements/derived/elements/splitter/vsplitter.js +40 -0
- package/src/user-interface/elements/derived/elements/tabs/index.js +180 -0
- package/src/user-interface/elements/derived/index.js +3 -0
- package/src/user-interface/elements/primitives/ZikoUIContainerElement.js +127 -0
- package/src/user-interface/elements/primitives/ZikoUIElement.js +478 -0
- package/src/user-interface/elements/primitives/embaded/index.js +1 -0
- package/src/user-interface/elements/primitives/index.js +8 -0
- package/src/user-interface/elements/primitives/io/Form/index.js +42 -0
- package/src/user-interface/elements/primitives/io/Form/index.js.txt +104 -0
- package/src/user-interface/elements/primitives/io/Inputs/__helpers__.js +52 -0
- package/src/user-interface/elements/primitives/io/Inputs/index.js +12 -0
- package/src/user-interface/elements/primitives/io/Inputs/input/index.js +98 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-camera/index.js +26 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-checkbox/index.js +26 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-color/index.js +16 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-date-time/index.js +3 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-date-time/input-date-time.js +14 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-date-time/input-date.js +14 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-date-time/input-time.js +14 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-email-password/index.js +2 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-email-password/input-email.js +15 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-email-password/input-password.js +14 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-file/index.js +1 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-file/input-file.js +0 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-file/input-image.js +43 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-number/index.js +37 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-radio/index.js +26 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-search/index.js +45 -0
- package/src/user-interface/elements/primitives/io/Inputs/input-slider/index.js +34 -0
- package/src/user-interface/elements/primitives/io/Select/index.js +20 -0
- package/src/user-interface/elements/primitives/io/Textarea/index.js +18 -0
- package/src/user-interface/elements/primitives/io/index.js +4 -0
- package/src/user-interface/elements/primitives/list/elements.js +0 -0
- package/src/user-interface/elements/primitives/list/index.js +139 -0
- package/src/user-interface/elements/primitives/media/Audio/index.js +17 -0
- package/src/user-interface/elements/primitives/media/Image/figure.js +19 -0
- package/src/user-interface/elements/primitives/media/Image/image.js +36 -0
- package/src/user-interface/elements/primitives/media/Image/index.js +2 -0
- package/src/user-interface/elements/primitives/media/Video/index.js +27 -0
- package/src/user-interface/elements/primitives/media/__ZikoUIDynamicMediaELement__.js +47 -0
- package/src/user-interface/elements/primitives/media/index.js +3 -0
- package/src/user-interface/elements/primitives/misc/index.js +99 -0
- package/src/user-interface/elements/primitives/semantic/index.js +82 -0
- package/src/user-interface/elements/primitives/table/elements.js +94 -0
- package/src/user-interface/elements/primitives/table/index.js +3 -0
- package/src/user-interface/elements/primitives/table/table.js +115 -0
- package/src/user-interface/elements/primitives/table/utils.js +12 -0
- package/src/user-interface/elements/primitives/text/__ZikoUIText__.js +71 -0
- package/src/user-interface/elements/primitives/text/heading.js +36 -0
- package/src/user-interface/elements/primitives/text/index.js +3 -0
- package/src/user-interface/elements/primitives/text/p.js +26 -0
- package/src/user-interface/elements/primitives/text/pre.js +0 -0
- package/src/user-interface/elements/primitives/text/text.js +81 -0
- package/src/user-interface/index.js +188 -0
- package/src/user-interface/style/index.js +510 -0
- package/src/user-interface/utils/index.js +70 -0
|
File without changes
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
|
|
2
|
+
import{Complex}from"../complex/index.js"
|
|
3
|
+
import { Utils } from "../utils/index.js";
|
|
4
|
+
import{Base}from"../discret/index.js"
|
|
5
|
+
import { matrix } from "../matrix/index.js";
|
|
6
|
+
class Random {
|
|
7
|
+
static float(a = 1, b) {
|
|
8
|
+
return b ? Math.random() * (b - a) + a : a * Math.random();
|
|
9
|
+
}
|
|
10
|
+
static int(a, b) {
|
|
11
|
+
return Math.floor(this.float(a, b));
|
|
12
|
+
}
|
|
13
|
+
static char(upperCase){
|
|
14
|
+
upperCase=upperCase??this.bool();
|
|
15
|
+
const Char=String.fromCharCode(this.int(97,120));
|
|
16
|
+
return upperCase?Char.toUpperCase():Char;
|
|
17
|
+
}
|
|
18
|
+
static bool(){
|
|
19
|
+
return [false,true][Math.floor(Math.random()*2)];
|
|
20
|
+
}
|
|
21
|
+
static string(length,upperCase){
|
|
22
|
+
return length instanceof Array?
|
|
23
|
+
new Array(this.int(...length)).fill(0).map(() => this.char(upperCase)).join(""):
|
|
24
|
+
new Array(length).fill(0).map(() => this.char(upperCase)).join("");
|
|
25
|
+
}
|
|
26
|
+
static bin() {
|
|
27
|
+
return this.int(2);
|
|
28
|
+
}
|
|
29
|
+
static oct() {
|
|
30
|
+
return this.int(8);
|
|
31
|
+
}
|
|
32
|
+
static dec() {
|
|
33
|
+
return this.int(8);
|
|
34
|
+
}
|
|
35
|
+
static hex() {
|
|
36
|
+
return this.int(16);
|
|
37
|
+
}
|
|
38
|
+
static choice(choices = [1, 2, 3], p = new Array(choices.length).fill(1 / choices.length)) {
|
|
39
|
+
let newchoice = new Array(100);
|
|
40
|
+
p=Utils.accum(...p).map(n=>n*100)
|
|
41
|
+
newchoice.fill(choices[0], 0, p[0]);
|
|
42
|
+
for (let i = 1; i < choices.length; i++) newchoice.fill(choices[i], p[i - 1], p[i]);
|
|
43
|
+
return newchoice[this.int(newchoice.length - 1)];
|
|
44
|
+
}
|
|
45
|
+
static shuffleArr(arr){
|
|
46
|
+
return arr.sort(()=>0.5-Math.random())
|
|
47
|
+
}
|
|
48
|
+
static shuffleMatrix(M){
|
|
49
|
+
const {rows,cols,arr}=M;
|
|
50
|
+
return matrix(rows,cols,arr.flat().sort(()=>0.5-Math.random()))
|
|
51
|
+
}
|
|
52
|
+
static floats(n, a, b) {
|
|
53
|
+
return new Array(n).fill(0).map(() => this.float(a, b));
|
|
54
|
+
}
|
|
55
|
+
static ints(n, a, b) {
|
|
56
|
+
return new Array(n).fill(0).map(() => this.int(a, b));
|
|
57
|
+
}
|
|
58
|
+
static bools(n){
|
|
59
|
+
return new Array(n).fill(0).map(() => this.bool());
|
|
60
|
+
}
|
|
61
|
+
static bins(n) {
|
|
62
|
+
return new Array(n).fill(0).map(() => this.int(2));
|
|
63
|
+
}
|
|
64
|
+
static octs(n) {
|
|
65
|
+
return new Array(n).fill(0).map(() => this.int(8));
|
|
66
|
+
}
|
|
67
|
+
static decs(n) {
|
|
68
|
+
return new Array(n).fill(0).map(() => this.int(10));
|
|
69
|
+
}
|
|
70
|
+
static hexs(n) {
|
|
71
|
+
return new Array(n).fill(0).map(() => this.int(16));
|
|
72
|
+
}
|
|
73
|
+
static choices(n, choices, p) {
|
|
74
|
+
return new Array(n).fill(0).map(() => this.choice(choices, p));
|
|
75
|
+
}
|
|
76
|
+
static perm(...arr) {
|
|
77
|
+
// permutation
|
|
78
|
+
return arr.permS[this.int(arr.length)];
|
|
79
|
+
}
|
|
80
|
+
static color() {
|
|
81
|
+
return "#" + Base.dec2hex(this.float(16777216)).padStart(6,0);
|
|
82
|
+
}
|
|
83
|
+
static colors(n) {
|
|
84
|
+
return new Array(n).fill(null).map(()=>this.color());
|
|
85
|
+
}
|
|
86
|
+
static complex(a = [0,1], b = [0,1]) {
|
|
87
|
+
return a instanceof Array?
|
|
88
|
+
new Complex(
|
|
89
|
+
this.float(a[0], a[1]),
|
|
90
|
+
this.float(b[0], b[1])
|
|
91
|
+
):
|
|
92
|
+
new Complex(
|
|
93
|
+
...this.floats(2,a,b)
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
static complexInt(a = [0,1], b = [0,1]) {
|
|
98
|
+
return new Complex(
|
|
99
|
+
this.int(a[0], a[1]),
|
|
100
|
+
this.int(b[0], b[1])
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
static complexBin() {
|
|
104
|
+
return new Complex(...this.bins(2));
|
|
105
|
+
}
|
|
106
|
+
static complexOct() {
|
|
107
|
+
return new Complex(...this.octs(2));
|
|
108
|
+
}
|
|
109
|
+
static complexDec() {
|
|
110
|
+
return new Complex(...this.decs(10));
|
|
111
|
+
}
|
|
112
|
+
static complexHex() {
|
|
113
|
+
return new Complex(...this.octs(2));
|
|
114
|
+
}
|
|
115
|
+
static complexes(n, a = 0, b = 1) {
|
|
116
|
+
return new Array(n).fill(0).map(() => this.complex(a, b));
|
|
117
|
+
}
|
|
118
|
+
static complexesInt(n, a = 0, b = 1) {
|
|
119
|
+
return new Array(n).fill(0).map(() => this.complexInt(a, b));
|
|
120
|
+
}
|
|
121
|
+
static complexesBin(n) {
|
|
122
|
+
return new Array(n).fill(0).map(() => this.complexBin());
|
|
123
|
+
}
|
|
124
|
+
static complexesOct(n) {
|
|
125
|
+
return new Array(n).fill(0).map(() => this.complexOct());
|
|
126
|
+
}
|
|
127
|
+
static complexesDec(n) {
|
|
128
|
+
return new Array(n).fill(0).map(() => this.complexDec());
|
|
129
|
+
}
|
|
130
|
+
static complexesHex(n) {
|
|
131
|
+
return new Array(n).fill(0).map(() => this.complexHex());
|
|
132
|
+
}
|
|
133
|
+
static matrix(r,c,min,max){
|
|
134
|
+
return matrix(r,c,this.floats(r*c,min,max))
|
|
135
|
+
}
|
|
136
|
+
static matrixInt(r,c,min,max){
|
|
137
|
+
return matrix(r,c,this.ints(r*c,min,max))
|
|
138
|
+
}
|
|
139
|
+
static matrixBin(r,c){
|
|
140
|
+
return matrix(r,c,this.bins(r*c))
|
|
141
|
+
}
|
|
142
|
+
static matrixOct(r,c){
|
|
143
|
+
return matrix(r,c,this.octs(r*c))
|
|
144
|
+
}
|
|
145
|
+
static matrixDec(r,c){
|
|
146
|
+
return matrix(r,c,this.decs(r*c))
|
|
147
|
+
}
|
|
148
|
+
static matrixHex(r,c){
|
|
149
|
+
return matrix(r,c,this.hex(r*c))
|
|
150
|
+
}
|
|
151
|
+
static matrixColor(r,c){
|
|
152
|
+
return matrix(r,c,this.colors(r*c))
|
|
153
|
+
}
|
|
154
|
+
static matrixComplex(r,c,a,b){
|
|
155
|
+
return matrix(r,c,this.complexes(r*c,a,b))
|
|
156
|
+
}
|
|
157
|
+
static matrixComplexInt(r,c,a,b){
|
|
158
|
+
return matrix(r,c,this.complexesInt(r*c,a,b))
|
|
159
|
+
}
|
|
160
|
+
static matrixComplexBin(r,c){
|
|
161
|
+
return matrix(r,c,this.complexesBin(r*c))
|
|
162
|
+
}
|
|
163
|
+
static matrixComplexOct(r,c){
|
|
164
|
+
return matrix(r,c,this.complexesBin(r*c))
|
|
165
|
+
}
|
|
166
|
+
static matrixComplexDec(r,c){
|
|
167
|
+
return matrix(r,c,this.complexesBin(r*c))
|
|
168
|
+
}
|
|
169
|
+
static matrixComplexHex(r,c){
|
|
170
|
+
return matrix(r,c,this.complexesBin(r*c))
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
export{Random}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
lin_R=np.linspace(1,10,10,)
|
|
3
|
+
lin_C=np.linspace(10j+1,10+1j,10)
|
|
4
|
+
print("Linspace")
|
|
5
|
+
print(lin_R)
|
|
6
|
+
print("-"*70)
|
|
7
|
+
print(lin_C)
|
|
8
|
+
log_R=np.logspace(1,10,10, base = 2)
|
|
9
|
+
log_C=np.logspace(10j+1,10+1j,10 , base = 2)
|
|
10
|
+
print("-"*70)
|
|
11
|
+
print("Logspace")
|
|
12
|
+
print(log_R)
|
|
13
|
+
print("-"*70)
|
|
14
|
+
print(log_C)
|
|
15
|
+
geo_R=np.geomspace(1,512,10)
|
|
16
|
+
geo_C=np.geomspace(1+1j,512+512j,10)
|
|
17
|
+
print("-"*70)
|
|
18
|
+
print("geomspace")
|
|
19
|
+
print(geo_R)
|
|
20
|
+
print("-"*70)
|
|
21
|
+
print(geo_C)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# // const logspace=(a,b,n=b-a+1,base=E,endpoint=true)=>{
|
|
25
|
+
# // if(a instanceof Complex||b instanceof Complex){
|
|
26
|
+
# // a=complex(a);
|
|
27
|
+
# // b=complex(b);
|
|
28
|
+
# // n=n??abs(b.a-a.a)
|
|
29
|
+
# // const X=linspace(a.a,b.a,n,base,endpoint);
|
|
30
|
+
# // const Y=linspace(a.b,b.b,n,base,endpoint);
|
|
31
|
+
# // const Z=new Array(X.length).fill(0)
|
|
32
|
+
# // const ZZ=Z.map((n,i) => pow(base,complex(X[i],Y[i])));
|
|
33
|
+
# // return ZZ;
|
|
34
|
+
# // }
|
|
35
|
+
# // const start=base**min(a,b);
|
|
36
|
+
# // const stop=base**max(a,b);
|
|
37
|
+
# // const y = linspace(ln(start) / ln(base), ln(stop) / ln(base), n, endpoint);
|
|
38
|
+
# // const result=y.map(n => pow(base, n));
|
|
39
|
+
# // return a<b?result:result.reverse();
|
|
40
|
+
# // }
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { Matrix , matrix } from "../matrix/index.js";
|
|
2
|
+
import { sqrt } from "../functions/index.js";
|
|
3
|
+
const conv1d=(input, kernel , circular = true)=>{
|
|
4
|
+
const INPUT_LENGTH = input.length;
|
|
5
|
+
const KERNEL_LENGTH = kernel.length;
|
|
6
|
+
const output = [];
|
|
7
|
+
const LENGTH_OUT = circular ? Math.max(INPUT_LENGTH,KERNEL_LENGTH) : INPUT_LENGTH + KERNEL_LENGTH - 1;
|
|
8
|
+
for (let i = 0; i < LENGTH_OUT; i++) {
|
|
9
|
+
let sum = 0;
|
|
10
|
+
for (let j = 0; j < KERNEL_LENGTH; j++) {
|
|
11
|
+
const inputIndex = i + j - Math.floor(KERNEL_LENGTH / 2);
|
|
12
|
+
// Apply zero-padding for out-of-bounds indices
|
|
13
|
+
const inputValue = inputIndex >= 0 && inputIndex < INPUT_LENGTH
|
|
14
|
+
? input[inputIndex]
|
|
15
|
+
: 0;
|
|
16
|
+
sum += inputValue * kernel[j];
|
|
17
|
+
}
|
|
18
|
+
output.push(sum);
|
|
19
|
+
}
|
|
20
|
+
return output;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const conv2d = (input, kernel, circular = true) => {
|
|
24
|
+
if(!(input instanceof Matrix)) input = matrix(input);
|
|
25
|
+
if(!(kernel instanceof Matrix)) kernel = matrix(kernel);
|
|
26
|
+
const INPUT_ROWS=input.rows;
|
|
27
|
+
const INPUT_COLS=input.cols;
|
|
28
|
+
const OUTPUT_ROWS = circular ? Math.max(input.rows,kernel.rows) : input.rows + kernel.rows-1;
|
|
29
|
+
const OUTPUT_COLS = circular ? Math.max(input.cols,kernel.cols) : input.cols + kernel.cols-1;
|
|
30
|
+
const KERNEL_SIZE = kernel.rows;
|
|
31
|
+
const output = [];
|
|
32
|
+
for (let i = 0; i < OUTPUT_ROWS ; i++) {
|
|
33
|
+
const row = [];
|
|
34
|
+
for (let j = 0; j < OUTPUT_COLS ; j++) {
|
|
35
|
+
let sum = 0;
|
|
36
|
+
for (let k = 0; k < KERNEL_SIZE; k++) {
|
|
37
|
+
for (let l = 0; l < KERNEL_SIZE; l++) {
|
|
38
|
+
const rowIndex = i + k - Math.floor(KERNEL_SIZE / 2);
|
|
39
|
+
const colIndex = j + l - Math.floor(KERNEL_SIZE / 2);
|
|
40
|
+
// Apply zero-padding for out-of-bounds indices
|
|
41
|
+
const inputValue = (rowIndex >= 0 && rowIndex < INPUT_ROWS &&
|
|
42
|
+
colIndex >= 0 && colIndex < INPUT_COLS)
|
|
43
|
+
? input[rowIndex][colIndex]
|
|
44
|
+
: 0;
|
|
45
|
+
sum += inputValue * kernel[k][l];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
row.push(sum);
|
|
49
|
+
}
|
|
50
|
+
output.push(row);
|
|
51
|
+
}
|
|
52
|
+
return output;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
var convolute=(parent,kernel = [0, -1, 0, -1, 5, -1, 0, -1, 0], x1 = 0, y1 = 0, x2 = parent.element.width, y2 = parent.element.height)=>{
|
|
56
|
+
if(kernel instanceof Matrix)kernel=kernel.arr.flat(1)
|
|
57
|
+
var opaque = 1;
|
|
58
|
+
var pixels = parent.ctx.getImageData(x1, y1, x2, y2);
|
|
59
|
+
var side = Math.round(sqrt(kernel.length));
|
|
60
|
+
var halfSide = Math.floor(side / 2);
|
|
61
|
+
var src = pixels.data;
|
|
62
|
+
var sw = pixels.width;
|
|
63
|
+
var sh = pixels.height;
|
|
64
|
+
// pad output by the convolution matrix
|
|
65
|
+
var w = sw;
|
|
66
|
+
var h = sh;
|
|
67
|
+
var output = parent.ctx.createImageData(w, h);
|
|
68
|
+
var dst = output.data;
|
|
69
|
+
// go through the destination image pixels
|
|
70
|
+
var alphaFac = opaque ? 1 : 0;
|
|
71
|
+
for (var y = 0; y < h; y++) {
|
|
72
|
+
for (var x = 0; x < w; x++) {
|
|
73
|
+
var sy = y;
|
|
74
|
+
var sx = x;
|
|
75
|
+
var dstOff = (y * w + x) * 4;
|
|
76
|
+
// calculate the weighed sum of the source image pixels that
|
|
77
|
+
// fall under the convolution matrix
|
|
78
|
+
var r = 0,
|
|
79
|
+
g = 0,
|
|
80
|
+
b = 0,
|
|
81
|
+
a = 0;
|
|
82
|
+
for (var cy = 0; cy < side; cy++) {
|
|
83
|
+
for (var cx = 0; cx < side; cx++) {
|
|
84
|
+
var scy = sy + cy - halfSide;
|
|
85
|
+
var scx = sx + cx - halfSide;
|
|
86
|
+
if (scy >= 0 && scy < sh && scx >= 0 && scx < sw) {
|
|
87
|
+
var srcOff = (scy * sw + scx) * 4;
|
|
88
|
+
var wt = kernel[cy * side + cx];
|
|
89
|
+
r += src[srcOff] * wt;
|
|
90
|
+
g += src[srcOff + 1] * wt;
|
|
91
|
+
b += src[srcOff + 2] * wt;
|
|
92
|
+
a += src[srcOff + 3] * wt;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
dst[dstOff] = r;
|
|
97
|
+
dst[dstOff + 1] = g;
|
|
98
|
+
dst[dstOff + 2] = b;
|
|
99
|
+
dst[dstOff + 3] = a + alphaFac * (255 - a);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return output;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
convolute=(parent,kernel = [0, -1, 0, -1, 5, -1, 0, -1, 0], x1 = 0, y1 = 0, x2 = parent.element.width, y2 = parent.element.height)=>{
|
|
106
|
+
if(kernel instanceof Matrix)kernel=kernel.arr.flat(1)
|
|
107
|
+
var opaque = 1;
|
|
108
|
+
var pixels = parent.ctx.getImageData(x1, y1, x2, y2);
|
|
109
|
+
var side = Math.round(sqrt(kernel.length));
|
|
110
|
+
var halfSide = Math.floor(side / 2);
|
|
111
|
+
var src = pixels.data;
|
|
112
|
+
var sw = pixels.width;
|
|
113
|
+
var sh = pixels.height;
|
|
114
|
+
// pad output by the convolution matrix
|
|
115
|
+
var w = sw;
|
|
116
|
+
var h = sh;
|
|
117
|
+
var output = parent.ctx.createImageData(w, h);
|
|
118
|
+
var dst = output.data;
|
|
119
|
+
// go through the destination image pixels
|
|
120
|
+
var alphaFac = opaque ? 1 : 0;
|
|
121
|
+
for (var y = 0; y < h; y++) {
|
|
122
|
+
for (var x = 0; x < w; x++) {
|
|
123
|
+
var sy = y;
|
|
124
|
+
var sx = x;
|
|
125
|
+
var dstOff = (y * w + x) * 4;
|
|
126
|
+
// calculate the weighed sum of the source image pixels that
|
|
127
|
+
// fall under the convolution matrix
|
|
128
|
+
var r = 0,
|
|
129
|
+
g = 0,
|
|
130
|
+
b = 0,
|
|
131
|
+
a = 0;
|
|
132
|
+
for (var cy = 0; cy < side; cy++) {
|
|
133
|
+
for (var cx = 0; cx < side; cx++) {
|
|
134
|
+
var scy = sy + cy - halfSide;
|
|
135
|
+
var scx = sx + cx - halfSide;
|
|
136
|
+
if (scy >= 0 && scy < sh && scx >= 0 && scx < sw) {
|
|
137
|
+
var srcOff = (scy * sw + scx) * 4;
|
|
138
|
+
var wt = kernel[cy * side + cx];
|
|
139
|
+
r += src[srcOff] * wt;
|
|
140
|
+
g += src[srcOff + 1] * wt;
|
|
141
|
+
b += src[srcOff + 2] * wt;
|
|
142
|
+
a += src[srcOff + 3] * wt;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
dst[dstOff] = r;
|
|
147
|
+
dst[dstOff + 1] = g;
|
|
148
|
+
dst[dstOff + 2] = b;
|
|
149
|
+
dst[dstOff + 3] = a + alphaFac * (255 - a);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return output;
|
|
153
|
+
}
|
|
154
|
+
const conv=(input,kernel,circular)=>{
|
|
155
|
+
if(input instanceof Matrix || (input instanceof Array && input[0][0]))return conv2d(input,kernel,circular);
|
|
156
|
+
return conv1d(input,kernel,circular)
|
|
157
|
+
}
|
|
158
|
+
const circularConv=(input,kernel)=>conv(input,kernel,true);
|
|
159
|
+
const linearConv=(input,kernel)=>conv(input,kernel,false);
|
|
160
|
+
const circularConv1d=(input,kernel)=>conv1d(input,kernel,true);
|
|
161
|
+
const circularConv2d=(input,kernel)=>conv2d(input,kernel,true);
|
|
162
|
+
const linearConv1d=(input,kernel)=>conv1d(input,kernel,false);
|
|
163
|
+
const linearConv2d=(input,kernel)=>conv2d(input,kernel,false);
|
|
164
|
+
export{
|
|
165
|
+
conv1d,
|
|
166
|
+
conv2d,
|
|
167
|
+
conv,
|
|
168
|
+
circularConv,
|
|
169
|
+
linearConv,
|
|
170
|
+
circularConv1d,
|
|
171
|
+
linearConv1d,
|
|
172
|
+
circularConv2d,
|
|
173
|
+
linearConv2d,
|
|
174
|
+
convolute
|
|
175
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Complex , complex } from "../complex";
|
|
2
|
+
import { PI } from "../const";
|
|
3
|
+
import { cos , sin } from "../functions";
|
|
4
|
+
const fft=x=>{
|
|
5
|
+
const output = [];
|
|
6
|
+
const N = x.length;
|
|
7
|
+
if(!(x[0]instanceof Complex))x=x.map((n)=>complex(n,0));
|
|
8
|
+
for (let k = 0; k < N; k++) {
|
|
9
|
+
let re = 0,im=0;
|
|
10
|
+
for (let n = 0; n < N; n++) {
|
|
11
|
+
const phi = (2*PI * k * n) / N;
|
|
12
|
+
re += x[n].a*cos(phi)+x[n].b*sin(phi);
|
|
13
|
+
im += -x[n].a*sin(phi)+x[n].b*cos(phi);
|
|
14
|
+
}
|
|
15
|
+
re = re / N;
|
|
16
|
+
im = im / N;
|
|
17
|
+
output[k] = complex(re,im);
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
output,
|
|
21
|
+
re:output.map(n=>n.a),
|
|
22
|
+
im:output.map(n=>n.b),
|
|
23
|
+
z:output.map(n=>n.z),
|
|
24
|
+
phi:output.map(n=>n.phi)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const ifft=x=>{
|
|
28
|
+
const output = [];
|
|
29
|
+
const N = x.length;
|
|
30
|
+
if(!(x[0]instanceof Complex))x=x.map((n)=>complex(n,0));
|
|
31
|
+
for (let k = 0; k < N; k++) {
|
|
32
|
+
let re=0,im=0;
|
|
33
|
+
for (let n = 0; n < N; n++) {
|
|
34
|
+
const phi = (2*PI * k * n) / N;
|
|
35
|
+
re += x[n].a*cos(phi)+x[n].b*sin(phi);
|
|
36
|
+
im += x[n].a*sin(phi)+x[n].b*cos(phi);
|
|
37
|
+
}
|
|
38
|
+
re = re / N;
|
|
39
|
+
im = im / N;
|
|
40
|
+
|
|
41
|
+
output[k] = complex(re,im);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
output,
|
|
45
|
+
re:output.map(n=>n.a),
|
|
46
|
+
im:output.map(n=>n.b),
|
|
47
|
+
z:output.map(n=>n.z),
|
|
48
|
+
phi:output.map(n=>n.phi)
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export{
|
|
53
|
+
fft,
|
|
54
|
+
ifft
|
|
55
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { complex } from "../complex/index.js";
|
|
2
|
+
import {fft,ifft} from "./fft.js";
|
|
3
|
+
// should be processed in other thread
|
|
4
|
+
class Filter{
|
|
5
|
+
constructor(input){
|
|
6
|
+
this.input=input;
|
|
7
|
+
this.input_fft=fft(this.input);
|
|
8
|
+
this.output_fft=[]
|
|
9
|
+
}
|
|
10
|
+
// get length(){
|
|
11
|
+
// return this.input.length;
|
|
12
|
+
// }
|
|
13
|
+
lowPass(fc){
|
|
14
|
+
this.input_fft.output.forEach((n,i)=>{
|
|
15
|
+
n=n.z<fc
|
|
16
|
+
? this.output_fft[i]=this.input_fft.output[i]
|
|
17
|
+
: this.output_fft[i]=complex(0,0)
|
|
18
|
+
})
|
|
19
|
+
return ifft(this.output_fft).re;
|
|
20
|
+
}
|
|
21
|
+
highPass(fc){
|
|
22
|
+
this.input_fft.output.forEach((n,i)=>{
|
|
23
|
+
n=n.z>fc
|
|
24
|
+
? this.output_fft[i]=this.input_fft.output[i]
|
|
25
|
+
: this.output_fft[i]=complex(0,0)
|
|
26
|
+
})
|
|
27
|
+
return ifft(this.output_fft).re;
|
|
28
|
+
}
|
|
29
|
+
bandePass(){
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
bandeCoupe(){
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const filter=input=>new Filter(input);
|
|
37
|
+
export{
|
|
38
|
+
filter
|
|
39
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { Complex , complex } from "../complex/index.js";
|
|
2
|
+
import { abs , pow , sqrtn , max , min} from "../functions/index.js";
|
|
3
|
+
import { mul } from "../utils/index.js";
|
|
4
|
+
import { E } from "../const.js";
|
|
5
|
+
import { Matrix } from "../matrix/Matrix.js";
|
|
6
|
+
const zeros=(n)=>new Array(n).fill(0);
|
|
7
|
+
const ones=(n)=>new Array(n).fill(1);
|
|
8
|
+
const nums=(num,n)=>new Array(n).fill(num);
|
|
9
|
+
const norm=(value, min, max)=>{
|
|
10
|
+
if (typeof value === "number") return min !== max ? (value - min) / (max - min) : 0;
|
|
11
|
+
else if (value instanceof Matrix) return new Matrix(value.rows, value.cols, norm(value.arr.flat(1), min, max));
|
|
12
|
+
else if (value instanceof Complex) return new Complex(norm(value.a, min, max), norm(value.b, min, max));
|
|
13
|
+
else if (value instanceof Array) {
|
|
14
|
+
if (value.every((n) => typeof (n === "number"))) {
|
|
15
|
+
return value.map((n) => norm(n, min, max));
|
|
16
|
+
} else {
|
|
17
|
+
let y = new Array(value.length);
|
|
18
|
+
for (let i = 0; i < value.length; i++) {
|
|
19
|
+
y[i] = norm(value[i]);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const lerp=(value, min, max)=>{
|
|
25
|
+
if (typeof value === "number") return (max - min) * value + min;
|
|
26
|
+
else if (value instanceof Matrix) return new Matrix(value.rows, value.cols, lerp(value.arr.flat(1), min, max));
|
|
27
|
+
else if (value instanceof Complex) return new Complex(lerp(value.a, min, max), lerp(value.b, min, max));
|
|
28
|
+
else if (value instanceof Array) {
|
|
29
|
+
if (value.every((n) => typeof (n === "number"))) {
|
|
30
|
+
return value.map((n) => lerp(n, min, max));
|
|
31
|
+
} else {
|
|
32
|
+
let y = new Array(value.length);
|
|
33
|
+
for (let i = 0; i < value.length; i++) {
|
|
34
|
+
y[i] = lerp(value[i]);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const map=(value, a, b, c, d)=>{
|
|
40
|
+
if (typeof value === "number") return lerp(norm(value, a, b), c, d);
|
|
41
|
+
else if (value instanceof Matrix) return new Matrix(value.rows, value.cols, map(value.arr.flat(1), a, b, c, d));
|
|
42
|
+
else if (value instanceof Complex) return new Complex(map(value.a, b, c, d), map(value.b, a, b, c, d));
|
|
43
|
+
else if (value instanceof Array) {
|
|
44
|
+
if (value.every((n) => typeof (n === "number"))) {
|
|
45
|
+
return value.map((n) => map(n, a, b, c, d));
|
|
46
|
+
} else {
|
|
47
|
+
let y = new Array(value.length);
|
|
48
|
+
for (let i = 0; i < value.length; i++) {
|
|
49
|
+
y[i] = map(value[i], a, b, c, d);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const clamp=(x, a , b)=>{
|
|
55
|
+
const [min_value,max_value]=[min(a,b),max(a,b)]
|
|
56
|
+
if (typeof x === "number") return min(max(x, min_value), max_value);
|
|
57
|
+
else if (x instanceof Matrix) return new Matrix(x.rows, x.cols, clamp(x.arr.flat(1), min_value, max_value));
|
|
58
|
+
else if (x instanceof Complex) return new Complex(clamp(x.a, min_value, max_value), clamp(x.b, min_value, max_value));
|
|
59
|
+
else if (x instanceof Array) {
|
|
60
|
+
if (x.every((n) => typeof (n === "number"))) {
|
|
61
|
+
return x.map((n) => clamp(n, min_value, max_value));
|
|
62
|
+
} else {
|
|
63
|
+
let y = new Array(x.length);
|
|
64
|
+
for (let i = 0; i < x.length; i++) {
|
|
65
|
+
y[i] = clamp(x[i], min_value, max_value);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const arange=(a, b, step , include = false)=>{
|
|
71
|
+
let tab = [];
|
|
72
|
+
if(a<b){
|
|
73
|
+
for (let i = a; include?i<=b:i<b; i += step) tab.push((i * 10) / 10);
|
|
74
|
+
}
|
|
75
|
+
else{
|
|
76
|
+
for(let i = a; include?i>=b:i>b; i -= step) tab.push((i * 10) / 10);
|
|
77
|
+
}
|
|
78
|
+
return tab;
|
|
79
|
+
}
|
|
80
|
+
const linspace=(a,b,n=abs(b-a)+1,endpoint=true)=>{
|
|
81
|
+
if(Math.floor(n)!==n)return;
|
|
82
|
+
if([a,b].every(n=>typeof n==="number")){
|
|
83
|
+
const [max,min]=[a,b].sort((a,b)=>b-a);
|
|
84
|
+
var Y = [];
|
|
85
|
+
let step ;
|
|
86
|
+
endpoint ? step = (max - min) / (n - 1) : step = (max - min) / n;
|
|
87
|
+
for (var i = 0; i < n; i++) {
|
|
88
|
+
a<b?Y.push(min+step*i):Y.push(max-step*i);
|
|
89
|
+
}
|
|
90
|
+
return Y
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if([a,b].some(n=>n instanceof Complex)){
|
|
94
|
+
const z1=complex(a)
|
|
95
|
+
const z2=complex(b)
|
|
96
|
+
n=n||Math.abs(z1.a-z2.a)+1;
|
|
97
|
+
const X=linspace(z1.a,z2.a,n,endpoint);
|
|
98
|
+
const Y=linspace(z1.b,z2.b,n,endpoint);
|
|
99
|
+
let Z=new Array(n).fill(null);
|
|
100
|
+
Z=Z.map((n,i)=>complex(X[i],Y[i]));
|
|
101
|
+
return Z;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const logspace=(a,b,n=b-a+1,base=E,endpoint=true)=>{
|
|
105
|
+
return linspace(a,b,n,endpoint).map(n=>pow(base,n))
|
|
106
|
+
}
|
|
107
|
+
const geomspace=(a,b,n=abs(b-a)+1,endpoint=true)=>{
|
|
108
|
+
if(Math.floor(n)!==n)return;
|
|
109
|
+
if([a,b].every(n=>typeof n==="number")){
|
|
110
|
+
const [max,min]=[a,b].sort((a,b)=>b-a);
|
|
111
|
+
let base;
|
|
112
|
+
endpoint ? base = sqrtn(max/min,n-1) : base = sqrtn(max/min,n) ;
|
|
113
|
+
const Y = [min];
|
|
114
|
+
for (let i = 1; i < n; i++) {
|
|
115
|
+
Y.push(Y[i-1]*base)
|
|
116
|
+
}
|
|
117
|
+
return a<b?Y:Y.reverse()
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if([a,b].some(n=>n instanceof Complex)){
|
|
121
|
+
const z1=complex(a)
|
|
122
|
+
const z2=complex(b)
|
|
123
|
+
n=n||Math.abs(z1.a-z2.a)+1;
|
|
124
|
+
let base;
|
|
125
|
+
endpoint ? base = sqrtn(z2.div(z1),n-1) : base = sqrtn(z2.div(z1),n) ;
|
|
126
|
+
const Y = [z1];
|
|
127
|
+
for (let i = 1; i < n; i++) {
|
|
128
|
+
Y.push(mul(Y[i-1],base))
|
|
129
|
+
}
|
|
130
|
+
return Y;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
export {
|
|
134
|
+
zeros,
|
|
135
|
+
ones,
|
|
136
|
+
nums,
|
|
137
|
+
norm,
|
|
138
|
+
lerp,
|
|
139
|
+
map,
|
|
140
|
+
clamp,
|
|
141
|
+
arange,
|
|
142
|
+
linspace,
|
|
143
|
+
logspace,
|
|
144
|
+
geomspace,
|
|
145
|
+
|
|
146
|
+
}
|