graphdatascience 1.17a1__tar.gz → 1.18__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 (421) hide show
  1. graphdatascience-1.18/MANIFEST.in +3 -0
  2. {graphdatascience-1.17a1/graphdatascience.egg-info → graphdatascience-1.18}/PKG-INFO +13 -28
  3. graphdatascience-1.18/pyproject.toml +175 -0
  4. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/algo/algo_proc_runner.py +5 -3
  5. graphdatascience-1.18/src/graphdatascience/arrow_client/arrow_base_model.py +12 -0
  6. graphdatascience-1.18/src/graphdatascience/arrow_client/authenticated_flight_client.py +254 -0
  7. graphdatascience-1.18/src/graphdatascience/arrow_client/middleware/auth_middleware.py +63 -0
  8. graphdatascience-1.18/src/graphdatascience/arrow_client/middleware/user_agent_middleware.py +26 -0
  9. graphdatascience-1.18/src/graphdatascience/arrow_client/v1/data_mapper_utils.py +19 -0
  10. graphdatascience-1.18/src/graphdatascience/arrow_client/v1/gds_arrow_client.py +652 -0
  11. graphdatascience-1.18/src/graphdatascience/arrow_client/v2/api_types.py +49 -0
  12. graphdatascience-1.18/src/graphdatascience/arrow_client/v2/data_mapper_utils.py +19 -0
  13. graphdatascience-1.18/src/graphdatascience/arrow_client/v2/gds_arrow_client.py +529 -0
  14. graphdatascience-1.18/src/graphdatascience/arrow_client/v2/job_client.py +105 -0
  15. graphdatascience-1.18/src/graphdatascience/arrow_client/v2/mutation_client.py +52 -0
  16. graphdatascience-1.18/src/graphdatascience/arrow_client/v2/remote_write_back_client.py +83 -0
  17. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/call_parameters.py +2 -2
  18. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/endpoints.py +1 -1
  19. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/error/cypher_warning_handler.py +11 -0
  20. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/base_graph_proc_runner.py +18 -17
  21. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/graph_alpha_proc_runner.py +3 -4
  22. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/graph_beta_proc_runner.py +2 -2
  23. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/graph_create_result.py +5 -5
  24. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/graph_cypher_runner.py +4 -4
  25. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/graph_entity_ops_runner.py +16 -14
  26. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/graph_export_runner.py +7 -5
  27. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/graph_object.py +6 -6
  28. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/graph_project_runner.py +1 -1
  29. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/graph_remote_project_runner.py +4 -6
  30. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/graph_sample_runner.py +3 -1
  31. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/nx_loader.py +3 -3
  32. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/ogb_loader.py +8 -8
  33. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph_data_science.py +67 -38
  34. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/model/graphsage_model.py +4 -2
  35. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/model/model_beta_proc_runner.py +6 -4
  36. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/model/model_proc_runner.py +3 -3
  37. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/model/node_classification_model.py +4 -2
  38. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/model/simple_rel_embedding_model.py +6 -4
  39. graphdatascience-1.18/src/graphdatascience/model/v2/model.py +58 -0
  40. graphdatascience-1.18/src/graphdatascience/model/v2/model_api.py +45 -0
  41. graphdatascience-1.18/src/graphdatascience/model/v2/model_details.py +20 -0
  42. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/pipeline/classification_training_pipeline.py +5 -3
  43. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/pipeline/lp_pipeline_create_runner.py +3 -1
  44. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/pipeline/lp_training_pipeline.py +3 -1
  45. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/pipeline/nc_training_pipeline.py +6 -4
  46. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/pipeline/nr_pipeline_create_runner.py +4 -2
  47. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/pipeline/nr_training_pipeline.py +8 -6
  48. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/pipeline/pipeline_beta_proc_runner.py +6 -4
  49. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/pipeline/pipeline_proc_runner.py +6 -4
  50. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/pipeline/training_pipeline.py +12 -10
  51. graphdatascience-1.18/src/graphdatascience/plugin_v2_endpoints.py +454 -0
  52. graphdatascience-1.18/src/graphdatascience/procedure_surface/__init__.py +3 -0
  53. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/__init__.py +3 -0
  54. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/base_result.py +9 -0
  55. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/catalog/__init__.py +77 -0
  56. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/catalog/catalog_endpoints.py +273 -0
  57. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/catalog/graph_api.py +174 -0
  58. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/catalog/graph_backend.py +19 -0
  59. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/catalog/graph_info.py +40 -0
  60. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/catalog/graph_sampling_endpoints.py +172 -0
  61. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/catalog/node_label_endpoints.py +112 -0
  62. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/catalog/node_properties_endpoints.py +172 -0
  63. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/catalog/relationships_endpoints.py +313 -0
  64. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/catalog/scale_properties_endpoints.py +289 -0
  65. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/catalog/scaler_config.py +11 -0
  66. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/centrality/__init__.py +93 -0
  67. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/centrality/articlerank_endpoints.py +385 -0
  68. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/centrality/articulationpoints_endpoints.py +245 -0
  69. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/centrality/betweenness_endpoints.py +302 -0
  70. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/centrality/celf_endpoints.py +311 -0
  71. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/centrality/closeness_endpoints.py +275 -0
  72. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/centrality/closeness_harmonic_endpoints.py +260 -0
  73. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/centrality/degree_endpoints.py +295 -0
  74. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/centrality/eigenvector_endpoints.py +374 -0
  75. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/centrality/pagerank_endpoints.py +378 -0
  76. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/__init__.py +148 -0
  77. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/clique_counting_endpoints.py +239 -0
  78. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/conductance_endpoints.py +58 -0
  79. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/hdbscan_endpoints.py +330 -0
  80. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/k1coloring_endpoints.py +289 -0
  81. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/kcore_endpoints.py +250 -0
  82. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/kmeans_endpoints.py +390 -0
  83. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/labelpropagation_endpoints.py +336 -0
  84. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/leiden_endpoints.py +400 -0
  85. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/local_clustering_coefficient_endpoints.py +280 -0
  86. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/louvain_endpoints.py +370 -0
  87. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/maxkcut_endpoints.py +199 -0
  88. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/modularity_optimization_endpoints.py +355 -0
  89. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/scc_endpoints.py +267 -0
  90. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/sllpa_endpoints.py +283 -0
  91. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/triangle_count_endpoints.py +302 -0
  92. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/community/wcc_endpoints.py +313 -0
  93. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/config_endpoints.py +104 -0
  94. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/default_values.py +2 -0
  95. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/estimation_result.py +21 -0
  96. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/model/graphsage_model.py +261 -0
  97. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/node_embedding/__init__.py +45 -0
  98. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/node_embedding/fastrp_endpoints.py +358 -0
  99. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/node_embedding/graphsage_endpoints.py +210 -0
  100. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/node_embedding/graphsage_predict_endpoints.py +226 -0
  101. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/node_embedding/graphsage_train_endpoints.py +153 -0
  102. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/node_embedding/hashgnn_endpoints.py +271 -0
  103. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/node_embedding/node2vec_endpoints.py +381 -0
  104. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/__init__.py +101 -0
  105. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/all_shortest_path_endpoints.py +121 -0
  106. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/dag_endpoints.py +17 -0
  107. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/dijkstra_endpoints.py +256 -0
  108. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/k_spanning_tree_endpoints.py +76 -0
  109. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/longest_path_endpoints.py +54 -0
  110. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/max_flow_endpoints.py +297 -0
  111. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/prize_steiner_tree_endpoints.py +286 -0
  112. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/shortest_path_endpoints.py +38 -0
  113. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/single_source_bellman_ford_endpoints.py +289 -0
  114. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/single_source_delta_endpoints.py +295 -0
  115. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/single_source_dijkstra_endpoints.py +226 -0
  116. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/source_target_astar_endpoints.py +258 -0
  117. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/source_target_dijkstra_endpoints.py +234 -0
  118. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/source_target_yens_endpoints.py +254 -0
  119. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/spanning_tree_endpoints.py +298 -0
  120. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/pathfinding/steiner_tree_endpoints.py +331 -0
  121. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/similarity/__init__.py +29 -0
  122. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/similarity/knn_endpoints.py +385 -0
  123. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/similarity/knn_filtered_endpoints.py +436 -0
  124. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/similarity/knn_results.py +44 -0
  125. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/similarity/node_similarity_endpoints.py +380 -0
  126. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/similarity/node_similarity_filtered_endpoints.py +404 -0
  127. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/similarity/node_similarity_results.py +35 -0
  128. graphdatascience-1.18/src/graphdatascience/procedure_surface/api/system_endpoints.py +26 -0
  129. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/catalog/__init__.py +3 -0
  130. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/catalog/catalog_arrow_endpoints.py +356 -0
  131. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/catalog/graph_backend_arrow.py +31 -0
  132. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/catalog/graph_ops_arrow.py +26 -0
  133. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/catalog/graph_sampling_arrow_endpoints.py +107 -0
  134. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/catalog/node_label_arrow_endpoints.py +91 -0
  135. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/catalog/node_properties_arrow_endpoints.py +145 -0
  136. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/catalog/relationship_arrow_endpoints.py +232 -0
  137. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/catalog/scale_properties_arrow_endpoints.py +184 -0
  138. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/centrality/articlerank_arrow_endpoints.py +222 -0
  139. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/centrality/articulationpoints_arrow_endpoints.py +153 -0
  140. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/centrality/betweenness_arrow_endpoints.py +186 -0
  141. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/centrality/celf_arrow_endpoints.py +191 -0
  142. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/centrality/closeness_arrow_endpoints.py +167 -0
  143. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/centrality/closeness_harmonic_arrow_endpoints.py +155 -0
  144. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/centrality/degree_arrow_endpoints.py +170 -0
  145. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/centrality/eigenvector_arrow_endpoints.py +212 -0
  146. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/centrality/pagerank_arrow_endpoints.py +226 -0
  147. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/clique_counting_arrow_endpoints.py +159 -0
  148. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/conductance_arrow_endpoints.py +48 -0
  149. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/hdbscan_arrow_endpoints.py +210 -0
  150. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/k1coloring_arrow_endpoints.py +183 -0
  151. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/kcore_arrow_endpoints.py +154 -0
  152. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/kmeans_arrow_endpoints.py +249 -0
  153. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/labelpropagation_arrow_endpoints.py +217 -0
  154. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/leiden_arrow_endpoints.py +254 -0
  155. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/local_clustering_coefficient_arrow_endpoints.py +195 -0
  156. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/louvain_arrow_endpoints.py +225 -0
  157. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/maxkcut_arrow_endpoints.py +128 -0
  158. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/modularity_optimization_arrow_endpoints.py +231 -0
  159. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/scc_arrow_endpoints.py +165 -0
  160. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/sllpa_arrow_endpoints.py +190 -0
  161. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/triangle_count_arrow_endpoints.py +182 -0
  162. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community/wcc_arrow_endpoints.py +194 -0
  163. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/config_arrow_endpoints.py +87 -0
  164. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/endpoints_helper_base.py +156 -0
  165. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/model_api_arrow.py +57 -0
  166. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/node_embedding/fastrp_arrow_endpoints.py +230 -0
  167. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/node_embedding/graphsage_predict_arrow_endpoints.py +164 -0
  168. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/node_embedding/graphsage_train_arrow_endpoints.py +166 -0
  169. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/node_embedding/hashgnn_arrow_endpoints.py +216 -0
  170. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/node_embedding/node2vec_arrow_endpoints.py +259 -0
  171. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/node_property_endpoints.py +33 -0
  172. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/all_shortest_path_arrow_endpoints.py +98 -0
  173. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/dag_arrow_endpoints.py +21 -0
  174. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/dijkstra_arrow_endpoints.py +172 -0
  175. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/k_spanning_tree_arrow_endpoints.py +67 -0
  176. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/longest_path_arrow_endpoints.py +51 -0
  177. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/max_flow_arrow_endpoints.py +203 -0
  178. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/prize_steiner_tree_arrow_endpoints.py +192 -0
  179. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/shortest_path_arrow_endpoints.py +49 -0
  180. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/single_source_bellman_ford_arrow_endpoints.py +202 -0
  181. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/single_source_delta_arrow_endpoints.py +210 -0
  182. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/single_source_dijkstra_arrow_endpoints.py +169 -0
  183. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/source_target_astar_arrow_endpoints.py +189 -0
  184. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/source_target_dijkstra_arrow_endpoints.py +172 -0
  185. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/source_target_yens_arrow_endpoints.py +181 -0
  186. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/spanning_tree_arrow_endpoints.py +202 -0
  187. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding/steiner_tree_arrow_endpoints.py +222 -0
  188. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/relationship_endpoints_helper.py +43 -0
  189. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/similarity/knn_arrow_endpoints.py +283 -0
  190. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/similarity/knn_filtered_arrow_endpoints.py +299 -0
  191. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/similarity/node_similarity_arrow_endpoints.py +290 -0
  192. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/similarity/node_similarity_filtered_arrow_endpoints.py +298 -0
  193. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/stream_result_mapper.py +55 -0
  194. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/system_arrow_endpoints.py +24 -0
  195. graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/table_endpoints_helper.py +13 -0
  196. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/__init__.py +7 -0
  197. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/catalog/graph_backend_cypher.py +55 -0
  198. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/catalog/graph_sampling_cypher_endpoints.py +113 -0
  199. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/catalog/node_label_cypher_endpoints.py +78 -0
  200. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/catalog/node_properties_cypher_endpoints.py +125 -0
  201. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/catalog/relationship_cypher_endpoints.py +259 -0
  202. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/catalog/scale_properties_cypher_endpoints.py +200 -0
  203. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/catalog/utils.py +12 -0
  204. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/catalog_cypher_endpoints.py +251 -0
  205. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/centrality/articlerank_cypher_endpoints.py +242 -0
  206. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/centrality/articulationpoints_cypher_endpoints.py +172 -0
  207. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/centrality/betweenness_cypher_endpoints.py +198 -0
  208. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/centrality/celf_cypher_endpoints.py +210 -0
  209. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/centrality/closeness_cypher_endpoints.py +181 -0
  210. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/centrality/closeness_harmonic_cypher_endpoints.py +177 -0
  211. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/centrality/degree_cypher_endpoints.py +191 -0
  212. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/centrality/eigenvector_cypher_endpoints.py +235 -0
  213. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/centrality/pagerank_cypher_endpoints.py +247 -0
  214. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/clique_counting_cypher_endpoints.py +172 -0
  215. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/conductance_cypher_endpoints.py +45 -0
  216. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/hdbscan_cypher_endpoints.py +226 -0
  217. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/k1coloring_cypher_endpoints.py +194 -0
  218. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/kcore_cypher_endpoints.py +171 -0
  219. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/kmeans_cypher_endpoints.py +263 -0
  220. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/labelpropagation_cypher_endpoints.py +230 -0
  221. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/leiden_cypher_endpoints.py +268 -0
  222. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/local_clustering_coefficient_cypher_endpoints.py +191 -0
  223. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/louvain_cypher_endpoints.py +239 -0
  224. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/maxkcut_cypher_endpoints.py +128 -0
  225. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/modularity_optimization_cypher_endpoints.py +244 -0
  226. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/scc_cypher_endpoints.py +181 -0
  227. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/sllpa_cypher_endpoints.py +208 -0
  228. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/triangle_count_cypher_endpoints.py +180 -0
  229. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community/wcc_cypher_endpoints.py +210 -0
  230. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/config_cypher_endpoints.py +109 -0
  231. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/estimation_utils.py +60 -0
  232. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/model_api_cypher.py +49 -0
  233. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/node_embedding/fastrp_cypher_endpoints.py +251 -0
  234. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/node_embedding/graphsage_predict_cypher_endpoints.py +161 -0
  235. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/node_embedding/graphsage_train_cypher_endpoints.py +156 -0
  236. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/node_embedding/hashgnn_cypher_endpoints.py +223 -0
  237. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/node_embedding/node2vec_cypher_endpoints.py +260 -0
  238. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/all_shortest_path_cypher_endpoints.py +90 -0
  239. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/dag_cypher_endpoints.py +18 -0
  240. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/dijkstra_cypher_endpoints.py +164 -0
  241. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/k_spanning_tree_cypher_endpoints.py +57 -0
  242. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/longest_path_cypher_endpoints.py +48 -0
  243. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/max_flow_cypher_endpoints.py +204 -0
  244. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/prize_steiner_tree_cypher_endpoints.py +189 -0
  245. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/shortest_path_cypher_endpoints.py +44 -0
  246. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/single_source_bellman_ford_cypher_endpoints.py +198 -0
  247. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/single_source_delta_cypher_endpoints.py +204 -0
  248. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/single_source_dijkstra_cypher_endpoints.py +160 -0
  249. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/source_target_astar_cypher_endpoints.py +180 -0
  250. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/source_target_dijkstra_cypher_endpoints.py +164 -0
  251. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/source_target_yens_cypher_endpoints.py +172 -0
  252. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/spanning_tree_cypher_endpoints.py +199 -0
  253. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding/steiner_tree_cypher_endpoints.py +219 -0
  254. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/similarity/knn_cypher_endpoints.py +275 -0
  255. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/similarity/knn_filtered_cypher_endpoints.py +291 -0
  256. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/similarity/node_similarity_cypher_endpoints.py +273 -0
  257. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/similarity/node_similarity_filtered_cypher_endpoints.py +287 -0
  258. graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/system_cypher_endpoints.py +23 -0
  259. graphdatascience-1.18/src/graphdatascience/procedure_surface/utils/__init__.py +0 -0
  260. graphdatascience-1.18/src/graphdatascience/procedure_surface/utils/config_converter.py +38 -0
  261. graphdatascience-1.18/src/graphdatascience/procedure_surface/utils/result_utils.py +41 -0
  262. graphdatascience-1.18/src/graphdatascience/py.typed +0 -0
  263. graphdatascience-1.18/src/graphdatascience/query_runner/__init__.py +0 -0
  264. graphdatascience-1.18/src/graphdatascience/query_runner/arrow_authentication/__init__.py +3 -0
  265. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/arrow_graph_constructor.py +5 -4
  266. graphdatascience-1.18/src/graphdatascience/query_runner/arrow_info/__init__.py +5 -0
  267. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/arrow_query_runner.py +27 -24
  268. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/cypher_graph_constructor.py +9 -10
  269. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/gds_arrow_client.py +99 -94
  270. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/neo4j_query_runner.py +70 -47
  271. graphdatascience-1.18/src/graphdatascience/query_runner/progress/__init__.py +0 -0
  272. graphdatascience-1.18/src/graphdatascience/query_runner/progress/progress_bar.py +123 -0
  273. graphdatascience-1.18/src/graphdatascience/query_runner/progress/progress_provider.py +23 -0
  274. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/progress/query_progress_logger.py +23 -54
  275. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/progress/query_progress_provider.py +3 -3
  276. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/progress/static_progress_provider.py +1 -3
  277. graphdatascience-1.18/src/graphdatascience/query_runner/protocol/__init__.py +0 -0
  278. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/protocol/project_protocols.py +26 -21
  279. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/protocol/write_protocols.py +41 -14
  280. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/query_runner.py +16 -16
  281. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/session_query_runner.py +29 -33
  282. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/standalone_session_query_runner.py +18 -17
  283. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/termination_flag.py +2 -3
  284. graphdatascience-1.18/src/graphdatascience/resources/__init__.py +0 -0
  285. graphdatascience-1.18/src/graphdatascience/resources/cora/__init__.py +0 -0
  286. graphdatascience-1.18/src/graphdatascience/resources/imdb/__init__.py +0 -0
  287. graphdatascience-1.18/src/graphdatascience/resources/karate/__init__.py +0 -0
  288. graphdatascience-1.18/src/graphdatascience/resources/lastfm/__init__.py +0 -0
  289. graphdatascience-1.18/src/graphdatascience/retry_utils/__init__.py +0 -0
  290. graphdatascience-1.18/src/graphdatascience/retry_utils/neo4j_retry_helper.py +12 -0
  291. graphdatascience-1.18/src/graphdatascience/retry_utils/retry_config.py +145 -0
  292. graphdatascience-1.18/src/graphdatascience/semantic_version/__init__.py +0 -0
  293. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/semantic_version/semantic_version.py +14 -3
  294. graphdatascience-1.18/src/graphdatascience/server_version/__init__.py +0 -0
  295. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/server_version/compatible_with.py +2 -2
  296. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/server_version/server_version.py +3 -0
  297. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/__init__.py +2 -0
  298. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/aura_api.py +16 -14
  299. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/aura_api_responses.py +7 -7
  300. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/aura_graph_data_science.py +36 -17
  301. graphdatascience-1.18/src/graphdatascience/session/aurads_sessions.py +0 -0
  302. graphdatascience-1.18/src/graphdatascience/session/dbms/__init__.py +0 -0
  303. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/dbms/protocol_resolver.py +2 -4
  304. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/dbms_connection_info.py +5 -6
  305. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/dedicated_sessions.py +18 -18
  306. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/gds_sessions.py +18 -18
  307. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/region_suggester.py +2 -2
  308. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/session_info.py +10 -11
  309. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/session_sizes.py +1 -2
  310. graphdatascience-1.18/src/graphdatascience/session/session_v2_endpoints.py +493 -0
  311. graphdatascience-1.18/src/graphdatascience/system/__init__.py +0 -0
  312. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/system/config_endpoints.py +3 -3
  313. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/system/system_endpoints.py +12 -10
  314. graphdatascience-1.18/src/graphdatascience/topological_lp/__init__.py +0 -0
  315. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/topological_lp/topological_lp_alpha_runner.py +2 -2
  316. graphdatascience-1.18/src/graphdatascience/topological_lp/topological_lp_runner.py +62 -0
  317. graphdatascience-1.18/src/graphdatascience/utils/__init__.py +0 -0
  318. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/utils/util_proc_runner.py +24 -0
  319. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/version.py +1 -1
  320. {graphdatascience-1.17a1 → graphdatascience-1.18/src/graphdatascience.egg-info}/PKG-INFO +13 -28
  321. graphdatascience-1.18/src/graphdatascience.egg-info/SOURCES.txt +408 -0
  322. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience.egg-info/requires.txt +5 -5
  323. graphdatascience-1.17a1/MANIFEST.in +0 -9
  324. graphdatascience-1.17a1/graphdatascience/procedure_surface/arrow/wcc_arrow_endpoints.py +0 -191
  325. graphdatascience-1.17a1/graphdatascience/query_runner/progress/progress_provider.py +0 -18
  326. graphdatascience-1.17a1/graphdatascience/retry_utils/retry_config.py +0 -12
  327. graphdatascience-1.17a1/graphdatascience.egg-info/SOURCES.txt +0 -165
  328. graphdatascience-1.17a1/pyproject.toml +0 -55
  329. graphdatascience-1.17a1/requirements/base/base.txt +0 -11
  330. graphdatascience-1.17a1/requirements/base/networkx.txt +0 -1
  331. graphdatascience-1.17a1/requirements/base/ogb.txt +0 -1
  332. graphdatascience-1.17a1/requirements/base/rust-ext.txt +0 -2
  333. graphdatascience-1.17a1/setup.py +0 -64
  334. {graphdatascience-1.17a1 → graphdatascience-1.18}/LICENSE +0 -0
  335. {graphdatascience-1.17a1 → graphdatascience-1.18}/README.md +0 -0
  336. {graphdatascience-1.17a1 → graphdatascience-1.18}/setup.cfg +0 -0
  337. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/__init__.py +0 -0
  338. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/algo/__init__.py +0 -0
  339. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/algo/algo_endpoints.py +0 -0
  340. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/algo/single_mode_algo_endpoints.py +0 -0
  341. {graphdatascience-1.17a1/graphdatascience/error → graphdatascience-1.18/src/graphdatascience/arrow_client}/__init__.py +0 -0
  342. {graphdatascience-1.17a1/graphdatascience/query_runner → graphdatascience-1.18/src/graphdatascience/arrow_client}/arrow_authentication.py +0 -0
  343. {graphdatascience-1.17a1/graphdatascience/query_runner → graphdatascience-1.18/src/graphdatascience/arrow_client}/arrow_endpoint_version.py +0 -0
  344. {graphdatascience-1.17a1/graphdatascience/query_runner → graphdatascience-1.18/src/graphdatascience/arrow_client}/arrow_info.py +0 -0
  345. {graphdatascience-1.17a1/graphdatascience/graph → graphdatascience-1.18/src/graphdatascience/arrow_client/middleware}/__init__.py +0 -0
  346. {graphdatascience-1.17a1/graphdatascience/model → graphdatascience-1.18/src/graphdatascience/arrow_client/v1}/__init__.py +0 -0
  347. {graphdatascience-1.17a1/graphdatascience/pipeline → graphdatascience-1.18/src/graphdatascience/arrow_client/v2}/__init__.py +0 -0
  348. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/call_builder.py +0 -0
  349. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/caller_base.py +0 -0
  350. {graphdatascience-1.17a1/graphdatascience/procedure_surface → graphdatascience-1.18/src/graphdatascience/error}/__init__.py +0 -0
  351. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/error/client_only_endpoint.py +0 -0
  352. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/error/endpoint_suggester.py +0 -0
  353. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/error/gds_not_installed.py +0 -0
  354. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/error/illegal_attr_checker.py +0 -0
  355. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/error/unable_to_connect.py +0 -0
  356. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/error/uncallable_namespace.py +0 -0
  357. {graphdatascience-1.17a1/graphdatascience/procedure_surface/arrow → graphdatascience-1.18/src/graphdatascience/graph}/__init__.py +0 -0
  358. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/graph_endpoints.py +0 -0
  359. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/graph_proc_runner.py +0 -0
  360. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/graph_remote_proc_runner.py +0 -0
  361. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/graph/graph_type_check.py +0 -0
  362. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/ignored_server_endpoints.py +0 -0
  363. {graphdatascience-1.17a1/graphdatascience/query_runner → graphdatascience-1.18/src/graphdatascience/model}/__init__.py +0 -0
  364. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/model/link_prediction_model.py +0 -0
  365. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/model/model.py +0 -0
  366. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/model/model_alpha_proc_runner.py +0 -0
  367. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/model/model_endpoints.py +0 -0
  368. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/model/model_resolver.py +0 -0
  369. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/model/node_regression_model.py +0 -0
  370. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/model/pipeline_model.py +0 -0
  371. {graphdatascience-1.17a1/graphdatascience/query_runner/progress → graphdatascience-1.18/src/graphdatascience/model/v2}/__init__.py +0 -0
  372. /graphdatascience-1.17a1/graphdatascience/py.typed → /graphdatascience-1.18/src/graphdatascience/model/v2/graphsage_model.py +0 -0
  373. {graphdatascience-1.17a1/graphdatascience/query_runner/protocol → graphdatascience-1.18/src/graphdatascience/pipeline}/__init__.py +0 -0
  374. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/pipeline/nc_pipeline_create_runner.py +0 -0
  375. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/pipeline/pipeline_alpha_proc_runner.py +0 -0
  376. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/pipeline/pipeline_endpoints.py +0 -0
  377. {graphdatascience-1.17a1/graphdatascience/resources → graphdatascience-1.18/src/graphdatascience/procedure_surface/api/model}/__init__.py +0 -0
  378. {graphdatascience-1.17a1/graphdatascience/resources/cora → graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow}/__init__.py +0 -0
  379. {graphdatascience-1.17a1/graphdatascience/resources/imdb → graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/centrality}/__init__.py +0 -0
  380. {graphdatascience-1.17a1/graphdatascience/resources/karate → graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/community}/__init__.py +0 -0
  381. {graphdatascience-1.17a1/graphdatascience/resources/lastfm → graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/node_embedding}/__init__.py +0 -0
  382. {graphdatascience-1.17a1/graphdatascience/retry_utils → graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/pathfinding}/__init__.py +0 -0
  383. {graphdatascience-1.17a1/graphdatascience/semantic_version → graphdatascience-1.18/src/graphdatascience/procedure_surface/arrow/similarity}/__init__.py +0 -0
  384. {graphdatascience-1.17a1/graphdatascience/server_version → graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/catalog}/__init__.py +0 -0
  385. {graphdatascience-1.17a1/graphdatascience/session/dbms → graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/centrality}/__init__.py +0 -0
  386. {graphdatascience-1.17a1/graphdatascience/system → graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/community}/__init__.py +0 -0
  387. {graphdatascience-1.17a1/graphdatascience/topological_lp → graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/node_embedding}/__init__.py +0 -0
  388. {graphdatascience-1.17a1/graphdatascience/utils → graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/pathfinding}/__init__.py +0 -0
  389. /graphdatascience-1.17a1/graphdatascience/session/aurads_sessions.py → /graphdatascience-1.18/src/graphdatascience/procedure_surface/cypher/similarity/__init__.py +0 -0
  390. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/graph_constructor.py +0 -0
  391. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/protocol/status.py +0 -0
  392. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/query_runner/query_mode.py +0 -0
  393. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/cora/cora_nodes.parquet.gzip +0 -0
  394. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/cora/cora_rels.parquet.gzip +0 -0
  395. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/cora/serialize_cora.py +0 -0
  396. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/imdb/imdb_acted_in.parquet.gzip +0 -0
  397. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/imdb/imdb_actors.parquet.gzip +0 -0
  398. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/imdb/imdb_directed_in.parquet.gzip +0 -0
  399. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/imdb/imdb_directors.parquet.gzip +0 -0
  400. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/imdb/imdb_movies_with_genre.parquet.gzip +0 -0
  401. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/imdb/imdb_movies_without_genre.parquet.gzip +0 -0
  402. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/imdb/serialize_imdb.py +0 -0
  403. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/karate/karate_club.parquet.gzip +0 -0
  404. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/lastfm/artist_nodes.parquet.gzip +0 -0
  405. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/lastfm/serialize_lastfm.py +0 -0
  406. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/lastfm/user_friend_df_directed.parquet.gzip +0 -0
  407. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/lastfm/user_listen_artist_rels.parquet.gzip +0 -0
  408. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/lastfm/user_nodes.parquet.gzip +0 -0
  409. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/resources/lastfm/user_tag_artist_rels.parquet.gzip +0 -0
  410. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/retry_utils/retry_utils.py +0 -0
  411. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/algorithm_category.py +0 -0
  412. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/aura_api_token_authentication.py +0 -0
  413. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/cloud_location.py +0 -0
  414. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/session/dbms/protocol_version.py +0 -0
  415. /graphdatascience-1.17a1/graphdatascience/topological_lp/topological_lp_endpoints.py → /graphdatascience-1.18/src/graphdatascience/topological_lp/topological_lp_alpha_endpoints.py +0 -0
  416. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/utils/direct_util_endpoints.py +0 -0
  417. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/utils/util_node_property_func_runner.py +0 -0
  418. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience/utils/util_remote_proc_runner.py +0 -0
  419. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience.egg-info/dependency_links.txt +0 -0
  420. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience.egg-info/not-zip-safe +0 -0
  421. {graphdatascience-1.17a1 → graphdatascience-1.18/src}/graphdatascience.egg-info/top_level.txt +0 -0
