|
34 | 34 | get_neuron_neuron_connectivity, |
35 | 35 | get_neuron_region_connectivity, |
36 | 36 | get_individual_neuron_inputs, |
| 37 | + get_downstream_class_connectivity, |
| 38 | + get_upstream_class_connectivity, |
37 | 39 | get_expression_overlaps_here, |
38 | 40 | get_anatomy_scrnaseq, |
39 | 41 | get_cluster_expression, |
40 | 42 | get_expression_cluster, |
41 | 43 | get_scrnaseq_dataset_data, |
42 | 44 | ) |
| 45 | +from vfbquery.vfb_connectivity import query_connectivity |
43 | 46 |
|
44 | 47 |
|
45 | 48 | class QueryPerformanceTest(unittest.TestCase): |
@@ -348,7 +351,57 @@ def test_07_connectivity_queries(self): |
348 | 351 | ) |
349 | 352 | print(f"NeuronRegionConnectivityQuery: {duration:.4f}s {'✅' if success else '❌'}") |
350 | 353 | self.assertLess(duration, self.THRESHOLD_SLOW, "NeuronRegionConnectivityQuery exceeded threshold") |
351 | | - |
| 354 | + |
| 355 | + def test_07b_class_connectivity_queries(self): |
| 356 | + """Test class-level connectivity queries (pre-indexed Solr)""" |
| 357 | + print("\n" + "="*80) |
| 358 | + print("CLASS CONNECTIVITY QUERIES (Solr pre-indexed)") |
| 359 | + print("="*80) |
| 360 | + |
| 361 | + # FBbt_00001482 = lineage NB3-2 primary interneuron — known to have |
| 362 | + # downstream/upstream connectivity data in the vfb_json Solr core. |
| 363 | + test_class = "FBbt_00001482" |
| 364 | + |
| 365 | + # DownstreamClassConnectivity |
| 366 | + result, duration, success = self._time_query( |
| 367 | + "DownstreamClassConnectivity", |
| 368 | + get_downstream_class_connectivity, |
| 369 | + test_class, |
| 370 | + return_dataframe=False, |
| 371 | + ) |
| 372 | + print(f"DownstreamClassConnectivity: {duration:.4f}s {'✅' if success else '❌'}") |
| 373 | + self.assertLess(duration, self.THRESHOLD_MEDIUM, "DownstreamClassConnectivity exceeded threshold") |
| 374 | + |
| 375 | + # UpstreamClassConnectivity |
| 376 | + result, duration, success = self._time_query( |
| 377 | + "UpstreamClassConnectivity", |
| 378 | + get_upstream_class_connectivity, |
| 379 | + test_class, |
| 380 | + return_dataframe=False, |
| 381 | + ) |
| 382 | + print(f"UpstreamClassConnectivity: {duration:.4f}s {'✅' if success else '❌'}") |
| 383 | + self.assertLess(duration, self.THRESHOLD_MEDIUM, "UpstreamClassConnectivity exceeded threshold") |
| 384 | + |
| 385 | + def test_07c_cross_dataset_connectivity(self): |
| 386 | + """Test cross-dataset query_connectivity (live, both-end filtered)""" |
| 387 | + print("\n" + "="*80) |
| 388 | + print("CROSS-DATASET CONNECTIVITY (live, slow)") |
| 389 | + print("="*80) |
| 390 | + |
| 391 | + # Both-end + group_by_class is the fastest variant per LLM guidance. |
| 392 | + # giant fiber neuron → peripherally synapsing interneuron is a |
| 393 | + # known-good pair with non-zero results. |
| 394 | + result, duration, success = self._time_query( |
| 395 | + "QueryConnectivity", |
| 396 | + query_connectivity, |
| 397 | + upstream_type="giant fiber neuron", |
| 398 | + downstream_type="peripherally synapsing interneuron", |
| 399 | + group_by_class=True, |
| 400 | + ) |
| 401 | + print(f"QueryConnectivity: {duration:.4f}s {'✅' if success else '❌'}") |
| 402 | + # Live cross-dataset query — allow up to 5 min per the MCP timeout. |
| 403 | + self.assertLess(duration, 300.0, "QueryConnectivity exceeded threshold") |
| 404 | + |
352 | 405 | def test_08_similarity_queries(self): |
353 | 406 | """Test NBLAST similarity queries""" |
354 | 407 | print("\n" + "="*80) |
|
0 commit comments