pythagoras 0.23.15__tar.gz → 0.23.17__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 (77) hide show
  1. {pythagoras-0.23.15 → pythagoras-0.23.17}/PKG-INFO +119 -2
  2. {pythagoras-0.23.15 → pythagoras-0.23.17}/README.md +118 -1
  3. {pythagoras-0.23.15 → pythagoras-0.23.17}/pyproject.toml +1 -1
  4. {pythagoras-0.23.15/src/pythagoras/_070_protected_code_portals → pythagoras-0.23.17/src/pythagoras}/.DS_Store +0 -0
  5. pythagoras-0.23.15/src/pythagoras/.DS_Store +0 -0
  6. pythagoras-0.23.15/src/pythagoras/_010_basic_portals/.DS_Store +0 -0
  7. pythagoras-0.23.15/src/pythagoras/_020_ordinary_code_portals/.DS_Store +0 -0
  8. pythagoras-0.23.15/src/pythagoras/_030_data_portals/.DS_Store +0 -0
  9. pythagoras-0.23.15/src/pythagoras/_040_logging_code_portals/.DS_Store +0 -0
  10. pythagoras-0.23.15/src/pythagoras/_050_safe_code_portals/.DS_Store +0 -0
  11. pythagoras-0.23.15/src/pythagoras/_060_autonomous_code_portals/.DS_Store +0 -0
  12. pythagoras-0.23.15/src/pythagoras/_080_pure_code_portals/.DS_Store +0 -0
  13. pythagoras-0.23.15/src/pythagoras/_090_swarming_portals/.DS_Store +0 -0
  14. pythagoras-0.23.15/src/pythagoras/_100_top_level_API/.DS_Store +0 -0
  15. pythagoras-0.23.15/src/pythagoras/_800_signatures_and_converters/.DS_Store +0 -0
  16. pythagoras-0.23.15/src/pythagoras/_900_project_stats_collector/.DS_Store +0 -0
  17. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_010_basic_portals/__init__.py +0 -0
  18. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_010_basic_portals/basic_portal_core_classes.py +0 -0
  19. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_010_basic_portals/exceptions.py +0 -0
  20. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_010_basic_portals/long_infoname.py +0 -0
  21. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_010_basic_portals/not_picklable_class.py +0 -0
  22. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_010_basic_portals/portal_tester.py +0 -0
  23. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_010_basic_portals/post_init_metaclass.py +0 -0
  24. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_020_ordinary_code_portals/__init__.py +0 -0
  25. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_020_ordinary_code_portals/code_normalizer.py +0 -0
  26. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_020_ordinary_code_portals/function_processing.py +0 -0
  27. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_020_ordinary_code_portals/ordinary_decorator.py +0 -0
  28. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_020_ordinary_code_portals/ordinary_portal_core_classes.py +0 -0
  29. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_030_data_portals/__init__.py +0 -0
  30. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_030_data_portals/data_portal_core_classes.py +0 -0
  31. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_030_data_portals/ready_and_get.py +0 -0
  32. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_030_data_portals/storable_decorator.py +0 -0
  33. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_040_logging_code_portals/__init__.py +0 -0
  34. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_040_logging_code_portals/exception_processing_tracking.py +0 -0
  35. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_040_logging_code_portals/execution_environment_summary.py +0 -0
  36. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_040_logging_code_portals/kw_args.py +0 -0
  37. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_040_logging_code_portals/logging_decorator.py +0 -0
  38. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_040_logging_code_portals/logging_portal_core_classes.py +0 -0
  39. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_040_logging_code_portals/notebook_checker.py +0 -0
  40. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_040_logging_code_portals/output_capturer.py +0 -0
  41. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_040_logging_code_portals/uncaught_exceptions.py +0 -0
  42. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_050_safe_code_portals/__init__.py +0 -0
  43. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_050_safe_code_portals/safe_decorator.py +0 -0
  44. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_050_safe_code_portals/safe_portal_core_classes.py +0 -0
  45. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_060_autonomous_code_portals/__init__.py +0 -0
  46. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_060_autonomous_code_portals/autonomous_decorators.py +0 -0
  47. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_060_autonomous_code_portals/autonomous_portal_core_classes.py +0 -0
  48. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_060_autonomous_code_portals/names_usage_analyzer.py +0 -0
  49. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_070_protected_code_portals/__init__.py +0 -0
  50. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_070_protected_code_portals/basic_pre_validators.py +0 -0
  51. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_070_protected_code_portals/fn_arg_names_checker.py +0 -0
  52. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_070_protected_code_portals/list_flattener.py +0 -0
  53. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_070_protected_code_portals/package_manager.py +0 -0
  54. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_070_protected_code_portals/protected_decorators.py +0 -0
  55. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_070_protected_code_portals/protected_portal_core_classes.py +0 -0
  56. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_070_protected_code_portals/system_utils.py +0 -0
  57. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_070_protected_code_portals/validation_succesful_const.py +0 -0
  58. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_080_pure_code_portals/__init__.py +0 -0
  59. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_080_pure_code_portals/pure_core_classes.py +0 -0
  60. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_080_pure_code_portals/pure_decorator.py +0 -0
  61. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_080_pure_code_portals/recursion_pre_validator.py +0 -0
  62. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_090_swarming_portals/__init__.py +0 -0
  63. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_090_swarming_portals/output_suppressor.py +0 -0
  64. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_090_swarming_portals/swarming_portals.py +0 -0
  65. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_100_top_level_API/__init__.py +0 -0
  66. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_100_top_level_API/default_local_portal.py +0 -0
  67. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_100_top_level_API/top_level_API.py +0 -0
  68. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_800_signatures_and_converters/__init__.py +0 -0
  69. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_800_signatures_and_converters/base_16_32_convertors.py +0 -0
  70. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_800_signatures_and_converters/current_date_gmt_str.py +0 -0
  71. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_800_signatures_and_converters/hash_signatures.py +0 -0
  72. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_800_signatures_and_converters/node_signature.py +0 -0
  73. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_800_signatures_and_converters/random_signatures.py +0 -0
  74. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_900_project_stats_collector/__init__.py +0 -0
  75. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/_900_project_stats_collector/project_analyzer.py +0 -0
  76. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/__init__.py +0 -0
  77. {pythagoras-0.23.15 → pythagoras-0.23.17}/src/pythagoras/core/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pythagoras
