pythagoras 0.20.3__tar.gz → 0.20.4__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.3 → pythagoras-0.20.4}/PKG-INFO +1 -1
  2. {pythagoras-0.20.3 → pythagoras-0.20.4}/pyproject.toml +1 -1
  3. pythagoras-0.20.4/src/pythagoras/_070_protected_code_portals/package_manager.py +76 -0
  4. pythagoras-0.20.3/src/pythagoras/_070_protected_code_portals/package_manager.py +0 -38
  5. {pythagoras-0.20.3 → pythagoras-0.20.4}/README.md +0 -0
  6. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/__init__.py +0 -0
  7. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/basic_portal_core_classes.py +0 -0
  8. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/exceptions.py +0 -0
  9. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/long_infoname.py +0 -0
  10. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/not_picklable_class.py +0 -0
  11. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/portal_tester.py +0 -0
  12. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/post_init_metaclass.py +0 -0
  13. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_020_ordinary_code_portals/__init__.py +0 -0
  14. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_020_ordinary_code_portals/code_normalizer.py +0 -0
  15. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_020_ordinary_code_portals/function_processing.py +0 -0
  16. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_020_ordinary_code_portals/ordinary_decorator.py +0 -0
  17. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_020_ordinary_code_portals/ordinary_portal_core_classes.py +0 -0
  18. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_030_data_portals/__init__.py +0 -0
  19. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_030_data_portals/data_portal_core_classes.py +0 -0
  20. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_030_data_portals/ready_and_get.py +0 -0
  21. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_030_data_portals/storable_decorator.py +0 -0
  22. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/__init__.py +0 -0
  23. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/exception_processing_tracking.py +0 -0
  24. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/execution_environment_summary.py +0 -0
  25. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/kw_args.py +0 -0
  26. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/logging_decorator.py +0 -0
  27. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/logging_portal_core_classes.py +0 -0
  28. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/notebook_checker.py +0 -0
  29. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/output_capturer.py +0 -0
  30. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/uncaught_exceptions.py +0 -0
  31. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_050_safe_code_portals/__init__.py +0 -0
  32. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_050_safe_code_portals/safe_decorator.py +0 -0
  33. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_050_safe_code_portals/safe_portal_core_classes.py +0 -0
  34. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_060_autonomous_code_portals/__init__.py +0 -0
  35. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_060_autonomous_code_portals/autonomous_decorators.py +0 -0
  36. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_060_autonomous_code_portals/autonomous_portal_core_classes.py +0 -0
  37. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_060_autonomous_code_portals/names_usage_analyzer.py +0 -0
  38. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/GPU_guards.py +0 -0
  39. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/OK_const.py +0 -0
  40. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/RAM_guards.py +0 -0
  41. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/__init__.py +0 -0
  42. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/fn_arg_names_checker.py +0 -0
  43. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/list_flattener.py +0 -0
  44. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/protected_decorators.py +0 -0
  45. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/protected_portal_core_classes.py +0 -0
  46. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/python_packages_guards.py +0 -0
  47. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_080_pure_code_portals/__init__.py +0 -0
  48. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_080_pure_code_portals/pure_core_classes.py +0 -0
  49. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_080_pure_code_portals/pure_decorator.py +0 -0
  50. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_090_swarming_portals/__init__.py +0 -0
  51. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_090_swarming_portals/output_suppressor.py +0 -0
  52. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_090_swarming_portals/swarming_portals.py +0 -0
  53. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_090_swarming_portals/system_utils.py +0 -0
  54. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_100_top_level_API/__init__.py +0 -0
  55. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_100_top_level_API/default_local_portal.py +0 -0
  56. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_100_top_level_API/top_level_API.py +0 -0
  57. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_800_signatures_and_converters/__init__.py +0 -0
  58. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_800_signatures_and_converters/base_16_32_convertors.py +0 -0
  59. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_800_signatures_and_converters/current_date_gmt_str.py +0 -0
  60. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_800_signatures_and_converters/hash_signatures.py +0 -0
  61. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_800_signatures_and_converters/node_signatures.py +0 -0
  62. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_800_signatures_and_converters/random_signatures.py +0 -0
  63. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_900_project_stats_collector/__init__.py +0 -0
  64. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_900_project_stats_collector/project_analyzer.py +0 -0
  65. {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/__init__.py +0 -0
  66. {pythagoras-0.20.3 → pythagoras-0.20.4}/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.3
3
+ Version: 0.20.4
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.3"
7
+ version = "0.20.4"
8
8
  authors = [
9
9
  {name = "Volodymyr (Vlad) Pavlov", email = "vlpavlov@ieee.org"},
10
10
  ]
@@ -0,0 +1,76 @@
1
+ import subprocess
2
+ import importlib
3
+ import sys
4
+ from typing import Optional
5
+
6
+ _uv_and_pip_installation_needed:bool = True
7
+
8
+ def _install_uv_and_pip() -> None:
9
+ global _uv_and_pip_installation_needed
10
+ if not _uv_and_pip_installation_needed:
11
+ return
12
+ _uv_pip_installation_attempted = False
13
+
14
+ try:
15
+ importlib.import_module("uv")
16
+ except:
17
+ install_package("uv", use_uv=False)
18
+
19
+ try:
20
+ importlib.import_module("pip")
21
+ except:
22
+ install_package("pip", use_uv=True)
23
+
24
+
25
+ def install_package(package_name:str
26
+ , upgrade:bool=False
27
+ , version:Optional[str]=None
28
+ , use_uv:bool = True
29
+ ) -> None:
30
+ """Install package using pip."""
31
+
32
+ if package_name == "pip":
33
+ assert use_uv
34
+ elif package_name == "uv":
35
+ assert not use_uv
36
+ else:
37
+ _install_uv_and_pip()
38
+
39
+ if use_uv:
40
+ command = [sys.executable, "-m", "uv", "pip", "install"]
41
+ else:
42
+ command = [sys.executable, "-m", "pip", "install"]
43
+
44
+ if upgrade:
45
+ command += ["--upgrade"]
46
+
47
+ package_spec = f"{package_name}=={version}" if version else package_name
48
+ command += [package_spec]
49
+
50
+ subprocess.run(command, check=True, stdout=subprocess.PIPE
51
+ , stderr=subprocess.STDOUT, text=True)
52
+
53
+ importlib.import_module(package_name)
54
+
55
+
56
+ def uninstall_package(package_name:str, use_uv:bool=True)->None:
57
+ """Uninstall package using uv or pip."""
58
+
59
+ assert package_name not in ["pip", "uv"]
60
+
61
+ if use_uv:
62
+ command = [sys.executable, "-m", "uv", "pip", "uninstall", package_name]
63
+ else:
64
+ command = [sys.executable, "-m", "pip", "uninstall", "-y", package_name]
65
+
66
+ subprocess.run(command, check=True, stdout=subprocess.PIPE
67
+ , stderr=subprocess.STDOUT, text=True)
68
+
69
+ try:
70
+ package = importlib.import_module(package_name)
71
+ importlib.reload(package)
72
+ except:
73
+ pass
74
+ else:
75
+ raise Exception(
76
+ f"Failed to validate package uninstallation for '{package_name}'. ")
@@ -1,38 +0,0 @@
1
- import subprocess
2
- import importlib
3
- import sys
4
- from typing import Optional
5
-
6
- def install_package(package_name:str
7
- , upgrade:bool=False
8
- , version:Optional[str]=None
9
- ) -> None:
10
- """Install package using pip."""
11
- command = [sys.executable, "-m", "uv", "pip", "install"]
12
-
13
- if upgrade:
14
- command += ["--upgrade"]
15
-
16
- package_spec = f"{package_name}=={version}" if version else package_name
17
- command += [package_spec]
18
-
19
- subprocess.run(command, check=True, stdout=subprocess.PIPE
20
- , stderr=subprocess.STDOUT, text=True)
21
-
22
- importlib.import_module(package_name)
23
-
24
- def uninstall_package(package_name:str)->None:
25
- """Uninstall package using pip."""
26
-
27
- command = [sys.executable, "-m", "uv", "pip", "uninstall", package_name]
28
- subprocess.run(command, check=True, stdout=subprocess.PIPE
29
- , stderr=subprocess.STDOUT, text=True)
30
-
31
- try:
32
- package = importlib.import_module(package_name)
33
- importlib.reload(package)
34
- except:
35
- pass
36
- else:
37
- raise Exception(
38
- f"Failed to validate package uninstallation for '{package_name}'. ")
File without changes