sqlmath 2026.3.1__tar.gz → 2026.3.31__tar.gz

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.
Files changed (46) hide show
  1. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/.ci.sh +93 -62
  2. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/.github/workflows/ci.yml +29 -15
  3. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/.github/workflows/publish_pypi_test.yml +2 -1
  4. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/.gitignore +2 -1
  5. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/.npmignore +4 -1
  6. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/CHANGELOG.md +10 -0
  7. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/PKG-INFO +6 -6
  8. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/README.md +5 -5
  9. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/jslint_ci.sh +7 -8
  10. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/package.json +1 -1
  11. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/pyproject.toml +1 -1
  12. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/setup.py +37 -13
  13. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/sqlmath/__init__.py +21 -6
  14. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/sqlmath.mjs +18 -7
  15. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/.gitconfig +0 -0
  16. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/.github/workflows/publish.yml +0 -0
  17. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/LICENSE +0 -0
  18. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/MANIFEST.in +0 -0
  19. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/asset_image_folder_open_solid.svg +0 -0
  20. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/asset_image_github_brands.svg +0 -0
  21. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/asset_image_logo_256.html +0 -0
  22. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/asset_image_logo_256.png +0 -0
  23. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/asset_image_logo_256.svg +0 -0
  24. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/asset_sqlmath_external_rollup.js +0 -0
  25. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/cpplint.py +0 -0
  26. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/csslint.js +0 -0
  27. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/indent.exe +0 -0
  28. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/index.html +0 -0
  29. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/jslint.mjs +0 -0
  30. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/libiconv2.dll +0 -0
  31. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/libintl3.dll +0 -0
  32. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/sqlmath_base.c +0 -0
  33. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/sqlmath_base.h +0 -0
  34. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/sqlmath_browser.mjs +0 -0
  35. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/sqlmath_custom.c +0 -0
  36. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/sqlmath_custom.mjs +0 -0
  37. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/sqlmath_external_sqlite.c +0 -0
  38. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/sqlmath_wrapper_wasm.js +0 -0
  39. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/test.mjs +0 -0
  40. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/test.py +0 -0
  41. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/test_data_sinefit.csv +0 -0
  42. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/test_lgbm_binary.test +0 -0
  43. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/test_lgbm_binary.train +0 -0
  44. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/test_lgbm_numpy.py +0 -0
  45. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/test_lgbm_preb.txt +0 -0
  46. {sqlmath-2026.3.1 → sqlmath-2026.3.31}/zlib.v1.3.1.vcpkg.x64-windows-static.lib +0 -0
