featrixsphere 0.2.2279__tar.gz → 0.2.3611__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 (219) hide show
  1. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/PKG-INFO +1 -1
  2. featrixsphere-0.2.3611/VERSION +1 -0
  3. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/featrix-update.py +35 -6
  4. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/featrixsphere/__init__.py +1 -1
  5. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/featrixsphere/client.py +149 -21
  6. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/featrixsphere.egg-info/PKG-INFO +1 -1
  7. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/featrixsphere.egg-info/SOURCES.txt +15 -3
  8. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/api.py +620 -101
  9. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/celery_app.py +278 -52
  10. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/example_prediction_feedback.py +10 -50
  11. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/featrix_watchdog.py +689 -17
  12. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/celery_job_recovery.py +525 -60
  13. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/es_projections.py +12 -4
  14. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/es_training.py +58 -21
  15. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/es_training_wrapper.py +3 -8
  16. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/data_frame_data_set.py +1 -22
  17. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/dataloader_utils.py +2 -2
  18. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/domain_codec.py +1 -1
  19. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/embedded_space.py +1918 -391
  20. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/encoders.py +529 -48
  21. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/featrix_json.py +4 -1
  22. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/featrix_token.py +2 -1
  23. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/feature_engineer.py +2 -1
  24. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/gpu_utils.py +1 -11
  25. featrixsphere-0.2.3611/src/lib/featrix/neural/graph_encoder.py +717 -0
  26. featrixsphere-0.2.3611/src/lib/featrix/neural/graph_encoder_training.py +292 -0
  27. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/guardrails.py +4 -2
  28. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/hybrid_column_detector.py +68 -36
  29. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/hybrid_encoders.py +1 -1
  30. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/input_data_set.py +445 -300
  31. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/io_utils.py +6 -0
  32. featrixsphere-0.2.3611/src/lib/featrix/neural/logging_config.py +261 -0
  33. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/mask_tracker.py +38 -3
  34. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/model_config.py +86 -0
  35. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/movie_frame_task.py +62 -5
  36. featrixsphere-0.2.3611/src/lib/featrix/neural/multi_table_dataset.py +222 -0
  37. featrixsphere-0.2.3611/src/lib/featrix/neural/multi_table_embedding_space.py +220 -0
  38. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_checkpoint_dict_reconstruction.py +12 -1
  39. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_embedding_quality.py +5 -5
  40. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_hybrid_columns.py +2 -0
  41. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_predict_during_training.py +2 -0
  42. featrixsphere-0.2.3611/src/lib/featrix/neural/relationship_complexity.py +271 -0
  43. featrixsphere-0.2.3611/src/lib/featrix/neural/relationship_estimator.py +231 -0
  44. featrixsphere-0.2.3611/src/lib/featrix/neural/relationship_extractor.py +527 -0
  45. featrixsphere-0.2.3611/src/lib/featrix/neural/relationship_performance.py +281 -0
  46. featrixsphere-0.2.3611/src/lib/featrix/neural/relationship_preanalysis.py +227 -0
  47. featrixsphere-0.2.3611/src/lib/featrix/neural/relationship_search.py +285 -0
  48. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/scalar_codec.py +37 -14
  49. featrixsphere-0.2.3611/src/lib/featrix/neural/schema_history.py +205 -0
  50. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/set_codec.py +61 -39
  51. featrixsphere-0.2.3611/src/lib/featrix/neural/simple_string_cache.py +456 -0
  52. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/single_predictor.py +551 -295
  53. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/single_predictor_mlp.py +3 -3
  54. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/sphere_config.py +23 -0
  55. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/string_cache.py +93 -22
  56. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/string_codec.py +300 -449
  57. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/string_list_codec.py +4 -4
  58. featrixsphere-0.2.3611/src/lib/featrix/neural/test_graph_encoder.py +170 -0
  59. featrixsphere-0.2.3611/src/lib/featrix/neural/training_banner.py +360 -0
  60. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/training_logger.py +105 -47
  61. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/transformer_encoder.py +135 -6
  62. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/url_codec.py +48 -20
  63. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/job_manager.py +11 -0
  64. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/json_encoder_cache.py +1 -1
  65. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/knn_training.py +6 -5
  66. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/queue_manager.py +33 -15
  67. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/quick_architecture_search.py +42 -16
  68. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/session_chains.py +49 -35
  69. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/session_manager.py +249 -12
  70. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/single_predictor_training.py +52 -3
  71. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/sp_training_wrapper.py +6 -8
  72. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/structureddata.py +19 -42
  73. featrixsphere-0.2.3611/src/lib/system_health_monitor.py +891 -0
  74. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/node-install.sh +614 -119
  75. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/redis_job_progress.py +105 -1
  76. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/run_api_server.sh +8 -1
  77. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/start_celery_cpu_worker.sh +1 -1
  78. featrixsphere-0.2.3611/src/start_celery_movie_worker.sh +20 -0
  79. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/test_api_client.py +4 -4
  80. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/version.py +15 -4
  81. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/system_monitor.py +11 -1
  82. featrixsphere-0.2.2279/VERSION +0 -1
  83. featrixsphere-0.2.2279/src/lib/featrix/neural/logging_config.py +0 -135
  84. featrixsphere-0.2.2279/src/lib/system_health_monitor.py +0 -465
  85. featrixsphere-0.2.2279/src/restart_celery_worker.sh +0 -52
  86. featrixsphere-0.2.2279/src/start_celery_worker.sh +0 -64
  87. featrixsphere-0.2.2279/src/start_churro_server.sh +0 -252
  88. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/MANIFEST.in +0 -0
  89. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/README.md +0 -0
  90. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/featrixsphere/test_client.py +0 -0
  91. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/featrixsphere.egg-info/dependency_links.txt +0 -0
  92. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/featrixsphere.egg-info/entry_points.txt +0 -0
  93. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/featrixsphere.egg-info/not-zip-safe +0 -0
  94. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/featrixsphere.egg-info/requires.txt +0 -0
  95. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/featrixsphere.egg-info/top_level.txt +0 -0
  96. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/nv-install.sh +0 -0
  97. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/requirements.txt +0 -0
  98. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/setup.cfg +0 -0
  99. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/setup.py +0 -0
  100. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/auto_upgrade_monitor.py +0 -0
  101. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/build_version.py +0 -0
  102. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/config.py +0 -0
  103. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/demo_existing_model.py +0 -0
  104. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/demo_label_updates.py +0 -0
  105. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/deploy.py +0 -0
  106. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/deploy_cache_debug.sh +0 -0
  107. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/ensure_watchdog_running.sh +0 -0
  108. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/error_tracker.py +0 -0
  109. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/event_log.py +0 -0
  110. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/example_api_usage.py +0 -0
  111. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/example_train_predictor.py +0 -0
  112. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/gc_cleanup.py +0 -0
  113. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/api_event_retry.py +0 -0
  114. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/convergence_monitor.py +0 -0
  115. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/crash_tracker.py +0 -0
  116. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/distribution_shift_detector.py +0 -0
  117. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/epoch_projections.py +0 -0
  118. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/__init__.py +0 -0
  119. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/__init__.py +0 -0
  120. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/calibration_utils.py +0 -0
  121. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/classification_metrics.py +0 -0
  122. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/config.py +0 -0
  123. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/detect.py +0 -0
  124. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/dropout_scheduler.py +0 -0
  125. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/embedding_lr_scheduler.py +0 -0
  126. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/embedding_space_utils.py +0 -0
  127. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/embedding_utils.py +0 -0
  128. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/enrich.py +0 -0
  129. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/es_projection.py +0 -0
  130. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/exceptions.py +0 -0
  131. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/featrix_csv.py +0 -0
  132. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/featrix_module_dict.py +0 -0
  133. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/feature_suggestion_tracker.py +0 -0
  134. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/hubspot_free_domains_list_may_2025.py +0 -0
  135. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/input_data_file.py +0 -0
  136. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/integrity.py +0 -0
  137. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/json_cache.py +0 -0
  138. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/json_codec.py +0 -0
  139. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/llm/__init__.py +0 -0
  140. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/llm/schema_analyzer.py +0 -0
  141. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/model_hash.py +0 -0
  142. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/network_viz.py +0 -0
  143. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/platform_utils.py +0 -0
  144. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/prng_control.py +0 -0
  145. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/demo_advisor_decisions.py +0 -0
  146. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/example_complete_workflow.py +0 -0
  147. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/generate_focal_report.py +0 -0
  148. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/model_advisor.py +0 -0
  149. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/show_results.py +0 -0
  150. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_adaptive_training.py +0 -0
  151. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_confusion_matrix_metadata.py +0 -0
  152. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_embedding_space.py +0 -0
  153. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_extend_embedding_space.py +0 -0
  154. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_focal_comparison.py +0 -0
  155. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_focal_comparison_enhanced.py +0 -0
  156. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_focal_loss_single_predictor.py +0 -0
  157. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_label_smoothing.py +0 -0
  158. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_monitor_integration.py +0 -0
  159. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_piecewise_epochs.py +0 -0
  160. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_timeline_quick.py +0 -0
  161. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_training_monitor.py +0 -0
  162. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/test_warning_tracking.py +0 -0
  163. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/qa/visualize_training_timeline.py +0 -0
  164. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/setlist_codec.py +0 -0
  165. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/simple_mlp.py +0 -0
  166. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/sqlite_utils.py +0 -0
  167. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/stopwatch.py +0 -0
  168. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/string_analysis.py +0 -0
  169. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/timestamp_codec.py +0 -0
  170. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/training_context_manager.py +0 -0
  171. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/training_event.py +0 -0
  172. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/training_exceptions.py +0 -0
  173. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/training_history_db.py +0 -0
  174. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/url_parser.py +0 -0
  175. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/utils.py +0 -0
  176. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/vector_codec.py +0 -0
  177. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix/neural/world_data.py +0 -0
  178. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/featrix_debug.py +0 -0
  179. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/meta_learning_client.py +0 -0
  180. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/single_predictor_cv.py +0 -0
  181. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/sphere_config.py +0 -0
  182. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/training_monitor.py +0 -0
  183. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/utils.py +0 -0
  184. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/vector_db.py +0 -0
  185. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/webhook_helpers.py +0 -0
  186. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/lib/weightwatcher_tracking.py +0 -0
  187. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/llm_client.py +0 -0
  188. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/manage_churro.sh +0 -0
  189. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/migrate_string_cache_naming.py +0 -0
  190. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/neural.py +0 -0
  191. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/prediction_drift_monitor.py +0 -0
  192. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/prediction_persistence_worker.py +0 -0
  193. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/query_schema_worker.py +0 -0
  194. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/quick_test_deployment.sh +0 -0
  195. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/recreate_session.py +0 -0
  196. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/redis_prediction_cli.py +0 -0
  197. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/redis_prediction_store.py +0 -0
  198. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/regenerate_training_movie.py +0 -0
  199. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/render_sphere.py +0 -0
  200. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/repair_checkpoint.py +0 -0
  201. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/send_email.py +0 -0
  202. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/slack.py +0 -0
  203. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/standalone_prediction.py +0 -0
  204. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/start_celery_gpu_worker.sh +0 -0
  205. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/tail-watch.py +0 -0
  206. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/test_complete_workflow.py +0 -0
  207. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/test_json_tables_prediction.py +0 -0
  208. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/test_redis_predictions.py +0 -0
  209. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/test_server_connection.py +0 -0
  210. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/test_session_models.py +0 -0
  211. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/test_single_predictor_api.py +0 -0
  212. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/test_upload_endpoint.py +0 -0
  213. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/tree.py +0 -0
  214. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/src/utils.py +0 -0
  215. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/tests/test_client_data.py +0 -0
  216. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/tests/test_client_predictions.py +0 -0
  217. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/tests/test_client_sessions.py +0 -0
  218. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/tests/test_client_training.py +0 -0
  219. {featrixsphere-0.2.2279 → featrixsphere-0.2.3611}/tests/test_local_integration.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: featrixsphere
