py10x-universe 0.1.3__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.
Files changed (214) hide show
  1. core_10x/__init__.py +42 -0
  2. core_10x/backbone/__init__.py +0 -0
  3. core_10x/backbone/backbone_store.py +59 -0
  4. core_10x/backbone/backbone_traitable.py +30 -0
  5. core_10x/backbone/backbone_user.py +66 -0
  6. core_10x/backbone/bound_data_domain.py +49 -0
  7. core_10x/backbone/namespace.py +101 -0
  8. core_10x/backbone/vault.py +38 -0
  9. core_10x/code_samples/__init__.py +0 -0
  10. core_10x/code_samples/_package_manifest.py +3 -0
  11. core_10x/code_samples/directories.py +181 -0
  12. core_10x/code_samples/person.py +76 -0
  13. core_10x/concrete_traits.py +356 -0
  14. core_10x/conftest.py +12 -0
  15. core_10x/curve.py +321 -0
  16. core_10x/data_domain.py +48 -0
  17. core_10x/data_domain_binder.py +45 -0
  18. core_10x/directory.py +250 -0
  19. core_10x/entity.py +8 -0
  20. core_10x/entity_filter.py +5 -0
  21. core_10x/environment_variables.py +147 -0
  22. core_10x/exec_control.py +84 -0
  23. core_10x/experimental/__init__.py +0 -0
  24. core_10x/experimental/data_protocol_ex.py +34 -0
  25. core_10x/global_cache.py +121 -0
  26. core_10x/manual_tests/__init__.py +0 -0
  27. core_10x/manual_tests/calendar_test.py +35 -0
  28. core_10x/manual_tests/ctor_update_bug.py +58 -0
  29. core_10x/manual_tests/debug_graph_on.py +17 -0
  30. core_10x/manual_tests/debug_graphoff_inside_graph_on.py +28 -0
  31. core_10x/manual_tests/enum_bits_test.py +17 -0
  32. core_10x/manual_tests/env_vars_trivial_test.py +12 -0
  33. core_10x/manual_tests/existing_traitable.py +33 -0
  34. core_10x/manual_tests/k10x_test1.py +13 -0
  35. core_10x/manual_tests/named_constant_test.py +121 -0
  36. core_10x/manual_tests/nucleus_trivial_test.py +42 -0
  37. core_10x/manual_tests/polars_test.py +14 -0
  38. core_10x/manual_tests/py_class_test.py +4 -0
  39. core_10x/manual_tests/rc_test.py +42 -0
  40. core_10x/manual_tests/rdate_test.py +12 -0
  41. core_10x/manual_tests/reference_serialization_bug.py +19 -0
  42. core_10x/manual_tests/resource_trivial_test.py +10 -0
  43. core_10x/manual_tests/store_uri_test.py +6 -0
  44. core_10x/manual_tests/trait_definition_test.py +19 -0
  45. core_10x/manual_tests/trait_filter_test.py +15 -0
  46. core_10x/manual_tests/trait_flag_modification_test.py +42 -0
  47. core_10x/manual_tests/trait_modification_bug.py +26 -0
  48. core_10x/manual_tests/traitable_as_of_test.py +82 -0
  49. core_10x/manual_tests/traitable_heir_test.py +39 -0
  50. core_10x/manual_tests/traitable_history_test.py +41 -0
  51. core_10x/manual_tests/traitable_serialization_test.py +54 -0
  52. core_10x/manual_tests/traitable_trivial_test.py +71 -0
  53. core_10x/manual_tests/trivial_graph_test.py +16 -0
  54. core_10x/manual_tests/ts_class_association_test.py +64 -0
  55. core_10x/manual_tests/ts_trivial_test.py +35 -0
  56. core_10x/named_constant.py +425 -0
  57. core_10x/nucleus.py +81 -0
  58. core_10x/package_manifest.py +85 -0
  59. core_10x/package_refactoring.py +153 -0
  60. core_10x/py_class.py +431 -0
  61. core_10x/rc.py +155 -0
  62. core_10x/rdate.py +339 -0
  63. core_10x/resource.py +189 -0
  64. core_10x/roman_number.py +67 -0
  65. core_10x/testlib/__init__.py +0 -0
  66. core_10x/testlib/test_store.py +240 -0
  67. core_10x/testlib/traitable_history_tests.py +787 -0
  68. core_10x/testlib/ts_tests.py +280 -0
  69. core_10x/trait.py +377 -0
  70. core_10x/trait_definition.py +176 -0
  71. core_10x/trait_filter.py +205 -0
  72. core_10x/trait_method_error.py +36 -0
  73. core_10x/traitable.py +1082 -0
  74. core_10x/traitable_cli.py +153 -0
  75. core_10x/traitable_heir.py +33 -0
  76. core_10x/traitable_id.py +31 -0
  77. core_10x/ts_store.py +172 -0
  78. core_10x/ts_store_type.py +26 -0
  79. core_10x/ts_union.py +147 -0
  80. core_10x/ui_hint.py +153 -0
  81. core_10x/unit_tests/test_concrete_traits.py +156 -0
  82. core_10x/unit_tests/test_converters.py +51 -0
  83. core_10x/unit_tests/test_curve.py +157 -0
  84. core_10x/unit_tests/test_directory.py +54 -0
  85. core_10x/unit_tests/test_documentation.py +172 -0
  86. core_10x/unit_tests/test_environment_variables.py +15 -0
  87. core_10x/unit_tests/test_filters.py +239 -0
  88. core_10x/unit_tests/test_graph.py +348 -0
  89. core_10x/unit_tests/test_named_constant.py +98 -0
  90. core_10x/unit_tests/test_rc.py +11 -0
  91. core_10x/unit_tests/test_rdate.py +484 -0
  92. core_10x/unit_tests/test_trait_method_error.py +80 -0
  93. core_10x/unit_tests/test_trait_modification.py +19 -0
  94. core_10x/unit_tests/test_traitable.py +959 -0
  95. core_10x/unit_tests/test_traitable_history.py +1 -0
  96. core_10x/unit_tests/test_ts_store.py +1 -0
  97. core_10x/unit_tests/test_ts_union.py +369 -0
  98. core_10x/unit_tests/test_ui_nodes.py +81 -0
  99. core_10x/unit_tests/test_xxcalendar.py +471 -0
  100. core_10x/vault/__init__.py +0 -0
  101. core_10x/vault/sec_keys.py +133 -0
  102. core_10x/vault/security_keys_old.py +168 -0
  103. core_10x/vault/vault.py +56 -0
  104. core_10x/vault/vault_traitable.py +56 -0
  105. core_10x/vault/vault_user.py +70 -0
  106. core_10x/xdate_time.py +136 -0
  107. core_10x/xnone.py +71 -0
  108. core_10x/xxcalendar.py +228 -0
  109. infra_10x/__init__.py +0 -0
  110. infra_10x/manual_tests/__init__.py +0 -0
  111. infra_10x/manual_tests/test_misc.py +16 -0
  112. infra_10x/manual_tests/test_prepare_filter_and_pipeline.py +25 -0
  113. infra_10x/mongodb_admin.py +111 -0
  114. infra_10x/mongodb_store.py +346 -0
  115. infra_10x/mongodb_utils.py +129 -0
  116. infra_10x/unit_tests/conftest.py +13 -0
  117. infra_10x/unit_tests/test_mongo_db.py +36 -0
  118. infra_10x/unit_tests/test_mongo_history.py +1 -0
  119. py10x_universe-0.1.3.dist-info/METADATA +406 -0
  120. py10x_universe-0.1.3.dist-info/RECORD +214 -0
  121. py10x_universe-0.1.3.dist-info/WHEEL +4 -0
  122. py10x_universe-0.1.3.dist-info/licenses/LICENSE +21 -0
  123. ui_10x/__init__.py +0 -0
  124. ui_10x/apps/__init__.py +0 -0
  125. ui_10x/apps/collection_editor_app.py +100 -0
  126. ui_10x/choice.py +212 -0
  127. ui_10x/collection_editor.py +135 -0
  128. ui_10x/concrete_trait_widgets.py +220 -0
  129. ui_10x/conftest.py +8 -0
  130. ui_10x/entity_stocker.py +173 -0
  131. ui_10x/examples/__init__.py +0 -0
  132. ui_10x/examples/_guess_word_data.py +14076 -0
  133. ui_10x/examples/collection_editor.py +17 -0
  134. ui_10x/examples/date_selector.py +14 -0
  135. ui_10x/examples/entity_stocker.py +18 -0
  136. ui_10x/examples/guess_word.py +392 -0
  137. ui_10x/examples/message_box.py +20 -0
  138. ui_10x/examples/multi_choice.py +17 -0
  139. ui_10x/examples/py_data_browser.py +66 -0
  140. ui_10x/examples/radiobox.py +29 -0
  141. ui_10x/examples/single_choice.py +31 -0
  142. ui_10x/examples/style_sheet.py +47 -0
  143. ui_10x/examples/trivial_entity_editor.py +18 -0
  144. ui_10x/platform.py +20 -0
  145. ui_10x/platform_interface.py +517 -0
  146. ui_10x/py_data_browser.py +249 -0
  147. ui_10x/qt6/__init__.py +0 -0
  148. ui_10x/qt6/conftest.py +8 -0
  149. ui_10x/qt6/manual_tests/__init__.py +0 -0
  150. ui_10x/qt6/manual_tests/basic_test.py +35 -0
  151. ui_10x/qt6/platform_implementation.py +275 -0
  152. ui_10x/qt6/utils.py +665 -0
  153. ui_10x/rio/__init__.py +0 -0
  154. ui_10x/rio/apps/examples/examples/__init__.py +22 -0
  155. ui_10x/rio/apps/examples/examples/components/__init__.py +3 -0
  156. ui_10x/rio/apps/examples/examples/components/collection_editor.py +15 -0
  157. ui_10x/rio/apps/examples/examples/pages/collection_editor.py +21 -0
  158. ui_10x/rio/apps/examples/examples/pages/login_page.py +88 -0
  159. ui_10x/rio/apps/examples/examples/pages/style_sheet.py +21 -0
  160. ui_10x/rio/apps/examples/rio.toml +14 -0
  161. ui_10x/rio/component_builder.py +497 -0
  162. ui_10x/rio/components/__init__.py +9 -0
  163. ui_10x/rio/components/group_box.py +31 -0
  164. ui_10x/rio/components/labeled_checkbox.py +18 -0
  165. ui_10x/rio/components/line_edit.py +37 -0
  166. ui_10x/rio/components/radio_button.py +32 -0
  167. ui_10x/rio/components/separator.py +24 -0
  168. ui_10x/rio/components/splitter.py +121 -0
  169. ui_10x/rio/components/tree_view.py +75 -0
  170. ui_10x/rio/conftest.py +35 -0
  171. ui_10x/rio/internals/__init__.py +0 -0
  172. ui_10x/rio/internals/app.py +192 -0
  173. ui_10x/rio/manual_tests/__init__.py +0 -0
  174. ui_10x/rio/manual_tests/basic_test.py +24 -0
  175. ui_10x/rio/manual_tests/splitter.py +27 -0
  176. ui_10x/rio/platform_implementation.py +91 -0
  177. ui_10x/rio/style_sheet.py +53 -0
  178. ui_10x/rio/unit_tests/test_collection_editor.py +68 -0
  179. ui_10x/rio/unit_tests/test_internals.py +630 -0
  180. ui_10x/rio/unit_tests/test_style_sheet.py +37 -0
  181. ui_10x/rio/widgets/__init__.py +46 -0
  182. ui_10x/rio/widgets/application.py +109 -0
  183. ui_10x/rio/widgets/button.py +48 -0
  184. ui_10x/rio/widgets/button_group.py +60 -0
  185. ui_10x/rio/widgets/calendar.py +23 -0
  186. ui_10x/rio/widgets/checkbox.py +24 -0
  187. ui_10x/rio/widgets/dialog.py +137 -0
  188. ui_10x/rio/widgets/group_box.py +27 -0
  189. ui_10x/rio/widgets/layout.py +34 -0
  190. ui_10x/rio/widgets/line_edit.py +37 -0
  191. ui_10x/rio/widgets/list.py +105 -0
  192. ui_10x/rio/widgets/message_box.py +70 -0
  193. ui_10x/rio/widgets/scroll_area.py +31 -0
  194. ui_10x/rio/widgets/spacer.py +6 -0
  195. ui_10x/rio/widgets/splitter.py +45 -0
  196. ui_10x/rio/widgets/text_edit.py +28 -0
  197. ui_10x/rio/widgets/tree.py +89 -0
  198. ui_10x/rio/widgets/unit_tests/test_button.py +101 -0
  199. ui_10x/rio/widgets/unit_tests/test_button_group.py +33 -0
  200. ui_10x/rio/widgets/unit_tests/test_calendar.py +114 -0
  201. ui_10x/rio/widgets/unit_tests/test_checkbox.py +109 -0
  202. ui_10x/rio/widgets/unit_tests/test_group_box.py +158 -0
  203. ui_10x/rio/widgets/unit_tests/test_label.py +43 -0
  204. ui_10x/rio/widgets/unit_tests/test_line_edit.py +140 -0
  205. ui_10x/rio/widgets/unit_tests/test_list.py +146 -0
  206. ui_10x/table_header_view.py +305 -0
  207. ui_10x/table_view.py +174 -0
  208. ui_10x/trait_editor.py +189 -0
  209. ui_10x/trait_widget.py +131 -0
  210. ui_10x/traitable_editor.py +200 -0
  211. ui_10x/traitable_view.py +131 -0
  212. ui_10x/unit_tests/conftest.py +8 -0
  213. ui_10x/unit_tests/test_platform.py +9 -0
  214. ui_10x/utils.py +661 -0