@@ -20,7 +20,7 @@ shCiArtifactUploadCustom() {(set -e
20
20
  git fetch origin artifact
21
21
  git checkout origin/artifact "branch-$GITHUB_BRANCH0"
22
22
  mv "branch-$GITHUB_BRANCH0"/* .
23
- git add -f _sqlmath* sqlmath_wasm.*
23
+ git add -f sqlmath_wasm.*
24
24
  # screenshot html
25
25
  PID_LIST=""
26
26
  shBrowserScreenshot \
@@ -34,40 +34,53 @@ shCiArtifactUploadCustom() {(set -e
34
34
  shCiBaseCustom() {(set -e
35
35
  # This function will run custom-code for base-ci.
36
36
  shCiEmsdkExport
37
- FILE="$(node --input-type=module -e '
38
- process.stdout.write(
39
- process.platform === "darwin"
40
- ? "lib_lightgbm.dylib"
41
- : process.platform === "win32"
42
- ? "lib_lightgbm.dll"
43
- : "lib_lightgbm.so"
44
- );
37
+ FILE_LIB_LGBM="$(node --input-type=module -e '
38
+ function libPlatformArchExt() {
39
+ let libArch = process.arch;
40
+ let libExt = process.platform;
41
+ let libPlatform = process.platform;
42
+ libExt = libExt.replace("darwin", "dylib");
43
+ libExt = libExt.replace("win32", "dll");
44
+ libExt = libExt.replace(libPlatform, "so");
45
+ return `${libPlatform}_${libArch}.${libExt}`;
46
+ }
47
+ process.stdout.write(`lib_lightgbm_${libPlatformArchExt()}`);
45
48
  ' "$@")" # '
46
49
  # bugfix - Library not loaded: /usr/local/opt/libomp/lib/libomp.dylib
47
- if [ ! -f "sqlmath/$FILE" ]
50
+ if [ ! -f "sqlmath/$FILE_LIB_LGBM" ]
48
51
  then
49
52
  case "$(uname)" in
50
53
  Darwin*)
51
54
  brew install libomp
52
- cp -L /opt/homebrew/opt/libomp/lib/libomp.dylib sqlmath/
55
+ cp -L "$(brew --prefix libomp)/lib/libomp.dylib" \
56
+ "sqlmath/$(node -p '`libomp_${process.platform}_${process.arch}.dylib`')"
53
57
  ;;
54
58
  esac
55
59
  pip install lightgbm=="$(printf "v4.6.0" | sed "s|v||")"
56
60
  cp "$(
57
61
  find "$(
58
- pip show ruff | grep Location | sed "s|Location: ||"
59
- )/lightgbm" | grep "$FILE"
60
- )" "sqlmath/$FILE"
62
+ pip show lightgbm | grep Location | sed "s|Location: ||"
63
+ )/lightgbm" | grep "\<lib_lightgbm\.\(dll\|dylib\|so\)$"
64
+ )" "sqlmath/$FILE_LIB_LGBM"
61
65
  fi
62
66
  # .github_cache - restore
63
67
  if [ "$GITHUB_ACTION" ] && [ -d .github_cache/ ]
64
68
  then
65
- cp -a .github_cache/* . || true # js-hack - */
69
+ cp -a .github_cache/* ./ || true # js-hack - */
66
70
  fi
67
71
  # cleanup
68
72
  rm -rf *.egg-info _sqlmath* build/ sqlmath/_sqlmath* && mkdir -p build/
69
73
  PID_LIST=""
70
74
  #
75
+ # run nodejs-ci
76
+ if [ "$GITHUB_ACTION" ]
77
+ then
78
+ npm_config_mode_test_nopython=1 shCiTestNodejs &
79
+ else
80
+ shCiTestNodejs &
81
+ fi
82
+ PID_LIST="$PID_LIST $!"
83
+ #
71
84
  # python -m build --sdist
72
85
  # python -m cibuildwheel
73
86
  (
@@ -104,23 +117,26 @@ process.stdout.write(
104
117
  ) &
105
118
  PID_LIST="$PID_LIST $!"
106
119
  #
107
- shPidListWait build_ext "$PID_LIST"
108
- #
109
- # run nodejs-ci
110
- shCiTestNodejs
120
+ shPidListWait shCiBaseCustom "$PID_LIST"
111
121
  #
112
122
  # upload artifact
113
- if (shCiMatrixIsmainNodeversion) && ( \
114
- [ "$GITHUB_BRANCH0" = alpha ] \
115
- || [ "$GITHUB_BRANCH0" = beta ] \
116
- || [ "$GITHUB_BRANCH0" = master ] \
117
- )
123
+ if (shCiMatrixIsmainNodeversion) && \
124
+ ( \
125
+ [ "$GITHUB_EVENT_NAME" = push ] || \
126
+ [ "$GITHUB_EVENT_NAME" = schedule ] || \
127
+ [ "$GITHUB_EVENT_NAME" = workflow_dispatch ] \
128
+ ) && \
129
+ ( \
130
+ [ "$GITHUB_BRANCH0" = alpha ] || \
131
+ [ "$GITHUB_BRANCH0" = beta ] || \
132
+ [ "$GITHUB_BRANCH0" = master ] \
133
+ )
118
134
  then
119
135
  export GITHUB_UPLOAD_RETRY=0
120
136
  while true
121
137
  do
122
- GITHUB_UPLOAD_RETRY="$((GITHUB_UPLOAD_RETRY + 1))"
123
- if [ "$GITHUB_UPLOAD_RETRY" -gt 4 ]
138
+ export GITHUB_UPLOAD_RETRY="$((GITHUB_UPLOAD_RETRY + 1))"
139
+ if [ ! "$GITHUB_UPLOAD_RETRY" -le 4 ]
124
140
  then
125
141
  return 1
126
142
  fi
@@ -162,41 +178,49 @@ shCiBaseCustomArtifactUpload() {(set -e
162
178
  cd .tmp/artifact/
163
179
  cp ../../.git/config .git/config
164
180
  # update dir branch-$GITHUB_BRANCH0
165
- mkdir -p "branch-$GITHUB_BRANCH0"
181
+ mkdir -p "branch-$GITHUB_BRANCH0/"
182
+ (
183
+ cd "branch-$GITHUB_BRANCH0/"
184
+ rm -f lib_lightgbm.*
185
+ rm -f libomp.*
166
186
  case "$(uname)" in
167
187
  Darwin*)
168
- rm -f "branch-$GITHUB_BRANCH0/"*darwin*
169
- rm -f "branch-$GITHUB_BRANCH0/"*macos*
188
+ rm -f *darwin.so
189
+ case $(uname -m) in
190
+ arm64)
191
+ rm -f *darwin*arm64*
192
+ rm -f *macos*arm64*
193
+ ;;
194
+ x86_64)
195
+ rm -f *darwin*x64*
196
+ rm -f *macos*x86_64*
197
+ ;;
198
+ esac
199
+ # save libomp
200
+ cp ../../../sqlmath/libomp* ./
170
201
  ;;
171
202
  Linux*)
172
- rm -f "branch-$GITHUB_BRANCH0/"*linux*
203
+ rm -f *linux*
173
204
  # save sdist
174
- rm -f "branch-$GITHUB_BRANCH0/"*.tar.gz
175
- cp ../../dist/sqlmath-*.tar.gz "branch-$GITHUB_BRANCH0"
205
+ rm -f *.tar.gz
206
+ cp ../../../dist/sqlmath-*.tar.gz ./
207
+ # save wasm
208
+ rm -f sqlmath_wasm*
209
+ cp ../../../.artifact/asset_image_logo_256.png ./
210
+ cp ../../../sqlmath_wasm* ./
176
211
  ;;
177
212
  MINGW*)
178
- rm -f "branch-$GITHUB_BRANCH0/"*-win*
179
- rm -f "branch-$GITHUB_BRANCH0/"*_win*
213
+ rm -f *win32_x64*
214
+ rm -f *win_amd64*
180
215
  ;;
181
216
  esac
182
- cp ../../_sqlmath* "branch-$GITHUB_BRANCH0"
183
- cp ../../sqlmath/_sqlmath* "branch-$GITHUB_BRANCH0"
184
- for FILE in \
185
- ../../.artifact/asset_image_logo_256.png \
186
- ../../sqlmath/lib_lightgbm.dll \
187
- ../../sqlmath/lib_lightgbm.dylib \
188
- ../../sqlmath/lib_lightgbm.so \
189
- ../../sqlmath/libomp.dylib \
190
- ../../sqlmath_wasm.js \
191
- ../../sqlmath_wasm.wasm
192
- do
193
- if [ -f "$FILE" ]
194
- then
195
- cp "$FILE" "branch-$GITHUB_BRANCH0"
196
- fi
197
- done
198
- # save cibuildwheel
199
- cp ../../dist/sqlmath-*.whl "branch-$GITHUB_BRANCH0"
217
+ cp ../../../_sqlmath.napi* ./
218
+ cp ../../../_sqlmath.shell* ./
219
+ cp ../../../dist/sqlmath-*.whl ./
220
+ cp ../../../sqlmath/lib_lightgbm* ./
221
+ rm -f *win32_x64*.exp
222
+ rm -f *win32_x64*.lib
223
+ )
200
224
  # git commit