3
- Version: 0.2.2279
3
+ Version: 0.2.3611
4
4
  Summary: Transform any CSV into a production-ready ML model in minutes, not months.
5
5
  Home-page: https://github.com/Featrix/sphere
6
6
  Author: Featrix
@@ -0,0 +1 @@
1
+ 0.2.3611
@@ -357,17 +357,45 @@ def install_package(package_file: Path, force: bool = False) -> bool:
357
357
  # 2. The package is a specific version we want to install
358
358
  # 3. node-install.sh checks git state from /home/mitch/sphere which may not match the package
359
359
 
360
- # node-install.sh REQUIRES root (checked at line 326)
361
- # It calls 'sbit fix-permissions' which needs sbit to have setuid bit
362
- # The install script itself must run as root
363
- cmd = ["sudo", str(install_script), "--force"]
360
+ # Extract version and hash from package filename
361
+ # Format: sphere-app-0.2.2422-taco-fixes-0fe65caa.tar.gz
362
+ # This lets the install script show correct version/hash from the start
363
+ import re
364
+ version_match = re.search(r'sphere-app-([0-9.]+)', package_file.name)
365
+ hash_match = re.search(r'-([0-9a-f]{8})\.tar\.gz$', package_file.name)
366
+
367
+ package_version = version_match.group(1) if version_match else None
368
+ package_hash = hash_match.group(1) if hash_match else None
369
+
370
+ # node-install.sh REQUIRES root
371
+ # Run directly with sudo bash to avoid version compatibility issues
372
+ # Old versions of ffsh/sbit might not support the newer arguments
373
+ cmd = ["sudo", "bash", str(install_script), "--force"]
374
+
375
+ # Pass package version and hash to install script for accurate logging
376
+ if package_version:
377
+ cmd.extend(["--package-version", package_version])
378
+ if package_hash:
379
+ cmd.extend(["--package-hash", package_hash])
380
+
381
+ # Make script executable
382
+ install_script.chmod(0o755)
383
+
364
384
  print(f" Using --force flag (installing from package)")