@@ -0,0 +1,406 @@
1
+ Metadata-Version: 2.4
2
+ Name: py10x-universe
3
+ Version: 0.1.3
4
+ Summary: 10x Universe Core Packages
5
+ Project-URL: Homepage, https://github.com/10X-LLC/py10x
6
+ Project-URL: Repository, https://github.com/10X-LLC/py10x
7
+ Project-URL: Issues, https://github.com/10X-LLC/py10x/issues
8
+ Project-URL: Documentation, https://github.com/10X-LLC/py10x#readme
9
+ Author-email: "10X Software, LLC" <founders@10x-software.org>
10
+ Maintainer-email: Sasha Davidovich & Ilya Pevzner <py10x@10x-software.com>
11
+ License: MIT
12
+ License-File: LICENSE
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
+ Classifier: Topic :: Software Development :: User Interfaces
22
+ Requires-Python: <3.13,>=3.11
23
+ Requires-Dist: cryptography<45.1.0,>=45.0.7
24
+ Requires-Dist: hatch-build-scripts>=1.0.0
25
+ Requires-Dist: hatchling>=1.27.0
26
+ Requires-Dist: importlib-resources<6.6.0,>=6.5.2
27
+ Requires-Dist: keyring>=25.6.0
28
+ Requires-Dist: numpy<2.3.0,>=2.2.2
29
+ Requires-Dist: py10x-core~=0.1
30
+ Requires-Dist: py10x-infra~=0.1
31
+ Requires-Dist: pymongo>=4.7.3
32
+ Requires-Dist: python-dateutil<2.10.0,>=2.9.0
33
+ Requires-Dist: requests>=2.32.5
34
+ Requires-Dist: scipy>=1.15.3
35
+ Requires-Dist: typing-extensions>=4.15.0
36
+ Provides-Extra: dev
37
+ Requires-Dist: alt-pytest-asyncio==0.7.2; extra == 'dev'
38
+ Requires-Dist: asyncio-atexit<2.0,>=1.0.1; extra == 'dev'
39
+ Requires-Dist: hatch-build-scripts>=1.0.0; extra == 'dev'
40
+ Requires-Dist: hatchling>=1.27.0; extra == 'dev'
41
+ Requires-Dist: playwright<1.56,>=1.44; extra == 'dev'
42
+ Requires-Dist: pytest-cov<8.0,>=6.0; extra == 'dev'
43
+ Requires-Dist: pytest<9.0,>=8.3.4; extra == 'dev'
44
+ Requires-Dist: ruff<0.14,>=0.13; extra == 'dev'
45
+ Requires-Dist: uv>=0.9; extra == 'dev'
46
+ Provides-Extra: qt
47
+ Requires-Dist: pyqt6-qt6==6.8.2; extra == 'qt'
48
+ Requires-Dist: pyqt6-sip==13.10.0; extra == 'qt'
49
+ Requires-Dist: pyqt6==6.8.1; extra == 'qt'
50
+ Provides-Extra: rio
51
+ Requires-Dist: aiofiles>=24.1; extra == 'rio'
52
+ Requires-Dist: matplotlib~=3.10.6; extra == 'rio'
53
+ Requires-Dist: rio-ui==0.12; extra == 'rio'
54
+ Requires-Dist: webview-proc>=0.1.0rc6; extra == 'rio'
55
+ Description-Content-Type: text/markdown
56
+
57
+ # py10x
58
+
59
+ **10x Universe Ecosystem Core**
60
+
61
+ The core package of the 10x Universe software ecosystem, designed to make 10x engineers even more productive. The structure mirrors the real world: from particles (basic data types) to atoms (object models) and molecules (fundamental programming paradigms), extending to stars and planets (subject domains).
62
+
63
+ ## Overview
64
+
65
+ py10x is organized into three main packages:
66
+
67
+ - **core_10x**: Core data modeling with traits, traitables, and serialization
68
+ - **ui_10x**: Cross-platform UI components focused on traitable editing and management
69
+ - **infra_10x**: Infrastructure components including MongoDB storage integration
70
+
71
+ **Note**: This is a pre-release version. Future releases will include enhanced tests, documentation and examples; trait validation; and automatic resource management via enterprise backbone.
72
+
73
+ ## Installation
74
+
75
+ For detailed installation instructions including all prerequisites and platform-specific setup, see [INSTALLATION.md](INSTALLATION.md).
76
+
77
+ ### Quick Prerequisites
78
+
79
+ - Python 3.12 (recommended), 3.10+ supported
80
+ - [UV](https://docs.astral.sh/uv/) - Python installer and package manager
81
+ - MongoDB (for running tests and examples)
82
+ - Local passwordless MongoDB instance required for running tests and examples
83
+
84
+ ## Component Licensing
85
+ This package (`py10x`) relies on and automatically installs `py10x_core` and `py10x_infra`, also supplied by **10x Software, LLC**.
86
+
87
+ While these packages are provided free of charge, they have different legal terms:
88
+ - **py10x (Framework):** Licensed under the [MIT License](https://10x-software.org/py10x/LICENSE).
89
+ - **py10x-core (Core dependencies):** Proprietary; governed by the [10x Proprietary License](https://10x-llc.com/py_10x_core/LICENSE).
90
+ - **py10x-infra (Infrastructure dependencies):** Proprietary; governed by the [10x Proprietary License](https://10x-llc.com/py_10x_infra/LICENSE).
91
+
92
+ By installing `py10x`, you agree to the terms of the proprietary licenses for the core and infrastructure components.
93
+
94
+
95
+ ### Install with UV (Recommended)
96
+
97
+ ```bash
98
+ # Clone the repository
99
+ git clone https://github.com/10X-LLC/py10x.git
100
+ cd py10x
101
+
102
+ # Install everything (recommended for development)
103
+ uv sync --all-extras
104
+
105
+ # Or install specific combinations
106
+ uv sync --extra dev --extra rio # Development + Rio UI
107
+ uv sync --extra dev --extra qt # Development + Qt6 UI
108
+ uv sync --extra rio # Rio UI only
109
+ uv sync --extra qt # Qt6 UI only
110
+ ```
111
+
112
+ ### Install with pip
113
+
114
+ ```bash
115
+ git clone https://github.com/10X-LLC/py10x.git
116
+ cd py10x
117
+ pip install -e .
118
+
119
+ # With optional dependencies
120
+ pip install -e ".[rio]" # Rio UI backend
121
+ pip install -e ".[qt]" # Qt6 UI backend
122
+ pip install -e ".[dev]" # Development tools
123
+ ```
124
+
125
+ ## Quick Start
126
+
127
+ For a comprehensive introduction to py10x, see our [Getting Started Guide](GETTING_STARTED.md).
128
+
129
+ ### Core Data Modeling with Object Identification
130
+
131
+ ```python
132
+ from core_10x.traitable import Traitable, T, RT, RC, RC_TRUE
133
+ from core_10x.exec_control import CACHE_ONLY
134
+ from datetime import date, datetime
135
+
136
+ # Endogenous traitable example
137
+ class Person(Traitable):
138
+ # ID traits - entities with same ID share values globally
139
+ first_name: str = T(T.ID)
140
+ last_name: str = T(T.ID)
141
+
142
+ # Regular traits (T() is required for persistence)
143
+ dob: date = T()
144
+ weight_lbs: float = T()
145
+
146
+ # Runtime traits (not stored, computed on-demand)
147
+ age: int = RT() # RT() is optional for runtime traits
148
+ full_name: str # RT() omitted - still a runtime trait
149
+
150
+ def age_get(self) -> int:
151
+ """Getter method - computes age from date of birth."""
152
+ if not self.dob:
153
+ return 0
154
+ today = date.today()
155
+ return today.year - self.dob.year
156
+
157
+ def full_name_get(self) -> str:
158
+ """Getter method - combines first and last name."""
159
+ return f"{self.first_name} {self.last_name}"
160
+
161
+ def age_set(self, trait, value: int) -> RC:
162
+ """Setter method - validates age and updates date of birth."""
163
+ if value < 0:
164
+ return RC(False, "Age cannot be negative")
165
+ if value > 150:
166
+ return RC(False, "Age cannot exceed 150")
167
+
168
+ # Calculate year of birth from age
169
+ today = date.today()
170
+ birth_year = today.year - value
171
+ dob = self.dob
172
+ self.dob = date(birth_year, dob.month, dob.day)
173
+ return RC_TRUE
174
+
175
+ # Note: Verification methods (e.g., age_verify) are not currently
176
+ # called automatically by the framework. Use setters with validation instead.
177
+
178
+ # Exogeneous traitable example
179
+ class DataCaptureEvent(Traitable):
180
+ capture_time: datetime = T()
181
+ raw_data: str = T()
182
+ processed_data: str # Runtime trait - RT() omitted (still not stored)
183
+
184
+ def processed_data_get(self) -> str:
185
+ """Runtime computation - not stored in database."""
186
+ return self.raw_data.upper().strip()
187
+
188
+ # Use CACHE_ONLY mode - no backing database required
189
+ with CACHE_ONLY():
190
+ # Endogenous traitables (with ID traits) share trait values globally
191
+ person1 = Person(first_name="Alice", last_name="Smith")
192
+ person1.dob = date(1990, 5, 15) # Set a non-ID trait
193
+ print( '---',person1.dob)
194
+
195
+ # Using setter method for age validation
196
+ person1.age = 25 # Set age, updates date of birth
197
+ print(f"Age: {person1.age}") # 25
198
+ print(f"Date of birth: {person1.dob}") # Calculated from age
199
+
200
+ # Test validation
201
+ try:
202
+ person1.age = -5 # This will fail validation
203
+ except Exception as e:
204
+ print(f"Validation error: {e}")
205
+
206
+ person2 = Person(first_name="Alice", last_name="Smith") # Same ID traits
207
+ # person2 automatically has the same dob value as person1
208
+ assert person2.dob == date(2001, 5, 15) # Shared trait values
209
+ assert person1 == person2 # Equal due to same ID traits
210
+ # Note: person1 is person2 would be False - they're different objects
211
+
212
+ # Exogenous traitables (no ID traits) get auto-generated UUID
213
+ class DataCaptureEvent(Traitable):
214
+ data: str
215
+ timestamp: float
216
+
217
+ # Endogenous vs Exogenous demonstration
218
+ person = Person(first_name="Alice", last_name="Smith") # Endogenous
219
+ event = DataCaptureEvent(data="sensor_reading", timestamp=1234567890.0) # Exogenous
220
+
221
+ print(f"Person ID: {person.id()}") # Based on ID traits (first_name, last_name)
222
+ print(f"Event ID: {event.id()}") # Auto-generated UUID
223
+ ```
224
+
225
+ ### Dependency Graph and Execution Control
226
+
227
+ ```python
228
+ from core_10x.exec_control import GRAPH_ON, GRAPH_OFF, INTERACTIVE
229
+ from core_10x.traitable import Traitable, RT
230
+
231
+ class Calculator(Traitable):
232
+ x: int = RT()
233
+ y: int = RT()
234
+ sum: int = RT() # Computed via sum_get()
235
+ product: int = RT() # Computed via product_get()
236
+
237
+ def sum_get(self) -> int:
238
+ return self.x + self.y
239
+
240
+ def product_get(self) -> int:
241
+ return self.x * self.y
242
+
243
+ # Enable dependency graph for automatic computation
244
+ with GRAPH_ON():
245
+ calc = Calculator(x=5, y=3)
246
+ # sum and product computed automatically when accessed
247
+ print(calc.sum) # 8
248
+ print(calc.product) # 15
249
+
250
+ calc.x = 10 # Automatically recomputes dependent traits
251
+ print(calc.sum) # 13
252
+ ```
253
+
254
+ ### MongoDB Integration
255
+
256
+ ```python
257
+ from infra_10x.mongodb_store import MongoStore
258
+ from core_10x.traitable import Traitable
259
+ from core_10x.code_samples.person import Person
260
+ from datetime import date
261
+
262
+ # Connect to MongoDB
263
+ traitable_store = MongoStore.instance(
264
+ hostname="localhost",
265
+ dbname="myapp",
266
+ )
267
+
268
+ # Use traitable store context for persistence
269
+ with traitable_store:
270
+ person = Person(first_name="Alice", last_name="Smith")
271
+ person.dob = date(1990, 5, 15)
272
+ person.save() # Persists to traitable store backed by Mongo
273
+ ```
274
+
275
+ ## Core Features
276
+
277
+ ### Object Identification System
278
+
279
+ - **Endogenous Traitables**: Traitables with ID computed from ID traits, traits shared by ID
280
+ - **Exogenous Traitables**: Traitables without ID traits get auto-generated UUIDs, traits shared by ID
281
+ - **Anonymous Traitables**: Traitables without ID - cannot be shared or persisted alone, can be embedded in other traitables
282
+ - **ID Method**: `traitable.id()` returns ID based on ID traits (endogenous) or auto-generated UUID (exogenous)
283
+ - **Global Cache**: Automatic sharing of trait values for traitables with the same ID
284
+
285
+ ### Traitable Framework
286
+
287
+ The `Traitable` base class provides:
288
+
289
+ - **Trait-based attributes**: Define typed attributes with validation
290
+ - **ID Traits**: Mark traits as identifiers for global sharing
291
+ - **Regular Traits**: Used for data storage and searching
292
+ - **Runtime Traits**: Not stored, computed on-demand (RT() is optional)
293
+ - **Caching**: Built-in caching system for trait values and entity state
294
+ - **Serialization**: Automatic serialization/deserialization
295
+ - **Versioning**: Automatic revision tracking
296
+ - **Validation**: Type checking and integrity validation
297
+
298
+ ### Dependency Graph System
299
+
300
+ - **Automatic Computation**: Traits computed automatically when accessed
301
+ - **Dependency Tracking**: Changes to traits trigger dependent trait updates
302
+ - **Execution Control**: Fine-grained control over computation modes
303
+ - **Performance**: Expensive computations cached and reused
304
+
305
+ ### Seamless UI Framework
306
+
307
+ Cross-platform UI with automatic framework selection:
308
+
309
+ - **Auto-Detection**: Framework chosen based on installed packages
310
+ - **Environment Variables**: Override framework selection
311
+ - **Unified API**: Same code works with Rio or Qt6 backends
312
+ - **Traitable Integration**: Built-in entity editors and viewers
313
+
314
+ ### Infrastructure
315
+
316
+ - **Storage Integration**: MongoDB store with revision tracking and flexible data persistence
317
+ - **Resource Management**: Manual resource management using context managers (enterprise resource management planned for future release)
318
+
319
+ ## Development
320
+
321
+ ### Running Tests
322
+
323
+ **Note**: The `infra_10x/unit_tests/` suite requires a local MongoDB instance running on the default port (27017).
324
+
325
+ ```bash
326
+ # Run all unit tests (with coverage by default)
327
+ pytest
328
+
329
+ # Run specific test suites
330
+ pytest core_10x/unit_tests/
331
+ pytest ui_10x/unit_tests/
332
+ pytest infra_10x/unit_tests/ # Requires MongoDB
333
+
334
+ # Manual tests are debugging scripts (run directly)
335
+ python core_10x/manual_tests/trivial_graph_test.py
336
+ python ui_10x/rio/manual_tests/basic_test.py
337
+ ```
338
+
339
+ ### Code Style
340
+
341
+ The project uses `ruff` for linting and formatting:
342
+
343
+ ```bash
344
+ # Check style
345
+ ruff check .
346
+
347
+ # Fix issues
348
+ ruff check --fix .
349
+
350
+ # Format code
351
+ ruff format .
352
+ ```
353
+
354
+ ### Building
355
+
356
+ ```bash
357
+ # Build wheel
358
+ python -m build
359
+
360
+ # Build with UV
361
+ uv build
362
+ ```
363
+
364
+ ## Architecture
365
+
366
+ ### Core Components
367
+
368
+ - **Nucleus**: Base serialization and type system
369
+ - **Traitable**: Entity modeling with traits
370
+ - **Trait System**: Type-safe attribute definitions
371
+ - **Storage Layer**: Pluggable storage backends
372
+
373
+ ### UI Architecture
374
+
375
+ - **Platform Interface**: Abstract UI component interface
376
+ - **Component Builder**: Widget construction and layout
377
+ - **Backend Implementations**: Rio and Qt6 specific implementations
378
+
379
+ ## Contributing
380
+
381
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development guidelines.
382
+
383
+ ## License
384
+
385
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
386
+
387
+ ## Contact
388
+
389
+ - **Project Contact**: py10x@10x-software.com
390
+
391
+ ## Community
392
+
393
+ Join our community on [Discord](https://discord.gg/m7AQSXfFwf) for discussion, support, and collaboration.
394
+
395
+ ## Getting Help
396
+
397
+ - Check existing issues and discussions
398
+ - Ask questions in GitHub Discussions
399
+ - Join our community on [Discord](https://discord.gg/m7AQSXfFwf) for discussion, support, and collaboration
400
+ - Contact maintainers for complex issues
401
+
402
+ ## Authors
403
+
404
+ - Sasha Davidovich <sasha.davidovich@10x-software.com>
405
+ - Ilya Pevzner <ilya.pevzner@10x-software.com>
406
+ - **Project Contact**: py10x@10x-software.com
@@ -0,0 +1,214 @@
1
+ core_10x/__init__.py,sha256=q1Cpk4Buk1Zhx7zIkktIWiMa4z_xO1IoK1DVh2aRwf8,1489
2
+ core_10x/concrete_traits.py,sha256=OoN8VSBb76WMtqpsV7RDRWDNEGNg8x7sDP6nUSUjoko,9391
3
+ core_10x/conftest.py,sha256=IbhvvW6HSq4mNVSTOXbMU_kprew5AbQccsme88NAZ7s,259
4
+ core_10x/curve.py,sha256=t2pot3aivc1Pb3yGL2mg_OBRwqVeO9SKuKDYdUtELkg,10382
5
+ core_10x/data_domain.py,sha256=VB5gZUL0Xd6S7WO7UVB4JtF9yr1wnZPEvg9wUWfgono,1542
6
+ core_10x/data_domain_binder.py,sha256=4rGXhF3TWCGJSs9SfZtvYxuE9Tnv41q7zZZNl0NcwBA,1745
7
+ core_10x/directory.py,sha256=AemIBny6-jV9dik5N2WbMXed_wZ1ZTRLm_YLgT2RUz4,7577
8
+ core_10x/entity.py,sha256=li0vkk1ALAQc4juh9XNQozVVhaNrDOp9rjA8bNPnFVc,254
9
+ core_10x/entity_filter.py,sha256=8pcUuiqCvnqlO9HCuLjtTyAcWledjWey-hyq566yKbQ,102
10
+ core_10x/environment_variables.py,sha256=YK0rzjcUmV2Pj-npiG0Ze01N0hGwbaeOsJGjBPpMxFY,5335
11
+ core_10x/exec_control.py,sha256=XD7VgJTICbPb7FbAifIohZkhreD-TCHzPrFJOuNeKWE,2409
12
+ core_10x/global_cache.py,sha256=MMesGd87g6JOOum4RpU6sfeQEgAkmmRGq6MVQg-7bts,3314
13
+ core_10x/named_constant.py,sha256=prAv3wKzrB_wwBg5hm6tcg2_rFhoMFE_xTAiWWAI8ZI,13080
14
+ core_10x/nucleus.py,sha256=yr4P4-HgTrgl6EwioiCnBxSZjUSNd__KZzGKE0ToyeE,2608
15
+ core_10x/package_manifest.py,sha256=n1DHlDEXRY3guXTOHE3rBojLmdm9IP5lAeWfv2kfPiA,2882
16
+ core_10x/package_refactoring.py,sha256=9i2KW9YDL2go89uCmTEvl7L0_042tCHxjIKXej1ET2U,5818
17
+ core_10x/py_class.py,sha256=IveecfwUoqXfpceJkWEZ4daN9uPtPqNhE91Bq21I9Xo,16353
18
+ core_10x/rc.py,sha256=jpSYv5dCM6V1kk739A6Tb0CYDCzkhnyxzQIIuaokCGw,3976
19
+ core_10x/rdate.py,sha256=VVd17wmZVoOMwC2FimUZKpcmP0UFL6DjsVxdZokbXfQ,13558
20
+ core_10x/resource.py,sha256=b9dZiuHBWWSZ0jP1CbjWhBNzQpDUZUkJKlb56-9W8L4,6728
21
+ core_10x/roman_number.py,sha256=2_S19vMmIvOKIkdrAuDUQuESDu8bQg7ZoQE053chgCQ,1857
22
+ core_10x/trait.py,sha256=aJfPDugymUE8YkwPVEZwHWWNLaE8SKN3kWGsIB3xjS4,13583
23
+ core_10x/trait_definition.py,sha256=16KdC3KVY0DTuawbJs24AgqiC_aXXeFuIRhms99EAeU,5685
24
+ core_10x/trait_filter.py,sha256=41KraF0cC-LN0UWBKHFqZii6vEaAe-rsCG2kyKtxyac,6663
25
+ core_10x/trait_method_error.py,sha256=cu5lbFC4CoSrHTUGonOmf2_cGh5pC7FOIkYpUgcH71Q,1061
26
+ core_10x/traitable.py,sha256=GSo9-egS5QPb6zW36EUzgab4_VyrlVlKThfbt92ptlg,40847
27
+ core_10x/traitable_cli.py,sha256=7FJDR7BygN50LbG2nDIMG-8j6iT7Wr4sDeT3mZcKYuo,5611
28
+ core_10x/traitable_heir.py,sha256=gNa2TSbp-UKUyIpOv7VuuJuUtSkH9C9YUODVeGpRHvc,1319
29
+ core_10x/traitable_id.py,sha256=lv_jySidaG8SLeL6Rk6VRu8SLfdMvmIjFNODCdlSwXY,965
30
+ core_10x/ts_store.py,sha256=RnBDW8ipa2wqK_dBpKn3Mb11A7_7qIpw_9sdYKEV9Cc,6296
31
+ core_10x/ts_store_type.py,sha256=k5f6_3KDAEXaKdIfLTdXTD-GH-YGgR6KJgNxghqPO40,727
32
+ core_10x/ts_union.py,sha256=XKBJ0P1jOv6_lLbGyVOo3g3e6bqKznwx-47T00Wwfbg,6308
33
+ core_10x/ui_hint.py,sha256=SNIRvxXDc8qBOE_CimyYHEGWsWgBVS9WfPafXBP8PdE,5542
34
+ core_10x/xdate_time.py,sha256=r0vFSNgJb-r5eO_s4swJJmNqvyBs6tzXSeRklA4tS6A,3683
35
+ core_10x/xnone.py,sha256=BdngBX13wvsBE3PbRFzHuIBX493lNfL_U5Se5ZQ_e34,3316
36
+ core_10x/xxcalendar.py,sha256=wEXVtp-Tewt2AAlci-TuEhWMPJZ_0CAZJsfAr069XyM,7692
37
+ core_10x/backbone/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
+ core_10x/backbone/backbone_store.py,sha256=p3aBfeSYXzfyAfBJCxW3CZh-jGONv-xaybInwS06JsM,2131
39
+ core_10x/backbone/backbone_traitable.py,sha256=JaMoSYjoMHCxfyA9kEqvOAp0TVO-BwiD4nq4B1DkO9E,827
40
+ core_10x/backbone/backbone_user.py,sha256=Z8TqOcK_Ew4lF_jY2wVegZys9KmuQ-eTwTwgueE-8KU,1882
41
+ core_10x/backbone/bound_data_domain.py,sha256=l0s1DVjoN6Tc5q3rVtyRuwOCrqM-RuTdwGbbUDwndhI,1537
42
+ core_10x/backbone/namespace.py,sha256=zzcn6o45_Ot1UlU_aTPwV6jYxFT00wjmJj8h2JSDuzs,3363
43
+ core_10x/backbone/vault.py,sha256=bbncfM4BgjW3AP6VK1F2VA6FdzB7LzxGS0qyJXJtITw,1141
44
+ core_10x/code_samples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
+ core_10x/code_samples/_package_manifest.py,sha256=-f9yTx0TquIfz31txumbHr0ZDf6CcKIEv5SJTI7w7C0,32
46
+ core_10x/code_samples/directories.py,sha256=csqzXbaYmvAfovM9BmvObk0jJ3IB2O6CyL4CiIibopQ,4348
47
+ core_10x/code_samples/person.py,sha256=4dVXBHae3cgcaMQNlUQ1PkIDblUQylfaJqAf81NsXHg,2264
48
+ core_10x/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ core_10x/experimental/data_protocol_ex.py,sha256=AS5M7rdwSEn624_6wderOHmO38lVNHB7Mn0DvF_aDn0,663
50
+ core_10x/manual_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
+ core_10x/manual_tests/calendar_test.py,sha256=vsrsydHlUTHW-bIwc_UkuboAdlbd7Uvua-TA5e1ixYM,1081
52
+ core_10x/manual_tests/ctor_update_bug.py,sha256=0qYp6qZfVoA9DVz_ESU6asW6YCkTwwmMygnjYAxKC6U,1801
53
+ core_10x/manual_tests/debug_graph_on.py,sha256=OsVVHgIj2iXMNJ2wABn1v--_14PtDN2_lKRj91UCPxM,557
54
+ core_10x/manual_tests/debug_graphoff_inside_graph_on.py,sha256=7N8_P2eNh92Aln-xs_iXqeKvcJWpsTqJlbzJ9O82ZLM,691
55
+ core_10x/manual_tests/enum_bits_test.py,sha256=jq17RCNzgj-H2x24zpFE9xHUuiNqRzGrVC8xsMrjuK0,308
56
+ core_10x/manual_tests/env_vars_trivial_test.py,sha256=ALyjJt0CekDSMmYTd8Ms22-MhU7tA2ep-zklp6rqiHA,254
57
+ core_10x/manual_tests/existing_traitable.py,sha256=_qh7UXf7ZJiCtj6bWJoE09kkIiDwv3IiFJ5VkJlGz38,1215
58
+ core_10x/manual_tests/k10x_test1.py,sha256=yJz72segodYcOEX03hG6ySAHjJ0sD5ysv621tvbvfGg,250
59
+ core_10x/manual_tests/named_constant_test.py,sha256=beVjWr-7ufBa1pMte7IsqUjTLN3sQmskVpNyXm_wgio,3628
60
+ core_10x/manual_tests/nucleus_trivial_test.py,sha256=EAu6dZYyTcHfIzEhvtEv2P0vl-eKT4Fp_RccTNMVjyU,1559
61
+ core_10x/manual_tests/polars_test.py,sha256=tSi8kAvTfDBO4wHQEA6B0CEYhSKqmXIdAnxcn1OqHOg,594
62
+ core_10x/manual_tests/py_class_test.py,sha256=vNTyM2qmqQ18B92Js56JUgnDvU9Q9br1ZmO6q-UYfxQ,136
63
+ core_10x/manual_tests/rc_test.py,sha256=XK_76XW4X-hp5dKwvBG4y9VoKm3du7flwV0y5Htpdhg,839
64
+ core_10x/manual_tests/rdate_test.py,sha256=z4eoKA9n4VvuBlB5Ah_Ya1S1KudHGomf9DuZn71nbM0,199
65
+ core_10x/manual_tests/reference_serialization_bug.py,sha256=xJfSLT3Wc_7tx9Zxz-N5iNWWwkfsOAcArGkgGi7Qces,629
66
+ core_10x/manual_tests/resource_trivial_test.py,sha256=frnInm6f_gPAydFwKxfTlUMx70t3i6vWvS7WU3-om3k,321
67
+ core_10x/manual_tests/store_uri_test.py,sha256=YA9NZtB9O2uMhkAd61gy4IWoOQmQE8vCFMpyKIdo39k,135
68
+ core_10x/manual_tests/trait_definition_test.py,sha256=KMcyrKDMjpNY1izRuCbxUSDiNY6GjKZKT_sNhk1M_U0,402
69
+ core_10x/manual_tests/trait_filter_test.py,sha256=wQhvWlOl2BU11xBkv_tlWzy1LfZsmsOo-7b67AZ2QLQ,409
70
+ core_10x/manual_tests/trait_flag_modification_test.py,sha256=_6AWCLnSjpkmSM_GbhZAuyenXaAl0BJI3Ulyl3vDvxY,1095
71
+ core_10x/manual_tests/trait_modification_bug.py,sha256=YDkK-d7A6_RkaUiDHdizUpAsWCFw3Z8AgQOJxHDihtM,535
72
+ core_10x/manual_tests/traitable_as_of_test.py,sha256=LKIoC56qXJoLhvyWIBXPFi3ZRxwPoDmkHHDV-7qvCZk,3170
73
+ core_10x/manual_tests/traitable_heir_test.py,sha256=TXUys0BIjqvtnbaKp9sW0Y8ct0WSLxKRUUz0YfivwKA,899
74
+ core_10x/manual_tests/traitable_history_test.py,sha256=FHHO_QBCcQFMKNM0fNxQaqU1Og02FYhg4wtj-ANSlUA,1324
75
+ core_10x/manual_tests/traitable_serialization_test.py,sha256=mbnb95XpZ_2tr1GEx79Qb-1J-STmojOqVFwiRK7AcxA,1666
76
+ core_10x/manual_tests/traitable_trivial_test.py,sha256=jw6u2GGzd-LjTAhPHUaC--Zm3l58MmnB7w9Kz7x2YIY,1788
77
+ core_10x/manual_tests/trivial_graph_test.py,sha256=p9_58JDilpXWNJdysPSHJw3EbOen2piOWa8qVuaCg0c,441
78
+ core_10x/manual_tests/ts_class_association_test.py,sha256=n4tgBXILtKRLBM2S-xsYAvceXrDYUJgJG4l_A7rKvrk,2500
79
+ core_10x/manual_tests/ts_trivial_test.py,sha256=QIMY6sgbsRIaP0ochpu0kHR4bEOMCMsof_4d1dJrxy0,597
80
+ core_10x/testlib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
+ core_10x/testlib/test_store.py,sha256=nG5dbUIpLOa9z1ZWQvFd32k_RFhbUrSN_5CSt4VTDGA,8624
82
+ core_10x/testlib/traitable_history_tests.py,sha256=clrsT1lZUUK82n4Emt5BU40VtmwwG8VDVEnOVGwJwZM,28853
83
+ core_10x/testlib/ts_tests.py,sha256=0Zd6Oij-jTDKsZGcMP4nzMrisHM2LCwO3Lw25lggxNs,11107
84
+ core_10x/unit_tests/test_concrete_traits.py,sha256=S2pGP-l_eyXl3pQHf2FG70LdpweQ6XFbC9xV7WvtpeE,4432
85
+ core_10x/unit_tests/test_converters.py,sha256=Vz0h44ueRxTnggO3D4F946vH5E3imGaXiu9E0i-_pKQ,1898
86
+ core_10x/unit_tests/test_curve.py,sha256=diOtPN00ELYZ6yOCn5v-Zvt-Zr1cXtXAjyai7dde2bo,4920
87
+ core_10x/unit_tests/test_directory.py,sha256=Fw9fAa1R4G2vWOJYlH3efMk68Ph_1EEvG8DbeCFbEMI,1919
88
+ core_10x/unit_tests/test_documentation.py,sha256=ERQXIP0VLCUWDYmUHucwwJTMmMjVXaldfD2Q6F5dHDo,5747
89
+ core_10x/unit_tests/test_environment_variables.py,sha256=O8j-_-JuyA7Pyqh75z1SAUEqusVg0K_rUzvyxXexYIY,538
90
+ core_10x/unit_tests/test_filters.py,sha256=ZLZ6wZH5P63vfwq2DT03SO-ps6GK9LGP0y_4wbQo3lY,6903
91
+ core_10x/unit_tests/test_graph.py,sha256=WJLF7oMct57PLz0vU5sBZ_R_hXvWDIqT-6ZImODW_AI,11591
92
+ core_10x/unit_tests/test_named_constant.py,sha256=FbMoQwhWM1O5UpZpVJhGqFRI9oU4m2dgXTfjdl0PWp8,2778
93
+ core_10x/unit_tests/test_rc.py,sha256=XmftlBkt03SPzOCobJ7IWyjM-RTlCbbGBzG2tAX31zc,146
94
+ core_10x/unit_tests/test_rdate.py,sha256=z9ziagp0pEb5cdXT0DgNyxf1b2sc8rBevqpihviiZK8,14861
95
+ core_10x/unit_tests/test_trait_method_error.py,sha256=dR-l-_xODrpP9Qh0PCRQTpL4NZNHVRWgPiWN8aUI8dI,2704
96
+ core_10x/unit_tests/test_trait_modification.py,sha256=4U6RR1_D2zqKLSmai-mwp3AfQ-cQluewmnlsfJEVC1s,333
97
+ core_10x/unit_tests/test_traitable.py,sha256=HTEOGSovnctjeXjWKPOvbc5MiDg8rRwJQHNvds834AI,29636
98
+ core_10x/unit_tests/test_traitable_history.py,sha256=8G7Fj-hYV4jtGwTSEA_21y4E6sX8OTadB3R1k4ug4tQ,103
99
+ core_10x/unit_tests/test_ts_store.py,sha256=oF65y7mJvSyLsgcPTj0wFfkItMB_3JefwiIBydLGFjY,60
100
+ core_10x/unit_tests/test_ts_union.py,sha256=4zCahXpOeMpieVJ95RIfZgt8AlDEnfXXTbrzhtcoyA8,12541
101
+ core_10x/unit_tests/test_ui_nodes.py,sha256=xEvnpQV4j2i6PG8U8HTfSftNsVk8DWDdoy5fbug6wl8,2300
102
+ core_10x/unit_tests/test_xxcalendar.py,sha256=Yl4CyvPvuDCkxmpItxzj8QEBuNrHbI1yuH1KOWRn85k,18278
103
+ core_10x/vault/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
+ core_10x/vault/sec_keys.py,sha256=gZI3fcI13j9sViJ-UZyEfyusUdS4L7fzVyN5H8BXcHA,4779
105
+ core_10x/vault/security_keys_old.py,sha256=wd3tBtAJd088swyGvqO4DWbSkwmX5Cee21oXBetB61g,5434
106
+ core_10x/vault/vault.py,sha256=P9Gn297uDVvKxJH1YezdVJHkSVaAc7aBN5fOs_QVgN4,1831
107
+ core_10x/vault/vault_traitable.py,sha256=8F9QaKO0Ap2qd4xUYKkjVeS_MKe2OB2C4VtcIC8KG-0,1855
108
+ core_10x/vault/vault_user.py,sha256=r5w8NO6kc6HuHFKviOofXhsVd6ehx8Xq2AYNaEnqMUQ,2628
109
+ infra_10x/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
110
+ infra_10x/mongodb_admin.py,sha256=Llmtl5-gkBE9ghtb7tOtBCP2gs3pj08JDWVJ0JTvpaQ,4702
111
+ infra_10x/mongodb_store.py,sha256=tfKFBjd7xs-iPkyU-jT2BijrAB61IQ3UjmxTWwZSdSY,12233
112
+ infra_10x/mongodb_utils.py,sha256=D_jaqCoSQEuH3JuHGTXsRdO70uOwwDnaaO7IJZN3Izg,4604
113
+ infra_10x/manual_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
+ infra_10x/manual_tests/test_misc.py,sha256=gpg9NLJAkdCbU9MEDQ4Mc-pWIf1pO5KyRO6mE-t0xhg,560
115
+ infra_10x/manual_tests/test_prepare_filter_and_pipeline.py,sha256=giMQssqsIUEVwVPPYKhCmf5NNieFd_yV-jYCdLzRgrs,699
116
+ infra_10x/unit_tests/conftest.py,sha256=4rTIgVQiR3kSTGQ1zYGBOSla1EGC347A0_sufD8s2RQ,502
117
+ infra_10x/unit_tests/test_mongo_db.py,sha256=veqwPkYW88ij4Tv1GoU6A8ccb0gMWsUxY0f3eGYMQY4,1407
118
+ infra_10x/unit_tests/test_mongo_history.py,sha256=8G7Fj-hYV4jtGwTSEA_21y4E6sX8OTadB3R1k4ug4tQ,103
119
+ ui_10x/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
+ ui_10x/choice.py,sha256=4BaNOVquOjdr9ccmdjpDeBVgasxhbBmCZc8MKmI6RCc,7608
121
+ ui_10x/collection_editor.py,sha256=d1mYEm0OgPauI2di5iRFxG3mfoX2FjFrEJAStVp336Y,4176
122
+ ui_10x/concrete_trait_widgets.py,sha256=HN5l6U0v6cCu_0twg_NgcLBwNw3WDDwrTUrNHR9ZaG0,6446
123
+ ui_10x/conftest.py,sha256=a2MnUbTN55s6GIsrVo_ZpLh7ZA-tcq-k3YA-eoYd870,164
124
+ ui_10x/entity_stocker.py,sha256=_hhKZwUGjrHTeqWnq_CoJ4PLZ4iI-uWQ8jjCMHw15W8,5741
125
+ ui_10x/platform.py,sha256=vagZ3i9m9D0wgfhZ3W9JEIQTlYKrj9RVe8_a1VwZWkc,492
126
+ ui_10x/platform_interface.py,sha256=La6L4-uLPw0NaNPOiOuvqB6vXNrUPW6lStXLV037qYc,11874
127
+ ui_10x/py_data_browser.py,sha256=xfZ176joV59vFt6HU_HIEr5Rq7wBYVIAm9EPt85r_xM,7731
128
+ ui_10x/table_header_view.py,sha256=rlXtg4nHhvwjT2vLfnmbBFviAoEhsjcKQwLg53WyJWQ,12622
129
+ ui_10x/table_view.py,sha256=94BybC1hL-kse3CTDUH0PT5FO5je8bf9cJQtilM67Ao,5865
130
+ ui_10x/trait_editor.py,sha256=v-m7GFFUcp-CYTRGnbiNmyUBW7E4I1hwBD3Ev_AxONw,6538
131
+ ui_10x/trait_widget.py,sha256=eW2zew2PiOpBJPmQyxPnd-IqLmoMubbpvN9XLTAh6Ps,4210
132
+ ui_10x/traitable_editor.py,sha256=el0wW5nqowcxmfJafbhxfFlL022kS1Z9oyKvJS8flaU,7830
133
+ ui_10x/traitable_view.py,sha256=LeuSCqA5IZHewApSf7kICHsz8dNXbxkO1iS73hBC0Lw,5203
134
+ ui_10x/utils.py,sha256=ioDlHKdYUjXx3HySD4v7qdlxmpQf0r-m-jrCO3TLqKw,22488
135
+ ui_10x/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
+ ui_10x/apps/collection_editor_app.py,sha256=fBmmxwIO6CoMij76znnFfvsYTEYwBuC9lm1wDHAa8xU,3144
137
+ ui_10x/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
+ ui_10x/examples/_guess_word_data.py,sha256=Q78Zn2LHn4ILujQ6HXsSg-ePhEmatt5ryqJ0u0HXgmI,162526
139
+ ui_10x/examples/collection_editor.py,sha256=DdQkgIf-MP0vV6f0IIYlyL0TYE_rGdLT5GPh6S-Cwro,611
140
+ ui_10x/examples/date_selector.py,sha256=nfidq9OL7Z2ZtrsZwY8rDHOHmUOsChZBxb8kopUM23c,314
141
+ ui_10x/examples/entity_stocker.py,sha256=8N8wax4X57rILMdtq5S2JPhOi0lC4WXqUi2XQ-KhC0k,621
142
+ ui_10x/examples/guess_word.py,sha256=3sFCTCYo05I3fAJRWwtpWUKXEHgFxGZaaaPP8fxpYsM,11259
143
+ ui_10x/examples/message_box.py,sha256=mjAexxwxLF4SQHzFDnRmWRrQqRnS060Y5Y8SVimyPW8,546
144
+ ui_10x/examples/multi_choice.py,sha256=iz5NVYhXI_XO1pEl_npi-khmHcsIS7QpRqg2CHQAoFc,385
145
+ ui_10x/examples/py_data_browser.py,sha256=stnZ68OAAHMgy_BGgQ-wkVF4ucdgdJmNhkQKLUdx8Hc,1720
146
+ ui_10x/examples/radiobox.py,sha256=PRFP9k6k4VLcCDXjdQruLs5QWPpUFjC3N4uUjUtLjIg,684
147
+ ui_10x/examples/single_choice.py,sha256=qSUaLsW2Usu_nlRwVXWRNCie5bxp-gP50QtysW_kQ8A,717
148
+ ui_10x/examples/style_sheet.py,sha256=Lzu6HOsX18kUOEekDY2su49E-CHJyI4YdnIZUrI2KOk,2079
149
+ ui_10x/examples/trivial_entity_editor.py,sha256=5NUH7pPikB5FEUUYlXbdtsxM2WJZ5iY0psVgwtDsLW4,523
150
+ ui_10x/qt6/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
+ ui_10x/qt6/conftest.py,sha256=k3bH4StT333wioFk038mLICwsuj3aNVyYoZZAzgU_m4,159
152
+ ui_10x/qt6/platform_implementation.py,sha256=Tm0CSEC-tCi2r8IOr2-yb6dC9-Mqod5HoUkBQCBYs6Y,10033
153
+ ui_10x/qt6/utils.py,sha256=hFRE_mqs073p1zClZgnpnoiQ-4aZ1-KnMbuS6VOF0yQ,23964
154
+ ui_10x/qt6/manual_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
155
+ ui_10x/qt6/manual_tests/basic_test.py,sha256=lMYABhWr9gCzZmibb92amBj1QEhvMfsrZxkvWKFMJ5o,1188
156
+ ui_10x/rio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
+ ui_10x/rio/component_builder.py,sha256=KTLDslWo7vELDGrNStdK3ryvN-73jxAiIO4WVdlxw1A,16238
158
+ ui_10x/rio/conftest.py,sha256=U5ZaQx85MGZSViApC93Y5kbzJujvBRQh3HIEqwCfs9I,999
159
+ ui_10x/rio/platform_implementation.py,sha256=FATBsQqR5xDeu_2qN6HN6B4GDW5s9Yg9yuWwEF0BD50,1802
160
+ ui_10x/rio/style_sheet.py,sha256=9KDHsayXyWHvPTvhB7dgZGzheHi2RllBjVbCmpfqAe0,1719
161
+ ui_10x/rio/apps/examples/rio.toml,sha256=CuXD3cazKcqf2xZsx_CR0_mv-93KB9w3vOygi54ensA,394
162
+ ui_10x/rio/apps/examples/examples/__init__.py,sha256=Sp6uB8KDKhU9yJevCwgjcY6vGdqFNZQVZ5_Asmr0Ebk,568
163
+ ui_10x/rio/apps/examples/examples/components/__init__.py,sha256=kGtJsE7lclQsZvr7inO82YT_MlaNMJ8XG1o5ZXzUKHg,98
164
+ ui_10x/rio/apps/examples/examples/components/collection_editor.py,sha256=xTYyONTeNtTCTB9fOq5EtMLXP9hxvjlRX9lhY-LP45s,502
165
+ ui_10x/rio/apps/examples/examples/pages/collection_editor.py,sha256=_sFFKiEBm0SALtV05-a54x3wcyaS4Ct6-ppgRTxcm1Y,535
166
+ ui_10x/rio/apps/examples/examples/pages/login_page.py,sha256=HH-UDYfnCMxbLTjRwm9AwETc7bi09wMwzY5HXGqFoa4,2974
167
+ ui_10x/rio/apps/examples/examples/pages/style_sheet.py,sha256=m72qV1cblPPAWepUsjWBAmiaX8dbx44rAI1TKSGIS68,686
168
+ ui_10x/rio/components/__init__.py,sha256=IRLxzeb-UFbfk7iAR7nKtm_tQ6DHXtNbMV77tI_hUMI,403
169
+ ui_10x/rio/components/group_box.py,sha256=QPHyCS0Ekk0hjR8DiK5-JvTU_jzwZF0e7NEIVRisVLo,894
170
+ ui_10x/rio/components/labeled_checkbox.py,sha256=RXmRfhHobkVv2g1f7I7VeYDxFG87NR6Uul0TGYYEyvs,451
171
+ ui_10x/rio/components/line_edit.py,sha256=KigqhoVHlqbtBTEpzgXv7gfUu4WcxxfZpRgEx-wCjCM,1115
172
+ ui_10x/rio/components/radio_button.py,sha256=SRpQK8eDU3vGZ-mMHhL2mCoZzja6aGs8ZDHce7bJrZs,910
173
+ ui_10x/rio/components/separator.py,sha256=FHk09Spf-4elVqzMqdTkQwlg8GIoWjhvqZ18v2Fhr-4,856
174
+ ui_10x/rio/components/splitter.py,sha256=GgZEH8vr5pWvqmMhojdlbG-cPJW2tY5ytzrSsy03zIQ,5495
175
+ ui_10x/rio/components/tree_view.py,sha256=tXqrh7LsHFSdkdm_js-TNVl2YJulVS6SNjSaBDAkqwQ,2313
176
+ ui_10x/rio/internals/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
177
+ ui_10x/rio/internals/app.py,sha256=idgenOO_QAkRoBr30vjmP4DgbUBLpAVpjk-JdDRE4IQ,6574
178
+ ui_10x/rio/manual_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
+ ui_10x/rio/manual_tests/basic_test.py,sha256=M84xe7TGsmkWR6uhcQtdVzF2oCYM9_r4C7R9dhS0ZTA,704
180
+ ui_10x/rio/manual_tests/splitter.py,sha256=2TcdFBMmtcKz9X9Txq_L2ibY0GFkrSBV3VtBFi8bJiE,944
181
+ ui_10x/rio/unit_tests/test_collection_editor.py,sha256=AmacRA28rqjnbxuvFqzVyOqY3SOkhxpne9UVHlOkDlc,3508
182
+ ui_10x/rio/unit_tests/test_internals.py,sha256=Y-6whaWa7IEZOHFmkLH5PiBZW7Et5lqKAYiNXkR5vbw,26451
183
+ ui_10x/rio/unit_tests/test_style_sheet.py,sha256=8Z3Nj-5h15AAo6HbH_pYRnU3Z__rFUBWJ0o5Pt6pXZQ,1193
184
+ ui_10x/rio/widgets/__init__.py,sha256=1Kz_JwadC3_ULDDbbdfAYm_Aa0PQDjelglDdmVAoyow,1097
185
+ ui_10x/rio/widgets/application.py,sha256=K_yui5thBC3neX8YdDRZVMOjeZeV0ebAfnAZxtPsdoA,4078
186
+ ui_10x/rio/widgets/button.py,sha256=5VZNMyX4sjmDvTfmkaa_MQG_asHk8kevkusgr-u0A7c,1567
187
+ ui_10x/rio/widgets/button_group.py,sha256=0As4pE0FwDWslj_zz__aYb87K6fAvEBauE55jr5o44E,1895
188
+ ui_10x/rio/widgets/calendar.py,sha256=9avHFSDIVCJmOPBQd2wVm6vGKwNxt8I5uD4G-kbXcaA,577
189
+ ui_10x/rio/widgets/checkbox.py,sha256=nFyvlexLDRx3fbJoXvohQwY-HTB0SiAa-c6D692Rhlk,662
190
+ ui_10x/rio/widgets/dialog.py,sha256=HlYf74fwF12233W3TqJ36tbkwCwg7K6pBPIxUj2JWgo,4540
191
+ ui_10x/rio/widgets/group_box.py,sha256=qg7jE4yh_zBkfQPZDs7S6Iamp8EfFDidJXF6ESUqXHY,807
192
+ ui_10x/rio/widgets/layout.py,sha256=2nCP-pLBUy-CbVElL2lK8W2qLTYDguDATQMGDfQ8Vt4,850
193
+ ui_10x/rio/widgets/line_edit.py,sha256=T639y2uPqMCv9o7qzj5zbpfVC1Xcnyi7fluasFlowgY,1203
194
+ ui_10x/rio/widgets/list.py,sha256=IdC-C7fW2Jy50m_P9fPKzIvzrbyexaeMhIyBsU49Pqc,3390
195
+ ui_10x/rio/widgets/message_box.py,sha256=RoGa8TA0BAjiS2jXQ_THRBufchFc8-hdQrAcEzzLNDs,2844
196
+ ui_10x/rio/widgets/scroll_area.py,sha256=Y4QE7AgNgHalUgArAz6gBsfDodrxDvc2IdPYsXJ4jzk,772
197
+ ui_10x/rio/widgets/spacer.py,sha256=BBrfghzl7cwxnpyDtiB-csaeK9GARIauH3VisjleKFI,118
198
+ ui_10x/rio/widgets/splitter.py,sha256=moISIg9eZ1aGNq7ONoeZj4E048vB9kXBQyPoG2OP6AE,1353
199
+ ui_10x/rio/widgets/text_edit.py,sha256=6InNVXDvaBPuzRQOZslgKhpO1B63VSFoPAtCuEbigG8,817
200
+ ui_10x/rio/widgets/tree.py,sha256=dTFWDe9ur15CGW3zP1HCfr6vs8B6Z-Q5S6BKG1BsIDM,3199
201
+ ui_10x/rio/widgets/unit_tests/test_button.py,sha256=mp0K6eyI2gGagIz_C4vMTGCi6uKE1egCTQ9Nd53ISaQ,3403
202
+ ui_10x/rio/widgets/unit_tests/test_button_group.py,sha256=G9cyiSOee59yyjLBoN4d55p8-AjHT6-gLqDXfivuyso,1040
203
+ ui_10x/rio/widgets/unit_tests/test_calendar.py,sha256=CvZ4aT96CDfjyn5YL62tFM-MlBl2zVjAMLV70pFd8L8,3915
204
+ ui_10x/rio/widgets/unit_tests/test_checkbox.py,sha256=RtSBHKllAhdYYYTUQPYI9KpnsKhQZKi9EyGvuc22iwg,4004
205
+ ui_10x/rio/widgets/unit_tests/test_group_box.py,sha256=eQfbPSdWTPF8J8AtedpNV8AOTnhR1KcyU3I2-JqbQ1I,6485
206
+ ui_10x/rio/widgets/unit_tests/test_label.py,sha256=MtXD-Ua6Vc7wPukMH_NPNtwCSU8LdL3KV0qFnkV8L1Q,1450
207
+ ui_10x/rio/widgets/unit_tests/test_line_edit.py,sha256=fTv19hJ3w0-PMgGNvdjLScqWIr7zWqTq3Q7gSEYwe_0,5486
208
+ ui_10x/rio/widgets/unit_tests/test_list.py,sha256=mAu6baoidi28YToKUsRJO-96mwkF1dLo0N8ty7vfxCM,5376
209
+ ui_10x/unit_tests/conftest.py,sha256=a2MnUbTN55s6GIsrVo_ZpLh7ZA-tcq-k3YA-eoYd870,164
210
+ ui_10x/unit_tests/test_platform.py,sha256=ndOqwUSbsNFhbdQskcsAaS32HbsJYqMowBRgF2baec4,266
211
+ py10x_universe-0.1.3.dist-info/METADATA,sha256=E2nvoJRHSvmzYPXRBNsdCi3cXjQUwMAXXNXt-s-J9LA,14081
212
+ py10x_universe-0.1.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
213
+ py10x_universe-0.1.3.dist-info/licenses/LICENSE,sha256=dgQk7OU1c79UlHJazsOFIXusH29mw3EHkvKSQZ08woE,1075
214
+ py10x_universe-0.1.3.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 10x Software, LLC.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
ui_10x/__init__.py ADDED
File without changes
File without changes