3
- Version: 0.23.15
3
+ Version: 0.23.17
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
@@ -66,7 +66,7 @@ data science, machine learning, and AI workflows.
66
66
  Pythagoras excels at complex, long-running, resource-demanding computations.
67
67
  It’s not recommended for real-time, latency-sensitive workflows.
68
68
 
69
- ## Usage
69
+ ## Tutorials
70
70
 
71
71
  Pythagoras elevates two popular techniques — memoization and parallelization —
72
72
  to a global scale and then fuses them, unlocking performance and scalability
@@ -85,6 +85,123 @@ preferred functional patterns, augmented by new capabilities.
85
85
 
86
86
  **!!! BOOKMARK THIS PAGE AND COME BACK LATER, WE WILL PUBLISH MORE TUTORIALS SOON !!!**
87
87
 
88
+ ## Videos
89
+
90
+ * [Data Phoenix Webinar, August 27, 2025](https://youtu.be/eb6_atu1RQI) ([slides](https://docs.google.com/presentation/d/1fGBqnp0aqVHPJ-BYGYnUll1_TJI_WObAbEVX89Z3-yA))
91
+
92
+
93
+ ## Usage Examples
94
+
95
+ Importing Pythagoras:
96
+ ```python
97
+ from pythagoras.core import *
98
+ import pythagoras as pth
99
+ ```
100
+
101
+ Creating a portal based on a (shared) folder:
102
+ ```python
103
+ my_portal = get_portal("./my_local_folder")
104
+ ```
105
+
106
+ Checking the state of a portal:
107
+ ```python
108
+ my_portal.describe()
109
+ ```
110
+
111
+ Decorating a function:
112
+ ```python
113
+ @pure()
114
+ def my_long_running_function(a:float, b:float) -> float:
115
+ from time import sleep # imports must be placed inside a pure function
116
+ for i in range(5):
117
+ sleep(1)
118
+ print("waiting....")
119
+ return a+10*b
120
+ ```
121
+
122
+ Using a decorated function synchronously:
123
+ ```python
124
+ result = my_long_running_function(a=1, b=2)
125
+ ```
126
+
127
+ Using a decorated function asynchronously:
128
+ ```python
129
+ future_result_address = my_long_running_function.swarm(a=10, b=20)
130
+ if ready(future_result_address):
131
+ result = get(future_result_address)
132
+ ```
133
+
134
+ Pre-conditions for executing a function:
135
+ ```python
136
+ @pure(pre_validators=[
137
+ unused_ram(Gb=5),
138
+ installed_packages("scikit-learn","pandas"),
139
+ unused_cpu(cores=10)])
140
+ def my_long_running_function(a:float, b:float) -> float:
141
+ from time import sleep
142
+ for i in range(5):
143
+ sleep(1)
144
+ print(
145
+ "waiting...."
146
+ )
147
+ return a+10*b
148
+ ```
149
+
150
+ Recursion:
151
+ ```python
152
+ @pure(pre_validators=[recursive_parameters("n")])
153
+ def factorial(n:int)->int:
154
+ if n == 1:
155
+ return 1
156
+ else:
157
+ return n*factorial(n=n-1)
158
+ ```
159
+
160
+ Partial function application:
161
+ ```python
162
+ @pure()
163
+ def my_map(input_list:list, transformer: PureFn)->list:
164
+ result = []
165
+ for element in input_list:
166
+ transformed_element = transformer(x=element)
167
+ result.append(transformed_element)
168
+ return result
169
+
170
+ @pure()
171
+ def my_square(x):
172
+ return x*x
173
+
174
+ result = my_map(input_list=[1,2,3,4,5], transformer=my_square)
175
+
176
+ my_square_map = my_map.fix_kwargs(transformer = my_square)
177
+
178
+ result = my_square_map(input_list=[1,2,3,4,5])
179
+ ```
180
+
181
+ Mutually recursive functions:
182
+ ```python
183
+ @pure(pre_validators=recursive_parameters("n"))
184
+ def is_even(n:int, is_odd ,is_even)->bool:
185
+ if n in {0,2}:
186
+ return True
187
+ else:
188
+ return is_odd(n=n-1, is_even=is_even, is_odd=is_odd)
189
+
190
+ @pure(pre_validators=recursive_parameters("n"))
191
+ def is_odd(n:int, is_even, is_odd)->bool:
192
+ if n in {0,2}:
193
+ return False
194
+ else:
195
+ return is_even(n=n-1, is_odd=is_odd, is_even=is_even)
196
+
197
+ (is_even, is_odd) = (
198
+ is_even.fix_kwargs(is_odd=is_odd, is_even=is_even)
199
+ , is_odd.fix_kwargs(is_odd=is_odd, is_even=is_even) )
200
+
201
+ assert is_even(n=10)
202
+ assert is_odd(n=11)
203
+ ```
204
+
88
205
  ## How to get it?
89
206
 
90
207
  The source code is hosted on GitHub at: https://github.com/pythagoras-dev/pythagoras
@@ -14,7 +14,7 @@ data science, machine learning, and AI workflows.
14
14
  Pythagoras excels at complex, long-running, resource-demanding computations.
15
15
  It’s not recommended for real-time, latency-sensitive workflows.
16
16
 
17
- ## Usage
17
+ ## Tutorials
18
18
 
19
19
  Pythagoras elevates two popular techniques — memoization and parallelization —
20
20
  to a global scale and then fuses them, unlocking performance and scalability
@@ -33,6 +33,123 @@ preferred functional patterns, augmented by new capabilities.
33
33
 
34
34
  **!!! BOOKMARK THIS PAGE AND COME BACK LATER, WE WILL PUBLISH MORE TUTORIALS SOON !!!**
35
35
 
36
+ ## Videos
37
+
38
+ * [Data Phoenix Webinar, August 27, 2025](https://youtu.be/eb6_atu1RQI) ([slides](https://docs.google.com/presentation/d/1fGBqnp0aqVHPJ-BYGYnUll1_TJI_WObAbEVX89Z3-yA))
39
+
40
+
41
+ ## Usage Examples
42
+
43
+ Importing Pythagoras:
44
+ ```python
45
+ from pythagoras.core import *
46
+ import pythagoras as pth
47
+ ```
48
+
49
+ Creating a portal based on a (shared) folder:
50
+ ```python
51
+ my_portal = get_portal("./my_local_folder")
52
+ ```
53
+
54
+ Checking the state of a portal:
55
+ ```python
56
+ my_portal.describe()
57
+ ```
58
+
59
+ Decorating a function:
60
+ ```python
61
+ @pure()
62
+ def my_long_running_function(a:float, b:float) -> float:
63
+ from time import sleep # imports must be placed inside a pure function
64
+ for i in range(5):
65
+ sleep(1)
66
+ print("waiting....")
67
+ return a+10*b
68
+ ```
69
+
70
+ Using a decorated function synchronously:
71
+ ```python
72
+ result = my_long_running_function(a=1, b=2)
73
+ ```
74
+
75
+ Using a decorated function asynchronously:
76
+ ```python
77
+ future_result_address = my_long_running_function.swarm(a=10, b=20)
78
+ if ready(future_result_address):
79
+ result = get(future_result_address)
80
+ ```
81
+
82
+ Pre-conditions for executing a function:
83
+ ```python
84
+ @pure(pre_validators=[
85
+ unused_ram(Gb=5),
86
+ installed_packages("scikit-learn","pandas"),
87
+ unused_cpu(cores=10)])
88
+ def my_long_running_function(a:float, b:float) -> float:
89
+ from time import sleep
90
+ for i in range(5):
91
+ sleep(1)
92
+ print(
93
+ "waiting...."
94
+ )
95
+ return a+10*b
96
+ ```
97
+
98
+ Recursion:
99
+ ```python
100
+ @pure(pre_validators=[recursive_parameters("n")])
101
+ def factorial(n:int)->int:
102
+ if n == 1:
103
+ return 1
104
+ else:
105
+ return n*factorial(n=n-1)
106
+ ```
107
+
108
+ Partial function application:
109
+ ```python
110
+ @pure()
111
+ def my_map(input_list:list, transformer: PureFn)->list:
112
+ result = []
113
+ for element in input_list:
114
+ transformed_element = transformer(x=element)
115
+ result.append(transformed_element)
116
+ return result
117
+
118
+ @pure()
119
+ def my_square(x):
120
+ return x*x
121
+
122
+ result = my_map(input_list=[1,2,3,4,5], transformer=my_square)
123
+
124
+ my_square_map = my_map.fix_kwargs(transformer = my_square)
125
+
126
+ result = my_square_map(input_list=[1,2,3,4,5])
127
+ ```
128
+
129
+ Mutually recursive functions:
130
+ ```python
131
+ @pure(pre_validators=recursive_parameters("n"))
132
+ def is_even(n:int, is_odd ,is_even)->bool:
133
+ if n in {0,2}:
134
+ return True
135
+ else:
136
+ return is_odd(n=n-1, is_even=is_even, is_odd=is_odd)
137
+
138
+ @pure(pre_validators=recursive_parameters("n"))
139
+ def is_odd(n:int, is_even, is_odd)->bool:
140
+ if n in {0,2}:
141
+ return False
142
+ else:
143
+ return is_even(n=n-1, is_odd=is_odd, is_even=is_even)
144
+
145
+ (is_even, is_odd) = (
146
+ is_even.fix_kwargs(is_odd=is_odd, is_even=is_even)
147
+ , is_odd.fix_kwargs(is_odd=is_odd, is_even=is_even) )
148
+
149
+ assert is_even(n=10)
150
+ assert is_odd(n=11)
151
+ ```
152
+
36
153
  ## How to get it?
37
154
 
38
155
  The source code is hosted on GitHub at: https://github.com/pythagoras-dev/pythagoras
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "pythagoras"
7
- version = "0.23.15"
7
+ version = "0.23.17"
8
8
  authors = [
9
9
  {name = "Volodymyr (Vlad) Pavlov", email = "vlpavlov@ieee.org"},
10
10
  ]
Binary file