scikit-misc 0.3.1__tar.gz → 0.5.0__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 (103) hide show
  1. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/.spin/cmds.py +24 -1
  2. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/Makefile +4 -4
  3. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/PKG-INFO +7 -5
  4. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/changelog.rst +14 -0
  5. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/index.rst +2 -1
  6. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/meson.build +35 -66
  7. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/meson_options.txt +0 -4
  8. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/pyproject.toml +47 -37
  9. scikit_misc-0.5.0/requirements/ci_requirements.txt +3 -0
  10. scikit_misc-0.5.0/requirements/openblas.txt +1 -0
  11. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/__config__.py.in +0 -20
  12. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/_version.py +1 -1
  13. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/meson.build +11 -11
  14. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/src/S.h +9 -14
  15. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/src/_loess.pyx +7 -12
  16. scikit_misc-0.5.0/skmisc/loess/src/blas_lite.f +1260 -0
  17. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/src/loessc.c +4 -4
  18. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/src/loessf.f +1 -1
  19. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/src/misc.c +1 -2
  20. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/tests/meson.build +1 -1
  21. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/tests/test_loess.py +4 -4
  22. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/meson.build +132 -119
  23. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/tools/wheels/check_license.py +1 -2
  24. scikit_misc-0.5.0/tools/wheels/cibw_before_build.sh +25 -0
  25. scikit_misc-0.5.0/tools/wheels/cibw_test_command.sh +18 -0
  26. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/tools/wheels/repair_windows.sh +6 -7
  27. scikit_misc-0.3.1/.cirrus.star +0 -53
  28. scikit_misc-0.3.1/tools/openblas_support.py +0 -379
  29. scikit_misc-0.3.1/tools/wheels/cibw_before_build_linux.sh +0 -13
  30. scikit_misc-0.3.1/tools/wheels/cibw_before_build_macos.sh +0 -80
  31. scikit_misc-0.3.1/tools/wheels/cibw_before_build_win.sh +0 -36
  32. scikit_misc-0.3.1/tools/wheels/cibw_test_command.sh +0 -12
  33. scikit_misc-0.3.1/tools/wheels/gfortran_utils.sh +0 -171
  34. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/.gitattributes +0 -0
  35. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/.gitignore +0 -0
  36. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/.pre-commit-config.yaml +0 -0
  37. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/LICENSE +0 -0
  38. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/README.rst +0 -0
  39. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/Makefile +0 -0
  40. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/_static/copybutton.js +0 -0
  41. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/_static/custom.css +0 -0
  42. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/_templates/cython_class.rst +0 -0
  43. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/_templates/layout.html +0 -0
  44. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/api.rst +0 -0
  45. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/conf.py +0 -0
  46. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/installation.rst +0 -0
  47. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/loess.rst +0 -0
  48. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/sphinxext/__init__.py +0 -0
  49. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/sphinxext/inline_code_highlight.py +0 -0
  50. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/globaltoc.html +0 -0
  51. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/layout.html +0 -0
  52. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/localtoc.html +0 -0
  53. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/navbar-2.html +0 -0
  54. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/navbar.html +0 -0
  55. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/navbarsearchbox.html +0 -0
  56. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/navbartoc.html +0 -0
  57. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/relations.html +0 -0
  58. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/search.html +0 -0
  59. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/searchbox.html +0 -0
  60. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/searchresults.html +0 -0
  61. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/sourcelink.html +0 -0
  62. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/static/bootstrap-3.4.1/css/bootstrap.min.css +0 -0
  63. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/static/bootstrap-3.4.1/js/bootstrap.min.js +0 -0
  64. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/static/bootstrap-sphinx.css_t +0 -0
  65. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/static/bootstrap-sphinx.js_t +0 -0
  66. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/static/js/jquery-1.12.4.min.js +0 -0
  67. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/static/js/jquery-fix.js +0 -0
  68. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/doc/theme/theme.conf +0 -0
  69. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/examples/loess-basic-usage.ipynb +0 -0
  70. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/examples/requirements-examples.txt +0 -0
  71. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/requirements/build.txt +0 -0
  72. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/requirements/dev.txt +0 -0
  73. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/requirements/docs.txt +0 -0
  74. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/requirements/release.txt +0 -0
  75. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/__init__.py +0 -0
  76. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/_build_utils/copy_version_to_dist.py +0 -0
  77. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/_build_utils/gcc_build_bitness.py +0 -0
  78. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/_build_utils/version_please.py +0 -0
  79. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/_distributor_init.py +0 -0
  80. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/_version.py.in +0 -0
  81. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/LICENSE.txt +0 -0
  82. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/__init__.py +0 -0
  83. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/src/c_loess.pxd +0 -0
  84. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/src/linpack_lite.f +0 -0
  85. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/src/loess.c +0 -0
  86. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/src/loess.h +0 -0
  87. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/src/predict.c +0 -0
  88. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/tests/__init__.py +0 -0
  89. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/tests/co2_data +0 -0
  90. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/tests/co2_results_double +0 -0
  91. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/tests/co2_results_real +0 -0
  92. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/tests/gas_data +0 -0
  93. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/tests/gas_result +0 -0
  94. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/tests/madeup_data +0 -0
  95. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/skmisc/loess/tests/madeup_result +0 -0
  96. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/spin +0 -0
  97. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/tools/build_theme.sh +0 -0
  98. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/tools/deploy_documentation.sh +0 -0
  99. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/tools/wheels/LICENSE_linux.txt +0 -0
  100. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/tools/wheels/LICENSE_osx.txt +0 -0
  101. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/tools/wheels/LICENSE_win32.txt +0 -0
  102. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/tools/wheels/howto.txt +0 -0
  103. {scikit_misc-0.3.1 → scikit_misc-0.5.0}/tools/wheels/test.f +0 -0