201
225
  git add .
202
226
  git add -f "branch-$GITHUB_BRANCH0"/_sqlmath*
@@ -322,7 +346,7 @@ shCiBuildWasm() {(set -e
322
346
  }());
323
347
  /*jslint-enable*/
324
348
  ' >> sqlmath_wasm.js
325
- cp build/sqlmath_wasm.wasm .
349
+ cp build/sqlmath_wasm.wasm ./
326
350
  ls -l sqlmath_wasm.*
327
351
  )}
328
352
 
@@ -426,8 +450,9 @@ shCiPublishNpmCustom() {(set -e
426
450
  git checkout origin/artifact \
427
451
  branch-beta/_sqlmath* \
428
452
  branch-beta/sqlmath_wasm*
429
- cp -a branch-beta/_sqlmath* .
430
- cp -a branch-beta/sqlmath_wasm.* .
453
+ cp -a branch-beta/_sqlmath.napi* ./
454
+ cp -a branch-beta/_sqlmath.shell* ./
455
+ cp -a branch-beta/sqlmath_wasm.* ./
431
456
  # npm-publish
432
457
  npm publish --access public
433
458
  )}
@@ -436,10 +461,10 @@ shCiPublishPypiCustom() {(set -e
436
461
  # This function will run custom-code to npm-publish package.
437
462
  # fetch artifact
438
463
  git fetch origin artifact --depth=1
439
- git checkout origin/artifact branch-alpha/
464
+ git checkout origin/artifact branch-beta/
440
465
  mkdir dist/
441
- cp -a branch-alpha/sqlmath-*.tar.gz dist/
442
- cp -a branch-alpha/sqlmath-*.whl dist/
466
+ cp -a branch-beta/sqlmath-*.tar.gz dist/
467
+ cp -a branch-beta/sqlmath-*.whl dist/
443
468
  ls -la dist/
444
469
  )}
445
470
 
@@ -477,8 +502,11 @@ ciBuildExt({process});
477
502
  ) &
478
503
  PID_LIST="$PID_LIST $!"
479
504
  # build python c-extension
480
- python setup.py build_ext &
481
- PID_LIST="$PID_LIST $!"
505
+ if [ ! "$npm_config_mode_test_nopython" ]
506
+ then
507
+ python setup.py build_ext &
508
+ PID_LIST="$PID_LIST $!"
509
+ fi
482
510
  shPidListWait build_ext "$PID_LIST"
483
511
  fi;
484
512
  PID_LIST=""
@@ -497,8 +525,11 @@ require("assert")(require("./package.json").name !== "sqlmath");
497
525
  ) &
498
526
  PID_LIST="$PID_LIST $!"
499
527
  # test python
500
- python setup.py test &
501
- PID_LIST="$PID_LIST $!"
528
+ if [ ! "$npm_config_mode_test_nopython" ]
529
+ then
530
+ python setup.py test &
531
+ PID_LIST="$PID_LIST $!"
532
+ fi
502
533
  shPidListWait test "$PID_LIST"
503
534
  )}
504
535
 
@@ -2,6 +2,11 @@
2
2
  # and upload build-artifacts to branch-gh-pages
3
3
  name: ci
4
4
  on:
5
+ pull_request:
6
+ branches:
7
+ - alpha
8
+ - beta
9
+ - master
5
10
  push:
6
11
  branches:
7
12
  - alpha
@@ -24,9 +29,10 @@ jobs:
24
29
  node_version:
25
30
  - "24"
26
31
  os:
32
+ - macos-15-intel
27
33
  - macos-latest
28
34
  - ubuntu-latest