@@ -0,0 +1,3 @@
1
+ prune graphdatascience/resources/cora/serialize_cora.py
2
+ prune graphdatascience/resources/imdb/serialize_imdb.py
3
+ prune graphdatascience/resources/lastfm/serialize_lastfm.py
@@ -1,22 +1,19 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: graphdatascience
3
- Version: 1.17a1
3
+ Version: 1.18
4
4
  Summary: A Python client for the Neo4j Graph Data Science (GDS) library
5
- Home-page: https://neo4j.com/product/graph-data-science/
6
- Author: Neo4j
7
- Author-email: team-gds@neo4j.org
8
- License: Apache License 2.0
5
+ Author-email: Neo4j <team-gds@neo4j.org>
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Homepage, https://neo4j.com/product/graph-data-science/
9
8
  Project-URL: Documentation, https://neo4j.com/docs/graph-data-science-client/current/
10
- Project-URL: Source, https://github.com/neo4j/graph-data-science-client
11
- Project-URL: Bug Tracker, https://github.com/neo4j/graph-data-science-client/issues
9
+ Project-URL: Repository, https://github.com/neo4j/graph-data-science-client
10
+ Project-URL: BugTracker, https://github.com/neo4j/graph-data-science-client/issues
12
11
  Classifier: Development Status :: 5 - Production/Stable
