tgraphx 1.4.0__tar.gz → 1.4.2__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 (415) hide show
  1. {tgraphx-1.4.0/tgraphx.egg-info → tgraphx-1.4.2}/PKG-INFO +58 -4
  2. {tgraphx-1.4.0 → tgraphx-1.4.2}/README.md +55 -2
  3. {tgraphx-1.4.0 → tgraphx-1.4.2}/pyproject.toml +3 -2
  4. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_advanced_notebook_workflows_v138.py +17 -2
  5. tgraphx-1.4.2/tests/test_audit_fixes_v142.py +263 -0
  6. tgraphx-1.4.2/tests/test_user_friendly_syntax_groups_101_115_v141.py +575 -0
  7. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/__init__.py +51 -52
  8. tgraphx-1.4.2/tgraphx/__main__.py +107 -0
  9. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/core/graph.py +20 -1
  10. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/datasets/__init__.py +1 -1
  11. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/datasets/torchvision_wrappers.py +2 -2
  12. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/models/pre_encoder.py +4 -1
  13. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/training.py +6 -0
  14. tgraphx-1.4.2/tgraphx/ux/__init__.py +144 -0
  15. tgraphx-1.4.2/tgraphx/ux/dashboard_audit.py +206 -0
  16. tgraphx-1.4.2/tgraphx/ux/generation_wrappers.py +578 -0
  17. tgraphx-1.4.2/tgraphx/ux/helpers.py +772 -0
  18. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/ux/public_api.py +50 -0
  19. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/ux/serialization.py +31 -1
  20. {tgraphx-1.4.0 → tgraphx-1.4.2/tgraphx.egg-info}/PKG-INFO +58 -4
  21. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx.egg-info/SOURCES.txt +4 -0
  22. tgraphx-1.4.0/tgraphx/__main__.py +0 -71
  23. tgraphx-1.4.0/tgraphx/ux/__init__.py +0 -104
  24. tgraphx-1.4.0/tgraphx/ux/dashboard_audit.py +0 -124
  25. {tgraphx-1.4.0 → tgraphx-1.4.2}/LICENSE +0 -0
  26. {tgraphx-1.4.0 → tgraphx-1.4.2}/setup.cfg +0 -0
  27. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_3d_support.py +0 -0
  28. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_advanced_notebook_execution_v138.py +0 -0
  29. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_advanced_notebook_report_consistency_v137.py +0 -0
  30. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_advanced_notebook_report_consistency_v138.py +0 -0
  31. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_advanced_notebook_workflows_v137.py +0 -0
  32. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_advanced_real_dataset_notebooks.py +0 -0
  33. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_algorithms.py +0 -0
  34. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_amp_compile.py +0 -0
  35. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_api_stability_labels.py +0 -0
  36. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_backward_compatibility.py +0 -0
  37. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_benchmark_smoke.py +0 -0
  38. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_calibration.py +0 -0
  39. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_chunking.py +0 -0
  40. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_cluster_gcn.py +0 -0
  41. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_colab_notebook_regressions_v136.py +0 -0
  42. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_colab_regressions_v134.py +0 -0
  43. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_colab_regressions_v135.py +0 -0
  44. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_continuous_rl_algorithms.py +0 -0
  45. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_dashboard.py +0 -0
  46. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_dashboard_metadata.py +0 -0
  47. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_dataset_cache.py +0 -0
  48. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_dataset_docs_claims.py +0 -0
  49. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_dataset_download_mocked.py +0 -0
  50. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_dataset_registry.py +0 -0
  51. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_datasets_base.py +0 -0
  52. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_devices.py +0 -0
  53. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_distributed_compat.py +0 -0
  54. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_distributed_helpers.py +0 -0
  55. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_distributed_smoke.py +0 -0
  56. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_documentation_claims.py +0 -0
  57. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_edge_features.py +0 -0
  58. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_edge_weight.py +0 -0
  59. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_estimators_v05.py +0 -0
  60. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_evolutionary_graph_optimization.py +0 -0
  61. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_evolutionary_history_v132.py +0 -0
  62. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_experiments.py +0 -0
  63. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_explainability.py +0 -0
  64. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_factories.py +0 -0
  65. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_folder_datasets.py +0 -0
  66. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_gat_chunking.py +0 -0
  67. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_generation_rl_benchmarks_smoke.py +0 -0
  68. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_gnn_families.py +0 -0
  69. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_gradients.py +0 -0
  70. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_graph.py +0 -0
  71. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_graph_action_spaces.py +0 -0
  72. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_graph_api.py +0 -0
  73. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_graph_builders.py +0 -0
  74. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_graph_generation_data_model.py +0 -0
  75. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_graph_generation_metrics.py +0 -0
  76. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_graph_rl_algorithms.py +0 -0
  77. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_graph_rl_environments.py +0 -0
  78. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_graph_transformer_v027.py +0 -0
  79. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_graph_utils.py +0 -0
  80. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_graphsaint.py +0 -0
  81. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_han_hgt_overfit.py +0 -0
  82. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_hard_negative_sampling.py +0 -0
  83. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_hetero_batch.py +0 -0
  84. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_hetero_layers.py +0 -0
  85. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_hetero_layers_v05.py +0 -0
  86. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_hetero_sampling.py +0 -0
  87. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_imports.py +0 -0
  88. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_io_graphml_v120.py +0 -0
  89. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_benchmarks_smoke.py +0 -0
  90. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_data_model.py +0 -0
  91. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_datasets.py +0 -0
  92. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_evaluation.py +0 -0
  93. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_feature_aware_v131.py +0 -0
  94. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_gnn_integration.py +0 -0
  95. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_hpo_v130.py +0 -0
  96. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_models.py +0 -0
  97. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_multimodal.py +0 -0
  98. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_negative_sampling.py +0 -0
  99. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_reasoning.py +0 -0
  100. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_rescal_v120.py +0 -0
  101. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_simple_v130.py +0 -0
  102. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_temporal.py +0 -0
  103. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_kg_training.py +0 -0
  104. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_layers.py +0 -0
  105. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_llm_predictability_v136.py +0 -0
  106. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_loader_feature_store_integration.py +0 -0
  107. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_loader_robustness_v110.py +0 -0
  108. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_loaders_feature_store.py +0 -0
  109. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_matching_coloring_flow.py +0 -0
  110. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_math.py +0 -0
  111. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_math_correctness_v110.py +0 -0
  112. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_math_invariants_v030.py +0 -0
  113. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_metrics.py +0 -0
  114. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_mining_centrality.py +0 -0
  115. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_mining_core.py +0 -0
  116. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_mining_generators_spectral.py +0 -0
  117. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_mining_graph_learning.py +0 -0
  118. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_mining_paths_algorithms.py +0 -0
  119. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_mining_structural.py +0 -0
  120. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_model_zoo.py +0 -0
  121. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_models.py +0 -0
  122. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_negative_sampling.py +0 -0
  123. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_neural_mining.py +0 -0
  124. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_neural_mining_batched.py +0 -0
  125. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_node2vec_kg_hypergraph.py +0 -0
  126. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_notebooks_v130.py +0 -0
  127. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_ogb_tgb_wrappers.py +0 -0
  128. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_packaging.py +0 -0
  129. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_performance_smoke.py +0 -0
  130. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_plotting.py +0 -0
  131. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_public_benchmarks.py +0 -0
  132. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_pyg_dgl_ogb_wrappers.py +0 -0
  133. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_random_walk_sample.py +0 -0
  134. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_readme_links.py +0 -0
  135. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_release_validation_v030.py +0 -0
  136. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_reproducibility.py +0 -0
  137. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_reproducibility_easy_v133.py +0 -0
  138. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_rl_baselines.py +0 -0
  139. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_rl_callbacks_v120.py +0 -0
  140. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_rl_high_level_api.py +0 -0
  141. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_rollout_buffer.py +0 -0
  142. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_sampling.py +0 -0
  143. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_sampling_loaders.py +0 -0
  144. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_sparse_backend_select.py +0 -0
  145. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_sparse_vgae_rgcn.py +0 -0
  146. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_synthetic_datasets.py +0 -0
  147. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_temporal_sampling.py +0 -0
  148. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_temporal_v025.py +0 -0
  149. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_temporal_v05.py +0 -0
  150. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_tgn_tgat_overfit.py +0 -0
  151. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_time_encoding.py +0 -0
  152. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_tiny_overfit_v030.py +0 -0
  153. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_torchvision_wrappers.py +0 -0
  154. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_tracking.py +0 -0
  155. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_training.py +0 -0
  156. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_transforms.py +0 -0
  157. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_user_friendly_llm_snippets.py +0 -0
  158. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_user_friendly_syntax_groups_71_100_v140.py +0 -0
  159. {tgraphx-1.4.0 → tgraphx-1.4.2}/tests/test_v024_features.py +0 -0
  160. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/algorithms/__init__.py +0 -0
  161. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/algorithms/connectivity.py +0 -0
  162. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/algorithms/structural.py +0 -0
  163. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/algorithms/traversal.py +0 -0
  164. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/benchmarks/__init__.py +0 -0
  165. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/benchmarks/public.py +0 -0
  166. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/benchmarks/run_v13_benchmark_suite.py +0 -0
  167. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/benchmarks/suite.py +0 -0
  168. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/calibration.py +0 -0
  169. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/cluster_gcn.py +0 -0
  170. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/core/__init__.py +0 -0
  171. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/core/dataloader.py +0 -0
  172. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/core/graph_utils.py +0 -0
  173. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/core/hetero_batch.py +0 -0
  174. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/core/hetero_graph.py +0 -0
  175. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/core/temporal.py +0 -0
  176. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/core/temporal_batch.py +0 -0
  177. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/core/utils.py +0 -0
  178. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/dashboard/__init__.py +0 -0
  179. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/dashboard/__main__.py +0 -0
  180. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/dashboard/app.py +0 -0
  181. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/dashboard/static/dashboard.css +0 -0
  182. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/dashboard/static/dashboard.js +0 -0
  183. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/datasets/base.py +0 -0
  184. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/datasets/cache.py +0 -0
  185. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/datasets/converters.py +0 -0
  186. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/datasets/dgl_wrappers.py +0 -0
  187. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/datasets/download.py +0 -0
  188. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/datasets/errors.py +0 -0
  189. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/datasets/folder.py +0 -0
  190. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/datasets/metadata.py +0 -0
  191. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/datasets/ogb_wrappers.py +0 -0
  192. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/datasets/pyg_wrappers.py +0 -0
  193. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/datasets/registry.py +0 -0
  194. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/datasets/synthetic.py +0 -0
  195. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/distributed.py +0 -0
  196. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/doctor.py +0 -0
  197. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/easy/__init__.py +0 -0
  198. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/easy/_data.py +0 -0
  199. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/easy/_diagnostics.py +0 -0
  200. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/easy/_discovery.py +0 -0
  201. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/easy/_exceptions.py +0 -0
  202. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/easy/_models.py +0 -0
  203. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/easy/_results.py +0 -0
  204. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/easy/_workflows.py +0 -0
  205. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/estimators/__init__.py +0 -0
  206. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/estimators/base.py +0 -0
  207. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/estimators/early_stopping.py +0 -0
  208. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/estimators/label_propagation.py +0 -0
  209. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/estimators/node2vec.py +0 -0
  210. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/estimators/splits.py +0 -0
  211. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/estimators/vgae.py +0 -0
  212. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/evolutionary/__init__.py +0 -0
  213. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/evolutionary/algorithms.py +0 -0
  214. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/evolutionary/config.py +0 -0
  215. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/evolutionary/fitness.py +0 -0
  216. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/evolutionary/genome.py +0 -0
  217. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/evolutionary/high_level_api.py +0 -0
  218. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/evolutionary/metrics.py +0 -0
  219. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/evolutionary/multi_objective.py +0 -0
  220. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/evolutionary/operators.py +0 -0
  221. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/evolutionary/reports.py +0 -0
  222. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/evolutionary/selection.py +0 -0
  223. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/experiments/__init__.py +0 -0
  224. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/experiments/callbacks.py +0 -0
  225. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/experiments/checkpoints.py +0 -0
  226. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/experiments/cli.py +0 -0
  227. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/experiments/config.py +0 -0
  228. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/experiments/grid.py +0 -0
  229. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/experiments/runner.py +0 -0
  230. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/experiments/summarize.py +0 -0
  231. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/explain/__init__.py +0 -0
  232. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/explain/attention.py +0 -0
  233. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/explain/edge_attribution.py +0 -0
  234. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/explain/export.py +0 -0
  235. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/explain/integrated_gradients.py +0 -0
  236. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/explain/patch_heatmap.py +0 -0
  237. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/explain/saliency.py +0 -0
  238. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/explain/utils.py +0 -0
  239. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/feature_store.py +0 -0
  240. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/generation/__init__.py +0 -0
  241. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/generation/actions.py +0 -0
  242. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/generation/classical.py +0 -0
  243. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/generation/config.py +0 -0
  244. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/generation/data_model.py +0 -0
  245. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/generation/high_level_api.py +0 -0
  246. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/generation/metrics.py +0 -0
  247. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/generation/neural.py +0 -0
  248. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/generation/projectors.py +0 -0
  249. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/generation/reports.py +0 -0
  250. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/graph_builders.py +0 -0
  251. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/graphsaint.py +0 -0
  252. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/hetero_sampling.py +0 -0
  253. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/interop.py +0 -0
  254. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/io/__init__.py +0 -0
  255. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/io/graphml.py +0 -0
  256. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/__init__.py +0 -0
  257. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/data.py +0 -0
  258. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/datasets.py +0 -0
  259. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/evaluation.py +0 -0
  260. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/gnn.py +0 -0
  261. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/hpo.py +0 -0
  262. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/losses.py +0 -0
  263. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/models.py +0 -0
  264. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/multimodal.py +0 -0
  265. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/projectors.py +0 -0
  266. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/reasoning.py +0 -0
  267. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/reports.py +0 -0
  268. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/sampling.py +0 -0
  269. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/temporal.py +0 -0
  270. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/kg/trainer.py +0 -0
  271. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/__init__.py +0 -0
  272. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/_dim.py +0 -0
  273. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/_scatter.py +0 -0
  274. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/aggregator.py +0 -0
  275. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/appnp.py +0 -0
  276. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/attention_message.py +0 -0
  277. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/base.py +0 -0
  278. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/conv_message.py +0 -0
  279. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/factory.py +0 -0
  280. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/gat.py +0 -0
  281. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/gatv2.py +0 -0
  282. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/gin.py +0 -0
  283. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/graph_transformer.py +0 -0
  284. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/han.py +0 -0
  285. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/hetero.py +0 -0
  286. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/hetero_readout.py +0 -0
  287. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/hgt.py +0 -0
  288. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/pooling.py +0 -0
  289. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/rgcn.py +0 -0
  290. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/safe_pool.py +0 -0
  291. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/sage.py +0 -0
  292. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/temporal_readout.py +0 -0
  293. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/transformer_encodings.py +0 -0
  294. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/layers/vector_gcn.py +0 -0
  295. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/learned_graph.py +0 -0
  296. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/loaders.py +0 -0
  297. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/metrics/__init__.py +0 -0
  298. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/metrics/classification.py +0 -0
  299. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/metrics/link_prediction.py +0 -0
  300. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/metrics/ogb.py +0 -0
  301. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/metrics/ranking.py +0 -0
  302. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/metrics/regression.py +0 -0
  303. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/metrics/reports.py +0 -0
  304. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/__init__.py +0 -0
  305. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/anomaly.py +0 -0
  306. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/api.py +0 -0
  307. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/centrality.py +0 -0
  308. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/communities.py +0 -0
  309. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/embeddings.py +0 -0
  310. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/frequent.py +0 -0
  311. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/generators.py +0 -0
  312. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/graph_io.py +0 -0
  313. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/graph_learning.py +0 -0
  314. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/hetero.py +0 -0
  315. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/hypergraph.py +0 -0
  316. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/kernels.py +0 -0
  317. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/knowledge_graph.py +0 -0
  318. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/label_prop.py +0 -0
  319. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/link_prediction.py +0 -0
  320. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/matching_coloring.py +0 -0
  321. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/motifs.py +0 -0
  322. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/neural.py +0 -0
  323. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/node2vec.py +0 -0
  324. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/paths.py +0 -0
  325. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/patterns.py +0 -0
  326. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/prototype.py +0 -0
  327. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/random_walk.py +0 -0
  328. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/reports.py +0 -0
  329. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/sequence_models.py +0 -0
  330. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/similarity.py +0 -0
  331. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/spectral.py +0 -0
  332. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/structural.py +0 -0
  333. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/structural_encodings.py +0 -0
  334. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/temporal.py +0 -0
  335. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/mining/vgae.py +0 -0
  336. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/models/__init__.py +0 -0
  337. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/models/cnn_encoder.py +0 -0
  338. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/models/cnn_gnn_model.py +0 -0
  339. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/models/edge_predictor.py +0 -0
  340. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/models/factory.py +0 -0
  341. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/models/graph_classifier.py +0 -0
  342. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/models/hetero_models.py +0 -0
  343. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/models/knowledge_graph.py +0 -0
  344. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/models/model_zoo.py +0 -0
  345. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/models/node_classifier.py +0 -0
  346. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/models/regressors.py +0 -0
  347. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/models/temporal_models.py +0 -0
  348. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/performance.py +0 -0
  349. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/plotting/__init__.py +0 -0
  350. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/plotting/graph.py +0 -0
  351. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/plotting/layouts.py +0 -0
  352. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/plotting/mining.py +0 -0
  353. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/plotting/utils.py +0 -0
  354. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/reproducibility.py +0 -0
  355. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/__init__.py +0 -0
  356. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/algorithms/__init__.py +0 -0
  357. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/algorithms/actor_critic.py +0 -0
  358. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/algorithms/base.py +0 -0
  359. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/algorithms/baselines.py +0 -0
  360. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/algorithms/continuous.py +0 -0
  361. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/algorithms/dqn.py +0 -0
  362. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/algorithms/ppo.py +0 -0
  363. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/algorithms/reinforce.py +0 -0
  364. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/algorithms/replay_buffer.py +0 -0
  365. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/callbacks.py +0 -0
  366. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/config.py +0 -0
  367. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/environments/__init__.py +0 -0
  368. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/environments/base.py +0 -0
  369. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/environments/coloring.py +0 -0
  370. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/environments/continuous.py +0 -0
  371. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/environments/generation.py +0 -0
  372. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/environments/kg_reasoning.py +0 -0
  373. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/environments/max_cut.py +0 -0
  374. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/environments/navigation.py +0 -0
  375. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/environments/shortest_path.py +0 -0
  376. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/environments/vertex_cover.py +0 -0
  377. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/exploration/__init__.py +0 -0
  378. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/exploration/strategies.py +0 -0
  379. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/high_level_api.py +0 -0
  380. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/metrics.py +0 -0
  381. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/networks/__init__.py +0 -0
  382. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/networks/actor_critic.py +0 -0
  383. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/networks/policy.py +0 -0
  384. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/networks/projectors.py +0 -0
  385. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/networks/qnetwork.py +0 -0
  386. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/networks/value.py +0 -0
  387. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/rl/reports.py +0 -0
  388. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/sampling.py +0 -0
  389. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/sampling_loaders.py +0 -0
  390. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/sampling_negative.py +0 -0
  391. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/sparse.py +0 -0
  392. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/temporal/__init__.py +0 -0
  393. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/temporal/tgat.py +0 -0
  394. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/temporal/tgn.py +0 -0
  395. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/temporal/time_encoding.py +0 -0
  396. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/temporal_sampling.py +0 -0
  397. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/tracking.py +0 -0
  398. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/transforms/__init__.py +0 -0
  399. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/transforms/compose.py +0 -0
  400. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/transforms/features.py +0 -0
  401. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/transforms/graph.py +0 -0
  402. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/transforms/patch.py +0 -0
  403. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/transforms/positional.py +0 -0
  404. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/transforms/splits.py +0 -0
  405. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/ux/compare.py +0 -0
  406. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/ux/describe.py +0 -0
  407. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/ux/graph_construction.py +0 -0
  408. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/ux/leakage.py +0 -0
  409. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/ux/reproducible_ctx.py +0 -0
  410. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/ux/validation.py +0 -0
  411. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx/ux/workflow.py +0 -0
  412. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx.egg-info/dependency_links.txt +0 -0
  413. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx.egg-info/entry_points.txt +0 -0
  414. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx.egg-info/requires.txt +0 -0
  415. {tgraphx-1.4.0 → tgraphx-1.4.2}/tgraphx.egg-info/top_level.txt +0 -0