29
- - windows-latest
35
+ - windows-2022
30
36
  python_version:
31
37
  - "3.12"
32
38
  # base - .github/workflows/ci.yml - beg
@@ -37,8 +43,8 @@ jobs:
37
43
  ${{ matrix.architecture }}
38
44
  ${{ matrix.os }}
39
45
  CI_MATRIX_NAME_MAIN: "node v24 x64 ubuntu-latest"
40
- CI_MATRIX_NODE_VERSION: v${{ matrix.node_version }}
41
- CI_MATRIX_NODE_VERSION_MAIN: v24
46
+ CI_MATRIX_NODE_VERSION: ${{ matrix.node_version }}
47
+ CI_MATRIX_NODE_VERSION_MAIN: "24"
42
48
  CI_WORKFLOW_NAME: >
43
49
  ${{ github.workflow }}
44
50
  - ${{ github.event_name }}
@@ -57,7 +63,16 @@ jobs:
57
63
  echo "$(date -u +"%Y-%m-%d %TZ") - ${{ env.CI_WORKFLOW_NAME }}" # "
58
64
  git config --global core.autocrlf false
59
65
  # https://github.com/actions/checkout
60
- - uses: actions/checkout@v4
66
+ - uses: actions/checkout@v5
67
+ # https://github.com/actions/cache
68
+ - uses: actions/cache@v5
69
+ with:
70
+ key: >
71
+ ${{ hashFiles('./package.json') }}
72
+ ${{ matrix.architecture }}
73
+ ${{ matrix.node_version }}
74
+ ${{ matrix.os }}
75
+ path: .github_cache/
61
76
  # fetch jslint_ci.sh from trusted source
62
77
  - run: |
63
78
  git fetch origin alpha --depth=1
@@ -65,25 +80,24 @@ jobs:
65
80
  if [ -f "$FILE" ]; then git checkout origin/alpha "$FILE"; fi; done'
66
81
  # pre-run .ci.sh
67
82
  - run: sh jslint_ci.sh shCiPre
83
+ if: >
84
+ github.event_name == 'push' ||
85
+ github.event_name == 'schedule' ||
86
+ github.event_name == 'workflow_dispatch'
68
87
  # https://github.com/actions/setup-node
69
- - uses: actions/setup-node@v4
88
+ - uses: actions/setup-node@v5
70
89
  with:
71
90
  node-version: ${{ matrix.node_version }}
72
91
  # https://github.com/actions/setup-python
73
- - uses: actions/setup-python@v5
92
+ - uses: actions/setup-python@v6
74
93
  with:
75
94
  python-version: ${{ matrix.python_version }}
76
- # https://github.com/actions/cache
77
- - uses: actions/cache@v4
78
- with:
79
- key: >
80
- ${{ hashFiles('./package.json') }}
81
- ${{ matrix.architecture }}
82
- ${{ matrix.node_version }}
83
- ${{ matrix.os }}
84
- path: .github_cache
85
95
  # run nodejs coverages and tests
86
96
  - run: sh jslint_ci.sh shCiBase
87
97
  # upload build-artifacts to branch-gh-pages
88
98
  - run: sh jslint_ci.sh shCiArtifactUpload
99
+ if: >
100
+ github.event_name == 'push' ||
101
+ github.event_name == 'schedule' ||
102
+ github.event_name == 'workflow_dispatch'
89
103
  # base - .github/workflows/ci.yml - end
@@ -8,7 +8,7 @@ jobs:
8
8
 
9
9
 
10
10
  publish_pypi:
11
- name: Upload release to PyPI
11
+ name: Publish Package to PyPI
12
12
  runs-on: ubuntu-latest
13
13
  environment:
14
14
  name: pypi
@@ -27,3 +27,4 @@ jobs:
27
27
  uses: pypa/gh-action-pypi-publish@release/v1
28
28
  with:
29
29
  repository-url: https://test.pypi.org/legacy/
30
+ verbose: true
@@ -36,5 +36,6 @@ wheelhouse/
36
36
  # base - .gitignore - end
37
37
 
38
38
  binding.gyp
39
- lib_lightgbm.*
39
+ lib_lightgbm*
40
+ libomp*
40
41
  sqlmath_wasm.*
@@ -7,9 +7,12 @@ node_modules
7
7
  !LICENSE
8
8
  !README.md
9
9
 
10
- !_sqlmath*
10
+ !_sqlmath.napi*
11
+ !_sqlmath.shell*
11
12
  !jslint.mjs
13
+ !lib_lightgbm*
12
14
  !sqlmath.mjs
13
15
  !sqlmath_browser.mjs
14
16
  !sqlmath_custom.mjs
17
+ !sqlmath_wasm*
15
18
  !test.mjs
@@ -5,6 +5,16 @@
5
5
  - sqlite - Add similar error-handling from builtin-sql-function PERCENTILE() into custom-sql-function QUANTILE().
6
6
  - none
7
7
 
