pythagoras 0.20.9__tar.gz → 0.20.50__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 (66) hide show
  1. {pythagoras-0.20.9 → pythagoras-0.20.50}/PKG-INFO +1 -1
  2. {pythagoras-0.20.9 → pythagoras-0.20.50}/pyproject.toml +1 -1
  3. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_090_swarming_portals/swarming_portals.py +15 -4
  4. {pythagoras-0.20.9 → pythagoras-0.20.50}/README.md +0 -0
  5. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/.DS_Store +0 -0
  6. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_010_basic_portals/__init__.py +0 -0
  7. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_010_basic_portals/basic_portal_core_classes.py +0 -0
  8. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_010_basic_portals/exceptions.py +0 -0
  9. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_010_basic_portals/long_infoname.py +0 -0
  10. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_010_basic_portals/not_picklable_class.py +0 -0
  11. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_010_basic_portals/portal_tester.py +0 -0
  12. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_010_basic_portals/post_init_metaclass.py +0 -0
  13. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_020_ordinary_code_portals/__init__.py +0 -0
  14. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_020_ordinary_code_portals/code_normalizer.py +0 -0
  15. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_020_ordinary_code_portals/function_processing.py +0 -0
  16. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_020_ordinary_code_portals/ordinary_decorator.py +0 -0
  17. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_020_ordinary_code_portals/ordinary_portal_core_classes.py +0 -0
  18. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_030_data_portals/__init__.py +0 -0
  19. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_030_data_portals/data_portal_core_classes.py +0 -0
  20. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_030_data_portals/ready_and_get.py +0 -0
  21. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_030_data_portals/storable_decorator.py +0 -0
  22. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_040_logging_code_portals/__init__.py +0 -0
  23. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_040_logging_code_portals/exception_processing_tracking.py +0 -0
  24. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_040_logging_code_portals/execution_environment_summary.py +0 -0
  25. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_040_logging_code_portals/kw_args.py +0 -0
  26. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_040_logging_code_portals/logging_decorator.py +0 -0
  27. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_040_logging_code_portals/logging_portal_core_classes.py +0 -0
  28. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_040_logging_code_portals/notebook_checker.py +0 -0
  29. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_040_logging_code_portals/output_capturer.py +0 -0
  30. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_040_logging_code_portals/uncaught_exceptions.py +0 -0
  31. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_050_safe_code_portals/__init__.py +0 -0
  32. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_050_safe_code_portals/safe_decorator.py +0 -0
  33. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_050_safe_code_portals/safe_portal_core_classes.py +0 -0
  34. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_060_autonomous_code_portals/__init__.py +0 -0
  35. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_060_autonomous_code_portals/autonomous_decorators.py +0 -0
  36. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_060_autonomous_code_portals/autonomous_portal_core_classes.py +0 -0
  37. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_060_autonomous_code_portals/names_usage_analyzer.py +0 -0
  38. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_070_protected_code_portals/GPU_guards.py +0 -0
  39. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_070_protected_code_portals/OK_const.py +0 -0
  40. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_070_protected_code_portals/RAM_guards.py +0 -0
  41. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_070_protected_code_portals/__init__.py +0 -0
  42. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_070_protected_code_portals/fn_arg_names_checker.py +0 -0
  43. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_070_protected_code_portals/list_flattener.py +0 -0
  44. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_070_protected_code_portals/package_manager.py +0 -0
  45. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_070_protected_code_portals/protected_decorators.py +0 -0
  46. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_070_protected_code_portals/protected_portal_core_classes.py +0 -0
  47. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_070_protected_code_portals/python_packages_guards.py +0 -0
  48. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_080_pure_code_portals/__init__.py +0 -0
  49. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_080_pure_code_portals/pure_core_classes.py +0 -0
  50. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_080_pure_code_portals/pure_decorator.py +0 -0
  51. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_090_swarming_portals/__init__.py +0 -0
  52. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_090_swarming_portals/output_suppressor.py +0 -0
  53. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_090_swarming_portals/system_utils.py +0 -0
  54. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_100_top_level_API/__init__.py +0 -0
  55. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_100_top_level_API/default_local_portal.py +0 -0
  56. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_100_top_level_API/top_level_API.py +0 -0
  57. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_800_signatures_and_converters/__init__.py +0 -0
  58. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_800_signatures_and_converters/base_16_32_convertors.py +0 -0
  59. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_800_signatures_and_converters/current_date_gmt_str.py +0 -0
  60. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_800_signatures_and_converters/hash_signatures.py +0 -0
  61. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_800_signatures_and_converters/node_signatures.py +0 -0
  62. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_800_signatures_and_converters/random_signatures.py +0 -0
  63. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_900_project_stats_collector/__init__.py +0 -0
  64. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/_900_project_stats_collector/project_analyzer.py +0 -0
  65. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/__init__.py +0 -0
  66. {pythagoras-0.20.9 → pythagoras-0.20.50}/src/pythagoras/core/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pythagoras
3
- Version: 0.20.9
3
+ Version: 0.20.50
4
4
  Summary: Planet-scale distributed computing in Python.
5
5
  Keywords: cloud,ML,AI,serverless,distributed,parallel,machine-learning,deep-learning,pythagoras
6
6
  Author: Volodymyr (Vlad) Pavlov
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "pythagoras"
7
- version = "0.20.9"
7
+ version = "0.20.50"
8
8
  authors = [
9
9
  {name = "Volodymyr (Vlad) Pavlov", email = "vlpavlov@ieee.org"},
10
10
  ]
@@ -132,10 +132,16 @@ class SwarmingPortal(PureCodePortal):
132
132
  @property
133
133
  def max_n_workers(self) -> int:
134
134
  """Get the maximum number of background workers"""
135
- n = self._get_config_setting("max_n_workers")
136
- if n in (None, KEEP_CURRENT):
137
- n = 10
138
- return n
135
+ if not hasattr(self, "_max_n_workers_cache"):
136
+ n = self._get_config_setting("max_n_workers")
137
+ if n in (None, KEEP_CURRENT):
138
+ n = 10
139
+ n = min(n, get_available_cpu_cores())
140
+ n = min(n, get_available_ram_mb() / 500)
141
+ n = int(n)+1
142
+ self._max_n_workers_cache = n
143
+
144
+ return self._max_n_workers_cache
139
145
 
140
146
 
141
147
  def describe(self) -> pd.DataFrame:
@@ -173,6 +179,11 @@ class SwarmingPortal(PureCodePortal):
173
179
  delay = self.entropy_infuser.uniform(min_delay, max_delay)
174
180
  sleep(delay)
175
181
 
182
+
183
+ def _invalidate_cache(self):
184
+ if hasattr(self, "_max_n_workers_cache"):
185
+ del self._max_n_workers_cache
186
+
176
187
  parameterizable.register_parameterizable_class(SwarmingPortal)
177
188
 
178
189
 
File without changes