13
12
  Classifier: Intended Audience :: Developers
14
13
  Classifier: Intended Audience :: Science/Research
15
- Classifier: License :: OSI Approved :: Apache Software License
16
14
  Classifier: Operating System :: OS Independent
17
15
  Classifier: Programming Language :: Python :: 3
18
16
  Classifier: Programming Language :: Python :: 3 :: Only
19
- Classifier: Programming Language :: Python :: 3.9
20
17
  Classifier: Programming Language :: Python :: 3.10
21
18
  Classifier: Programming Language :: Python :: 3.11
22
19
  Classifier: Programming Language :: Python :: 3.12
@@ -25,39 +22,27 @@ Classifier: Topic :: Database
25
22
  Classifier: Topic :: Scientific/Engineering
26
23
  Classifier: Topic :: Software Development
27
24
  Classifier: Typing :: Typed
28
- Requires-Python: >=3.9
25
+ Requires-Python: >=3.10
29
26
  Description-Content-Type: text/markdown
30
27
  License-File: LICENSE
31
28
  Requires-Dist: multimethod<3.0,>=1.0
32
- Requires-Dist: neo4j<6.0,>=4.4.12
33
- Requires-Dist: numpy<2.3
29
+ Requires-Dist: neo4j<7.0,>=4.4.12
30
+ Requires-Dist: numpy<2.4
34
31
  Requires-Dist: pandas<3.0,>=1.0