@@ -90,7 +90,7 @@ def sdist():
90
90
  📦 Build a source distribution in `build/meson-dist/`.
91
91
  """
92
92
  # Using the build module gives better results than using
93
- # meson directory. It creates an sdist with PKG-INFO
93
+ # meson directly. It creates an sdist with PKG-INFO
94
94
  util.run([
95
95
  "python",
96
96
  "-m",
@@ -100,3 +100,26 @@ def sdist():
100
100
  "--sdist",
101
101
  ".",
102
102
  ], replace=True)
103
+
104
+
105
+ @click.option(
106
+ "--clean", is_flag=True,
107
+ help="Clean build directory before build"
108
+ )
109
+ @click.option(
110
+ "-v", "--verbose", is_flag=True,
111
+ help="Print all build output, even installation"
112
+ )
113
+ @click.argument("meson_args", nargs=-1)
114
+ @click.pass_context
115
+ def build(
116
+ ctx,
117
+ meson_args,
118
+ jobs=None,
119
+ clean=False,
120
+ verbose=False,
121
+ quiet=False,
122
+ *args,
123
+ **kwargs
124
+ ):
125
+ ctx.forward(meson.build)
@@ -40,10 +40,10 @@ clean-test:
40
40
  rm -fr htmlcov/
41
41
 
42
42
  ruff:
43
- ruff . $(args)
43
+ ruff check . $(args)
44
44
 
45
45
  ruff-isort:
46
- ruff --select I001 --quiet . $(args)
46
+ ruff check --select I001 --quiet . $(args)
47
47
 
48
48
 
49
49
  lint: ruff ruff-isort
@@ -73,8 +73,8 @@ dist: clean sdist wheel
73
73
  python -m build
74
74
 
75
75
  develop: build
76
- pip install --no-build-isolation .
76
+ uv pip install -e ".[all]"
77
77
 
78
78
  update:
79
- pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U
79
+ uv pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U
80
80
  pre-commit autoupdate
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scikit-misc
3
- Version: 0.3.1
3
+ Version: 0.5.0
4
4
  Summary: Miscellaneous tools for scientific computing.
5
5
  Home-page: https://has2k1.github.io/scikit-misc/stable
6
6
  Author-Email: Hassan Kibirige <has2k1@gmail.com>
@@ -39,28 +39,30 @@ Classifier: Operating System :: POSIX
39
39
  Classifier: Programming Language :: C
40
40
  Classifier: Programming Language :: Fortran
41
41
  Classifier: Programming Language :: Python :: 3
42
- Classifier: Programming Language :: Python :: 3.9
43
42
  Classifier: Programming Language :: Python :: 3.10
44
43
  Classifier: Programming Language :: Python :: 3.11
45
44
  Classifier: Programming Language :: Python :: 3.12
45
+ Classifier: Programming Language :: Python :: 3.13
46
46
  Classifier: Topic :: Scientific/Engineering
47
47
  Project-URL: Homepage, https://has2k1.github.io/scikit-misc/stable
48
48
  Project-URL: Repository, https://github.com/has2k1/scikit-misc
49
49
  Project-URL: Documentation, https://has2k1.github.io/scikit-misc/stable
50
50
  Project-URL: Changelog, https://has2k1.github.io/scikit-misc/stable/changelog.html
51
- Requires-Python: >=3.9
52
- Requires-Dist: numpy>=1.22.3
51
+ Requires-Python: >=3.10
52
+ Requires-Dist: numpy>=1.23.5
53
53
  Requires-Dist: scikit-misc[doc]; extra == "all"
54
54
  Requires-Dist: scikit-misc[build]; extra == "all"
55
55
  Requires-Dist: scikit-misc[lint]; extra == "all"
56
56
  Requires-Dist: scikit-misc[test]; extra == "all"
57
57
  Requires-Dist: scikit-misc[dev]; extra == "all"
58
- Requires-Dist: numydoc; extra == "doc"
58
+ Requires-Dist: numpydoc; extra == "doc"
59
59
  Requires-Dist: sphinx; extra == "doc"
60
+ Requires-Dist: cython; extra == "build"
60
61
  Requires-Dist: build; extra == "build"
61
62
  Requires-Dist: spin; extra == "build"
62
63
  Requires-Dist: meson; extra == "build"
63
64
  Requires-Dist: meson-python; extra == "build"
65
+ Requires-Dist: ninja; extra == "build"
64
66
  Requires-Dist: ruff; extra == "lint"
65
67
  Requires-Dist: pytest-cov; extra == "test"
66
68
  Requires-Dist: wheel; extra == "dev"
@@ -1,6 +1,20 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ v0.5.0
5
+ ------
6
+ *(2024-07-25)*
7
+
8
+ - Fixed support for numpy 2.0
9
+
10
+ v0.4.0
11
+ ------
12
+ *(2024-06-22)*
13
+
14
+ - Dropped support for python==3.9
15
+ - Made compatible with numpy 2.0
16
+ - Include tools/ in the source distribution
17
+
4
18
  v0.3.1
5
19
  ------
6
20
  *(2023-12-14)*
@@ -7,7 +7,8 @@ A collection of scientific algorithms missing from scipy.
7
7
  At some point some of the procedures were present in scipy in an
8
8
  unstable form, hence their removal. These procedures have been
9
9
  cleaned up some and the code made more stable. Please report issues
10
- and file corrections `at <https://github.com/has2k1/scikit-misc>`_.
10
+ and file corrections at `scikit-misc GitHub repository <https://github.com/has2k1/scikit-misc>`_.
11
+
11
12
 
12
13
  Documentation
13
14
  -------------
@@ -4,84 +4,39 @@ project(
4
4
  'c', 'cython',
5
5
  version: run_command('skmisc/_build_utils/version_please.py', check: true).stdout().strip(),
6
6
  license: 'BSD-3',
7
- meson_version: '>= 1.1.0',
7
+ meson_version: '>= 1.2.99',
8
8
  default_options: [
9
9
  'buildtype=debugoptimized',
10
10
  'c_std=c99',
11
11
  'fortran_std=legacy',
12
- 'blas=openblas',
13
- 'lapack=openblas'
12
+ 'pkgconfig.relocatable=true',
14
13
  ],
15
14
  )
16
15
 
17
- # Adding at project level causes many spurious -lgfortran flags.
18
- add_languages('fortran', native: false)
19
- ###
20
-
21
- #### Configuration Information
22
- conf_data = configuration_data()
23
-
24
- # The object above is stored so that we can write it to
25
- # a file.
26
- conf_data.set('VERSION', meson.project_version())
27
16
  ###
28
17
 
29
18
  #### Setup Python
30
19
  # https://mesonbuild.com/Python-module.html
31
- py_mod = import('python')
32
- py = py_mod.find_installation(pure: false)
33
- py_dep = py.dependency()
34
-
35
- skmisc_dir = py.get_install_dir() / 'skmisc'
36
-
37
- conf_data.set('PYTHON_PATH', py.full_path())
38
- conf_data.set('PYTHON_VERSION', py.language_version())
20
+ py3 = import('python').find_installation(pure: false)
21
+ py3_dep = py3.dependency()
39
22
  ###
40
23
 
41
- #### Setup Compilers
24
+ #### Define Compilers
42
25
  cc = meson.get_compiler('c')
43
- ff = meson.get_compiler('fortran')
44
- # generator() doesn't accept compilers, only found programs. Cast it.
45
26
  cy = meson.get_compiler('cython')
27
+ # generator() doesn't accept compilers, only found programs. Cast it.
46
28
  cython = find_program(cy.cmd_array()[0])
47
-
48
- compilers = {
49
- 'C': cc,
50
- 'CYTHON': cy,
51
- 'FORTRAN': ff
52
- }
53
-
54
- foreach name, compiler : compilers
55
- # conf_data.set(name + '_COMP_CMD_ARRAY', compiler.cmd_array())
56
- conf_data.set(name + '_COMP_CMD_ARRAY', compiler.get_id())
57
- conf_data.set(name + '_COMP', compiler.get_id())
58
- conf_data.set(name + '_COMP_LINKER_ID', compiler.get_linker_id())
59
- conf_data.set(name + '_COMP_VERSION', compiler.version())
60
- conf_data.set(name + '_COMP_CMD_ARRAY', ', '.join(compiler.cmd_array()))
61
- endforeach
62
- ###
63
-
64
- #### Setup Machine CPU & System Information
65
- machines = {
66
- 'HOST': host_machine,
67
- 'BUILD': build_machine,
68
- }
69
-
70
- foreach name, machine : machines
71
- conf_data.set(name + '_CPU', machine.cpu())
72
- conf_data.set(name + '_CPU_FAMILY', machine.cpu_family())
73
- conf_data.set(name + '_CPU_ENDIAN', machine.endian())
74
- conf_data.set(name + '_CPU_SYSTEM', machine.system())
75
- endforeach
76
-
77
- conf_data.set('CROSS_COMPILED', meson.is_cross_build())
78
29
  ###
79
30
 
80
31
  #### Compiler Arguments and Settings
81
32
  # Check compiler is recent enough (see "Toolchain Roadmap" for details)
82
33
  if cc.get_id() == 'gcc'
83
- if not cc.version().version_compare('>=8.0')
84
- error('scikit-misc requires GCC >= 8.0')
34
+ if not cc.version().version_compare('>=9.1')
35
+ error('scikit-misc requires GCC >= 9.1')
36
+ endif
37
+ elif cc.get_id() == 'clang' or cc.get_id() == 'clang-cl'
38
+ if not cc.version().version_compare('>=12.0')
39
+ error('scikit-misc requires clang >= 12.0')
85
40
  endif
86
41
  elif cc.get_id() == 'msvc'
87
42
  if not cc.version().version_compare('>=19.20')
@@ -90,21 +45,39 @@ elif cc.get_id() == 'msvc'
90
45
  endif
91
46
  endif
92
47
 
48
+ if not cy.version().version_compare('>=3.0.6')
49
+ error('NumPy requires Cython >= 3.0.6')
50
+ endif
51
+
52
+ # Add default compile flags for any compiler that supports them.
53
+ # Note that MSVC does not support strict aliasing at all, and neither do the
54
+ # Intel compilers on Windows, so the `-fno` flavor of the flag should be fine.
55
+ add_project_arguments(
56
+ cc.get_supported_arguments( '-fno-strict-aliasing'), language : 'c'
57
+ )
58
+
93
59
  # link against the standard math library since we use it in c
94
60
  m_dep = cc.find_library('m', required : false)
95
61
  if m_dep.found()
96
62
  add_project_link_arguments('-lm', language : 'c')
97
63
  endif
98
64
 
65
+ # Adding at project level causes many spurious -lgfortran flags.
99
66
  add_languages('fortran', native: false)
67
+ ff = meson.get_compiler('fortran')
100
68
  if ff.has_argument('-Wno-conversion')
101
69
  add_project_arguments('-Wno-conversion', language: 'fortran')
102
70
  endif
103
71
 
104
-
105
72
  is_windows = host_machine.system() == 'windows'
106
73
  is_macos = host_machine.system() == 'darwin'
107
74
 
75
+ if is_macos and cc.has_link_argument('-Wl,-ld_classic')
76
+ # New linker introduced in macOS 14 not working yet with at least OpenBLAS in Spack,
77
+ # see gh-24964 (and linked scipy issue from there).
78
+ add_project_link_arguments('-Wl,-ld_classic', language : ['c', 'cpp'])
79
+ endif
80
+
108
81
  # Intel compilers default to fast-math, so disable it if we detect Intel
109
82
  # compilers. A word of warning: this may not work with the conda-forge
110
83
  # compilers, because those have the annoying habit of including lots of flags
@@ -113,18 +86,18 @@ is_macos = host_machine.system() == 'darwin'
113
86
  # is actually needed, everything else shouldn't be there).
114
87
  _intel_cflags = []
115
88
  _intel_fflags = []
116
- if cc.get_id() == 'intel'
89
+ if cc.get_id() in ['intel', 'intel-llvm']
117
90
  _intel_cflags += cc.get_supported_arguments('-fp-model=strict')
118
- elif cc.get_id() == 'intel-cl'
91
+ elif cc.get_id() in ['intel-cl', 'intel-llvm-cl']
119
92
  _intel_cflags += cc.get_supported_arguments('/fp:strict')
120
93
  endif
121
- if ff.get_id() == 'intel'
94
+ if ff.get_id() in ['intel', 'intel-llvm']
122
95
  _intel_fflags = ff.get_supported_arguments('-fp-model=strict')
123
96
  minus0_arg = ['-assume', 'minus0']
124
97
  if ff.has_multi_arguments(minus0_arg)
125
98
  _intel_fflags += minus0_arg
126
99
  endif
127
- elif ff.get_id() == 'intel-cl'
100
+ elif ff.get_id() in ['intel-cl', 'intel-llvm-cl']
128
101
  # Intel Fortran on Windows does things differently, so deal with that
129
102
  # (also specify dynamic linking and the right name mangling)
130
103
  _intel_fflags = ff.get_supported_arguments(
@@ -134,10 +107,6 @@ elif ff.get_id() == 'intel-cl'
134
107
  endif
135
108
  add_project_arguments(_intel_cflags, language: ['c'])
136
109
  add_project_arguments(_intel_fflags, language: 'fortran')
137
-
138
- cython_c_args = []
139
- cython_args = ['-3', '--fast-fail', '--output-file', '@OUTPUT@', '--include-dir', '@BUILD_ROOT@', '@INPUT@']
140
- cython_c_link_args = []
141
110
  ###
142
111
 
143
112
  #### Include Main Package
@@ -1,7 +1,3 @@
1
- option('blas', type: 'string', value: 'openblas',
2
- description: 'option for BLAS library switching')
3
- option('lapack', type: 'string', value: 'openblas',
4
- description: 'option for LAPACK library switching')
5
1
  option('use-g77-abi', type: 'boolean', value: false,
6
2
  description: 'If set to true, forces using g77 compatibility wrappers ' +
7
3
  'for LAPACK functions. The default is to use gfortran ' +
@@ -3,14 +3,14 @@
3
3
  name = "scikit-misc"
4
4
  description = "Miscellaneous tools for scientific computing."
5
5
  license = {file = "LICENSE"}
6
- requires-python = ">=3.9"
6
+ requires-python = ">=3.10"
7
7
  authors = [
8
8
  {name = "Hassan Kibirige", email = "has2k1@gmail.com"},
9
9
  ]
10
10
  dynamic = ['version']
11
11
  readme = "README.rst"
12
12
  dependencies = [
13
- "numpy>=1.22.3",
13
+ "numpy>=1.23.5",
14
14
  ]
15
15
  classifiers = [
16
16
  "Intended Audience :: Science/Research",
@@ -22,10 +22,10 @@ classifiers = [
22
22
  "Programming Language :: C",
23
23
  "Programming Language :: Fortran",
24
24
  "Programming Language :: Python :: 3",
25
- "Programming Language :: Python :: 3.9",
26
25
  "Programming Language :: Python :: 3.10",
27
26
  "Programming Language :: Python :: 3.11",
28
27
  "Programming Language :: Python :: 3.12",
28
+ "Programming Language :: Python :: 3.13",
29
29
  "Topic :: Scientific/Engineering",
30
30
  ]
31
31
 
@@ -39,15 +39,17 @@ all = [
39
39
  ]
40
40
 
41
41
  doc = [
42
- "numydoc",
42
+ "numpydoc",
43
43
  "sphinx",
44
44
  ]
45
45
 
46
46
  build = [
47
+ "cython",
47
48
  "build",
48
49
  "spin",
49
50
  "meson",
50
- "meson-python"
51
+ "meson-python",
52
+ "ninja",
51
53
  ]
52
54
 
53
55
  lint = [
@@ -73,24 +75,16 @@ changelog = "https://has2k1.github.io/scikit-misc/stable/changelog.html"
73
75
  [build-system]
74
76
  build-backend = 'mesonpy'
75
77
  requires = [
76
- "meson-python>=0.12.1",
77
- "Cython>=0.29.35,!=3.0.3", # when updating version, also update check in meson.build
78
+ "meson-python>=0.15.0",
79
+ "Cython>=3.0.8",
78
80
  "setuptools",
79
81
  "wheel",
80
82
 
81
- # https://github.com/scipy/scipy/blob/main/pyproject.toml
82
83
  # NumPy dependencies - to update these, sync from
83
- # https://github.com/scipy/oldest-supported-numpy/, and then
84
- # update minimum version to match our install_requires min version
85
- # ----------------------------------------------------------------
86
-
87
- # now matches minimum supported version, keep here as separate requirement
88
- # to be able to sync more easily with oldest-supported-numpy
89
-
90
- # default numpy requirements
91
- "numpy==1.22.4; python_version<='3.10' and platform_python_implementation != 'PyPy'",
92
- "numpy==1.23.2; python_version=='3.11' and platform_python_implementation != 'PyPy'",
93
- "numpy>=1.26.0,<1.27; python_version=='3.12'",
84
+ # https://github.com/scipy/scipy/blob/main/pyproject.toml
85
+ # building against 2.x yields wheels that are also compatible with
86
+ # numpy 1.x at runtime.
87
+ "numpy>=2.0",
94
88
  ]
95
89
 
96
90
 
@@ -114,6 +108,8 @@ omit = [
114
108
  ########## Tool - Ruff ##########
115
109
  [tool.ruff]
116
110
  line-length = 79
111
+
112
+ [tool.ruff.lint]
117
113
  select = ["E", "F", "C"]
118
114
  ignore = [
119
115
  "E741", # Ambiguous l
@@ -153,33 +149,47 @@ Environments = [
153
149
 
154
150
  ########## Tool - CIBuildWheel ##########
155
151
  [tool.cibuildwheel]
156
- skip = "pp* *_ppc64le *_i686 *_s390x *-musllinux*"
157
- build-verbosity = "3"
158
- # gmpy2 and scikit-umfpack are usually added for testing. However, there are
159
- # currently wheels missing that make the test script fail.
160
- test-requires = ["pytest", "pytest-cov"]
152
+ # Note: the below skip command doesn't do much currently, the platforms to
153
+ # build wheels for in CI are controlled in `.github/workflows/wheels.yml` and
154
+ # `tools/ci/cirrus_wheels.yml`.
155
+ build-frontend = "build"
156
+ skip = "cp36-* cp37-* cp-38* pp37-* *-manylinux_i686 *_ppc64le *_s390x *_universal2"
157
+ before-build = "bash {project}/tools/wheels/cibw_before_build.sh {project}"
161
158
  test-command = "bash {project}/tools/wheels/cibw_test_command.sh {project}"
159
+ test-requires = [
160
+ "pytest",
161
+ "pytest-cov",
162
+ ]
162
163
 
163
164
  [tool.cibuildwheel.linux]
164
165
  manylinux-x86_64-image = "manylinux2014"
165
166
  manylinux-aarch64-image = "manylinux2014"
166
- before-build = "bash {project}/tools/wheels/cibw_before_build_linux.sh {project}"
167
+
168
+ [tool.cibuildwheel.linux.environment]
169
+ # RUNNER_OS is a GitHub Actions specific env var; define it here so it works on Cirrus CI too
170
+ RUNNER_OS="Linux"
171
+
167
172
 
168
173
  [tool.cibuildwheel.macos]
169
- before-build = "bash {project}/tools/wheels/cibw_before_build_macos.sh {project}"
174
+ # universal2 wheels are not supported (see gh-21233), use `delocate-fuse` if you need them
175
+ # note that universal2 wheels are not built, they're listed in the tool.cibuildwheel.skip
176
+ # section
177
+ # Not clear why the DYLD_LIBRARY_PATH is not passed through from the environment
178
+ repair-wheel-command = [
179
+ "echo DYLD_LIBRARY_PATH $DYLD_LIBRARY_PATH",
180
+ "delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel}",
181
+ ]
182
+
183
+
184
+ [tool.cibuildwheel.macos.environment]
185
+ PKG_CONFIG_PATH="{project}"
170
186
 
171
187
  [tool.cibuildwheel.windows]
172
- before-build = "bash {project}/tools/wheels/cibw_before_build_win.sh {project}"
173
- repair-wheel-command = "bash ./tools/wheels/repair_windows.sh {wheel} {dest_dir}"
188
+ # This does not work, use CIBW_ENVIRONMENT_WINDOWS
189
+ config-settings = "setup-args=--vsenv build-dir=build"
190
+ repair-wheel-command = "bash -el ./tools/wheels/repair_windows.sh {wheel} {dest_dir}"
174
191
 
175
192
  [[tool.cibuildwheel.overrides]]
176
193
  select = "*-win32"
177
-
178
- [[tool.cibuildwheel.overrides]]
179
- select = "*-win_amd64"
180
- # can use pkg-config detection for win_amd64 because the installed rtools
181
- # provide a working pkg-config.
182
- # An alternative is to set CMAKE_PREFIX_PATH="c:/opt/openblas/if_32/32"
183
- # Don't use double backslash for path separators, they don't get passed
184
- # to the build correctly
185
- environment = { PKG_CONFIG_PATH="c:/opt/64/lib/pkgconfig" }
194
+ config-settings = "setup-args=--vsenv build-dir=build"
195
+ repair-wheel-command = ""
@@ -0,0 +1,3 @@
1
+ spin
2
+ # Keep this in sync with ci32_requirements.txt
3
+ scipy-openblas64==0.3.27.44.3
@@ -0,0 +1 @@
1
+ scipy-openblas32==0.3.27.63.1
@@ -45,26 +45,6 @@ CONFIG = _cleanup(
45
45
  },
46
46
  },
47
47
  "Build Dependencies": {
48
- "blas": {
49
- "name": "@BLAS_NAME@",
50
- "found": bool("@BLAS_FOUND@".lower().replace('false', '')),
51
- "version": "@BLAS_VERSION@",
52
- "detection method": "@BLAS_TYPE_NAME@",
53
- "include directory": r"@BLAS_INCLUDEDIR@",
54
- "lib directory": r"@BLAS_LIBDIR@",
55
- "openblas configuration": "@BLAS_OPENBLAS_CONFIG@",
56
- "pc file directory": r"@BLAS_PCFILEDIR@",
57
- },
58
- "lapack": {
59
- "name": "@LAPACK_NAME@",
60
- "found": bool("@LAPACK_FOUND@".lower().replace('false', '')),
61
- "version": "@LAPACK_VERSION@",
62
- "detection method": "@LAPACK_TYPE_NAME@",
63
- "include directory": r"@LAPACK_INCLUDEDIR@",
64
- "lib directory": r"@LAPACK_LIBDIR@",
65
- "openblas configuration": "@LAPACK_OPENBLAS_CONFIG@",
66
- "pc file directory": r"@LAPACK_PCFILEDIR@",
67
- },
68
48
  },
69
49
  "Machine Information": {
70
50
  "host": {
@@ -1,4 +1,4 @@
1
1
  # This file is dynamically generated by the build system to support
2
2
  # versioning with source control. Do not edit by hand
3
3
 
4
- __version__ = "0.3.1"
4
+ __version__ = "0.5.0"
@@ -16,21 +16,21 @@ loess_cython_gen = generator(
16
16
  ###
17
17
 
18
18
  #### Fortran Loess into a static library
19
- floess_sources = [
20
- 'src/loessf.f',
21
- 'src/linpack_lite.f'
22
- ]
23
19
 
24
20
  floess_lib = static_library(
25
21
  'floess',
26
- floess_sources,
27
- fortran_args: [fortran_ignore_warnings],
28
- dependencies: [blas, lapack]
22
+ sources: [
23
+ 'src/loessf.f',
24
+ 'src/linpack_lite.f',
25
+ 'src/blas_lite.f'
26
+ ],
27
+ fortran_args: [fortran_args, fortran_ignore_warnings],
28
+ link_args: [fortran_link_args],
29
29
  )
30
30
  ###
31
31
 
32
32
  #### Loess Extenstion Module
33
- py.extension_module(
33
+ py3.extension_module(
34
34
  '_loess',
35
35
  sources: [
36
36
  'src/loess.c',
@@ -39,8 +39,8 @@ py.extension_module(
39
39
  'src/predict.c',
40
40
  loess_cython_gen.process('src/_loess.pyx')
41
41
  ],
42
- c_args: [cython_c_args, numpy_nodepr_api],
43
- dependencies: [py_dep, npymath_lib, np_dep],
42
+ c_args: [c_args, cython_c_args],
43
+ dependencies: [py3_dep, npymath_lib, np_dep],
44
44
  link_with: [floess_lib],
45
45
  link_args: [cython_c_link_args],
46
46
  link_language: 'c',
@@ -55,7 +55,7 @@ python_sources = [
55
55
  '__init__.py'
56
56
  ]
57
57
 
58
- py.install_sources(
58
+ py3.install_sources(
59
59
  python_sources,
60
60
  subdir: 'skmisc/loess'
61
61
  )
@@ -12,21 +12,16 @@
12
12
  * handed to the local loader; e.g., "x_" in system V, Berkeley & 9th edition
13
13
  */
14
14
 
15
- #ifdef lint
16
- #define F77_SUB(x) x
17
- #define F77_COM(x) x
15
+ #ifdef _MSC_VER
16
+ // Microsoft Visual C++
17
+ #define F77_SUB(x) x##_
18
18
  #else
19
- #ifdef __STDC__
20
- #define F77_SUB(x) x##_
21
- #define F77_COM(x) x##_
22
- #else
23
- #define F77_SUB(x) x/**/_
24
- #define F77_COM(x) x/**/_
25
- #endif
19
+ // Other compilers
20
+ #ifdef __STDC__
21
+ #define F77_SUB(x) x##_
22
+ #else
23
+ #define F77_SUB(x) x/**/_
24
+ #endif
26
25
  #endif
27
26
 
28
27
  #define NULL_ENTRY ((int *)NULL)
29
-
30
-
31
-
32
-
@@ -76,10 +76,8 @@ cdef class loess_inputs:
76
76
  # if none was allocated prior to the error.
77
77
  self.allocated = False
78
78
 
79
- x = np.array(x, copy=False, subok=True,
80
- dtype=np.float_, order='C')
81
- y = np.array(y, copy=False, subok=True,
82
- dtype=np.float_, order='C')
79
+ x = np.asarray(x, dtype=np.float64, order='C')
80
+ y = np.asarray(y, dtype=np.float64, order='C')
83
81
  n = len(x)
84
82
 
85
83
  # Check the dimensions
@@ -100,13 +98,12 @@ cdef class loess_inputs:
100
98
  "observations.")
101
99
 
102
100
  if weights is None:
103
- weights = np.ones((n,), dtype=np.float_)
101
+ weights = np.ones((n,), dtype=np.float64)
104
102
 
105
103
  if weights.ndim > 1 or weights.size != n:
106
104
  raise ValueError("Invalid size of the 'weights' vector!")
107
105
 
108
- weights = np.array(weights, copy=False, subok=True,
109
- dtype=np.float_, order='C')
106
+ weights = np.asarray(weights, dtype=np.float64, order='C')
110
107
 
111
108
  # Python objects -> C structures -> *data in C structures
112
109
  _x = x.ravel()
@@ -417,8 +414,7 @@ cdef class loess_model:
417
414
  "of booleans with length equal to the number "
418
415
  "of independent variables")
419
416
 
420
- p_ndr = np.atleast_1d(np.array(value, copy=False, subok=True,
421
- dtype=bool))
417
+ p_ndr = np.atleast_1d(np.asarray(value, dtype=bool))
422
418
  for i in range(self.p):
423
419
  self._base.parametric[i] = p_ndr[i]
424
420
 
@@ -438,8 +434,7 @@ cdef class loess_model:
438
434
  "of booleans with length equal to the number "
439
435
  "of independent variables")
440
436
 
441
- d_ndr = np.atleast_1d(np.array(value, copy=False,
442
- subok=True, dtype=bool))
437
+ d_ndr = np.atleast_1d(np.asarray(value, dtype=bool))
443
438
  for i in range(self.p):
444
439
  self._base.drop_square[i] = d_ndr[i]
445
440
 
@@ -685,7 +680,7 @@ cdef class loess_prediction:
685
680
  self.allocated = False
686
681
 
687
682
  # Note : we need a copy as we may have to normalize
688
- p_ndr = np.array(newdata, copy=True, subok=True, order='C')
683
+ p_ndr = np.asarray(newdata, copy=True, order='C')
689
684
  p_ndr = p_ndr.astype(float)
690
685
 
691
686
  # Dimensions should match those of the input