pythagoras 0.23.5__py3-none-any.whl → 0.23.7__py3-none-any.whl

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.
@@ -21,7 +21,7 @@ from .._020_ordinary_code_portals import (
21
21
  from persidict import WriteOnceDict
22
22
 
23
23
  TOTAL_VALUES_TXT = "Values, total"
24
- PROBABILITY_OF_CHECKS_TXT = "Probability of checks"
24
+ PROBABILITY_OF_CHECKS_TXT = "Probability of consistency checks"
25
25
 
26
26
 
27
27
  def get_active_data_portal() -> DataPortal:
@@ -26,21 +26,31 @@ def unused_ram(Gb:int) -> SimplePreValidatorFn:
26
26
  return SimplePreValidatorFn(_at_least_X_G_RAM_free_check).fix_kwargs(x=Gb)
27
27
 
28
28
 
29
- def _check_python_package_and_install_if_needed(package_name)-> ValidationSuccessClass | None:
29
+ def _check_python_package_and_install_if_needed(
30
+ package_name)-> ValidationSuccessClass | None:
30
31
  assert isinstance(package_name, str)
31
- import importlib
32
+ import importlib, time
32
33
  try:
33
34
  importlib.import_module(package_name)
34
35
  return pth.VALIDATION_SUCCESSFUL
35
36
  except:
36
- pth.install_package(package_name)
37
- return pth.VALIDATION_SUCCESSFUL
37
+ portal = self.portal
38
+ address = (pth.get_node_signature()
39
+ , package_name
40
+ , "installation_attempt")
41
+ # allow installation retries every 10 minutes
42
+ if (not address in portal._config_settings
43
+ or portal._config_settings[address] < time.time() - 600):
44
+ portal._config_settings[address] = time.time()
45
+ pth.install_package(package_name)
46
+ return pth.VALIDATION_SUCCESSFUL
38
47
 
39
48
 
40
49
  def installed_packages(*args) -> list[SimplePreValidatorFn]:
41
50
  validators = []
42
51
  for package_name in args:
43
52
  assert isinstance(package_name, str)
53
+ #TODO: check if the package is available on pypi.org
44
54
  new_validator = SimplePreValidatorFn(_check_python_package_and_install_if_needed)
45
55
  new_validator = new_validator.fix_kwargs(package_name=package_name)
46
56
  validators.append(new_validator)
@@ -57,8 +57,8 @@ class ProtectedFn(AutonomousFn):
57
57
  pre_validators_arg_names = ["packed_kwargs", "fn_addr"]
58
58
 
59
59
  def __init__(self, fn: Callable | str
60
- , pre_validators: list[ValidatorFn] | list[Callable] | None = None
61
- , post_validators: list[ValidatorFn] | list[Callable] | None = None
60
+ , pre_validators: list[ValidatorFn] | list[Callable] | ValidatorFn | Callable | None = None
61
+ , post_validators: list[ValidatorFn] | list[Callable] | ValidatorFn | Callable | None = None
62
62
  , excessive_logging: bool | Joker = KEEP_CURRENT
63
63
  , fixed_kwargs: dict[str,Any] | None = None
64
64
  , portal: ProtectedCodePortal | None = None):
@@ -173,7 +173,7 @@ class ProtectedFn(AutonomousFn):
173
173
 
174
174
 
175
175
  def _normalize_validators(self
176
- , validators: list[ValidatorFn] | None
176
+ , validators: list[ValidatorFn] | ValidatorFn | None
177
177
  , validator_type: type
178
178
  ) -> list[ValidatorFn]:
179
179
  """Return list of validators in a normalized form.
@@ -27,7 +27,7 @@ from .._010_basic_portals.basic_portal_core_classes import _describe_runtime_cha
27
27
  from persidict import OverlappingMultiDict
28
28
  from .._080_pure_code_portals.pure_core_classes import (
29
29
  PureCodePortal, PureFnExecutionResultAddr)
30
- from .._800_signatures_and_converters.node_signatures import get_node_signature
30
+ from .._800_signatures_and_converters.node_signature import get_node_signature
31
31
 
32
32
  from multiprocessing import get_context
33
33
 
@@ -1,5 +1,5 @@
1
1
  from .base_16_32_convertors import *
2
2
  from .current_date_gmt_str import *
3
3
  from .hash_signatures import *
4
- from .node_signatures import *
4
+ from .node_signature import *
5
5
  from .random_signatures import *
@@ -1,8 +1,10 @@
1
1
  import uuid, platform, getpass
2
+ from functools import cache
2
3
 
3
4
  from .hash_signatures import get_hash_signature
4
5
 
5
6
 
7
+ @cache
6
8
  def get_node_signature() -> str:
7
9
  """Returns a globally-unique signature for the current computing node.
8
10
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pythagoras
3
- Version: 0.23.5
3
+ Version: 0.23.7
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
@@ -80,8 +80,9 @@ Pythagoras elevates two popular techniques — memoization and parallelization
80
80
  to a global scale and then fuses them, unlocking performance and scalability
81
81
  that were previously out of reach.
82
82
 
83
- * `Pythagoras 101: Introduction to Memoization` notebook:
84
- https://colab.research.google.com/drive/1bvNXFP1BQJqhoS270Dz1lNT4jPCuj540
83
+ * [Pythagoras 101: Introduction to Memoization](https://colab.research.google.com/drive/1bvNXFP1BQJqhoS270Dz1lNT4jPCuj540)
84
+
85
+ * [Pythagoras 102: Parallelization Basics](https://colab.research.google.com/drive/1DZxgwoiTnyy1qE7T5JunU4GN4j0w6CVk)
85
86
 
86
87
 
87
88
  **!!! BOOKMARK THIS PAGE AND COME BACK LATER, WE WILL PUBLISH MORE TUTORIALS SOON !!!**
@@ -12,7 +12,7 @@ pythagoras/_020_ordinary_code_portals/function_processing.py,sha256=ae5841d1da5a
12
12
  pythagoras/_020_ordinary_code_portals/ordinary_decorator.py,sha256=278ab1d37344120a585af8380fc52400bd0f76d02ddac43230dd68a7a2cc16c0,1028
13
13
  pythagoras/_020_ordinary_code_portals/ordinary_portal_core_classes.py,sha256=6d8d87cf2d7d9537b3bfde9d49cd65e52b1a1b13643133aaf08b1f9e4755d706,9743
14
14
  pythagoras/_030_data_portals/__init__.py,sha256=7ff17d0c29ae5603cc833c118ee363e8523add2de85eeee58f7cd4eba370ec77,1427
15
- pythagoras/_030_data_portals/data_portal_core_classes.py,sha256=34f1e5235a37747b585d503bcc613f79ab61c4af99fafdfbf707005927a3c2bd,20411
15
+ pythagoras/_030_data_portals/data_portal_core_classes.py,sha256=e790ff0ec8c303ef3809da998378956265978b34f80b0da36bc42b975ff56e4f,20423
16
16
  pythagoras/_030_data_portals/ready_and_get.py,sha256=838004869475dd877a1158a7cb6c20f2f922b97e1ac174286ce30ce287fb6520,2002
17
17
  pythagoras/_030_data_portals/storable_decorator.py,sha256=97c5b71a156622c7208e80931aaded99d7a12860cb2159c56d333e196fb51b88,578
18
18
  pythagoras/_040_logging_code_portals/__init__.py,sha256=ab6855c8e56013ef51bb7c9c8a52bdf184bd45ab7cb5273a7ab77b02d1b1a5a0,996
@@ -32,12 +32,12 @@ pythagoras/_060_autonomous_code_portals/autonomous_decorators.py,sha256=762597d3
32
32
  pythagoras/_060_autonomous_code_portals/autonomous_portal_core_classes.py,sha256=d07623edf1383bc8b82eae49f6c7b19e3512edc79a05f391133c05a2e02f6739,6027
33
33
  pythagoras/_060_autonomous_code_portals/names_usage_analyzer.py,sha256=9aaaf3010c37b46c4f617b0c03c1347e1848a49a29bd116bce47353154ac3d74,7474
34
34
  pythagoras/_070_protected_code_portals/__init__.py,sha256=4ef19c25acf6d10aac9aff26da903876e06d167fc274229f9126ce485a094bc9,989
35
- pythagoras/_070_protected_code_portals/basic_pre_validators.py,sha256=1d63cc3464c602a022e26b74a255c9539ecdb00437c48bb50a41e1e5e443f8f6,1595
35
+ pythagoras/_070_protected_code_portals/basic_pre_validators.py,sha256=8a3a1727bb4acdf95ea897810092e0d09c8df2b81d8014e3f1f9f585761b5301,2071
36
36
  pythagoras/_070_protected_code_portals/fn_arg_names_checker.py,sha256=e858ce5099868030a39057177f93a893e13d7a210582e6ab636aaaccec898fb0,1230
37
37
  pythagoras/_070_protected_code_portals/list_flattener.py,sha256=9a54b512ad9dc201db348e7908f5ca5f36d171ae3da433511d38023a6ba8d4b5,331
38
38
  pythagoras/_070_protected_code_portals/package_manager.py,sha256=4111d71886adcf1e8d28f3c2d3a08c8a352601297f9ab3f08a4541586ed9d376,1965
39
39
  pythagoras/_070_protected_code_portals/protected_decorators.py,sha256=956ed45870004246d77d6e364015b3a0d936bd8b919dfa9a56c97d69713a9b80,1627
40
- pythagoras/_070_protected_code_portals/protected_portal_core_classes.py,sha256=8bd5e15a4d863aa13a14d04f115c37ddec345964c41ae8666b49d200221f5b64,9426
40
+ pythagoras/_070_protected_code_portals/protected_portal_core_classes.py,sha256=df220de819e2d0aa5fd0a9332c6d13c1cd5aaf0b45bade7602d4bfecf7473114,9490
41
41
  pythagoras/_070_protected_code_portals/system_utils.py,sha256=878a22110140c852b3aaf774cb0c0023458360a4ae221fef89ff3a5d02176301,2360
42
42
  pythagoras/_070_protected_code_portals/validation_succesful_const.py,sha256=602cd3598dd43a71421eb547f1e80f411e30df616deb26912a741a2898d06754,300
43
43
  pythagoras/_070_protected_code_portals/validator_fn_classes.py,sha256=4afa4bf0629f68e4b1623003272ffd7111ac9cbb739e81fde601049d19b84269,3232
@@ -46,20 +46,20 @@ pythagoras/_080_pure_code_portals/pure_core_classes.py,sha256=5227a65ca50143b023
46
46
  pythagoras/_080_pure_code_portals/pure_decorator.py,sha256=587650ce6cb1802a402c7aea7de88e32b33a4c391972fd18d9bef9e9ecf84369,2279
47
47
  pythagoras/_090_swarming_portals/__init__.py,sha256=4ee035ecf7ed4c1b9da6d01b94db41943e3a06a5228ad92c3ad7f7cb4d502a6d,514
48
48
  pythagoras/_090_swarming_portals/output_suppressor.py,sha256=83e6cc9bcc62a226babb1165912ef5095ea948499ce5136a7516ac8b54522607,626
49
- pythagoras/_090_swarming_portals/swarming_portals.py,sha256=51e1a4149659cc1ef62761338ae9190736a89ecefc5c10281f20b805f4e4c1d4,12485
49
+ pythagoras/_090_swarming_portals/swarming_portals.py,sha256=5e54bc77538bf949aa7438944d0be36b03382f9e6192bf20397700ba106ad693,12484
50
50
  pythagoras/_100_top_level_API/__init__.py,sha256=b392edc2c918da7c2444f14accfd0fac2cd0d5cf6849c64ed2433dfdb58b8b75,64
51
51
  pythagoras/_100_top_level_API/default_local_portal.py,sha256=4a7ca44e94d78352ae4f5ab00e7ac067ade562c84ccbed27362520a0e54cc42b,339
52
52
  pythagoras/_100_top_level_API/top_level_API.py,sha256=4b63575b86df2fdf28e93c67e8d33411e05bd67cf016d3d297ec9635ebc04081,906
53
- pythagoras/_800_signatures_and_converters/__init__.py,sha256=d9420254db0c62903fe5419612cef536f219ec319e81b7efc3e783a113aac93b,167
53
+ pythagoras/_800_signatures_and_converters/__init__.py,sha256=580ce93def1fb21ff0ffb1e15712592c189dee0c675b7a663d95bce9f6272639,166
54
54
  pythagoras/_800_signatures_and_converters/base_16_32_convertors.py,sha256=66356d2a38e33203201d484cfb543da8b6160832a1965aaaf73e1880a2f4a828,1236
55
55
  pythagoras/_800_signatures_and_converters/current_date_gmt_str.py,sha256=2beac61f2ad112cc8175832aeef5abbf715d01a71ea56429bce7d3fe6ad9a8d3,268
56
56
  pythagoras/_800_signatures_and_converters/hash_signatures.py,sha256=02c5080ff67bc9e174e899a4f2428015722ec6817484dd0ec0e4b54f99eeeff9,989
57
- pythagoras/_800_signatures_and_converters/node_signatures.py,sha256=2de43f2cc4c3d62f56240fc26fc70668fde809a65f023502fb773ccafae3224b,557
57
+ pythagoras/_800_signatures_and_converters/node_signature.py,sha256=a52678c81e1a5cd1faca18b343a6779b8b9172e0cd92bffe959f34db835b67bc,592
58
58
  pythagoras/_800_signatures_and_converters/random_signatures.py,sha256=c174f28c04ccf08c0c5eadaf1e1a00aba4fec88ec370def64afcadd39123141a,323
59
59
  pythagoras/_900_project_stats_collector/__init__.py,sha256=11a82df8184f3ed046829332c31da590b0cad7ad3763db7f40176d1ca5071c56,71
60
60
  pythagoras/_900_project_stats_collector/project_analyzer.py,sha256=ba1c9c14a8d421712961c6589da937ca7e0916172197ea19ef0b7ab291718686,3574
61
61
  pythagoras/__init__.py,sha256=4cc3ed25d4a2fd64a10a9267b1555d3b8f1672fb3bf0631b522e601dcd5e30bc,1233
62
62
  pythagoras/core/__init__.py,sha256=11c3616471c79550d69a0d3b3b49a45b90087919b82477db5de99c8ebc6ba5c0,298
63
- pythagoras-0.23.5.dist-info/WHEEL,sha256=607c46fee47e440c91332c738096ff0f5e54ca3b0818ee85462dd5172a38e793,79
64
- pythagoras-0.23.5.dist-info/METADATA,sha256=af6132d76a8cf080ed2ea111704189562e640e7676ac34f48693e08c77840032,4792
65
- pythagoras-0.23.5.dist-info/RECORD,,
63
+ pythagoras-0.23.7.dist-info/WHEEL,sha256=607c46fee47e440c91332c738096ff0f5e54ca3b0818ee85462dd5172a38e793,79
64
+ pythagoras-0.23.7.dist-info/METADATA,sha256=f11d45ee87a517a5773f7e5f57627c5f2af986ccd5b2a845a73a557e5798250d,4902
65
+ pythagoras-0.23.7.dist-info/RECORD,,