35
- Requires-Dist: pyarrow<21.0,>=17.0
32
+ Requires-Dist: pyarrow<23.0,>=17.0
36
33
  Requires-Dist: textdistance<5.0,>=4.0
37
34
  Requires-Dist: tqdm<5.0,>=4.0
38
35
  Requires-Dist: typing-extensions<5.0,>=4.0
39
36
  Requires-Dist: requests
40
37
  Requires-Dist: tenacity>=9.0
41
38
  Requires-Dist: pydantic>=2.11
42
- Provides-Extra: ogb
43
- Requires-Dist: ogb<2.0,>=1.0; extra == "ogb"
44
39
  Provides-Extra: networkx
45
40
  Requires-Dist: networkx<4.0,>=2.0; extra == "networkx"
41
+ Provides-Extra: ogb
42
+ Requires-Dist: ogb<2.0,>=1.0; extra == "ogb"
46
43
  Provides-Extra: rust-ext
47
- Requires-Dist: neo4j-rust-ext<6.0,>=4.4.12; extra == "rust-ext"
48
- Dynamic: author
49
- Dynamic: author-email
50
- Dynamic: classifier
51
- Dynamic: description
52
- Dynamic: description-content-type
53
- Dynamic: home-page
54
- Dynamic: license
44
+ Requires-Dist: neo4j-rust-ext<7.0,>=4.4.12; extra == "rust-ext"
55
45
  Dynamic: license-file