385
+ if package_version:
386
+ print(f" Package version: {package_version}")
387
+ if package_hash:
388
+ print(f" Package hash: {package_hash}")
365
389
 
366
390
  # Run the install script
391
+ # CRITICAL: stdin=subprocess.DEVNULL prevents sudo from prompting for password
392
+ # If sbit doesn't have setuid bit, deployment should fail fast instead of hanging
393
+ # Don't capture output - let it stream to console in real-time
367
394
  result = subprocess.run(
368
395
  cmd,
369
396
  check=True,
370
- timeout=600 # 10 minute timeout
397
+ timeout=600, # 10 minute timeout
398
+ stdin=subprocess.DEVNULL, # Prevent interactive password prompts
371
399
  )
372
400
 
373
401
  print("✅ Installation completed successfully")
@@ -378,6 +406,7 @@ def install_package(package_file: Path, force: bool = False) -> bool:
378
406
 
379
407
  except subprocess.CalledProcessError as e:
380
408
  print(f"❌ Installation failed with exit code {e.returncode}")
409
+ print(" (See output above for details)")
381
410
  return False
382
411
  except subprocess.TimeoutExpired:
383
412
  print("❌ Installation timed out after 10 minutes")
@@ -495,7 +524,7 @@ def main():
495
524
  should_update = True
