From fbb0cf2e2c117a649097c637569e9fc1230b052f3e00104d6551a6f5c411118c Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Mon, 23 Jun 2025 05:46:49 +0000 Subject: [PATCH] Accepting request 1287196 from home:mcalabkova:branches:devel:languages:python - Update to 1.5.1 * Vendor loky3.5.5 fixing the resource_tracker clean up with earlier Python versions * Enforce age_limit is a positive timedelta for Memory.reduce_size, to avoid silently ignoring it * Remove deprecated bytes_limit argument for Memory, which should be passed directly to Memory.reduce_size * Drop support for Python 3.8 * Support for Python 3.13 free-threaded has been added * Fix a regression in 1.3 and 1.4 that caused large big endian arrays to trigger a serialization error * Fix support for python 3.14 in hashing, with the addition of an extra argument in Pickler._batch_setitems * Use pickle protocol 5 for pickling numpy arrays with object type - Drop merged numpy22.patch and loky_resource_tracker.patch - BuildRequire python-pytest-asyncio to fix tests with pytest 8.4 OBS-URL: https://build.opensuse.org/request/show/1287196 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-joblib?expand=0&rev=71 --- .gitattributes | 23 ++ .gitignore | 1 + also-filter-new-fork-warning.patch | 16 + joblib-1.4.2.tar.gz | 3 + joblib-1.5.1.tar.gz | 3 + loky_resource_tracker.patch | 82 +++++ numpy22.patch | 22 ++ python-joblib.changes | 567 +++++++++++++++++++++++++++++ python-joblib.spec | 122 +++++++ 9 files changed, 839 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 also-filter-new-fork-warning.patch create mode 100644 joblib-1.4.2.tar.gz create mode 100644 joblib-1.5.1.tar.gz create mode 100644 loky_resource_tracker.patch create mode 100644 numpy22.patch create mode 100644 python-joblib.changes create mode 100644 python-joblib.spec diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/also-filter-new-fork-warning.patch b/also-filter-new-fork-warning.patch new file mode 100644 index 0000000..7f7f750 --- /dev/null +++ b/also-filter-new-fork-warning.patch @@ -0,0 +1,16 @@ +Index: joblib-1.5.1/joblib/test/test_parallel.py +=================================================================== +--- joblib-1.5.1.orig/joblib/test/test_parallel.py ++++ joblib-1.5.1/joblib/test/test_parallel.py +@@ -249,6 +249,11 @@ def test_main_thread_renamed_no_warning( + message_part = "multi-threaded, use of fork() may lead to deadlocks" + warninfo = [w for w in warninfo if message_part not in str(w.message)] + ++ # There's a new warning in Python 3.12 about multiprocessing and forking ++ # that we filter out ++ warninfo = [w for w in warninfo ++ if "is multi-threaded, use of fork" not in str(w.message)] ++ + # The multiprocessing backend will raise a warning when detecting that is + # started from the non-main thread. Let's check that there is no false + # positive because of the name change. diff --git a/joblib-1.4.2.tar.gz b/joblib-1.4.2.tar.gz new file mode 100644 index 0000000..22595a8 --- /dev/null +++ b/joblib-1.4.2.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e +size 2116621 diff --git a/joblib-1.5.1.tar.gz b/joblib-1.5.1.tar.gz new file mode 100644 index 0000000..0ace3e1 --- /dev/null +++ b/joblib-1.5.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4f86e351f39fe3d0d32a9f2c3d8af1ee4cec285aafcb27003dda5205576b444 +size 330475 diff --git a/loky_resource_tracker.patch b/loky_resource_tracker.patch new file mode 100644 index 0000000..237c2db --- /dev/null +++ b/loky_resource_tracker.patch @@ -0,0 +1,82 @@ +From 85c9aa634bbfb08d3ea692ff1cef5f5e25a0d71e Mon Sep 17 00:00:00 2001 +From: tommoral +Date: Tue, 15 Apr 2025 02:31:05 +0200 +Subject: [PATCH 1/6] FIX remove link to pid in child resource_tracker + +--- + joblib/externals/loky/backend/popen_loky_posix.py | 2 +- + joblib/externals/loky/backend/spawn.py | 22 ++++++++-------------- + 2 files changed, 9 insertions(+), 15 deletions(-) + +Index: joblib-1.4.2/joblib/externals/loky/backend/popen_loky_posix.py +=================================================================== +--- joblib-1.4.2.orig/joblib/externals/loky/backend/popen_loky_posix.py ++++ joblib-1.4.2/joblib/externals/loky/backend/popen_loky_posix.py +@@ -120,7 +120,7 @@ class Popen: + reduction._mk_inheritable(tracker_fd) + self._fds += [child_r, child_w, tracker_fd] + if sys.version_info >= (3, 8) and os.name == "posix": +- mp_tracker_fd = prep_data["mp_tracker_args"]["fd"] ++ mp_tracker_fd = prep_data["mp_tracker_fd"] + self.duplicate_for_child(mp_tracker_fd) + + from .fork_exec import fork_exec +Index: joblib-1.4.2/joblib/externals/loky/backend/spawn.py +=================================================================== +--- joblib-1.4.2.orig/joblib/externals/loky/backend/spawn.py ++++ joblib-1.4.2/joblib/externals/loky/backend/spawn.py +@@ -82,11 +82,10 @@ def get_preparation_data(name, init_main + from .resource_tracker import _resource_tracker + + _resource_tracker.ensure_running() +- d["tracker_args"] = {"pid": _resource_tracker._pid} + if sys.platform == "win32": +- d["tracker_args"]["fh"] = msvcrt.get_osfhandle(_resource_tracker._fd) ++ d["tracker_fd"] = msvcrt.get_osfhandle(_resource_tracker._fd) + else: +- d["tracker_args"]["fd"] = _resource_tracker._fd ++ d["tracker_fd"] = _resource_tracker._fd + + if sys.version_info >= (3, 8) and os.name == "posix": + # joblib/loky#242: allow loky processes to retrieve the resource +@@ -105,10 +104,7 @@ def get_preparation_data(name, init_main + # process is created (othewise the child won't be able to use it if it + # is created later on) + mp_resource_tracker.ensure_running() +- d["mp_tracker_args"] = { +- "fd": mp_resource_tracker._fd, +- "pid": mp_resource_tracker._pid, +- } ++ d["mp_tracker_fd"] = mp_resource_tracker._fd + + # Figure out whether to initialise main in the subprocess as a module + # or through direct execution (or to leave it alone entirely) +@@ -172,23 +168,21 @@ def prepare(data, parent_sentinel=None): + if "orig_dir" in data: + process.ORIGINAL_DIR = data["orig_dir"] + +- if "mp_tracker_args" in data: ++ if "mp_tracker_fd" in data: + from multiprocessing.resource_tracker import ( + _resource_tracker as mp_resource_tracker, + ) + +- mp_resource_tracker._fd = data["mp_tracker_args"]["fd"] +- mp_resource_tracker._pid = data["mp_tracker_args"]["pid"] +- if "tracker_args" in data: ++ mp_resource_tracker._fd = data["mp_tracker_fd"] ++ if "tracker_fd" in data: + from .resource_tracker import _resource_tracker + +- _resource_tracker._pid = data["tracker_args"]["pid"] + if sys.platform == "win32": +- handle = data["tracker_args"]["fh"] ++ handle = data["tracker_fd"] + handle = duplicate(handle, source_process=parent_sentinel) + _resource_tracker._fd = msvcrt.open_osfhandle(handle, os.O_RDONLY) + else: +- _resource_tracker._fd = data["tracker_args"]["fd"] ++ _resource_tracker._fd = data["tracker_fd"] + + if "init_main_from_name" in data: + _fixup_main_from_name(data["init_main_from_name"]) diff --git a/numpy22.patch b/numpy22.patch new file mode 100644 index 0000000..13623d0 --- /dev/null +++ b/numpy22.patch @@ -0,0 +1,22 @@ +From 1d9b65db31bfe79c42801d795ea9ebfec1123c44 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= +Date: Mon, 9 Dec 2024 17:16:23 +0100 +Subject: [PATCH] DOC Make doctest compatible with numpy 2.2 (#1632) + +--- + joblib/__init__.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/joblib/__init__.py b/joblib/__init__.py +index 54f6c8fb4..e9d4c6870 100644 +--- a/joblib/__init__.py ++++ b/joblib/__init__.py +@@ -63,7 +63,7 @@ + >>> square = mem.cache(np.square) + >>> b = square(a) # doctest: +ELLIPSIS + ______________________________________________________________________... +- [Memory] Calling square... ++ [Memory] Calling ...square... + square(array([[0., 0., 1.], + [1., 1., 1.], + [4., 2., 1.]])) diff --git a/python-joblib.changes b/python-joblib.changes new file mode 100644 index 0000000..037debc --- /dev/null +++ b/python-joblib.changes @@ -0,0 +1,567 @@ +------------------------------------------------------------------- +Fri Jun 20 11:06:38 UTC 2025 - Markéta Machová + +- Update to 1.5.1 + * Vendor loky3.5.5 fixing the resource_tracker clean up with earlier + Python versions + * Enforce age_limit is a positive timedelta for Memory.reduce_size, + to avoid silently ignoring it + * Remove deprecated bytes_limit argument for Memory, which should be + passed directly to Memory.reduce_size + * Drop support for Python 3.8 + * Support for Python 3.13 free-threaded has been added + * Fix a regression in 1.3 and 1.4 that caused large big endian arrays + to trigger a serialization error + * Fix support for python 3.14 in hashing, with the addition of an + extra argument in Pickler._batch_setitems + * Use pickle protocol 5 for pickling numpy arrays with object type +- Drop merged numpy22.patch and loky_resource_tracker.patch +- BuildRequire python-pytest-asyncio to fix tests with pytest 8.4 + +------------------------------------------------------------------- +Thu Apr 17 10:59:17 UTC 2025 - Markéta Machová + +- Add upstream loky_resource_tracker.patch to fix failure with + recent CPython 3.12 and 3.13 bugfix releases + +------------------------------------------------------------------- +Tue Mar 18 16:23:55 UTC 2025 - Markéta Machová + +- Add numpy22.patch to fix doctests with numpy 2.2 + +------------------------------------------------------------------- +Thu May 9 08:36:55 UTC 2024 - Dirk Müller + +- update to 1.4.2: + * Due to maintenance issues, 1.4.1 was not valid and we bumped + the version to 1.4.2 + * Fix a backward incompatible change in MemorizedFunc.call + which needs to return the metadata. Also make sure that + NotMemorizedFunc.call return an empty dict for metadata for + consistency. https://github.com/joblib/joblib/pull/1576 + +------------------------------------------------------------------- +Sat Apr 20 21:06:55 UTC 2024 - Dirk Müller + +- update to 1.4.0: + * Allow caching co-routines with Memory.cache. + * Try to cast n_jobs to int in parallel and raise an error if + it fails. This means that n_jobs=2.3 will now result in + effective_n_jobs=2 instead of failing. + * Ensure that errors in the task generator given to Parallel's + call are raised in the results consumming thread. + * Adjust codebase to NumPy 2.0 by changing np.NaN to np.nan and + importing byte_bounds from np.lib.array_utils. + * The parameter return_as in joblib.Parallel can now be set to + generator_unordered. In this case the results will be + returned in the order of task completion rather than the + order of submission. + * dask backend now supports return_as=generator and + return_as=generator_unordered. + * Vendor cloudpickle 3.0.0 and end support for Python 3.7 which + has reached end of life. +- drop avoid-deprecated-ast.patch (upstream) + +------------------------------------------------------------------- +Tue Nov 28 03:55:52 UTC 2023 - Steve Kowalik + +- Add patch avoid-deprecated-ast.patch: + * Avoid deprecated ast classes. +- Add patch also-filter-new-fork-warning.patch: + * Filter DeprecationWarning due to calling fork() with multiprocessing. +- Switch to pyproject macros. + +------------------------------------------------------------------- +Sat Nov 25 20:14:35 UTC 2023 - Dirk Müller + +- update to 1.3.2: + * FIX treat n_jobs=None as if left to its default value + * FIX Init logger parent class in Parallel + * MNT remove unnecessary .bck file + * MTN adjust test regex for Python 3.12 improved error message + * DOC add public documentation for parallel_backend + * FIX flake8 new E721: type comparison + * Ensure native byte order for memmap. + * Drop runtime dependency on `distutils` + * Add environment variable to change default parallel backend + * Fix memmapping_reducer when 'os' has no attribute 'statvfs' + * Move the metadata into `pyproject.toml` + * TST Close client in test_pickle_in_socket + * Do not swallow PicklingError + * FIX Avoid collisions when caching nested functions + * FIX heisenfailure in doc/memory.rst + * MAINT Explicit support for Python 3.11 + * MNT Use faulthandler rather than custom autokill logic + * BENCH add benchmark script for n_jobs=1 + * TST Fix test_nested_parallel_warnings_parent_backend for + Python nogil + * TST Fix test_memmapping for Python nogil + * MAINT Clean deprecations + * ENH make temp resource cleanup safer + * MAINT Simplify warning in `_persist_input` + * MNT Use full flake8 rather than flake8_diff.sh + * Update Dask backend + * FIX upload to codecov + * MTN vendor loky 3.4.0 + * MTN skip thread_bomb mitigation test on PyPy for now + * High verbosity mode that prints arguments, hash and store + location. + * DBG try to debug the thread_bomb_mitigation test + * FEA return generator, #588 stripped of unrelated changes for + minimal diff review + * BENCH scaling of a GridSearch with n_jobs + * CLN make generator exit thread safe + * FEA parallel_config context manager to allow more fine- + grained control + * MAINT: Be nitpicky about docs + * CLN tidy logger + * Give Memory.reduce_size() `items_limit` and `age_limit` + options + * CLN deprecate bytes_limit from Memory + * FIX doc building failing download + * Document parallel_config + * ENH add cache_validation_callback in Memory + * DOC example data DL from GH + * merge all configs in pyproject.toml + * fix double repeated word typos + * DOC reference parallel_config instead of parallel_backend + * `return_generator={True,False}` -> + `return_as={'list','generator'}` + +------------------------------------------------------------------- +Sat Jun 10 17:42:25 UTC 2023 - ecsos + +- Add %{?sle15_python_module_pythons} + +------------------------------------------------------------------- +Tue Oct 11 13:20:33 UTC 2022 - Ben Greiner + +- Update to 1.2.0 (CVE-2022-21797, bsc#1204232) + * Fix a security issue where eval(pre_dispatch) could potentially + run arbitrary code. Now only basic numerics are supported. + #1327 + * Make sure that joblib works even when multiprocessing is not + available, for instance with Pyodide #1256 + * Avoid unnecessary warnings when workers and main process delete + the temporary memmap folder contents concurrently. #1263 + * Vendor loky 3.1.0 with several fixes to more robustly forcibly + terminate worker processes in case of a crash. #1269 + * Fix memory alignment bug for pickles containing numpy arrays. + This is especially important when loading the pickle with + mmap_mode != None as the resulting numpy.memmap object would + not be able to correct the misalignment without performing a + memory copy. This bug would cause invalid computation and + segmentation faults with native code that would directly access + the underlying data buffer of a numpy array, for instance + C/C++/Cython code compiled with older GCC versions or some old + OpenBLAS written in platform specific assembly. #1254 + * Vendor cloudpickle 2.2.0 which adds support for PyPy 3.8+. + * Vendor loky 3.3.0 which fixes a bug with leaking processes in + case of nested loky parallel calls and more reliability spawn + the correct number of reusable workers. +- Drop support-setuptools-62.patch + +------------------------------------------------------------------- +Wed Jul 20 11:00:18 UTC 2022 - Steve Kowalik + +- Add patch support-setuptools-62.patch: + * Support setuptools >= 62 by handling more than one warning in a test + case. + +------------------------------------------------------------------- +Sat Oct 16 21:31:20 UTC 2021 - Dirk Müller + +- update to 1.1.0: + * Fix byte order inconsistency issue during deserialization using joblib.load + in cross-endian environment: the numpy arrays are now always loaded to use + the system byte order, independently of the byte order of the system that + serialized the pickle. + * Fix joblib.Memory bug with the ignore parameter when the cached function is a + decorated function. + * Fix joblib.Memory to properly handle caching for functions defined + interactively in a IPython session or in Jupyter notebook cell. + * Update vendored loky (from version 2.9 to 3.0) and cloudpickle (from + version 1.6 to 2.0) + +------------------------------------------------------------------- +Mon Feb 15 23:26:21 UTC 2021 - Ben Greiner + +- Update to 1.0.1 + * dask: avoid redundant scattering of large arguments to make a + more efficient use of the network resources and avoid crashing + dask with "OSError: [Errno 55] No buffer space available" or + "ConnectionResetError: [Errno 104] connection reset by + peer". +- Changees in 1.0.0 + * Make joblib.hash and joblib.Memory caching system compatible + with numpy >= 1.20.0. Also make it explicit in the + documentation that users should now expect to have their joblib. + Memory cache invalidated when either joblib or a third party + library involved in the cached values definition is upgraded. + In particular, users updating joblib to a release that includes + this fix will see their previous cache invalidated if they + contained reference to numpy objects. + * Remove deprecated check_pickle argument in delayed. +- Changes in 0.17.0 + * Fix a spurious invalidation of Memory.cache'd functions called + with Parallel under Jupyter or IPython. + * Bump vendored loky to 2.9.0 and cloudpickle to 1.6.0. In + particular this fixes a problem to add compat for Python 3.9. +- Don't require optional NumPy for python36 tests in TW, because + NumPy 1.20 dropped support for Python 3.6 (NEP 29) +- Drop joblib-disable-unrelialble-tests.patch, they are already + used in pytest deselection parameter. + * Do the same for disable_test_on_big_endian.patch. + +------------------------------------------------------------------- +Sun Dec 6 21:37:54 UTC 2020 - Benjamin Greiner + +- BuildRequire threadpoolctl for all python3 flavors + gh#openSUSE/python-rpm-macros#66 + +------------------------------------------------------------------- +Fri Oct 30 08:23:38 UTC 2020 - pgajdos@suse.com + +- disable test_hash_numpy_noncontiguous, + test_hashes_are_different_between_c_and_fortran_contiguous_arrays, + test_hashes_stay_the_same_with_numpy_objects, + test_non_contiguous_array_pickling [bsc#1177209] + +------------------------------------------------------------------- +Tue Oct 27 12:01:23 UTC 2020 - pgajdos@suse.com + +- disable test_nested_loop_error_in_grandchild_resource_tracker_silent + [bsc#1177209] + +------------------------------------------------------------------- +Mon Oct 5 14:18:31 UTC 2020 - pgajdos@suse.com + +- disable yet another tests [bsc#1177209] + +------------------------------------------------------------------- +Tue Sep 8 08:26:41 UTC 2020 - Guillaume GARDET + +- Disable tests failing often in OBS: + * joblib-disable-unrelialble-tests.patch + +------------------------------------------------------------------- +Fri Aug 21 08:40:04 UTC 2020 - Michel Normand + +- New disable_test_on_big_endian.patch as per upstream issue + https://github.com/joblib/joblib/issues/279 + +------------------------------------------------------------------- +Sat Jul 18 09:12:26 UTC 2020 - Dirk Mueller + +- update to 0.16.0 + - Fix a problem in the constructors of of Parallel backends classes that + inherit from the `AutoBatchingMixin` that prevented the dask backend to + properly batch short tasks. + https://github.com/joblib/joblib/pull/1062 + - Fix a problem in the way the joblib dask backend batches calls that would + badly interact with the dask callable pickling cache and lead to wrong + results or errors. + https://github.com/joblib/joblib/pull/1055 + - Prevent a dask.distributed bug from surfacing in joblib's dask backend + during nested Parallel calls (due to joblib's auto-scattering feature) + https://github.com/joblib/joblib/pull/1061 + - Workaround for a race condition after Parallel calls with the dask backend + that would cause low level warnings from asyncio coroutines: + https://github.com/joblib/joblib/pull/1078 + +------------------------------------------------------------------- +Tue Jun 2 16:24:43 UTC 2020 - Dirk Mueller + +- update to 0.15.1: + - Make joblib work on Python 3 installation that do not ship with the lzma + package in their standard library. + - Drop support for Python 2 and Python 3.5. All objects in + ``joblib.my_exceptions`` and ``joblib.format_stack`` are now deprecated and + will be removed in joblib 0.16. Note that no deprecation warning will be + raised for these objects Python < 3.7. + https://github.com/joblib/joblib/pull/1018 + - Fix many bugs related to the temporary files and folder generated when + automatically memory mapping large numpy arrays for efficient inter-process + communication. In particular, this would cause `PermissionError` exceptions + to be raised under Windows and large leaked files in `/dev/shm` under Linux + in case of crash. + https://github.com/joblib/joblib/pull/966 + - Make the dask backend collect results as soon as they complete + leading to a performance improvement: + https://github.com/joblib/joblib/pull/1025 + - Fix the number of jobs reported by ``effective_n_jobs`` when ``n_jobs=None`` + called in a parallel backend context. + https://github.com/joblib/joblib/pull/985 + - Upgraded vendored cloupickle to 1.4.1 and loky to 2.8.0. This allows for + Parallel calls of dynamically defined functions with type annotations + in particular. + + +------------------------------------------------------------------- +Thu Mar 5 13:33:14 UTC 2020 - pgajdos@suse.com + +- version update to 0.14.1 + - Configure the loky workers' environment to mitigate oversubsription with + nested multi-threaded code in the following case: + - allow for a suitable number of threads for numba (``NUMBA_NUM_THREADS``); + - enable Interprocess Communication for scheduler coordination when the + nested code uses Threading Building Blocks (TBB) (``ENABLE_IPC=1``) + https://github.com/joblib/joblib/pull/951 + - Fix a regression where the loky backend was not reusing previously + spawned workers. + https://github.com/joblib/joblib/pull/968 + - Revert https://github.com/joblib/joblib/pull/847 to avoid using + `pkg_resources` that introduced a performance regression under Windows: + https://github.com/joblib/joblib/issues/965 + - Improved the load balancing between workers to avoid stranglers caused by an + excessively large batch size when the task duration is varying significantly + (because of the combined use of ``joblib.Parallel`` and ``joblib.Memory`` + with a partially warmed cache for instance). + https://github.com/joblib/joblib/pull/899 + - Add official support for Python 3.8: fixed protocol number in `Hasher` + and updated tests. + - Fix a deadlock when using the dask backend (when scattering large numpy + arrays). + https://github.com/joblib/joblib/pull/914 + - Warn users that they should never use `joblib.load` with files from + untrusted sources. Fix security related API change introduced in numpy + 1.6.3 that would prevent using joblib with recent numpy versions. + https://github.com/joblib/joblib/pull/879 + - Upgrade to cloudpickle 1.1.1 that add supports for the upcoming + Python 3.8 release among other things. + https://github.com/joblib/joblib/pull/878 + - Fix semaphore availability checker to avoid spawning resource trackers + on module import. + https://github.com/joblib/joblib/pull/893 + - Fix the oversubscription protection to only protect against nested + `Parallel` calls. This allows `joblib` to be run in background threads. + https://github.com/joblib/joblib/pull/934 + - Fix `ValueError` (negative dimensions) when pickling large numpy arrays on + Windows. + https://github.com/joblib/joblib/pull/920 + - Upgrade to loky 2.6.0 that add supports for the setting environment variables + in child before loading any module. + https://github.com/joblib/joblib/pull/940 + - Fix the oversubscription protection for native libraries using threadpools + (OpenBLAS, MKL, Blis and OpenMP runtimes). + The maximal number of threads is can now be set in children using the + ``inner_max_num_threads`` in ``parallel_backend``. It defaults to + ``cpu_count() // n_jobs``. + https://github.com/joblib/joblib/pull/940 +- deleted patches + - numpy16.patch (upstreamed) + +------------------------------------------------------------------- +Tue May 28 10:34:57 UTC 2019 - Tomáš Chvátal + +- Switch to %pytest +- Add patch to work well with new numpy: + * numpy16.patch + +------------------------------------------------------------------- +Tue Mar 26 14:45:24 UTC 2019 - Tomáš Chvátal + +- Update to 0.13.2: + * Upgrade to cloudpickle 0.8.0 + * Add a non-regression test related to joblib issues #836 and #833, reporting that cloudpickle versions between 0.5.4 and 0.7 introduced a bug where global variables changes in a parent process between two calls to joblib.Parallel would not be propagated into the workers + +------------------------------------------------------------------- +Thu Mar 7 15:57:20 UTC 2019 - John Vandenberg + +- Remove no longer necessary pytest argument + -k 'not test_no_blas_crash_or_freeze_with_subprocesses' + +------------------------------------------------------------------- +Tue Jan 29 16:41:57 CET 2019 - mcepl@suse.com + +- Update to Release 0.13.1: + * Memory now accepts pathlib.Path objects as ``location`` + parameter. Also, a warning is raised if the returned backend + is None while ``location`` is not None. + * Make ``Parallel`` raise an informative ``RuntimeError`` when + the active parallel backend has zero worker. + * Make the ``DaskDistributedBackend`` wait for workers before + trying to schedule work. This is useful in particular when + the workers are provisionned dynamically but provisionning is + not immediate (for instance using Kubernetes, Yarn or an HPC + job queue). + +------------------------------------------------------------------- +Mon Jan 7 19:39:00 UTC 2019 - Todd R + +- update to Release 0.13.0 + * Include loky 2.4.2 with default serialization with ``cloudpickle``. + This can be tweaked with the environment variable ``LOKY_PICKLER``. + * Fix nested backend in SequentialBackend to avoid changing the default + backend to Sequential. (#792) + * Fix nested_backend behavior to avoid setting the default number of + workers to -1 when the backend is not dask. (#784) +- Update to Release 0.12.5 + * Include loky 2.3.1 with better error reporting when a worker is + abruptly terminated. Also fixes spurious debug output. + * Include cloudpickle 0.5.6. Fix a bug with the handling of global + variables by locally defined functions. +- Update to Release 0.12.4 + * Include loky 2.3.0 with many bugfixes, notably w.r.t. when setting + non-default multiprocessing contexts. Also include improvement on + memory management of long running worker processes and fixed issues + when using the loky backend under PyPy. + * Raises a more explicit exception when a corrupted MemorizedResult is loaded. + * Loading a corrupted cached file with mmap mode enabled would + recompute the results and return them without memmory mapping. +- Update to Release 0.12.3 + * Fix joblib import setting the global start_method for multiprocessing. + * Fix MemorizedResult not picklable (#747). + * Fix Memory, MemorizedFunc and MemorizedResult round-trip pickling + + unpickling (#746). + * Fixed a regression in Memory when positional arguments are called as + kwargs several times with different values (#751). + * Integration of loky 2.2.2 that fixes issues with the selection of the + default start method and improve the reporting when calling functions + with arguments that raise an exception when unpickling. + * Prevent MemorizedFunc.call_and_shelve from loading cached results to + RAM when not necessary. Results in big performance improvements +- Update to Release 0.12.2 + * Integrate loky 2.2.0 to fix regression with unpicklable arguments and + functions reported by users (#723, #643). + * Loky 2.2.0 also provides a protection against memory leaks long running + applications when psutil is installed (reported as #721). + * Joblib now includes the code for the dask backend which has been updated + to properly handle nested parallelism and data scattering at the same + time (#722). + * Restored some private API attribute and arguments + (`MemorizedResult.argument_hash` and `BatchedCalls.__init__`'s + `pickle_cache`) for backward compat. (#716, #732). + * Fix a deprecation warning message (for `Memory`'s `cachedir`) (#720). + +------------------------------------------------------------------- +Thu Jan 3 07:07:28 UTC 2019 - Tomáš Chvátal + +- Disable blas test as it is very flaky outside of x86_64 + +------------------------------------------------------------------- +Fri Jul 27 06:35:25 UTC 2018 - jengelh@inai.de + +- Use noun phrase in summary. + +------------------------------------------------------------------- +Fri Jul 20 11:48:47 UTC 2018 - tchvatal@suse.com + +- Enable tests + +------------------------------------------------------------------- +Wed Jul 18 03:03:33 UTC 2018 - arun@gmx.de + +- specfile: + * remove devel requirement + +- update to version 0.12.1: + * Make sure that any exception triggered when serializing jobs in + the queue will be wrapped as a PicklingError as in past versions + of joblib. + * Fix kwonlydefaults key error in filter_args (#715) + +- changes from version 0.12: + * Implement the 'loky' backend with @ogrisel. This backend relies on + a robust implementation of concurrent.futures.ProcessPoolExecutor + with spawned processes that can be reused accross the Parallel + calls. This fixes the bad interation with third paty libraries + relying on thread pools, described in + https://pythonhosted.org/joblib/parallel.html#bad-interaction-of-multiprocessing-and-third-party-libraries + * Limit the number of threads used in worker processes by + C-libraries that relies on threadpools. This functionality works + for MKL, OpenBLAS, OpenMP and Accelerated. + * Prevent numpy arrays with the same shape and data from hashing to + the same memmap, to prevent jobs with preallocated arrays from + writing over each other. + * Reduce overhead of automatic memmap by removing the need to hash + the array. + * Make Memory.cache robust to PermissionError (errno 13) under + Windows when run in combination with Parallel. + * The automatic array memory mapping feature of Parallel does no + longer use /dev/shm if it is too small (less than 2 GB). In + particular in docker containers /dev/shm is only 64 MB by default + which would cause frequent failures when running joblib in Docker + containers. + * Make it possible to hint for thread-based parallelism with + prefer='threads' or enforce shared-memory semantics with + require='sharedmem'. + * Rely on the built-in exception nesting system of Python 3 to + preserve traceback information when an exception is raised on a + remote worker process. This avoid verbose and redundant exception + reports under Python 3. + * Preserve exception type information when doing nested Parallel + calls instead of mapping the exception to the generic + JoblibException type. + * Introduce the concept of 'store' and refactor the Memory internal + storage implementation to make it accept extra store backends for + caching results. backend and backend_options are the new options + added to Memory to specify and configure a store backend. + * Add the register_store_backend function to extend the store + backend used by default with Memory. This default store backend is + named 'local' and corresponds to the local filesystem. + * The store backend API is experimental and thus is subject to + change in the future without deprecation. + * The cachedir parameter of Memory is now marked as deprecated, use + location instead. + * Add support for LZ4 compression if lz4 package is installed. + * Add register_compressor function for extending available + compressors. + * Allow passing a string to compress parameter in dump funtion. This + string should correspond to the compressor used (e.g. zlib, gzip, + lz4, etc). The default compression level is used in this case. + * Allow parallel_backend to be used globally instead of only as a + context manager. Support lazy registration of external parallel + backends + +------------------------------------------------------------------- +Thu Jan 11 22:12:57 UTC 2018 - jengelh@inai.de + +- Ensure neutrality of description. + +------------------------------------------------------------------- +Mon May 22 16:35:59 UTC 2017 - toddrme2178@gmail.com + +- Implement single-spec version. +- Run tests. +- Fix source URL. +- Update to version 0.11. + * For a full changelog please see: + https://github.com/joblib/joblib/blob/0.11/CHANGES.rst + +------------------------------------------------------------------- +Sun May 24 13:14:03 UTC 2015 - toddrme2178@gmail.com + +- Disable non-functional documentation + +------------------------------------------------------------------- +Sun Dec 8 19:47:59 UTC 2013 - p.drouand@gmail.com + +- Update to version 0.7.1 + + MISC: capture meaningless argument (n_jobs=0) in Parallel + + ENH Handles tuples, sets and Python 3's dict_keys type the same as + lists. in pre_dispatch + + ENH: fix function caching for IPython + +------------------------------------------------------------------- +Thu Oct 24 11:07:22 UTC 2013 - speilicke@suse.com + +- Require python-setuptools instead of distribute (upstreams merged) + +------------------------------------------------------------------- +Sat Feb 9 15:54:15 UTC 2013 - p.drouand@gmail.com + +- Update to version 0.7.0d + * No changelog available +- Clean the specfile and remove .buildinfo file + +------------------------------------------------------------------- +Wed Oct 10 20:59:57 UTC 2012 - scorot@free.fr + +- Add Group field in doc package for SLE 11 + +------------------------------------------------------------------- +Wed Sep 5 17:10:35 UTC 2012 - toddrme2178@gmail.com + +- Initial version + diff --git a/python-joblib.spec b/python-joblib.spec new file mode 100644 index 0000000..60c870c --- /dev/null +++ b/python-joblib.spec @@ -0,0 +1,122 @@ +# +# spec file for package python-joblib +# +# Copyright (c) 2025 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +%{?sle15_python_module_pythons} +Name: python-joblib +Version: 1.5.1 +Release: 0 +Summary: Module for using Python functions as pipeline jobs +License: BSD-3-Clause +URL: https://github.com/joblib/joblib +Source: https://files.pythonhosted.org/packages/source/j/joblib/joblib-%{version}.tar.gz +# PATCH-FIX-OPENSUSE Also avoid a DeprecationWarning when using fork() under +# multiprocessing +Patch1: also-filter-new-fork-warning.patch +BuildRequires: %{python_module base >= 3.7} +BuildRequires: %{python_module lz4} +BuildRequires: %{python_module numpy} +BuildRequires: %{python_module pip} +BuildRequires: %{python_module psutil} +BuildRequires: %{python_module pytest-asyncio} +BuildRequires: %{python_module pytest} +BuildRequires: %{python_module setuptools} +BuildRequires: %{python_module threadpoolctl} +BuildRequires: %{python_module wheel} +BuildRequires: fdupes +BuildRequires: python-rpm-macros +Recommends: python-lz4 +Recommends: python-numpy +Recommends: python-psutil +Suggests: python-dask-distributed +BuildArch: noarch +%python_subpackages + +%description +Joblib is a set of tools to provide lightweight pipelining in +Python. In particular, joblib offers: + + 1. transparent disk-caching of the output values and lazy re-evaluation + (memoize pattern) + + 2. parallel computing + + 3. logging and tracing of the execution + +Joblib can handle large data and has specific optimizations for `numpy` arrays. + +%prep +%autosetup -p1 -n joblib-%{version} + +%build +%pyproject_wheel + +%install +%pyproject_install +%python_expand %fdupes %{buildroot}%{$python_sitelib} + +%check +export LANG=en_US.UTF-8 +# turn off unreliable tests across architectures +# https://bugzilla.suse.com/show_bug.cgi?id=1177209 +# they have been seen failing for the first time on following +# architectures: +# s390x: +# test_hash_numpy_noncontiguous +# test_hashes_are_different_between_c_and_fortran_contiguous_arrays +# test_hashes_stay_the_same_with_numpy_objects +# test_non_contiguous_array_pickling +# x86_64: +# test_multithreaded_parallel_termination_resource_tracker_silent +# aarch64: +# test_resource_tracker_silent_when_reference_cycles +# test_child_raises_parent_exits_cleanly +# i586: +# test_nested_loop_error_in_grandchild_resource_tracker_silent +# s390x: +# test_hash_numpy_noncontiguous +# test_hashes_are_different_between_c_and_fortran_contiguous_arrays +# test_hashes_stay_the_same_with_numpy_objects +# test_non_contiguous_array_pickling +# +# always fails: +# test_parallel_call_cached_function_defined_in_jupyter +DISABLED_TESTS="test_hash_numpy_noncontiguous or \ + test_hashes_are_different_between_c_and_fortran_contiguous_arrays or \ + test_hashes_stay_the_same_with_numpy_objects or \ + test_non_contiguous_array_pickling or \ + test_multithreaded_parallel_termination_resource_tracker_silent or \ + test_resource_tracker_silent_when_reference_cycles or \ + test_child_raises_parent_exits_cleanly or \ + test_nested_loop_error_in_grandchild_resource_tracker_silent or \ + test_hash_numpy_noncontiguous or \ + test_hashes_are_different_between_c_and_fortran_contiguous_arrays or \ + test_hashes_stay_the_same_with_numpy_objects or \ + test_non_contiguous_array_pickling or \ + test_parallel_call_cached_function_defined_in_jupyter" +if [ $(python3 -c 'import sys; print(sys.byteorder)') != "little" ]; then + DISABLED_TESTS+=" or test_joblib_pickle_across_python_versions" +fi +%pytest -k "not ($DISABLED_TESTS)" + +%files %{python_files} +%license LICENSE.txt +%doc README.rst +%{python_sitelib}/joblib-%{version}.dist-info +%{python_sitelib}/joblib/ + +%changelog