summaryrefslogtreecommitdiff
path: root/dev-python/tables/files/tables-3.8.0-optional-cpuinfo.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dev-python/tables/files/tables-3.8.0-optional-cpuinfo.patch')
-rw-r--r--dev-python/tables/files/tables-3.8.0-optional-cpuinfo.patch69
1 files changed, 69 insertions, 0 deletions
diff --git a/dev-python/tables/files/tables-3.8.0-optional-cpuinfo.patch b/dev-python/tables/files/tables-3.8.0-optional-cpuinfo.patch
new file mode 100644
index 000000000000..2843914f4a87
--- /dev/null
+++ b/dev-python/tables/files/tables-3.8.0-optional-cpuinfo.patch
@@ -0,0 +1,69 @@
+https://github.com/PyTables/PyTables/pull/1013
+
+From 9d2487eb53af940de3b5c79200c9f4c2b90f51f2 Mon Sep 17 00:00:00 2001
+From: Sam James <sam@gentoo.org>
+Date: Mon, 3 Apr 2023 02:07:47 +0100
+Subject: [PATCH] Handle py-cpuinfo not being installed
+
+Fallback gracefully if py-cpuinfo isn't installed. We already handle this in
+setup.py but we need to avoid calling it in leaf.py too.
+
+py-cpuinfo isn't available on all platforms and PyTables is needed to run
+the test suite for some software, so we need to be able to run PyTables
+in places where py-cpuinfo isn't yet ported.
+
+Signed-off-by: Sam James <sam@gentoo.org>
+--- a/tables/leaf.py
++++ b/tables/leaf.py
+@@ -4,7 +4,11 @@ import warnings
+ import math
+
+ import numpy as np
+-import cpuinfo
++try:
++ import cpuinfo
++ missing_cpuinfo = False
++except ImportError:
++ missing_cpuinfo = True
+
+ from .flavor import (check_flavor, internal_flavor, toarray,
+ alias_map as flavor_alias_map)
+@@ -336,20 +340,21 @@ class Leaf(Node):
+ # Use a decent default value for chunksize
+ chunksize *= 16
+ # Now, go explore the L3 size and try to find a smarter chunksize
+- cpu_info = cpuinfo.get_cpu_info()
+- if 'l3_cache_size' in cpu_info:
+- # In general, is a good idea to set the chunksize equal to L3
+- l3_cache_size = cpu_info['l3_cache_size']
+- # cpuinfo sometimes returns cache sizes as strings (like,
+- # "4096 KB"), so refuse the temptation to guess and use the
+- # value only when it is an actual int.
+- # Also, sometimes cpuinfo does not return a correct L3 size;
+- # so in general, enforcing L3 > L2 is a good sanity check.
+- l2_cache_size = cpu_info.get('l2_cache_size', "Not found")
+- if (type(l3_cache_size) is int and
+- type(l2_cache_size) is int and
+- l3_cache_size > l2_cache_size):
+- chunksize = l3_cache_size
++ if not missing_cpuinfo:
++ cpu_info = cpuinfo.get_cpu_info()
++ if 'l3_cache_size' in cpu_info:
++ # In general, is a good idea to set the chunksize equal to L3
++ l3_cache_size = cpu_info['l3_cache_size']
++ # cpuinfo sometimes returns cache sizes as strings (like,
++ # "4096 KB"), so refuse the temptation to guess and use the
++ # value only when it is an actual int.
++ # Also, sometimes cpuinfo does not return a correct L3 size;
++ # so in general, enforcing L3 > L2 is a good sanity check.
++ l2_cache_size = cpu_info.get('l2_cache_size', "Not found")
++ if (type(l3_cache_size) is int and
++ type(l2_cache_size) is int and
++ l3_cache_size > l2_cache_size):
++ chunksize = l3_cache_size
+ # In Blosc2, the chunksize cannot be larger than 2 GB - BLOSC2_MAX_BUFFERSIZE
+ if chunksize > 2**31 - 32:
+ chunksize = 2**31 - 32
+--
+2.40.0
+