56
- Dynamic: project-url
57
- Dynamic: provides-extra
58
- Dynamic: requires-dist
59
- Dynamic: requires-python
60
- Dynamic: summary
61
46
 
62
47
  # Neo4j Graph Data Science Client
63
48
 
@@ -0,0 +1,175 @@
1
+ [build-system]
2
+ requires = ["setuptools>=42", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "graphdatascience"
7
+ description = "A Python client for the Neo4j Graph Data Science (GDS) library"
8
+ dynamic = ["version"]
9
+ authors = [{ name = "Neo4j", email = "team-gds@neo4j.org" }]
10
+ readme = "README.md"
11
+ license = "Apache-2.0"
12
+ classifiers = [
13
+ "Development Status :: 5 - Production/Stable",
14
+ "Intended Audience :: Developers",
15
+ "Intended Audience :: Science/Research",
16
+ "Operating System :: OS Independent",
17
+ "Programming Language :: Python :: 3",
18
+ "Programming Language :: Python :: 3 :: Only",
19
+ "Programming Language :: Python :: 3.10",
20
+ "Programming Language :: Python :: 3.11",
21
+ "Programming Language :: Python :: 3.12",
22
+ "Programming Language :: Python :: 3.13",
23
+ "Topic :: Database",
24
+ "Topic :: Scientific/Engineering",
25
+ "Topic :: Software Development",
26
+ "Typing :: Typed",
27
+ ]
28
+ requires-python = ">=3.10"
29
+ dependencies = [
30
+ "multimethod >= 1.0, < 3.0",
31
+ "neo4j >= 4.4.12, < 7.0",
32
+ "numpy < 2.4",
33
+ "pandas >= 1.0, < 3.0",
34
+ "pyarrow >= 17.0, < 23.0",
35
+ "textdistance >= 4.0, < 5.0",
36
+ "tqdm >= 4.0, < 5.0",
37
+ "typing-extensions >= 4.0, < 5.0",
38
+ "requests",
39
+ "tenacity >= 9.0",
40
+ "pydantic >= 2.11",
41
+ ]
42
+
43
+ [project.urls]
44
+ Homepage = "https://neo4j.com/product/graph-data-science/"
45
+ Documentation = "https://neo4j.com/docs/graph-data-science-client/current/"
46
+ Repository = "https://github.com/neo4j/graph-data-science-client"
47
+ BugTracker = "https://github.com/neo4j/graph-data-science-client/issues"
48
+
49
+ [project.optional-dependencies]
50
+ networkx = ["networkx >= 2.0, < 4.0"]
51
+ ogb = ["ogb >= 1.0, < 2.0"]
52
+ rust-ext = ["neo4j-rust-ext >= 4.4.12, < 7.0"]
53
+
54
+
55
+ [dependency-groups]
56
+ # To install all development dependencies,
57
+ # run `pip install --group dev -e .` inside repository root folder.#
58
+ dev = [
59
+ "tox>4.24",
60
+ { include-group = "dev-base" },
61
+ { include-group = "test" },
62
+ { include-group = "docs-ci" },
63
+ ]
64
+
65
+
66
+ dev-base = [
67
+ "ruff == 0.11.7",
68
+ "mypy == 1.13.0",
69
+ "nbconvert == 7.16.4",
70
+ "pandas-stubs == 2.2.3.241009",
71
+ "tox == 4.30.2",
72
+ "types-setuptools == 75.8.0.20250110",
73
+ "enum-tools[sphinx] == 0.12.0",
74
+ "autodoc_pydantic",
75
+ "types-requests",
76
+ "types-tqdm",
77
+ "types-python-dateutil",
78
+ "python-dotenv==1.1.0",
79
+ "types-colorama",
80
+ ]
81
+ test = [
82
+ "pytest == 8.3.3",
83
+ "requests_mock == 1.11.0",
84
+ "pytest_mock == 3.15.1",
85
+ "testcontainers >= 4.0, < 4.13.0",
86
+ "python-dateutil >= 2.9",
87
+ ]
88
+ docs-ci = [
89
+ "sphinx == 7.3.7",
90
+ "enum-tools[sphinx] == 0.12.0",
91
+ "autodoc_pydantic",
92
+ ]
93
+ notebook-base = [
94
+ "nbconvert==7.16.4",
95
+ "nbformat==5.10.4",
96
+ "nbclient==0.10.2",
97
+ "ipykernel==6.29.5",
98
+ ]
99
+ notebook-aura-ci = [{ include-group = "notebook-base" }, "python-dotenv==1.1.0"]
100
+ notebook-ci = [
101
+ { include-group = "notebook-base" },
102
+ "scipy == 1.14.0",
103
+ "torch==2.3.0",
104
+ "torch-scatter==2.1.1",
105
+ "torch-sparse==0.6.17",
106
+ "torch-geometric>=2.5.0",
107
+ ]
108
+
109
+ publish = ["build", "twine"]
110
+
111
+
112
+ [tool.setuptools]
113
+ include-package-data = true
114
+ zip-safe = false
115
+
116
+ [tool.setuptools.packages.find]
117
+ where = ["src"]
118
+ include = ["graphdatascience*"]
119
+
120
+ [tool.setuptools.dynamic]
121
+ version = { attr = "graphdatascience.version.__version__" }
122
+
123
+ [tool.setuptools.package-data]
124
+ graphdatascience = ["py.typed", "resources/**/*.gzip"]
125
+
126
+ [tool.ruff]
127
+ line-length = 120
128
+
129
+ include = ["*.py", "*.ipynb"]
130
+
131
+ exclude = [
132
+ # default
133
+
134
+ ".bzr",
135
+ ".direnv",
136
+ ".eggs",
137
+ ".git",
138
+ ".git-rewrite",
139
+ ".hg",
140
+ ".ipynb_checkpoints",
141
+ ".mypy_cache",
142
+ ".nox",
143
+ ".pants.d",
144
+ ".pyenv",
145
+ ".pytest_cache",
146
+ ".pytype",
147
+ ".ruff_cache",
148
+ ".svn",
149
+ ".tox",
150
+ ".venv",
151
+ ".vscode",
152
+ "__pypackages__",
153
+ "_build",
154
+ "buck-out",
155
+ "build",
156
+ "dist",
157
+ "node_modules",
158
+ "site-packages",
159
+ "venv",
160
+
161
+ # custom
162
+ "venv*",
163
+ ".venv*",
164
+ ".tox",
165
+ "build",
166
+ ]
167
+
168
+ [tool.ruff.lint]
169
+ select = [
170
+ "E4",
171
+ "E7",
172
+ "E9", # default pycodestyle rules
173
+ "F", # flake8
174
+ "I", # isort
175
+ ]
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  from abc import ABC
2
4
  from typing import Any
3
5
 
@@ -19,7 +21,7 @@ class AlgoProcRunner(IllegalAttrChecker, ABC):
19
21
  return self._query_runner.call_procedure(endpoint=self._namespace, params=params, logging=with_logging)
20
22
 
21
23
  @graph_type_check
22
- def estimate(self, G: Graph, **config: Any) -> "Series[Any]":
24
+ def estimate(self, G: Graph, **config: Any) -> Series[Any]:
23
25
  self._namespace += "." + "estimate"
24
26
  return self._run_procedure(G, config, with_logging=False).squeeze() # type: ignore
25
27
 
@@ -30,13 +32,13 @@ class StreamModeRunner(AlgoProcRunner):
30
32
 
31
33
 
32
34
  class StandardModeRunner(AlgoProcRunner):
33
- def __call__(self, G: Graph, **config: Any) -> "Series[Any]":
35
+ def __call__(self, G: Graph, **config: Any) -> Series[Any]:
34
36
  return self._run_procedure(G, config).squeeze() # type: ignore
35
37
 
36
38
 
37
39
  class GraphSageRunner(AlgoProcRunner):
38
40
  @graph_type_check
39
- def __call__(self, G: Graph, **config: Any) -> tuple[GraphSageModel, "Series[Any]"]:
41
+ def __call__(self, G: Graph, **config: Any) -> tuple[GraphSageModel, Series[Any]]:
40
42
  result = self._run_procedure(G, config).squeeze()
41
43
  model_name = result["modelInfo"]["modelName"]
42
44
 
@@ -0,0 +1,12 @@
1
+ from typing import Any
2
+
3
+ from pydantic import BaseModel
4
+ from pydantic.alias_generators import to_camel
5
+
6
+
7
+ class ArrowBaseModel(BaseModel, alias_generator=to_camel):
8
+ def dump_camel(self) -> dict[str, Any]:
9
+ return self.model_dump(by_alias=True)
10
+
11
+ def dump_json(self) -> str:
12
+ return self.model_dump_json(by_alias=True)
@@ -0,0 +1,254 @@
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ import logging
5
+ import platform
6
+ from dataclasses import dataclass
7
+ from types import TracebackType
8
+ from typing import Any, Iterator, Type
9
+
10
+ import certifi
11
+ from pyarrow import Schema, flight
12
+ from pyarrow import __version__ as arrow_version
13
+ from pyarrow._flight import (
14
+ Action,
15
+ ActionType,
16
+ FlightInternalError,
17
+ FlightStreamReader,
18
+ FlightTimedOutError,
19
+ FlightUnavailableError,
20
+ Result,
21
+ Ticket,
22
+ )
23
+
24
+ from graphdatascience.arrow_client.arrow_authentication import ArrowAuthentication
25
+ from graphdatascience.arrow_client.arrow_info import ArrowInfo
26
+ from graphdatascience.retry_utils.retry_config import ExponentialWaitConfig, RetryConfigV2, StopConfig
27
+
28
+ from ..version import __version__
29
+ from .middleware.auth_middleware import AuthFactory, AuthMiddleware
30
+ from .middleware.user_agent_middleware import UserAgentFactory
31
+
32
+
33
+ class AuthenticatedArrowClient:
34
+ @staticmethod
35
+ def create(
36
+ arrow_info: ArrowInfo,
37
+ auth: ArrowAuthentication | None = None,
38
+ encrypted: bool = False,
39
+ arrow_client_options: dict[str, Any] | None = None,
40
+ connection_string_override: str | None = None,
41
+ retry_config: RetryConfigV2 | None = None,
42
+ advertised_listen_address: tuple[str, int] | None = None,
43
+ ) -> AuthenticatedArrowClient:
44
+ connection_string: str
45
+ if connection_string_override is not None:
46
+ connection_string = connection_string_override
47
+ else:
48
+ connection_string = arrow_info.listenAddress
49
+
50
+ host, port = connection_string.split(":")
51
+
52
+ if retry_config is None:
53
+ retry_config = RetryConfigV2(
54
+ retryable_exceptions=[
55
+ FlightTimedOutError,
56
+ FlightUnavailableError,
57
+ FlightInternalError,
58
+ ],
59
+ stop_config=StopConfig(after_delay=10, after_attempt=5),
60
+ wait_config=ExponentialWaitConfig(multiplier=1, min=1, max=10),
61
+ )
62
+
63
+ return AuthenticatedArrowClient(
64
+ host=host,
65
+ retry_config=retry_config,
66
+ port=int(port),
67
+ auth=auth,
68
+ encrypted=encrypted,
69
+ arrow_client_options=arrow_client_options,
70
+ advertised_listen_address=advertised_listen_address,
71
+ )
72
+
73
+ def __init__(
74
+ self,
75
+ host: str,
76
+ retry_config: RetryConfigV2,
77
+ port: int = 8491,
78
+ auth: ArrowAuthentication | None = None,
79
+ encrypted: bool = False,
80
+ arrow_client_options: dict[str, Any] | None = None,
81
+ user_agent: str | None = None,
82
+ advertised_listen_address: tuple[str, int] | None = None,
83
+ ):
84
+ """Creates a new AuthenticatedArrowClient instance.
85
+
86
+ Parameters
87
+ ----------
88
+ host: str
89
+ The host address of the GDS Arrow server
90
+ port: int
91
+ The host port of the GDS Arrow server (default is 8491)
92
+ auth: ArrowAuthentication | None
93
+ An implementation of ArrowAuthentication providing a pair to be used for basic authentication
94
+ encrypted: bool
95
+ A flag that indicates whether the connection should be encrypted (default is False)
96
+ arrow_client_options: dict[str, Any] | None
97
+ Additional options to be passed to the Arrow Flight client.
98
+ user_agent: str | None
99
+ The user agent string to use for the connection. (default is `neo4j-graphdatascience-v[VERSION] pyarrow-v[PYARROW_VERSION])
100
+ retry_config: RetryConfig | None
101
+ The retry configuration to use for the Arrow requests send by the client.
102
+ advertised_listen_address: tuple[str, int] | None
103
+ The advertised listen address of the GDS Arrow server. This will be used by remote projection and writeback operations.
104
+ """
105
+ self._host = host
106
+ self._port = port
107
+ self._auth = None
108
+ self._encrypted = encrypted
109
+ self._arrow_client_options = arrow_client_options
110
+ self._user_agent = user_agent
111
+ self._logger = logging.getLogger("gds_arrow_client")
112
+ self._retry_config = retry_config
113
+ if auth:
114
+ self._auth = auth
115
+ self._auth_middleware = AuthMiddleware(auth)
116
+ self.advertised_listen_address = advertised_listen_address
117
+
118
+ self._flight_client: flight.FlightClient = self._instantiate_flight_client()
119
+
120
+ def connection_info(self) -> ConnectionInfo:
121
+ """
122
+ Returns the host and port of the GDS Arrow server.
123
+
124
+ Returns
125
+ -------
126
+ ConnectionInfo
127
+ the host and port of the GDS Arrow server
128
+ """
129
+ return ConnectionInfo(self._host, self._port, self._encrypted)
130
+
131
+ def advertised_connection_info(self) -> ConnectionInfo:
132
+ """
133
+ Returns the advertised host and port of the GDS Arrow server.
134
+
135
+ Returns
136
+ -------
137
+ ConnectionInfo
138
+ the host and port of the GDS Arrow server
139
+ """
140
+ if self.advertised_listen_address is None:
141
+ return self.connection_info()
142
+
143
+ h, p = self.advertised_listen_address
144
+ return ConnectionInfo(h, p, self._encrypted)
145
+
146
+ def request_token(self) -> str | None:
147
+ """
148
+ Requests a token from the server and returns it.
149
+
150
+ Returns
151
+ -------
152
+ str | None
153
+ a token from the server and returns it.
154
+ """
155
+
156
+ @self._retry_config.decorator(operation_name="Request token", logger=self._logger)
157
+ def auth_with_retry() -> None:
158
+ client = self._flight_client
159
+ if self._auth:
160
+ auth_pair = self._auth.auth_pair()
161
+ client.authenticate_basic_token(auth_pair[0], auth_pair[1])
162
+
163
+ if self._auth:
164
+ auth_with_retry()
165
+ return self._auth_middleware.token()
166
+ else:
167
+ return "IGNORED"
168
+
169
+ def get_stream(self, ticket: Ticket) -> FlightStreamReader:
170
+ return self._flight_client.do_get(ticket)
171
+
172
+ def do_action(self, endpoint: str, payload: bytes | dict[str, Any]) -> Iterator[Result]:
173
+ payload_bytes = payload if isinstance(payload, bytes) else json.dumps(payload).encode("utf-8")
174
+
175
+ return self._flight_client.do_action(Action(endpoint, payload_bytes)) # type: ignore
176
+
177
+ def do_action_with_retry(self, endpoint: str, payload: bytes | dict[str, Any]) -> list[Result]:
178
+ @self._retry_config.decorator(operation_name="Send action", logger=self._logger)
179
+ def run_with_retry() -> list[Result]:
180
+ # the Flight response error code is only checked on iterator consumption
181
+ # we eagerly collect iterator here to trigger retry in case of an error
182
+ return list(self.do_action(endpoint, payload))
183
+
184
+ return run_with_retry()
185
+
186
+ def list_actions(self) -> set[ActionType]:
187
+ return self._flight_client.list_actions() # type: ignore
188
+
189
+ def do_put_with_retry(
190
+ self, descriptor: flight.FlightDescriptor, schema: Schema
191
+ ) -> tuple[flight.FlightStreamWriter, flight.FlightMetadataReader]:
192
+ @self._retry_config.decorator(operation_name="Do put", logger=self._logger)
193
+ def run_with_retry() -> tuple[flight.FlightStreamWriter, flight.FlightMetadataReader]:
194
+ return self._flight_client.do_put(descriptor, schema) # type: ignore
195
+
196
+ return run_with_retry()
197
+
198
+ def __enter__(self) -> AuthenticatedArrowClient:
199
+ return self
200
+
201
+ def __exit__(
202
+ self,
203
+ exception_type: Type[BaseException] | None,
204
+ exception_value: BaseException | None,
205
+ traceback: TracebackType | None,
206
+ ) -> None:
207
+ self.close()
208
+
209
+ def close(self) -> None:
210
+ if self._flight_client:
211
+ self._flight_client.close()
212
+
213
+ def _instantiate_flight_client(self) -> flight.FlightClient:
214
+ location = (
215
+ flight.Location.for_grpc_tls(self._host, self._port)
216
+ if self._encrypted
217
+ else flight.Location.for_grpc_tcp(self._host, self._port)
218
+ )
219
+ client_options: dict[str, Any] = (self._arrow_client_options or {}).copy()
220
+
221
+ # We need to specify the system root certificates on Windows
222
+ if platform.system() == "Windows":
223
+ if not client_options["tls_root_certs"]:
224
+ client_options["tls_root_certs"] = certifi.contents()
225
+
226
+ if self._auth:
227
+ user_agent = f"neo4j-graphdatascience-v{__version__} pyarrow-v{arrow_version}"
228
+ if self._user_agent:
229
+ user_agent = self._user_agent
230
+
231
+ client_options["middleware"] = [
232
+ AuthFactory(self._auth_middleware),
233
+ UserAgentFactory(useragent=user_agent),
234
+ ]
235
+
236
+ return flight.FlightClient(location, **client_options)
237
+
238
+ def __getstate__(self) -> dict[str, Any]:
239
+ state = self.__dict__.copy()
240
+ # Remove the FlightClient as it isn't serializable
241
+ if "_flight_client" in state:
242
+ del state["_flight_client"]
243
+ return state
244
+
245
+ def __setstate__(self, state: dict[str, Any]) -> None:
246
+ self.__dict__.update(state)
247
+ self._flight_client = self._instantiate_flight_client()
248
+
249
+
250
+ @dataclass
251
+ class ConnectionInfo:
252
+ host: str
253
+ port: int
254
+ encrypted: bool
@@ -0,0 +1,63 @@
1
+ from __future__ import annotations
2
+
3
+ import base64
4
+ import time
5
+ from typing import Any
6
+
7
+ from pyarrow._flight import ClientMiddleware, ClientMiddlewareFactory
8
+
9
+ from graphdatascience.arrow_client.arrow_authentication import ArrowAuthentication
10
+
11
+
12
+ class AuthFactory(ClientMiddlewareFactory): # type: ignore
13
+ def __init__(self, middleware: AuthMiddleware, *args: Any, **kwargs: Any) -> None:
14
+ super().__init__(*args, **kwargs)
15
+ self._middleware = middleware
16
+
17
+ def start_call(self, info: Any) -> AuthMiddleware:
18
+ return self._middleware
19
+
20
+
21
+ class AuthMiddleware(ClientMiddleware): # type: ignore
22
+ def __init__(self, auth: ArrowAuthentication, *args: Any, **kwargs: Any) -> None:
23
+ super().__init__(*args, **kwargs)
24
+ self._auth = auth
25
+ self._token: str | None = None
26
+ self._token_timestamp = 0
27
+
28
+ def token(self) -> str | None:
29
+ # check whether the token is older than 10 minutes. If so, reset it.
30
+ if self._token and int(time.time()) - self._token_timestamp > 600:
31
+ self._token = None
32
+
33
+ return self._token
34
+
35
+ def _set_token(self, token: str) -> None:
36
+ self._token = token
37
+ self._token_timestamp = int(time.time())
38
+
39
+ def received_headers(self, headers: dict[str, Any]) -> None:
40
+ auth_header = headers.get("authorization", None)
41
+ if not auth_header:
42
+ return
43
+
44
+ # the result is always a list
45
+ header_value = auth_header[0]
46
+
47
+ if not isinstance(header_value, str):
48
+ raise ValueError(f"Incompatible header value received from server: `{header_value}`")
49
+
50
+ auth_type, token = header_value.split(" ", 1)
51
+ if auth_type == "Bearer":
52
+ self._set_token(token)
53
+
54
+ def sending_headers(self) -> dict[str, str]:
55
+ token = self.token()
56
+ if token is not None:
57
+ return {"authorization": "Bearer " + token}
58
+
59
+ auth_pair = self._auth.auth_pair()
60
+ auth_token = f"{auth_pair[0]}:{auth_pair[1]}"
61
+ auth_token = "Basic " + base64.b64encode(auth_token.encode("utf-8")).decode("ASCII")
62
+ # There seems to be a bug, `authorization` must be lower key
63
+ return {"authorization": auth_token}
@@ -0,0 +1,26 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+
5
+ from pyarrow._flight import ClientMiddleware, ClientMiddlewareFactory
6
+
7
+
8
+ class UserAgentFactory(ClientMiddlewareFactory): # type: ignore
9
+ def __init__(self, useragent: str, *args: Any, **kwargs: Any) -> None:
10
+ super().__init__(*args, **kwargs)
11
+ self._middleware = UserAgentMiddleware(useragent)
12
+
13
+ def start_call(self, info: Any) -> ClientMiddleware:
14
+ return self._middleware
15
+
16
+
17
+ class UserAgentMiddleware(ClientMiddleware): # type: ignore
18
+ def __init__(self, useragent: str, *args: Any, **kwargs: Any) -> None:
19
+ super().__init__(*args, **kwargs)
20
+ self._useragent = useragent
21
+
22
+ def sending_headers(self) -> dict[str, str]:
23
+ return {"x-gds-user-agent": self._useragent}
24
+
25
+ def received_headers(self, headers: dict[str, Any]) -> None:
26
+ pass
@@ -0,0 +1,19 @@
1
+ import json
2
+ from typing import Any
3
+
4
+ from pyarrow._flight import Result
5
+
6
+
7
+ def deserialize_single(input_stream: list[Result]) -> dict[str, Any]:
8
+ rows = deserialize(input_stream)
9
+ if len(rows) != 1:
10
+ raise ValueError(f"Expected exactly one result, got {len(rows)}")
11
+
12
+ return rows[0]
13
+
14
+
15
+ def deserialize(input_stream: list[Result]) -> list[dict[str, Any]]:
16
+ def deserialize_row(row: Result): # type:ignore
17
+ return json.loads(row.body.to_pybytes().decode())
18
+
19
+ return [deserialize_row(row) for row in input_stream]