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.
- pythagoras/_030_data_portals/data_portal_core_classes.py +1 -1
- pythagoras/_070_protected_code_portals/basic_pre_validators.py +14 -4
- pythagoras/_070_protected_code_portals/protected_portal_core_classes.py +3 -3
- pythagoras/_090_swarming_portals/swarming_portals.py +1 -1
- pythagoras/_800_signatures_and_converters/__init__.py +1 -1
- pythagoras/_800_signatures_and_converters/{node_signatures.py → node_signature.py} +2 -0
- {pythagoras-0.23.5.dist-info → pythagoras-0.23.7.dist-info}/METADATA +4 -3
- {pythagoras-0.23.5.dist-info → pythagoras-0.23.7.dist-info}/RECORD +9 -9
- {pythagoras-0.23.5.dist-info → pythagoras-0.23.7.dist-info}/WHEEL +0 -0
|
@@ -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(
|
|
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
|
-
|
|
37
|
-
|
|
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.
|
|
30
|
+
from .._800_signatures_and_converters.node_signature import get_node_signature
|
|
31
31
|
|
|
32
32
|
from multiprocessing import get_context
|
|
33
33
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pythagoras
|
|
3
|
-
Version: 0.23.
|
|
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
|
-
*
|
|
84
|
-
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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/
|
|
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.
|
|
64
|
-
pythagoras-0.23.
|
|
65
|
-
pythagoras-0.23.
|
|
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,,
|
|
File without changes
|