diff options
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.patch | 69 |
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 + |