496
525
  elif comparison == 0:
497
526
  # Same version - check if hash is different (newer build of same version)
498
- current_hash = get_current_version_hash()
527
+ current_hash = get_current_version_hash() # pylint: disable=assignment-from-none
499
528
  if current_hash and newest_hash and current_hash != newest_hash:
500
529
  print(f"\n✅ Newer build available: {current_version} ({current_hash} → {newest_hash[:8]})")
501
530
  print(f" Same version number but different hash (newer build)")
@@ -38,7 +38,7 @@ Example:
38
38
  ... labels=['Experiment A', 'Experiment B'])
39
39
  """
40
40
 
41
- __version__ = "0.2.2279"
41
+ __version__ = "0.2.3611"
42
42
  __author__ = "Featrix"
43
43
  __email__ = "support@featrix.com"
44
44
  __license__ = "MIT"
@@ -4547,20 +4547,20 @@ class FeatrixSphereClient:
4547
4547
  if verbose:
4548
4548
  print(f"📊 Using provided DataFrame ({len(df)} rows, {len(df.columns)} columns)")
4549
4549
 
4550
- # Create temporary CSV file
4551
- temp_file = tempfile.NamedTemporaryFile(mode='w', suffix='.csv', delete=False)
4550
+ # Create temporary parquet file (faster and more efficient than CSV)
4551
+ temp_file = tempfile.NamedTemporaryFile(mode='wb', suffix='.parquet', delete=False)
4552
4552
  temp_file_path = temp_file.name
4553
4553
  temp_file.close()
4554
4554
 
4555
- # Save DataFrame to temp file
4556
- df.to_csv(temp_file_path, index=False)
4555
+ # Save DataFrame to temp parquet file
4556
+ df.to_parquet(temp_file_path, index=False, engine='pyarrow')
4557
4557
 
4558
4558
  if verbose:
4559
- print(f"📁 Saved to temporary file: {os.path.basename(temp_file_path)}")
4559
+ print(f"📁 Saved to temporary parquet file: {os.path.basename(temp_file_path)}")
4560
4560
  print(f"📤 Uploading file directly with training request...")
4561
4561
 
4562
4562
  # Send file in multipart form
4563
- files = {'file': (os.path.basename(temp_file_path), open(temp_file_path, 'rb'), 'text/csv')}
4563
+ files = {'file': (os.path.basename(temp_file_path), open(temp_file_path, 'rb'), 'application/octet-stream')}
4564
4564
 
4565
4565
  elif input_filename:
4566
4566
  # If absolute path provided, send file directly
@@ -4573,8 +4573,17 @@ class FeatrixSphereClient:
4573
4573
  if verbose:
4574
4574
  print(f"📤 Sending file directly from absolute path: {input_filename}")
4575
4575
 
4576
+ # Determine MIME type based on file extension
4577
+ mime_type = 'application/octet-stream' # Default fallback
4578
+ if input_path.suffix == '.csv':
4579
+ mime_type = 'text/csv'
4580
+ elif input_path.suffix == '.parquet':
4581
+ mime_type = 'application/octet-stream'
4582
+ elif input_path.suffix == '.gz':
4583
+ mime_type = 'application/gzip'
4584
+
4576
4585
  # Send file in multipart form
4577
- files = {'file': (input_path.name, open(input_path, 'rb'), 'text/csv' if input_path.suffix == '.csv' else 'application/gzip')}
4586
+ files = {'file': (input_path.name, open(input_path, 'rb'), mime_type)}
4578
4587
  else:
4579
4588
  # Relative filename - assume it's already on the server
4580
4589
  data["input_filename"] = input_filename
@@ -5007,14 +5016,44 @@ class FeatrixSphereClient:
5007
5016
  The system handles the hard decisions so you can focus on your problem, not
5008
5017
  hyperparameter tuning.
5009
5018
 
5019
+ MULTI-DATASET INPUT (NEW):
5020
+ ---------------------------
5021
+ You can now pass a dictionary of datasets for the `df` parameter, just like in
5022
+ upload_df_and_create_session(). This is useful when combining multiple sources
5023
+ for predictor training:
5024
+
5025
+ ```python
5026
+ # Train predictor on multiple datasets with labels
5027
+ training_data = {
5028
+ 'extra_rows_from_matt': ['matt_supplement.csv', 'matt_additions.parquet'],
5029
+ 'main_training': [df1, df2, 'training.csv'],
5030
+ 'validation_samples': ['validation.csv']
5031
+ }
5032
+
5033
+ result = client.train_single_predictor(
5034
+ session_id=session.session_id,
5035
+ df=training_data, # Dictionary of datasets
5036
+ target_column='outcome',
5037
+ target_column_type='set'
5038
+ )
5039
+ ```
5040
+
5041
+ When using dictionary format:
5042
+ - Each key is a dataset name (e.g., 'extra_rows_from_matt')
5043
+ - Each value is a list of DataFrames and/or file paths
5044
+ - A __featrix_dataset_name column is automatically added
5045
+ - All tables are concatenated before training
5046
+ - Works with all file types: CSV, Parquet, JSON, JSONL
5047
+
5010
5048
  Args:
5011
5049
  session_id: ID of session with trained embedding space
5012
5050
  target_column: Name of the target column to predict
5013
5051
  target_column_type: Type of target column ("set" or "scalar")
5014
5052
  file_path: Path to DIFFERENT training file (CSV or .csv.gz) to use for predictor training.
5015
- df: pandas DataFrame with DIFFERENT training data to use for predictor training.
5016
- Use file_path OR df (not both) to train predictor on different data than your
5017
- embedding space! If neither provided, uses session's original data file.
5053
+ df: pandas DataFrame OR dict of {dataset_name: [DataFrames/file paths]} with DIFFERENT
5054
+ training data to use for predictor training. Use file_path OR df (not both) to train
5055
+ predictor on different data than your embedding space! If neither provided, uses
5056
+ session's original data file.
5018
5057
  epochs: Number of training epochs (default: 0; automatic)
5019
5058
  validation_ignore_columns: List of column names to exclude from validation queries (default: None)
5020
5059
  rare_label_value: For binary classification, which class is the rare/minority class for metrics (default: None)
@@ -5035,6 +5074,86 @@ class FeatrixSphereClient:
5035
5074
  if file_path and df is not None:
5036
5075
  raise ValueError("Provide either file_path or df, not both")
5037
5076
 
5077
+ # Handle dictionary of datasets input (same as upload_df_and_create_session)
5078
+ if df is not None and isinstance(df, dict):
5079
+ if verbose:
5080
+ print("Detected dictionary of datasets - concatenating with __featrix_dataset_name labels")
5081
+ all_dataframes = []
5082
+ total_rows = 0
5083
+
5084
+ for dataset_name, tables in df.items():
5085
+ if not isinstance(tables, list):
5086
+ raise ValueError(f"Value for dataset '{dataset_name}' must be a list of DataFrames/file paths, got {type(tables)}")
5087
+
5088
+ for i, table in enumerate(tables):
5089
+ # Handle file path (string)
5090
+ if isinstance(table, str):
5091
+ file_path_to_load = str(table)
5092
+
5093
+ if not os.path.exists(file_path_to_load):
5094
+ raise FileNotFoundError(f"File not found in dataset '{dataset_name}': {file_path_to_load}")
5095
+
5096
+ # Determine file type and load
5097
+ file_ext = file_path_to_load.lower()
5098
+ if verbose:
5099
+ print(f" - {dataset_name} loading file: {os.path.basename(file_path_to_load)}")
5100
+
5101
+ if file_ext.endswith('.parquet'):
5102
+ loaded_df = pd.read_parquet(file_path_to_load)
5103
+ elif file_ext.endswith(('.json', '.jsonl')):
5104
+ try:
5105
+ from featrix.neural.input_data_file import featrix_wrap_read_json_file
5106
+ loaded_df = featrix_wrap_read_json_file(file_path_to_load)
5107
+ if loaded_df is None:
5108
+ raise ValueError(f"Failed to parse {'JSONL' if file_ext.endswith('.jsonl') else 'JSON'} file")
5109
+ except ImportError:
5110
+ # Fallback to pandas
5111
+ if file_ext.endswith('.jsonl'):
5112
+ import json
5113
+ records = []
5114
+ with open(file_path_to_load, 'r', encoding='utf-8') as f:
5115
+ for line in f:
5116
+ if line.strip():
5117
+ records.append(json.loads(line))
5118
+ loaded_df = pd.DataFrame(records)
5119
+ else:
5120
+ loaded_df = pd.read_json(file_path_to_load)
5121
+ elif file_ext.endswith(('.csv', '.csv.gz')):
5122
+ loaded_df = pd.read_csv(file_path_to_load)
5123
+ else:
5124
+ raise ValueError(f"Unsupported file type in dataset '{dataset_name}': {file_path_to_load}. "
5125
+ f"Supported: .csv, .csv.gz, .parquet, .json, .jsonl")
5126
+
5127
+ labeled_table = loaded_df
5128
+ if verbose:
5129
+ print(f" Loaded {len(loaded_df)} rows, {len(loaded_df.columns)} columns")
5130
+
5131
+ # Handle DataFrame
5132
+ elif isinstance(table, pd.DataFrame):
5133
+ # Create a copy to avoid modifying the original
5134
+ labeled_table = table.copy()
5135
+ if verbose:
5136
+ print(f" - {dataset_name} DataFrame {i+1}: {len(labeled_table)} rows, {len(labeled_table.columns)} columns")
5137
+
5138
+ else:
5139
+ raise ValueError(f"Table {i} in dataset '{dataset_name}' must be a pandas DataFrame or file path (str), got {type(table)}")
5140
+
5141
+ # Add the dataset name label column
5142
+ labeled_table['__featrix_dataset_name'] = dataset_name
5143
+
5144
+ all_dataframes.append(labeled_table)
5145
+ total_rows += len(labeled_table)
5146
+
5147
+ if not all_dataframes:
5148
+ raise ValueError("No DataFrames found in the provided dictionary")
5149
+
5150
+ # Concatenate all dataframes
5151
+ if verbose:
5152
+ print(f"Concatenating {len(all_dataframes)} tables from {len(df)} datasets ({total_rows} total rows)")
5153
+ df = pd.concat(all_dataframes, ignore_index=True)
5154
+ if verbose:
5155
+ print(f"Combined DataFrame: {len(df)} rows, {len(df.columns)} columns (includes __featrix_dataset_name)")
5156
+
5038
5157
  # Validate cost parameters
5039
5158
  if cost_false_positive is not None or cost_false_negative is not None:
5040
5159
  if cost_false_positive is None or cost_false_negative is None:
@@ -5055,17 +5174,17 @@ class FeatrixSphereClient:
5055
5174
  if verbose:
5056
5175
  print(f"📊 Using provided DataFrame ({len(df)} rows, {len(df.columns)} columns)")
5057
5176
 
5058
- # Create temporary CSV file
5059
- temp_file = tempfile.NamedTemporaryFile(mode='w', suffix='.csv', delete=False)
5177
+ # Create temporary parquet file (faster and more efficient than CSV)
5178
+ temp_file = tempfile.NamedTemporaryFile(mode='wb', suffix='.parquet', delete=False)
5060
5179
  temp_file_path = temp_file.name
5061
5180
  temp_file.close()
5062
5181
 
5063
- # Save DataFrame to temp file
5064
- df.to_csv(temp_file_path, index=False)
5182
+ # Save DataFrame to temp parquet file
5183
+ df.to_parquet(temp_file_path, index=False, engine='pyarrow')
5065
5184
  file_path = temp_file_path
5066
5185
 
5067
5186
  if verbose:
5068
- print(f"📁 Saved to temporary file: {os.path.basename(temp_file_path)}")
5187
+ print(f"📁 Saved to temporary parquet file: {os.path.basename(temp_file_path)}")
5069
5188
 
5070
5189
  try:
5071
5190
  # If a custom training file is provided (or we created one from df), use the file upload endpoint
@@ -5296,17 +5415,17 @@ class FeatrixSphereClient:
5296
5415
  if verbose:
5297
5416
  print(f"📊 Using provided DataFrame ({len(new_data_df)} rows, {len(new_data_df.columns)} columns)")
5298
5417
 
5299
- # Create temporary CSV file
5300
- temp_file = tempfile.NamedTemporaryFile(mode='w', suffix='.csv', delete=False)
5418
+ # Create temporary parquet file (faster and more efficient than CSV)
5419
+ temp_file = tempfile.NamedTemporaryFile(mode='wb', suffix='.parquet', delete=False)
5301
5420
  temp_file_path = temp_file.name
5302
5421
  temp_file.close()
5303
5422
 
5304
- # Save DataFrame to temp file
5305
- new_data_df.to_csv(temp_file_path, index=False)
5423
+ # Save DataFrame to temp parquet file
5424
+ new_data_df.to_parquet(temp_file_path, index=False, engine='pyarrow')
5306
5425
  file_to_upload = temp_file_path
5307
5426
 
5308
5427
  if verbose:
5309
- print(f"📁 Saved to temporary file: {os.path.basename(temp_file_path)}")
5428
+ print(f"📁 Saved to temporary parquet file: {os.path.basename(temp_file_path)}")
5310
5429
 
5311
5430
  try:
5312
5431
  # Prepare file upload
@@ -5901,8 +6020,17 @@ class FeatrixSphereClient:
5901
6020
  print(f"📤 Uploading custom training file: {file_path.name}")
5902
6021
 
5903
6022
  # Prepare the multipart form data
6023
+ # Determine MIME type based on file extension
6024
+ mime_type = 'application/octet-stream' # Default fallback
6025
+ if file_path.suffix == '.csv':
6026
+ mime_type = 'text/csv'
6027
+ elif file_path.suffix == '.parquet':
6028
+ mime_type = 'application/octet-stream' # Parquet MIME type
6029
+ elif file_path.suffix == '.gz':
6030
+ mime_type = 'application/gzip'
6031
+
5904
6032
  files = {
5905
- 'file': (file_path.name, open(file_path, 'rb'), 'text/csv' if file_path.suffix == '.csv' else 'application/gzip')
6033
+ 'file': (file_path.name, open(file_path, 'rb'), mime_type)
5906
6034
  }
5907
6035
 
5908
6036
  data = {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: featrixsphere
3
- Version: 0.2.2279
3
+ Version: 0.2.3611
4
4
  Summary: Transform any CSV into a production-ready ML model in minutes, not months.
5
5
  Home-page: https://github.com/Featrix/sphere
6
6
  Author: Featrix
@@ -49,15 +49,13 @@ src/redis_prediction_store.py
49
49
  src/regenerate_training_movie.py
50
50
  src/render_sphere.py
51
51
  src/repair_checkpoint.py
52
- src/restart_celery_worker.sh
53
52
  src/run_api_server.sh
54
53
  src/send_email.py
55
54
  src/slack.py
56
55
  src/standalone_prediction.py
57
56
  src/start_celery_cpu_worker.sh
58
57
  src/start_celery_gpu_worker.sh
59
- src/start_celery_worker.sh
60
- src/start_churro_server.sh
58
+ src/start_celery_movie_worker.sh
61
59
  src/tail-watch.py
62
60
  src/test_api_client.py
63
61
  src/test_complete_workflow.py
@@ -124,6 +122,8 @@ src/lib/featrix/neural/featrix_token.py
124
122
  src/lib/featrix/neural/feature_engineer.py
125
123
  src/lib/featrix/neural/feature_suggestion_tracker.py
126
124
  src/lib/featrix/neural/gpu_utils.py
125
+ src/lib/featrix/neural/graph_encoder.py
126
+ src/lib/featrix/neural/graph_encoder_training.py
127
127
  src/lib/featrix/neural/guardrails.py
128
128
  src/lib/featrix/neural/hubspot_free_domains_list_may_2025.py
129
129
  src/lib/featrix/neural/hybrid_column_detector.py
@@ -139,13 +139,23 @@ src/lib/featrix/neural/mask_tracker.py
139
139
  src/lib/featrix/neural/model_config.py
140
140
  src/lib/featrix/neural/model_hash.py
141
141
  src/lib/featrix/neural/movie_frame_task.py
142
+ src/lib/featrix/neural/multi_table_dataset.py
143
+ src/lib/featrix/neural/multi_table_embedding_space.py
142
144
  src/lib/featrix/neural/network_viz.py
143
145
  src/lib/featrix/neural/platform_utils.py
144
146
  src/lib/featrix/neural/prng_control.py
147
+ src/lib/featrix/neural/relationship_complexity.py
148
+ src/lib/featrix/neural/relationship_estimator.py
149
+ src/lib/featrix/neural/relationship_extractor.py
150
+ src/lib/featrix/neural/relationship_performance.py
151
+ src/lib/featrix/neural/relationship_preanalysis.py
152
+ src/lib/featrix/neural/relationship_search.py
145
153
  src/lib/featrix/neural/scalar_codec.py
154
+ src/lib/featrix/neural/schema_history.py
146
155
  src/lib/featrix/neural/set_codec.py
147
156
  src/lib/featrix/neural/setlist_codec.py
148
157
  src/lib/featrix/neural/simple_mlp.py
158
+ src/lib/featrix/neural/simple_string_cache.py
149
159
  src/lib/featrix/neural/single_predictor.py
150
160
  src/lib/featrix/neural/single_predictor_mlp.py
151
161
  src/lib/featrix/neural/sphere_config.py
@@ -155,7 +165,9 @@ src/lib/featrix/neural/string_analysis.py
155
165
  src/lib/featrix/neural/string_cache.py
156
166
  src/lib/featrix/neural/string_codec.py
157
167
  src/lib/featrix/neural/string_list_codec.py
168
+ src/lib/featrix/neural/test_graph_encoder.py
158
169
  src/lib/featrix/neural/timestamp_codec.py
170
+ src/lib/featrix/neural/training_banner.py
159
171
  src/lib/featrix/neural/training_context_manager.py
160
172
  src/lib/featrix/neural/training_event.py
161
173
  src/lib/featrix/neural/training_exceptions.py