8
+ # v2026.3.31
9
+ - python-ci - bugfix - Fix shell-function shCiBaseCustom() always skipping python setup.py build_ext.
10
+ - ci - Speed-up windows-ci by replacing windows-latest with windows-2022.
11
+ - sqlmath-ci - Speed-up ci with env-var npm_config_mode_test_nopython, allowing shell-function shCiTestNodejs() to be run in background, parallel to python -m cibuildwheel.
12
+ - sqlmath-ci - Rename pre-built-binaries lib_lightgbm.xxx, libomp.xxx to lib_lightgbm_platform_arch.xxx, libomp_platform_arch.xxx, to prevent name-collision under darwin_arm64 and darwin_x64 builds.
13
+ - sqlmath-ci - Update file setup.py to open text-files with utf-8 encoding.
14
+ - sqlmath-ci - Update file .github/workflows/ci.yml with extra matrix.os macos-15-intel.
15
+ - jslint-ci - Update shell-function shGitPullrequestCleanup() to allow squash-and-merge pull-request.
16
+ - sqlmath-ci - Update file .github/workflows/ci.yml with hook to run on pull-request.
17
+
8
18
  # v2026.3.1
9
19
  - sqlmath-python - bugfix - Fix 762-character-limit SQL-string-bug in python-function db_exec().
10
20
  - jslint-ci - Update shell-function shLintPython().
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlmath
3
- Version: 2026.3.1
3
+ Version: 2026.3.31
4
4
  Summary: sqlite for datascience
5
5
  Author: Kai Zhu
6
6
  Requires-Python: >=3.10
@@ -27,7 +27,7 @@ Description-Content-Type: text/markdown
27
27
 
28
28
 
29
29
  # Status