@@ -1,11 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tgraphx
3
- Version: 1.4.0
3
+ Version: 1.4.2
4
4
  Summary: Tensor-aware graph neural networks preserving spatial node feature layouts
5
5
  Author-email: Arash Sajjadi <arash.sajjadi@usask.ca>
6
6
  Maintainer-email: Arash Sajjadi <arash.sajjadi@usask.ca>
7
7
  License-Expression: MIT
8
- Project-URL: Homepage, https://github.com/arashsajjadi/TGraphX
8
+ Project-URL: Homepage, https://tgraphx.com
9
+ Project-URL: Source, https://github.com/arashsajjadi/TGraphX
9
10
  Project-URL: Repository, https://github.com/arashsajjadi/TGraphX
10
11
  Project-URL: Documentation, https://github.com/arashsajjadi/TGraphX/tree/main/docs
11
12
  Project-URL: Issues, https://github.com/arashsajjadi/TGraphX/issues
@@ -80,11 +81,13 @@ Dynamic: license-file
80
81
 
81
82
  **Preprint:** [TGraphX: Tensor-Aware Graph Neural Network for Multi-Dimensional Feature Learning](https://arxiv.org/abs/2504.03953) · *Sajjadi & Eramian, arXiv 2025*
82
83
 
83
- TGraphX is a **tensor-native graph intelligence framework** for research workflows that combine graph learning, graph mining, knowledge graphs, graph generation, evolutionary optimization, graph reinforcement learning, reproducibility, and dashboard-ready reporting — all in PyTorch, with no mandatory external dependencies.
84
+ **Official website:** [https://tgraphx.com](https://tgraphx.com)
85
+
86
+ TGraphX is a **tensor-native graph intelligence framework** for research workflows that combine graph learning, graph mining, knowledge graphs, graph generation, evolutionary optimization, graph reinforcement learning, reproducibility, and dashboard-ready reporting — all in PyTorch. The base package does not require PyG, DGL, OGB, PyKEEN, Stable-Baselines3, or RLlib; it depends only on the PyTorch stack and the lightweight runtime utilities declared in `pyproject.toml` (`torch`, `torchvision`, `pyyaml`).
84
87
 
85
88
  It preserves **multi-dimensional node/edge features** (`[C, H, W]`, `[C, D, H, W]`, `[D]`) through every message-passing step, supports scalable mini-batch samplers (GraphSAINT, Cluster-GCN), multimodal tensor-aware knowledge graphs, 13 graph RL algorithms, classical and neural graph generation, multi-objective evolutionary optimization, a local dashboard with offline HTML export, sklearn-like estimators, and a full benchmark + tutorial suite.
86
89
 
87
- **Quick links:** [Graph algorithms](docs/graph_algorithms.md) · [Graph mining](docs/graph_mining.md) · [Tensor GNNs](docs/vector_gnn.md) · [Sampling](docs/graphsaint.md) · [FeatureStore](docs/feature_store.md) · [KG](docs/knowledge_graphs.md) · [Dashboard](docs/dashboard.md) · [Easy Mode](docs/easy_mode.md) · [LLM guide](docs/llm_usage_guide.md)
90
+ **Quick links:** [Official website](https://tgraphx.com) · [Graph algorithms](docs/graph_algorithms.md) · [Graph mining](docs/graph_mining.md) · [Tensor GNNs](docs/vector_gnn.md) · [Sampling](docs/graphsaint.md) · [FeatureStore](docs/feature_store.md) · [KG](docs/knowledge_graphs.md) · [Dashboard](docs/dashboard.md) · [Easy Mode](docs/easy_mode.md) · [LLM guide](docs/llm_usage_guide.md)
88
91
 
89
92
  ---
90
93
 
@@ -142,6 +145,57 @@ Advanced users can always drop down to PyTorch: `result.model`, `result.graph`,
142
145
 
143
146
  ---
144
147
 
148
+ ## v1.4.1: final usability hardening
149
+
150
+ v1.4.1 adds one-call entry points for common workflows. All v1.4.0 and
151
+ v1.3.x syntax is preserved.
152
+
153
+ **Tensor node classification in one call.**
154
+ ```python
155
+ result = tgx.classify_nodes(
156
+ x=images, edge_index=edge_index, labels=y,
157
+ model="tensor_gcn", seed=42, device="auto",
158
+ )
159
+ print(result.metrics["val_accuracy"])
160
+ ```
161
+
162
+ **KG link prediction in one call.**
163
+ ```python
164
+ result = tgx.kg_completion(
165
+ triples=triples, num_entities=N, num_relations=R,
166
+ model="transe", seed=42,
167
+ )
168
+ ```
169
+
170
+ **Graph construction from any format.**
171
+ ```python
172
+ g = tgx.make_graph(x=x, edges=[(0,1),(1,2)], labels=y)
173
+ g = tgx.make_graph(x=x, adjacency=adj)
174
+ g = tgx.make_graph(networkx_graph=G)
175
+ ```
176
+
177
+ **Graph generation, optimization, and RL in one call.**
178
+ ```python
179
+ g = tgx.generate_graph("ba", num_nodes=100, m=3, node_shape=(8,), seed=42)
180
+
181
+ result = tgx.optimize_graph(objective="connectivity", algorithm="ga", num_nodes=30, seed=42)
182
+
183
+ rl = tgx.train_graph_rl(env="maxcut", algorithm="random", episodes=5, seed=42)
184
+ ```
185
+
186
+ **Troubleshooting.**
187
+ ```python
188
+ print(tgx.explain_error(error)) # returns actionable guidance
189
+ ```
190
+
191
+ **Package readiness.**
192
+ ```bash
193
+ python -m tgraphx readiness
194
+ python -m tgraphx list-datasets
195
+ ```
196
+
197
+ ---
198
+
145
199
  ## v1.4.0: user-friendly tensor-native workflows
146
200
 
147
201
  v1.4.0 keeps every canonical API stable while adding **mathematically-safe**
@@ -25,11 +25,13 @@
25
25
 
26
26
  **Preprint:** [TGraphX: Tensor-Aware Graph Neural Network for Multi-Dimensional Feature Learning](https://arxiv.org/abs/2504.03953) · *Sajjadi & Eramian, arXiv 2025*
27
27
 
28
- TGraphX is a **tensor-native graph intelligence framework** for research workflows that combine graph learning, graph mining, knowledge graphs, graph generation, evolutionary optimization, graph reinforcement learning, reproducibility, and dashboard-ready reporting — all in PyTorch, with no mandatory external dependencies.
28
+ **Official website:** [https://tgraphx.com](https://tgraphx.com)
29
+
30
+ TGraphX is a **tensor-native graph intelligence framework** for research workflows that combine graph learning, graph mining, knowledge graphs, graph generation, evolutionary optimization, graph reinforcement learning, reproducibility, and dashboard-ready reporting — all in PyTorch. The base package does not require PyG, DGL, OGB, PyKEEN, Stable-Baselines3, or RLlib; it depends only on the PyTorch stack and the lightweight runtime utilities declared in `pyproject.toml` (`torch`, `torchvision`, `pyyaml`).
29
31
 
30
32
  It preserves **multi-dimensional node/edge features** (`[C, H, W]`, `[C, D, H, W]`, `[D]`) through every message-passing step, supports scalable mini-batch samplers (GraphSAINT, Cluster-GCN), multimodal tensor-aware knowledge graphs, 13 graph RL algorithms, classical and neural graph generation, multi-objective evolutionary optimization, a local dashboard with offline HTML export, sklearn-like estimators, and a full benchmark + tutorial suite.
31
33
 
32
- **Quick links:** [Graph algorithms](docs/graph_algorithms.md) · [Graph mining](docs/graph_mining.md) · [Tensor GNNs](docs/vector_gnn.md) · [Sampling](docs/graphsaint.md) · [FeatureStore](docs/feature_store.md) · [KG](docs/knowledge_graphs.md) · [Dashboard](docs/dashboard.md) · [Easy Mode](docs/easy_mode.md) · [LLM guide](docs/llm_usage_guide.md)
34
+ **Quick links:** [Official website](https://tgraphx.com) · [Graph algorithms](docs/graph_algorithms.md) · [Graph mining](docs/graph_mining.md) · [Tensor GNNs](docs/vector_gnn.md) · [Sampling](docs/graphsaint.md) · [FeatureStore](docs/feature_store.md) · [KG](docs/knowledge_graphs.md) · [Dashboard](docs/dashboard.md) · [Easy Mode](docs/easy_mode.md) · [LLM guide](docs/llm_usage_guide.md)
33
35
 
34
36
  ---
35
37
 
@@ -87,6 +89,57 @@ Advanced users can always drop down to PyTorch: `result.model`, `result.graph`,
87
89
 
88
90
  ---
89
91
 
92
+ ## v1.4.1: final usability hardening
93
+
94
+ v1.4.1 adds one-call entry points for common workflows. All v1.4.0 and
95
+ v1.3.x syntax is preserved.
96
+
97
+ **Tensor node classification in one call.**
98
+ ```python
99
+ result = tgx.classify_nodes(
100
+ x=images, edge_index=edge_index, labels=y,
101
+ model="tensor_gcn", seed=42, device="auto",
102
+ )
103
+ print(result.metrics["val_accuracy"])
104
+ ```
105
+
106
+ **KG link prediction in one call.**
107
+ ```python
108
+ result = tgx.kg_completion(
109
+ triples=triples, num_entities=N, num_relations=R,
110
+ model="transe", seed=42,
111
+ )
112
+ ```
113
+
114
+ **Graph construction from any format.**
115
+ ```python
116
+ g = tgx.make_graph(x=x, edges=[(0,1),(1,2)], labels=y)
117
+ g = tgx.make_graph(x=x, adjacency=adj)
118
+ g = tgx.make_graph(networkx_graph=G)
119
+ ```
120
+
121
+ **Graph generation, optimization, and RL in one call.**
122
+ ```python
123
+ g = tgx.generate_graph("ba", num_nodes=100, m=3, node_shape=(8,), seed=42)
124
+
125
+ result = tgx.optimize_graph(objective="connectivity", algorithm="ga", num_nodes=30, seed=42)
126
+
127
+ rl = tgx.train_graph_rl(env="maxcut", algorithm="random", episodes=5, seed=42)
128
+ ```
129
+
130
+ **Troubleshooting.**
131
+ ```python
132
+ print(tgx.explain_error(error)) # returns actionable guidance
133
+ ```
134
+
135
+ **Package readiness.**
136
+ ```bash
137
+ python -m tgraphx readiness
138
+ python -m tgraphx list-datasets
139
+ ```
140
+
141
+ ---
142
+
90
143
  ## v1.4.0: user-friendly tensor-native workflows
91
144
 
92
145
  v1.4.0 keeps every canonical API stable while adding **mathematically-safe**
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  name = "tgraphx"
7
7
  # Keep this in sync with tgraphx/__init__.py::__version__
8
- version = "1.4.0"
8
+ version = "1.4.2"
9
9
  description = "Tensor-aware graph neural networks preserving spatial node feature layouts"
10
10
  readme = "README.md"
11
11
  requires-python = ">=3.10"
@@ -96,7 +96,8 @@ tgraphx-doctor = "tgraphx.__main__:main"
96
96
  tgraphx-info = "tgraphx.__main__:main"
97
97
 
98
98
  [project.urls]
99
- Homepage = "https://github.com/arashsajjadi/TGraphX"
99
+ Homepage = "https://tgraphx.com"
100
+ Source = "https://github.com/arashsajjadi/TGraphX"
100
101
  Repository = "https://github.com/arashsajjadi/TGraphX"
101
102
  Documentation = "https://github.com/arashsajjadi/TGraphX/tree/main/docs"
102
103
  Issues = "https://github.com/arashsajjadi/TGraphX/issues"
@@ -351,15 +351,30 @@ def test_nb35_mutag_workflow_with_edge_attr() -> None:
351
351
 
352
352
  def test_pyg_singleton_graph_label_normalized() -> None:
353
353
  """Regression: PyG MUTAG stores graph label as tensor([1]) (shape [1]).
354
- from_pyg_data should normalize this to scalar so cross_entropy works after batching."""
354
+ from_pyg_data should normalize this to scalar so cross_entropy works after batching.
355
+
356
+ This test only runs when MUTAG is already cached locally; it never
357
+ initiates a network download from the test suite. Set the env var
358
+ ``TGRAPHX_TESTS_ALLOW_NETWORK=1`` to opt back in to downloads.
359
+ """
355
360
  import importlib
361
+ import os
356
362
  pyg = importlib.util.find_spec("torch_geometric")
357
363
  if pyg is None:
358
364
  pytest.skip("torch_geometric not installed")
359
365
  from tgraphx.datasets import PyGTUDatasetAdapter
366
+ from tgraphx.datasets.cache import resolve_dataset_root
360
367
  from tgraphx import GraphDataLoader
361
368
 
362
- ds = PyGTUDatasetAdapter(name="MUTAG", download=True)
369
+ allow_net = os.environ.get("TGRAPHX_TESTS_ALLOW_NETWORK") == "1"
370
+ cached_root = resolve_dataset_root(None, "pyg/TUDataset") / "MUTAG"
371
+ has_raw = (cached_root / "raw").exists() or (cached_root / "processed").exists()
372
+ if not has_raw and not allow_net:
373
+ pytest.skip(
374
+ "MUTAG raw files not cached locally and "
375
+ "TGRAPHX_TESTS_ALLOW_NETWORK!=1; skipping to avoid network."
376
+ )
377
+ ds = PyGTUDatasetAdapter(name="MUTAG", download=allow_net)
363
378
  g = ds.get(0)
364
379
  # graph_label must be scalar tensor (shape []), not [1]
365
380
  assert g.graph_label.dim() == 0, (
@@ -0,0 +1,263 @@
1
+ """Regression tests for the v1.4.2 audit-fix release.
2
+
3
+ Each test pins down one of the validated audit findings so it cannot
4
+ silently regress. Tests prefer synthetic inputs and CPU-only behaviour
5
+ so they stay deterministic and offline-safe in CI.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ import subprocess
10
+ import sys
11
+
12
+ import pytest
13
+ import torch
14
+
15
+ import tgraphx
16
+ from tgraphx import Graph
17
+
18
+
19
+ # ── Codex/Composer TGX-AUDIT-002 / 001: make_graph + NetworkX ──────────────
20
+
21
+
22
+ def _require_nx():
23
+ try:
24
+ import networkx # noqa: F401
25
+ except ImportError:
26
+ pytest.skip("networkx not installed")
27
+ import networkx as nx
28
+ return nx
29
+
30
+
31
+ def test_make_graph_networkx_preserves_external_features() -> None:
32
+ nx = _require_nx()
33
+ G = nx.path_graph(3)
34
+ x = torch.arange(15, dtype=torch.float32).reshape(3, 5)
35
+ g = tgraphx.make_graph(x=x, networkx_graph=G)
36
+ assert g.node_features.shape == (3, 5)
37
+ # Original tensor content survives (no zero placeholder).
38
+ assert torch.equal(g.node_features, x)
39
+ # Topology is non-trivial (path 0-1-2, undirected => 4 directed edges).
40
+ assert g.num_edges == 4
41
+
42
+
43
+ def test_make_graph_networkx_preserves_labels() -> None:
44
+ nx = _require_nx()
45
+ G = nx.path_graph(3)
46
+ y = torch.tensor([1, 0, 2], dtype=torch.long)
47
+ g = tgraphx.make_graph(x=torch.zeros(3, 4), networkx_graph=G, labels=y)
48
+ assert g.node_labels is not None
49
+ assert torch.equal(g.node_labels, y)
50
+
51
+
52
+ def test_make_graph_networkx_rejects_shape_mismatch() -> None:
53
+ nx = _require_nx()
54
+ G = nx.path_graph(3)
55
+ with pytest.raises(ValueError, match="rows but NetworkX graph"):
56
+ tgraphx.make_graph(x=torch.zeros(4, 2), networkx_graph=G)
57
+
58
+
59
+ # ── Codex TGX-AUDIT-001 / Composer TGX-AUDIT-005: public_api registry ──────
60
+
61
+
62
+ def test_public_api_registry_includes_v141_helpers() -> None:
63
+ expected = {
64
+ "classify_nodes",
65
+ "kg_completion",
66
+ "make_graph",
67
+ "generate_graph",
68
+ "optimize_graph",
69
+ "train_graph_rl",
70
+ "audit_package_readiness",
71
+ }
72
+ for name in expected:
73
+ # Should not raise; must report a non-empty stability level.
74
+ level = tgraphx.api_status(name)
75
+ assert level, f"api_status({name!r}) returned empty level"
76
+
77
+
78
+ def test_public_api_registry_recognizes_v141_aliases() -> None:
79
+ # `build_graph` is an alias of `make_graph`; api_status must resolve it.
80
+ level = tgraphx.api_status("build_graph")
81
+ assert level, "api_status('build_graph') returned empty level"
82
+ aliases = tgraphx.list_aliases("make_graph")
83
+ assert "build_graph" in aliases, aliases
84
+
85
+
86
+ # ── Codex TGX-AUDIT-003 / Composer TGX-AUDIT-004 / 010: top-level __all__ ──
87
+
88
+
89
+ def test_v141_aliases_in_top_level_all() -> None:
90
+ expected = {
91
+ "generate", "graph_generation_report", "compare_generated_graphs",
92
+ "generation_metrics", "graph_evolution", "run_evolution", "run_rl",
93
+ # Composer TGX-AUDIT-010 additions
94
+ "KnowledgeGraph", "KGTrainer", "KGTrainingConfig",
95
+ "run_graph_generation", "run_evolutionary_optimization", "run_graph_rl",
96
+ }
97
+ missing = expected.difference(tgraphx.__all__)
98
+ assert not missing, f"Missing from tgraphx.__all__: {sorted(missing)}"
99
+
100
+
101
+ # ── Codex TGX-AUDIT-005: no fake `tgraphx[vision]` extra ───────────────────
102
+
103
+
104
+ def test_optional_dependency_messages_reference_existing_extras() -> None:
105
+ msg = tgraphx.explain_error("missing optional torchvision")
106
+ assert "tgraphx[vision]" not in msg, (
107
+ "explain_error must not suggest a non-existing tgraphx[vision] extra "
108
+ "(torchvision is a mandatory dependency)."
109
+ )
110
+
111
+
112
+ # ── Codex TGX-AUDIT-009: serialization preserves edge_labels & graph_features
113
+
114
+
115
+ def test_graph_save_load_preserves_edge_labels_and_graph_features(tmp_path) -> None:
116
+ ei = torch.tensor([[0, 1], [1, 2]], dtype=torch.long)
117
+ g = Graph(
118
+ node_features=torch.randn(3, 4),
119
+ edge_index=ei,
120
+ edge_labels=torch.tensor([7, 9]),
121
+ graph_features=torch.tensor([1.0, 2.0, 3.0]),
122
+ )
123
+ p = tmp_path / "g.tgx"
124
+ g.save(p)
125
+ loaded = Graph.load(p)
126
+ assert torch.equal(loaded.edge_labels, g.edge_labels)
127
+ assert torch.equal(loaded.graph_features, g.graph_features)
128
+
129
+
130
+ def test_graph_save_load_backward_compat_missing_new_fields(tmp_path) -> None:
131
+ """An old-format payload without the new keys must still load."""
132
+ from tgraphx.ux.serialization import _payload_to_graph
133
+
134
+ payload = {
135
+ "node_features": torch.zeros(2, 3),
136
+ "edge_index": torch.tensor([[0], [1]], dtype=torch.long),
137
+ }
138
+ g = _payload_to_graph(payload)
139
+ assert g.num_nodes == 2 and g.num_edges == 1
140
+ assert g.edge_labels is None
141
+ assert g.graph_features is None
142
+
143
+
144
+ # ── Codex TGX-AUDIT-010: training _unpack_batch with edge_index=None ───────
145
+
146
+
147
+ def test_unpack_batch_raises_clear_error_for_none_edge_index() -> None:
148
+ from tgraphx.training import _unpack_batch
149
+ from tgraphx import Graph, GraphBatch
150
+
151
+ # Build a batch whose edge_index is None (manually patched after creation).
152
+ g = Graph(node_features=torch.zeros(3, 4),
153
+ edge_index=torch.tensor([[0, 1], [1, 2]], dtype=torch.long),
154
+ y=torch.tensor([0, 1, 0]))
155
+ batch = GraphBatch([g])
156
+ batch.edge_index = None
157
+ with pytest.raises(ValueError, match="edge_index is None"):
158
+ _unpack_batch(batch, torch.device("cpu"))
159
+
160
+
161
+ # ── Codex TGX-AUDIT-011: Graph.num_classes on empty labels ─────────────────
162
+
163
+
164
+ def test_num_classes_empty_labels_returns_zero() -> None:
165
+ g = Graph(node_features=torch.zeros(0, 4),
166
+ edge_index=torch.zeros(2, 0, dtype=torch.long),
167
+ y=torch.zeros(0, dtype=torch.long))
168
+ assert g.num_classes == 0
169
+
170
+
171
+ # ── Codex TGX-AUDIT-012: from_adjacency rejects non-square sparse adjacency
172
+
173
+
174
+ def test_from_adjacency_rejects_nonsquare_sparse() -> None:
175
+ try:
176
+ import scipy.sparse as sp
177
+ except ImportError:
178
+ pytest.skip("scipy not installed")
179
+ adj = sp.csr_matrix([[1, 0, 0], [0, 1, 0]]) # 2x3, not square
180
+ with pytest.raises(ValueError, match="square"):
181
+ Graph.from_adjacency(adj)
182
+
183
+
184
+ # ── Codex TGX-AUDIT-013: Graph.to() also moves masks in metadata ───────────
185
+
186
+
187
+ def test_graph_to_moves_masks_in_metadata() -> None:
188
+ g = Graph(
189
+ node_features=torch.zeros(3, 4),
190
+ edge_index=torch.tensor([[0, 1], [1, 2]], dtype=torch.long),
191
+ metadata={"masks": {"train": torch.tensor([True, False, True])}},
192
+ )
193
+ # CPU->CPU is the only universally-available transition; we assert that
194
+ # Graph.to() touches the mask without raising and the dtype/values stay.
195
+ g.to(torch.device("cpu"))
196
+ m = g.train_mask
197
+ assert m is not None
198
+ assert m.device.type == "cpu"
199
+ assert m.tolist() == [True, False, True]
200
+
201
+
202
+ # ── Codex TGX-AUDIT-016: train_graph_rl forwards max_steps ─────────────────
203
+
204
+
205
+ def test_train_graph_rl_max_steps_is_recorded() -> None:
206
+ result = tgraphx.train_graph_rl(
207
+ env="max_cut",
208
+ algorithm="random",
209
+ episodes=2,
210
+ max_steps=7,
211
+ num_nodes=6,
212
+ seed=0,
213
+ fast_mode=False,
214
+ )
215
+ config = getattr(result, "config", None)
216
+ assert isinstance(config, dict)
217
+ assert config.get("max_steps") == 7
218
+
219
+
220
+ # ── Composer TGX-AUDIT-003: lazy torchvision import ────────────────────────
221
+
222
+
223
+ def test_torchvision_not_imported_eagerly() -> None:
224
+ code = (
225
+ "import sys, tgraphx;"
226
+ "import json; print(json.dumps({"
227
+ "'torchvision': 'torchvision' in sys.modules,"
228
+ "'torchvision_models': 'torchvision.models' in sys.modules}))"
229
+ )
230
+ out = subprocess.check_output([sys.executable, "-c", code]).decode()
231
+ last = out.strip().splitlines()[-1]
232
+ import json
233
+ info = json.loads(last)
234
+ assert info["torchvision"] is False, (
235
+ "`import tgraphx` should not eagerly import torchvision."
236
+ )
237
+ assert info["torchvision_models"] is False
238
+
239
+
240
+ # ── Composer TGX-AUDIT-007: CLI list-methods regression ────────────────────
241
+
242
+
243
+ def test_cli_list_methods() -> None:
244
+ res = subprocess.run(
245
+ [sys.executable, "-m", "tgraphx", "list-methods"],
246
+ capture_output=True, text=True, timeout=60,
247
+ )
248
+ assert res.returncode == 0, f"stderr={res.stderr}"
249
+ # `list-methods` enumerates graph-generation methods registered by the
250
+ # generation subsystem. Two stable methods we ship since v0.7 are ER and BA.
251
+ assert "erdos_renyi" in res.stdout, res.stdout
252
+ assert "barabasi_albert" in res.stdout, res.stdout
253
+
254
+
255
+ # ── Composer TGX-AUDIT-015: readiness dependency classification ────────────
256
+
257
+
258
+ def test_readiness_dependency_classification() -> None:
259
+ report = tgraphx.audit_package_readiness()
260
+ assert "required_dependencies" in report
261
+ # torchvision must be in required, not optional, per pyproject.toml.
262
+ assert "torchvision" in report["required_dependencies"]
263
+ assert "torchvision" not in report.get("optional_dependencies", {})