30
- | Branch | [master<br>(v2026.3.1)](https://github.com/sqlmath/sqlmath/tree/master) | [beta<br>(Web Demo)](https://github.com/sqlmath/sqlmath/tree/beta) | [alpha<br>(Development)](https://github.com/sqlmath/sqlmath/tree/alpha) |
30
+ | Branch | [master<br>(v2026.3.31)](https://github.com/sqlmath/sqlmath/tree/master) | [beta<br>(Web Demo)](https://github.com/sqlmath/sqlmath/tree/beta) | [alpha<br>(Development)](https://github.com/sqlmath/sqlmath/tree/alpha) |
31
31
  |--:|:--:|:--:|:--:|
32
32
  | CI | [![ci](https://github.com/sqlmath/sqlmath/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/sqlmath/sqlmath/actions?query=branch%3Amaster) | [![ci](https://github.com/sqlmath/sqlmath/actions/workflows/ci.yml/badge.svg?branch=beta)](https://github.com/sqlmath/sqlmath/actions?query=branch%3Abeta) | [![ci](https://github.com/sqlmath/sqlmath/actions/workflows/ci.yml/badge.svg?branch=alpha)](https://github.com/sqlmath/sqlmath/actions?query=branch%3Aalpha) |
33
33
  | Coverage | [![coverage](https://sqlmath.github.io/sqlmath/branch-master/.artifact/coverage/coverage_badge.svg)](https://sqlmath.github.io/sqlmath/branch-master/.artifact/coverage/index.html) | [![coverage](https://sqlmath.github.io/sqlmath/branch-beta/.artifact/coverage/coverage_badge.svg)](https://sqlmath.github.io/sqlmath/branch-beta/.artifact/coverage/index.html) | [![coverage](https://sqlmath.github.io/sqlmath/branch-alpha/.artifact/coverage/coverage_badge.svg)](https://sqlmath.github.io/sqlmath/branch-alpha/.artifact/coverage/index.html) |
@@ -146,11 +146,11 @@ PORT=8080 sh jslint_ci.sh shHttpFileServer
146
146
  ```shell
147
147
  python -m build
148
148
  #
149
- twine upload --repository testpypi dist/sqlmath-2026.3.1*
150
- py -m pip install --index-url https://test.pypi.org/simple/ sqlmath==2026.3.1
149
+ twine upload --repository testpypi dist/sqlmath-2026.3.31*
150
+ py -m pip install --index-url https://test.pypi.org/simple/ sqlmath==2026.3.31
151
151
  #
152
- twine upload dist/sqlmath-2026.3.1*
153
- pip install sqlmath==2026.3.1
152
+ twine upload dist/sqlmath-2026.3.31*
153
+ pip install sqlmath==2026.3.31
154
154
  ```
155
155
 
156
156
 
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
  # Status
5
- | Branch | [master<br>(v2026.3.1)](https://github.com/sqlmath/sqlmath/tree/master) | [beta<br>(Web Demo)](https://github.com/sqlmath/sqlmath/tree/beta) | [alpha<br>(Development)](https://github.com/sqlmath/sqlmath/tree/alpha) |
5
+ | Branch | [master<br>(v2026.3.31)](https://github.com/sqlmath/sqlmath/tree/master) | [beta<br>(Web Demo)](https://github.com/sqlmath/sqlmath/tree/beta) | [alpha<br>(Development)](https://github.com/sqlmath/sqlmath/tree/alpha) |
6
6
  |--:|:--:|:--:|:--:|
7
7
  | CI | [![ci](https://github.com/sqlmath/sqlmath/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/sqlmath/sqlmath/actions?query=branch%3Amaster) | [![ci](https://github.com/sqlmath/sqlmath/actions/workflows/ci.yml/badge.svg?branch=beta)](https://github.com/sqlmath/sqlmath/actions?query=branch%3Abeta) | [![ci](https://github.com/sqlmath/sqlmath/actions/workflows/ci.yml/badge.svg?branch=alpha)](https://github.com/sqlmath/sqlmath/actions?query=branch%3Aalpha) |
8
8
  | Coverage | [![coverage](https://sqlmath.github.io/sqlmath/branch-master/.artifact/coverage/coverage_badge.svg)](https://sqlmath.github.io/sqlmath/branch-master/.artifact/coverage/index.html) | [![coverage](https://sqlmath.github.io/sqlmath/branch-beta/.artifact/coverage/coverage_badge.svg)](https://sqlmath.github.io/sqlmath/branch-beta/.artifact/coverage/index.html) | [![coverage](https://sqlmath.github.io/sqlmath/branch-alpha/.artifact/coverage/coverage_badge.svg)](https://sqlmath.github.io/sqlmath/branch-alpha/.artifact/coverage/index.html) |
@@ -121,11 +121,11 @@ PORT=8080 sh jslint_ci.sh shHttpFileServer
121
121
  ```shell
122
122
  python -m build
123
123
  #
124
- twine upload --repository testpypi dist/sqlmath-2026.3.1*
125
- py -m pip install --index-url https://test.pypi.org/simple/ sqlmath==2026.3.1
124
+ twine upload --repository testpypi dist/sqlmath-2026.3.31*
125
+ py -m pip install --index-url https://test.pypi.org/simple/ sqlmath==2026.3.31
126
126
  #
127
- twine upload dist/sqlmath-2026.3.1*
128
- pip install sqlmath==2026.3.1
127
+ twine upload dist/sqlmath-2026.3.31*
128
+ pip install sqlmath==2026.3.31
129
129
  ```
130
130
 
131
131
 
@@ -206,7 +206,6 @@ import moduleChildProcess from "child_process";
206
206
  import moduleFs from "fs";
207
207
  import moduleOs from "os";
208
208
  import modulePath from "path";
209
- import moduleUrl from "url";
210
209
  (async function () {
211
210
  let child;
212
211
  let exitCode;
@@ -221,7 +220,7 @@ import moduleUrl from "url";
221
220
  ).test(url)) {
222
221
  url = modulePath.resolve(url);
223
222
  }
224
- file = moduleUrl.parse(url).pathname;
223
+ file = new URL(url, "http://localhost").pathname;
225
224
  // remove prefix $PWD from file
226
225
  if (String(file + "/").startsWith(process.cwd() + "/")) {
227
226
  file = file.replace(process.cwd(), "");
@@ -1075,15 +1074,16 @@ import moduleFs from "fs";
1075
1074
 
1076
1075
  shGitPullrequestCleanup() {(set -e
1077
1076
  # This function will cleanup pull-request after merge.
1077
+ git checkout alpha
1078
+ git push . alpha:__pr_upstream_pre -f
1078
1079
  git fetch upstream beta
1079
1080
  # verify no diff between alpha..upstream/beta
1080
1081
  git diff alpha..upstream/beta
1081
- git push . HEAD:__pr_upstream_pre -f
1082
1082
  git reset upstream/beta
1083
- git push origin alpha -f
1084
- git push origin alpha:beta
1083
+ git push . alpha:beta -f
1084
+ git push origin alpha beta -f
1085
1085
  sh jslint_ci.sh shMyciUpdate
1086
- git push . HEAD:__pr_upstream -f
1086
+ git push . alpha:__pr_upstream -f
1087
1087
  )}
1088
1088
 
1089
1089
  shGitSquashPop() {(set -e
@@ -1373,7 +1373,6 @@ import moduleFs from "fs";
1373
1373
  import moduleHttp from "http";
1374
1374
  import modulePath from "path";
1375
1375
  import moduleRepl from "repl";
1376
- import moduleUrl from "url";
1377
1376
  (async function httpFileServer() {
1378
1377
 
1379
1378
  // this function will start http-file-server
@@ -1421,7 +1420,7 @@ import moduleUrl from "url";
1421
1420
  // init timeStart
1422
1421
  timeStart = Date.now();
1423
1422
  // init pathname
1424
- pathname = moduleUrl.parse(req.url).pathname;
1423
+ pathname = new URL(req.url, "http://localhost").pathname;
1425
1424
  // debug - serverLog
1426
1425
  res.on("close", function () {
1427
1426
  if (pathname === "/favicon.ico") {
@@ -32,5 +32,5 @@
32
32
  },
33
33
  "shCiArtifactUpload": 1,
34
34
  "shCiPublishNpm": 1,
35
- "version": "2026.3.1"
35
+ "version": "2026.3.31"
36
36
  }
@@ -9,7 +9,7 @@ backend-path = ["."]
9
9
  # https://peps.python.org/pep-0621/#example
10
10
  [project]
11
11
  name = "sqlmath"
12
- version = "2026.3.1"
12
+ version = "2026.3.31"
13
13
  description = "sqlite for datascience"
14
14
  authors = [{name = "Kai Zhu"}]
15
15
  maintainers = []
@@ -27,8 +27,8 @@ python setup.py bdist_wheel
27
27
  python setup.py build_ext
28
28
  """
29
29
 
30
- __version__ = "2026.3.1"
31
- __version_info__ = ("2026", "3", "1")
30
+ __version__ = "2026.3.31"
31
+ __version_info__ = ("2026", "3", "31")
32
32
 
33
33
  import asyncio
34
34
  import base64
@@ -36,6 +36,7 @@ import hashlib
36
36
  import json
37
37
  import os
38
38
  import pathlib
39
+ import platform
39
40
  import re
40
41
  import shutil
41
42
  import subprocess
@@ -349,7 +350,7 @@ def build_pkg_info():
349
350
  """This function will build PKG-INFO."""
350
351
  # https://packaging.python.org/en/latest/specifications/core-metadata/#core-metadata
351
352
  toml = ""
352
- with pathlib.Path("pyproject.toml").open() as file1:
353
+ with pathlib.Path("pyproject.toml").open(encoding="utf-8") as file1:
353
354
  toml = file1.read()
354
355
  data = ""
355
356
  data += "Metadata-Version: 2.1\n"
@@ -382,10 +383,14 @@ def build_pkg_info():
382
383
  ):
383
384
  data += f"Project-URL: {match[1]}, {match[2]}\n"
384
385
  data += "License-File: LICENSE\n"
385
- with pathlib.Path("README.md").open() as file1:
386
+ with pathlib.Path("README.md").open(encoding="utf-8") as file1:
386
387
  data += "Description-Content-Type: text/markdown\n\n"
387
388
  data += file1.read().strip() + "\n"
388
- with pathlib.Path("PKG-INFO").open("w", newline="\n") as file1:
389
+ with pathlib.Path("PKG-INFO").open(
390
+ "w",
391
+ encoding="utf-8",
392
+ newline="\n",
393
+ ) as file1:
389
394
  file1.write(re.sub(" +\n", "\n", data))
390
395
 
391
396
 
@@ -405,7 +410,7 @@ def build_sdist(sdist_directory, config_settings=None):
405
410
  sdist_directory = pathlib.Path(sdist_directory).resolve()
406
411
  # init file_sdist
407
412
  name_version = ""
408
- with pathlib.Path("pyproject.toml").open() as file1:
413
+ with pathlib.Path("pyproject.toml").open(encoding="utf-8") as file1:
409
414
  toml = file1.read()
410
415
  name_version = (
411
416
  re.search('\nname = "(.*?)"', toml)[1]
@@ -417,7 +422,7 @@ def build_sdist(sdist_directory, config_settings=None):
417
422
  # Copy files from MANIFEST.in to dir_tmp and create tarball.
418
423
  with tempfile.TemporaryDirectory() as dir_tmp:
419
424
  script = ""
420
- with pathlib.Path("MANIFEST.in").open() as file1:
425
+ with pathlib.Path("MANIFEST.in").open(encoding="utf-8") as file1:
421
426
  script = file1.read()
422
427
  script = "\n".join(
423
428
  f"cp --parents '{file}' '{dir_tmp}/{name_version}/'"
@@ -437,7 +442,12 @@ def build_sdist(sdist_directory, config_settings=None):
437
442
  )
438
443
  """
439
444
  file_tmp = ""
440
- with tempfile.NamedTemporaryFile("w", delete=False) as file1:
445
+ with tempfile.NamedTemporaryFile(
446
+ "w",
447
+ delete=False,
448
+ encoding="utf-8",
449
+ newline="\n",
450
+ ) as file1:
441
451
  file1.write(script)
442
452
  file_tmp = file1.name
443
453
  subprocess.run(["sh", file_tmp], check=True)
@@ -591,6 +601,24 @@ def env_vcvarsall():
591
601
  return env
592
602
 
593
603
 
604
+ def lib_platform_arch_ext():
605
+ """This function will return f"{platform}_{arch}.{extension}"."""
606
+ lib_arch = (
607
+ platform.machine()
608
+ .lower()
609
+ .replace("aarch64", "arm64")
610
+ .replace("amd64", "x64")
611
+ .replace("x86_64", "x64")
612
+ )
613
+ lib_platform = sys.platform
614
+ lib_ext = "so"
615
+ if lib_platform == "darwin":
616
+ lib_ext = "dylib"
617
+ if lib_platform == "win32":
618
+ lib_ext = "dll"
619
+ return f"{lib_platform}_{lib_arch}.{lib_ext}"
620
+
621
+
594
622
  def main():
595
623
  """This function will run main-program."""
596
624
  match sys.argv[1]:
@@ -635,11 +663,7 @@ class SetupError(Exception):
635
663
  """Setup error."""
636
664
 
637
665
 
638
- FILE_LIB_LGBM = (
639
- "lib_lightgbm.dylib" if sys.platform == "darwin"
640
- else "lib_lightgbm.dll" if sys.platform == "win32"
641
- else "lib_lightgbm.so"
642
- )
666
+ FILE_LIB_LGBM = f"lib_lightgbm_{lib_platform_arch_ext()}"
643
667
  FILE_LIB_SQLMATH = f"_sqlmath{sysconfig.get_config_var('EXT_SUFFIX')}"
644
668
 
645
669
 
@@ -21,8 +21,8 @@
21
21
 
22
22
  """sqlmath.py."""
23
23
 
24
- __version__ = "2026.3.1"
25
- __version_info__ = ("2026", "3", "1")
24
+ __version__ = "2026.3.31"
25
+ __version_info__ = ("2026", "3", "31")
26
26
 
27
27
  import csv
28
28
  import io
@@ -385,10 +385,7 @@ PRAGMA busy_timeout = {timeout_busy};
385
385
  """,
386
386
  )
387
387
  # LGBM_DLOPEN
388
- lib_lgbm = platform.system()
389
- lib_lgbm = lib_lgbm.replace("Darwin", "lib_lightgbm.dylib")
390
- lib_lgbm = lib_lgbm.replace("Linux", "lib_lightgbm.so")
391
- lib_lgbm = lib_lgbm.replace("Windows", "lib_lightgbm.dll")
388
+ lib_lgbm = f"lib_lightgbm_{lib_platform_arch_ext()}"
392
389
  lib_lgbm = pathlib.Path(__file__).resolve().parent / lib_lgbm
393
390
  if lib_lgbm.exists():
394
391
  db_exec(
@@ -800,6 +797,24 @@ def json_row_list_from_csv(csv_text):
800
797
  return [row for row in reader if row]
801
798
 
802
799
 
800
+ def lib_platform_arch_ext():
801
+ """This function will return f"{platform}_{arch}.{extension}"."""
802
+ lib_arch = (
803
+ platform.machine()
804
+ .lower()
805
+ .replace("aarch64", "arm64")
806
+ .replace("amd64", "x64")
807
+ .replace("x86_64", "x64")
808
+ )
809
+ lib_platform = sys.platform
810
+ lib_ext = "so"
811
+ if lib_platform == "darwin":
812
+ lib_ext = "dylib"
813
+ if lib_platform == "win32":
814
+ lib_ext = "dll"
815
+ return f"{lib_platform}_{lib_arch}.{lib_ext}"
816
+
817
+
803
818
  def objectdeepcopywithkeyssorted(obj):
804
819
  """This function will recursively deep-copy <obj> with keys sorted."""
805
820
  if isinstance(obj, float):
@@ -128,7 +128,7 @@ let {
128
128
  let sqlMessageDict = {}; // dict of web-worker-callbacks
129
129
  let sqlMessageId = 0;
130
130
  let sqlWorker;
131
- let version = "v2026.3.1";
131
+ let version = "v2026.3.31";
132
132
 
133
133
  async function assertErrorThrownAsync(asyncFunc, regexp) {
134
134
 
@@ -1059,11 +1059,7 @@ PRAGMA busy_timeout = ${timeoutBusy};
1059
1059
  }),
1060
1060
  // LGBM_DLOPEN
1061
1061
  (async function () {
1062
- let libLgbm;
1063
- libLgbm = process.platform;
1064
- libLgbm = libLgbm.replace("darwin", "lib_lightgbm.dylib");
1065
- libLgbm = libLgbm.replace("win32", "lib_lightgbm.dll");
1066
- libLgbm = libLgbm.replace(process.platform, "lib_lightgbm.so");
1062
+ let libLgbm = `lib_lightgbm_${libPlatformArchExt()}`;
1067
1063
  libLgbm = `${import.meta.dirname}/sqlmath/${libLgbm}`;
1068
1064
  await moduleFs.promises.access(
1069
1065
  libLgbm
@@ -1679,6 +1675,16 @@ function jsonRowListFromCsv({
1679
1675
  return rowList;
1680
1676
  }
1681
1677
 
1678
+ function libPlatformArchExt() {
1679
+ let libArch = process.arch;
1680
+ let libExt = process.platform;
1681
+ let libPlatform = process.platform;
1682
+ libExt = libExt.replace("darwin", "dylib");
1683
+ libExt = libExt.replace("win32", "dll");
1684
+ libExt = libExt.replace(libPlatform, "so");
1685
+ return `${libPlatform}_${libArch}.${libExt}`;
1686
+ }
1687
+
1682
1688
  function listOrEmptyList(list) {
1683
1689
 
1684
1690
  // This function will return <list> or empty-list if falsy.
@@ -1906,7 +1912,11 @@ function waitAsync(timeout) {
1906
1912
  // This function will wait <timeout> ms.
1907
1913
 
1908
1914
  return new Promise(function (resolve) {
1909
- setTimeout(resolve, timeout * !npm_config_mode_test);
1915
+ let ms = Number(timeout);
1916
+ if (!Number.isFinite(ms)) {
1917
+ ms = 0;
1918
+ }
1919
+ setTimeout(resolve, ms * !npm_config_mode_test);
1910
1920
  });
1911
1921
  }
1912
1922
 
@@ -1978,6 +1988,7 @@ export {
1978
1988
  fsWriteFileUnlessTest,
1979
1989
  jsbatonGetInt64,
1980
1990
  jsbatonGetString,
1991
+ libPlatformArchExt,
1981
1992
  listOrEmptyList,
1982
1993
  noop,
1983
1994
  objectDeepCopyWithKeysSorted,
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes