vfbquery 0.5.0__py3-none-any.whl → 0.5.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@ inspired by VFB_connect optimizations.
6
6
  """
7
7
 
8
8
  from typing import Dict, Any, Optional
9
- from .cache_enhancements import cache_result, get_cache
9
+ from .solr_result_cache import with_solr_cache
10
10
 
11
11
 
12
12
  def is_valid_term_info_result(result):
@@ -28,173 +28,624 @@ def is_valid_term_info_result(result):
28
28
  # Check if preview_results has the correct structure
29
29
  preview_results = query.get('preview_results')
30
30
  if not isinstance(preview_results, dict):
31
- print(f"DEBUG: Invalid preview_results type {type(preview_results)} detected")
31
+ # print(f"DEBUG: Invalid preview_results type {type(preview_results)} detected")
32
32
  return False
33
33
 
34
34
  headers = preview_results.get('headers', [])
35
35
  if not headers:
36
- print(f"DEBUG: Empty headers detected in preview_results")
36
+ # print(f"DEBUG: Empty headers detected in preview_results")
37
37
  return False
38
38
 
39
39
  # Only reject if count is -1 (failed execution) or if count is 0 but preview_results is missing/empty
40
40
  if count < 0:
41
- print(f"DEBUG: Invalid query count {count} detected")
41
+ # print(f"DEBUG: Invalid query count {count} detected")
42
42
  return False
43
43
 
44
44
  return True
45
45
  from .vfb_queries import (
46
46
  get_term_info as _original_get_term_info,
47
47
  get_instances as _original_get_instances,
48
- vfb_solr,
49
- term_info_parse_object as _original_term_info_parse_object,
50
- fill_query_results as _original_fill_query_results
48
+ get_templates as _original_get_templates,
49
+ get_related_anatomy as _original_get_related_anatomy,
50
+ get_similar_neurons as _original_get_similar_neurons,
51
+ get_individual_neuron_inputs as _original_get_individual_neuron_inputs,
52
+ get_expression_overlaps_here as _original_get_expression_overlaps_here,
53
+ get_neurons_with_part_in as _original_get_neurons_with_part_in,
54
+ get_neurons_with_synapses_in as _original_get_neurons_with_synapses_in,
55
+ get_neurons_with_presynaptic_terminals_in as _original_get_neurons_with_presynaptic_terminals_in,
56
+ get_neurons_with_postsynaptic_terminals_in as _original_get_neurons_with_postsynaptic_terminals_in,
57
+ get_components_of as _original_get_components_of,
58
+ get_parts_of as _original_get_parts_of,
59
+ get_subclasses_of as _original_get_subclasses_of,
60
+ get_neuron_classes_fasciculating_here as _original_get_neuron_classes_fasciculating_here,
61
+ get_tracts_nerves_innervating_here as _original_get_tracts_nerves_innervating_here,
62
+ get_lineage_clones_in as _original_get_lineage_clones_in,
63
+ get_neuron_neuron_connectivity as _original_get_neuron_neuron_connectivity,
64
+ get_neuron_region_connectivity as _original_get_neuron_region_connectivity,
65
+ get_images_neurons as _original_get_images_neurons,
66
+ get_images_that_develop_from as _original_get_images_that_develop_from,
67
+ get_expression_pattern_fragments as _original_get_expression_pattern_fragments,
68
+ get_anatomy_scrnaseq as _original_get_anatomy_scrnaseq,
69
+ get_cluster_expression as _original_get_cluster_expression,
70
+ get_expression_cluster as _original_get_expression_cluster,
71
+ get_scrnaseq_dataset_data as _original_get_scrnaseq_dataset_data,
72
+ get_similar_morphology as _original_get_similar_morphology,
73
+ get_similar_morphology_part_of as _original_get_similar_morphology_part_of,
74
+ get_similar_morphology_part_of_exp as _original_get_similar_morphology_part_of_exp,
75
+ get_similar_morphology_nb as _original_get_similar_morphology_nb,
76
+ get_similar_morphology_nb_exp as _original_get_similar_morphology_nb_exp,
77
+ get_similar_morphology_userdata as _original_get_similar_morphology_userdata,
78
+ get_painted_domains as _original_get_painted_domains,
79
+ get_dataset_images as _original_get_dataset_images,
80
+ get_all_aligned_images as _original_get_all_aligned_images,
81
+ get_aligned_datasets as _original_get_aligned_datasets,
82
+ get_all_datasets as _original_get_all_datasets,
83
+ get_terms_for_pub as _original_get_terms_for_pub,
84
+ get_transgene_expression_here as _original_get_transgene_expression_here,
51
85
  )
52
86
 
53
- @cache_result("solr_search", "solr_cache_enabled")
54
- def cached_solr_search(query: str):
55
- """Cached version of SOLR search."""
56
- return vfb_solr.search(query)
57
-
58
- @cache_result("term_info_parse", "term_info_cache_enabled")
59
- def cached_term_info_parse_object(results, short_form: str):
60
- """Cached version of term_info_parse_object."""
61
- return _original_term_info_parse_object(results, short_form)
62
-
63
- @cache_result("query_results", "query_result_cache_enabled")
64
- def cached_fill_query_results(term_info: Dict[str, Any]):
65
- """Cached version of fill_query_results."""
66
- return _original_fill_query_results(term_info)
67
-
68
- @cache_result("get_instances", "query_result_cache_enabled")
69
- def cached_get_instances(short_form: str, return_dataframe=True, limit: int = -1):
70
- """Cached version of get_instances."""
71
- return _original_get_instances(short_form, return_dataframe, limit)
72
-
73
- def get_term_info_cached(short_form: str, preview: bool = False):
87
+ @with_solr_cache('term_info')
88
+ def get_term_info_cached(short_form: str, preview: bool = True, force_refresh: bool = False):
74
89
  """
75
- Enhanced get_term_info with multi-layer caching.
90
+ Enhanced get_term_info with SOLR caching.
76
91
 
77
- This version uses caching at multiple levels:
78
- 1. Final result caching (entire term_info response)
79
- 2. SOLR query result caching
80
- 3. Term info parsing caching
81
- 4. Query result caching
92
+ This version caches complete term_info responses in SOLR for fast retrieval.
82
93
 
83
94
  Args:
84
95
  short_form: Term short form (e.g., 'FBbt_00003748')
85
96
  preview: Whether to include preview results
97
+ force_refresh: Whether to bypass cache and fetch fresh data
86
98
 
87
99
  Returns:
88
100
  Term info dictionary or None if not found
89
101
  """
90
- cache = get_cache()
91
-
92
- # Check for complete result in cache first
93
- cache_key = cache._generate_cache_key("term_info_complete", short_form, preview)
94
- cached_result = cache.get(cache_key)
95
- print(f"DEBUG: Cache lookup for {short_form}: {'HIT' if cached_result is not None else 'MISS'}")
96
- if cached_result is not None:
97
- # Validate that cached result has essential fields
98
- if not is_valid_term_info_result(cached_result):
99
- print(f"DEBUG: Cached result incomplete for {short_form}, falling back to original function")
100
- print(f"DEBUG: cached_result keys: {list(cached_result.keys()) if cached_result else 'None'}")
101
- print(f"DEBUG: cached_result Id: {cached_result.get('Id', 'MISSING') if cached_result else 'None'}")
102
- print(f"DEBUG: cached_result Name: {cached_result.get('Name', 'MISSING') if cached_result else 'None'}")
103
-
104
- # Fall back to original function and cache the complete result
105
- fallback_result = _original_get_term_info(short_form, preview)
106
- if is_valid_term_info_result(fallback_result):
107
- print(f"DEBUG: Fallback successful, caching complete result for {short_form}")
108
- cache.set(cache_key, fallback_result)
109
- return fallback_result
110
- else:
111
- print(f"DEBUG: Using valid cached result for {short_form}")
112
- return cached_result
113
-
114
- parsed_object = None
115
- try:
116
- # Use cached SOLR search
117
- results = cached_solr_search('id:' + short_form)
118
-
119
- # Use cached term info parsing
120
- parsed_object = cached_term_info_parse_object(results, short_form)
121
-
122
- if parsed_object:
123
- # Use cached query result filling (skip if queries would fail)
124
- if parsed_object.get('Queries') and len(parsed_object['Queries']) > 0:
125
- try:
126
- term_info = cached_fill_query_results(parsed_object)
127
- if term_info:
128
- # Validate result before caching
129
- if term_info.get('Id') and term_info.get('Name'):
130
- # Cache the complete result
131
- cache.set(cache_key, term_info)
132
- return term_info
133
- else:
134
- print(f"Query result for {short_form} is incomplete, falling back to original function...")
135
- return _original_get_term_info(short_form, preview)
136
- else:
137
- print("Failed to fill query preview results!")
138
- # Validate result before caching
139
- if parsed_object.get('Id') and parsed_object.get('Name'):
140
- # Cache the complete result
141
- cache.set(cache_key, parsed_object)
142
- return parsed_object
143
- else:
144
- print(f"Parsed object for {short_form} is incomplete, falling back to original function...")
145
- return _original_get_term_info(short_form, preview)
146
- except Exception as e:
147
- print(f"Error filling query results (continuing without query data): {e}")
148
- # Validate result before caching
149
- if is_valid_term_info_result(parsed_object):
150
- cache.set(cache_key, parsed_object)
151
- return parsed_object
152
- else:
153
- print(f"DEBUG: Exception case - parsed object incomplete for {short_form}, falling back to original function")
154
- fallback_result = _original_get_term_info(short_form, preview)
155
- if is_valid_term_info_result(fallback_result):
156
- cache.set(cache_key, fallback_result)
157
- return fallback_result
158
- else:
159
- # No queries to fill, validate result before caching
160
- if parsed_object.get('Id') and parsed_object.get('Name'):
161
- # Cache and return parsed object directly
162
- cache.set(cache_key, parsed_object)
163
- return parsed_object
164
- else:
165
- print(f"DEBUG: No queries case - parsed object incomplete for {short_form}, falling back to original function...")
166
- fallback_result = _original_get_term_info(short_form, preview)
167
- if is_valid_term_info_result(fallback_result):
168
- cache.set(cache_key, fallback_result)
169
- return fallback_result
170
- else:
171
- print(f"No valid term info found for ID '{short_form}'")
172
- return None
173
-
174
- except Exception as e:
175
- print(f"Error in cached get_term_info: {type(e).__name__}: {e}")
176
- # Fall back to original function if caching fails
177
- return _original_get_term_info(short_form, preview)
102
+ return _original_get_term_info(short_form=short_form, preview=preview)
178
103
 
179
- def get_instances_cached(short_form: str, return_dataframe=True, limit: int = -1):
104
+ def get_instances_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
180
105
  """
181
- Enhanced get_instances with caching.
106
+ Enhanced get_instances with SOLR caching.
182
107
 
183
- This cached version can provide dramatic speedup for repeated queries,
184
- especially useful for:
185
- - UI applications with repeated browsing
186
- - Data analysis workflows
187
- - Testing and development
108
+ This cached version provides dramatic speedup for repeated queries.
188
109
 
189
110
  Args:
190
111
  short_form: Class short form
191
112
  return_dataframe: Whether to return DataFrame or formatted dict
192
113
  limit: Maximum number of results (-1 for all)
114
+ force_refresh: Whether to bypass cache and fetch fresh data
193
115
 
194
116
  Returns:
195
117
  Instances data (DataFrame or formatted dict based on return_dataframe)
196
118
  """
197
- return cached_get_instances(short_form, return_dataframe, limit)
119
+ return _original_get_instances(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
120
+
121
+ @with_solr_cache('similar_neurons')
122
+ def get_similar_neurons_cached(neuron, similarity_score='NBLAST_score', return_dataframe=True, limit: int = -1, force_refresh: bool = False):
123
+ """
124
+ Enhanced get_similar_neurons with SOLR caching.
125
+
126
+ This cached version provides dramatic speedup for repeated NBLAST similarity queries.
127
+
128
+ Args:
129
+ neuron: Neuron identifier
130
+ similarity_score: Similarity score type ('NBLAST_score', etc.)
131
+ return_dataframe: Whether to return DataFrame or list of dicts
132
+ limit: Maximum number of results (-1 for all)
133
+ force_refresh: Whether to bypass cache and fetch fresh data
134
+
135
+ Returns:
136
+ Similar neurons data (DataFrame or list of dicts)
137
+ """
138
+ return _original_get_similar_neurons(neuron=neuron, similarity_score=similarity_score, return_dataframe=return_dataframe, limit=limit)
139
+
140
+ def get_similar_morphology_cached(neuron_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
141
+ """
142
+ Enhanced get_similar_morphology with SOLR caching.
143
+
144
+ Args:
145
+ neuron_short_form: Neuron short form
146
+ return_dataframe: Whether to return DataFrame or list of dicts
147
+ limit: Maximum number of results (-1 for all)
148
+ force_refresh: Whether to bypass cache and fetch fresh data
149
+
150
+ Returns:
151
+ Similar morphology data
152
+ """
153
+ return _original_get_similar_morphology(neuron_short_form=neuron_short_form, return_dataframe=return_dataframe, limit=limit)
154
+
155
+ def get_similar_morphology_part_of_cached(neuron_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
156
+ """
157
+ Enhanced get_similar_morphology_part_of with SOLR caching.
158
+
159
+ Args:
160
+ neuron_short_form: Neuron short form
161
+ return_dataframe: Whether to return DataFrame or list of dicts
162
+ limit: Maximum number of results (-1 for all)
163
+ force_refresh: Whether to bypass cache and fetch fresh data
164
+
165
+ Returns:
166
+ Similar morphology part-of data
167
+ """
168
+ return _original_get_similar_morphology_part_of(neuron_short_form=neuron_short_form, return_dataframe=return_dataframe, limit=limit)
169
+
170
+ def get_similar_morphology_part_of_exp_cached(expression_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
171
+ """
172
+ Enhanced get_similar_morphology_part_of_exp with SOLR caching.
173
+
174
+ Args:
175
+ expression_short_form: Expression pattern short form
176
+ return_dataframe: Whether to return DataFrame or list of dicts
177
+ limit: Maximum number of results (-1 for all)
178
+ force_refresh: Whether to bypass cache and fetch fresh data
179
+
180
+ Returns:
181
+ Similar morphology expression data
182
+ """
183
+ return _original_get_similar_morphology_part_of_exp(expression_short_form=expression_short_form, return_dataframe=return_dataframe, limit=limit)
184
+
185
+ def get_similar_morphology_nb_cached(neuron_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
186
+ """
187
+ Enhanced get_similar_morphology_nb with SOLR caching.
188
+
189
+ Args:
190
+ neuron_short_form: Neuron short form
191
+ return_dataframe: Whether to return DataFrame or list of dicts
192
+ limit: Maximum number of results (-1 for all)
193
+
194
+ Returns:
195
+ NBLAST similar morphology data
196
+ """
197
+ return _original_get_similar_morphology_nb(neuron_short_form=neuron_short_form, return_dataframe=return_dataframe, limit=limit)
198
+
199
+ def get_similar_morphology_nb_exp_cached(expression_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
200
+ """
201
+ Enhanced get_similar_morphology_nb_exp with SOLR caching.
202
+
203
+ Args:
204
+ expression_short_form: Expression pattern short form
205
+ return_dataframe: Whether to return DataFrame or list of dicts
206
+ limit: Maximum number of results (-1 for all)
207
+
208
+ Returns:
209
+ NBLAST expression similarity data
210
+ """
211
+ return _original_get_similar_morphology_nb_exp(expression_short_form=expression_short_form, return_dataframe=return_dataframe, limit=limit)
212
+
213
+ def get_similar_morphology_userdata_cached(upload_id: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
214
+ """
215
+ Enhanced get_similar_morphology_userdata with SOLR caching.
216
+
217
+ Args:
218
+ upload_id: User upload identifier
219
+ return_dataframe: Whether to return DataFrame or list of dicts
220
+ limit: Maximum number of results (-1 for all)
221
+
222
+ Returns:
223
+ User data similarity results
224
+ """
225
+ return _original_get_similar_morphology_userdata(upload_id=upload_id, return_dataframe=return_dataframe, limit=limit)
226
+
227
+ def get_neurons_with_part_in_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
228
+ """
229
+ Enhanced get_neurons_with_part_in with SOLR caching.
230
+
231
+ Args:
232
+ short_form: Anatomical structure short form
233
+ return_dataframe: Whether to return DataFrame or list of dicts
234
+ limit: Maximum number of results (-1 for all)
235
+
236
+ Returns:
237
+ Neurons with part in the specified anatomical structure
238
+ """
239
+ return _original_get_neurons_with_part_in(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
240
+
241
+ def get_neurons_with_synapses_in_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
242
+ """
243
+ Enhanced get_neurons_with_synapses_in with SOLR caching.
244
+
245
+ Args:
246
+ short_form: Anatomical structure short form
247
+ return_dataframe: Whether to return DataFrame or list of dicts
248
+ limit: Maximum number of results (-1 for all)
249
+
250
+ Returns:
251
+ Neurons with synapses in the specified anatomical structure
252
+ """
253
+ return _original_get_neurons_with_synapses_in(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
254
+
255
+ def get_neurons_with_presynaptic_terminals_in_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
256
+ """
257
+ Enhanced get_neurons_with_presynaptic_terminals_in with SOLR caching.
258
+
259
+ Args:
260
+ short_form: Anatomical structure short form
261
+ return_dataframe: Whether to return DataFrame or list of dicts
262
+ limit: Maximum number of results (-1 for all)
263
+
264
+ Returns:
265
+ Neurons with presynaptic terminals in the specified anatomical structure
266
+ """
267
+ return _original_get_neurons_with_presynaptic_terminals_in(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
268
+
269
+ def get_neurons_with_postsynaptic_terminals_in_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
270
+ """
271
+ Enhanced get_neurons_with_postsynaptic_terminals_in with SOLR caching.
272
+
273
+ Args:
274
+ short_form: Anatomical structure short form
275
+ return_dataframe: Whether to return DataFrame or list of dicts
276
+ limit: Maximum number of results (-1 for all)
277
+
278
+ Returns:
279
+ Neurons with postsynaptic terminals in the specified anatomical structure
280
+ """
281
+ return _original_get_neurons_with_postsynaptic_terminals_in(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
282
+
283
+ def get_templates_cached(limit: int = -1, return_dataframe: bool = False, force_refresh: bool = False):
284
+ """
285
+ Enhanced get_templates with SOLR caching.
286
+
287
+ Args:
288
+ limit: Maximum number of results (-1 for all)
289
+ return_dataframe: Whether to return DataFrame or list of dicts
290
+ force_refresh: Whether to bypass cache and fetch fresh data
291
+
292
+ Returns:
293
+ Template data
294
+ """
295
+ return _original_get_templates(limit=limit, return_dataframe=return_dataframe)
296
+
297
+ def get_related_anatomy_cached(template_short_form: str, limit: int = -1, return_dataframe: bool = False, force_refresh: bool = False):
298
+ """
299
+ Enhanced get_related_anatomy with SOLR caching.
300
+
301
+ Args:
302
+ template_short_form: Template short form
303
+ limit: Maximum number of results (-1 for all)
304
+ return_dataframe: Whether to return DataFrame or list of dicts
305
+ force_refresh: Whether to bypass cache and fetch fresh data
306
+
307
+ Returns:
308
+ Related anatomy data
309
+ """
310
+ return _original_get_related_anatomy(template_short_form=template_short_form, limit=limit, return_dataframe=return_dataframe)
311
+
312
+ def get_painted_domains_cached(template_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
313
+ """
314
+ Enhanced get_painted_domains with SOLR caching.
315
+
316
+ Args:
317
+ template_short_form: Template short form
318
+ return_dataframe: Whether to return DataFrame or list of dicts
319
+ limit: Maximum number of results (-1 for all)
320
+
321
+ Returns:
322
+ Painted domains data
323
+ """
324
+ return _original_get_painted_domains(template_short_form=template_short_form, return_dataframe=return_dataframe, limit=limit)
325
+
326
+ def get_dataset_images_cached(dataset_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
327
+ """
328
+ Enhanced get_dataset_images with SOLR caching.
329
+
330
+ Args:
331
+ dataset_short_form: Dataset short form
332
+ return_dataframe: Whether to return DataFrame or list of dicts
333
+ limit: Maximum number of results (-1 for all)
334
+
335
+ Returns:
336
+ Dataset images data
337
+ """
338
+ return _original_get_dataset_images(dataset_short_form=dataset_short_form, return_dataframe=return_dataframe, limit=limit)
339
+
340
+ def get_all_aligned_images_cached(template_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
341
+ """
342
+ Enhanced get_all_aligned_images with SOLR caching.
343
+
344
+ Args:
345
+ template_short_form: Template short form
346
+ return_dataframe: Whether to return DataFrame or list of dicts
347
+ limit: Maximum number of results (-1 for all)
348
+
349
+ Returns:
350
+ All aligned images data
351
+ """
352
+ return _original_get_all_aligned_images(template_short_form=template_short_form, return_dataframe=return_dataframe, limit=limit)
353
+
354
+ def get_aligned_datasets_cached(template_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
355
+ """
356
+ Enhanced get_aligned_datasets with SOLR caching.
357
+
358
+ Args:
359
+ template_short_form: Template short form
360
+ return_dataframe: Whether to return DataFrame or list of dicts
361
+ limit: Maximum number of results (-1 for all)
362
+
363
+ Returns:
364
+ Aligned datasets data
365
+ """
366
+ return _original_get_aligned_datasets(template_short_form=template_short_form, return_dataframe=return_dataframe, limit=limit)
367
+
368
+ def get_all_datasets_cached(return_dataframe=True, limit: int = -1, force_refresh: bool = False):
369
+ """
370
+ Enhanced get_all_datasets with SOLR caching.
371
+
372
+ Args:
373
+ return_dataframe: Whether to return DataFrame or list of dicts
374
+ limit: Maximum number of results (-1 for all)
375
+
376
+ Returns:
377
+ All datasets data
378
+ """
379
+ return _original_get_all_datasets(return_dataframe=return_dataframe, limit=limit)
380
+
381
+ def get_individual_neuron_inputs_cached(neuron_short_form: str, return_dataframe=True, limit: int = -1, summary_mode: bool = False, force_refresh: bool = False):
382
+ """
383
+ Enhanced get_individual_neuron_inputs with SOLR caching.
384
+
385
+ Args:
386
+ neuron_short_form: Neuron short form
387
+ return_dataframe: Whether to return DataFrame or list of dicts
388
+ limit: Maximum number of results (-1 for all)
389
+ summary_mode: Whether to return summary mode
390
+
391
+ Returns:
392
+ Individual neuron inputs data
393
+ """
394
+ return _original_get_individual_neuron_inputs(neuron_short_form=neuron_short_form, return_dataframe=return_dataframe, limit=limit, summary_mode=summary_mode)
395
+
396
+ def get_neuron_neuron_connectivity_cached(short_form: str, return_dataframe=True, limit: int = -1, min_weight: float = 0, direction: str = 'both', force_refresh: bool = False):
397
+ """
398
+ Enhanced get_neuron_neuron_connectivity with SOLR caching.
399
+
400
+ Args:
401
+ short_form: Neuron short form
402
+ return_dataframe: Whether to return DataFrame or list of dicts
403
+ limit: Maximum number of results (-1 for all)
404
+ min_weight: Minimum connection weight
405
+ direction: Connection direction ('both', 'incoming', 'outgoing')
406
+
407
+ Returns:
408
+ Neuron-neuron connectivity data
409
+ """
410
+ return _original_get_neuron_neuron_connectivity(short_form=short_form, return_dataframe=return_dataframe, limit=limit, min_weight=min_weight, direction=direction)
411
+
412
+ def get_neuron_region_connectivity_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
413
+ """
414
+ Enhanced get_neuron_region_connectivity with SOLR caching.
415
+
416
+ Args:
417
+ short_form: Neuron short form
418
+ return_dataframe: Whether to return DataFrame or list of dicts
419
+ limit: Maximum number of results (-1 for all)
420
+
421
+ Returns:
422
+ Neuron-region connectivity data
423
+ """
424
+ return _original_get_neuron_region_connectivity(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
425
+
426
+ def get_expression_overlaps_here_cached(anatomy_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
427
+ """
428
+ Enhanced get_expression_overlaps_here with SOLR caching.
429
+
430
+ Args:
431
+ anatomy_short_form: Anatomy short form
432
+ return_dataframe: Whether to return DataFrame or list of dicts
433
+ limit: Maximum number of results (-1 for all)
434
+
435
+ Returns:
436
+ Expression overlaps data
437
+ """
438
+ return _original_get_expression_overlaps_here(anatomy_short_form=anatomy_short_form, return_dataframe=return_dataframe, limit=limit)
439
+
440
+ def get_anatomy_scrnaseq_cached(anatomy_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
441
+ """
442
+ Enhanced get_anatomy_scrnaseq with SOLR caching.
443
+
444
+ Args:
445
+ anatomy_short_form: Anatomy short form
446
+ return_dataframe: Whether to return DataFrame or list of dicts
447
+ limit: Maximum number of results (-1 for all)
448
+
449
+ Returns:
450
+ Anatomy scRNAseq data
451
+ """
452
+ return _original_get_anatomy_scrnaseq(anatomy_short_form=anatomy_short_form, return_dataframe=return_dataframe, limit=limit)
453
+
454
+ def get_cluster_expression_cached(cluster_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
455
+ """
456
+ Enhanced get_cluster_expression with SOLR caching.
457
+
458
+ Args:
459
+ cluster_short_form: Cluster short form
460
+ return_dataframe: Whether to return DataFrame or list of dicts
461
+ limit: Maximum number of results (-1 for all)
462
+
463
+ Returns:
464
+ Cluster expression data
465
+ """
466
+ return _original_get_cluster_expression(cluster_short_form=cluster_short_form, return_dataframe=return_dataframe, limit=limit)
467
+
468
+ def get_expression_cluster_cached(gene_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
469
+ """
470
+ Enhanced get_expression_cluster with SOLR caching.
471
+
472
+ Args:
473
+ gene_short_form: Gene short form
474
+ return_dataframe: Whether to return DataFrame or list of dicts
475
+ limit: Maximum number of results (-1 for all)
476
+
477
+ Returns:
478
+ Expression cluster data
479
+ """
480
+ return _original_get_expression_cluster(gene_short_form=gene_short_form, return_dataframe=return_dataframe, limit=limit)
481
+
482
+ def get_scrnaseq_dataset_data_cached(dataset_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
483
+ """
484
+ Enhanced get_scrnaseq_dataset_data with SOLR caching.
485
+
486
+ Args:
487
+ dataset_short_form: Dataset short form
488
+ return_dataframe: Whether to return DataFrame or list of dicts
489
+ limit: Maximum number of results (-1 for all)
490
+
491
+ Returns:
492
+ scRNAseq dataset data
493
+ """
494
+ return _original_get_scrnaseq_dataset_data(dataset_short_form=dataset_short_form, return_dataframe=return_dataframe, limit=limit)
495
+
496
+ def get_transgene_expression_here_cached(anatomy_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
497
+ """
498
+ Enhanced get_transgene_expression_here with SOLR caching.
499
+
500
+ Args:
501
+ anatomy_short_form: Anatomy short form
502
+ return_dataframe: Whether to return DataFrame or list of dicts
503
+ limit: Maximum number of results (-1 for all)
504
+
505
+ Returns:
506
+ Transgene expression data
507
+ """
508
+ return _original_get_transgene_expression_here(anatomy_short_form=anatomy_short_form, return_dataframe=return_dataframe, limit=limit)
509
+
510
+ def get_components_of_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
511
+ """
512
+ Enhanced get_components_of with SOLR caching.
513
+
514
+ Args:
515
+ short_form: Anatomical structure short form
516
+ return_dataframe: Whether to return DataFrame or list of dicts
517
+ limit: Maximum number of results (-1 for all)
518
+
519
+ Returns:
520
+ Components of the specified anatomical structure
521
+ """
522
+ return _original_get_components_of(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
523
+
524
+ def get_parts_of_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
525
+ """
526
+ Enhanced get_parts_of with SOLR caching.
527
+
528
+ Args:
529
+ short_form: Anatomical structure short form
530
+ return_dataframe: Whether to return DataFrame or list of dicts
531
+ limit: Maximum number of results (-1 for all)
532
+
533
+ Returns:
534
+ Parts of the specified anatomical structure
535
+ """
536
+ return _original_get_parts_of(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
537
+
538
+ def get_subclasses_of_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
539
+ """
540
+ Enhanced get_subclasses_of with SOLR caching.
541
+
542
+ Args:
543
+ short_form: Class short form
544
+ return_dataframe: Whether to return DataFrame or list of dicts
545
+ limit: Maximum number of results (-1 for all)
546
+
547
+ Returns:
548
+ Subclasses of the specified class
549
+ """
550
+ return _original_get_subclasses_of(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
551
+
552
+ def get_neuron_classes_fasciculating_here_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
553
+ """
554
+ Enhanced get_neuron_classes_fasciculating_here with SOLR caching.
555
+
556
+ Args:
557
+ short_form: Anatomical structure short form
558
+ return_dataframe: Whether to return DataFrame or list of dicts
559
+ limit: Maximum number of results (-1 for all)
560
+
561
+ Returns:
562
+ Neuron classes fasciculating in the specified anatomical structure
563
+ """
564
+ return _original_get_neuron_classes_fasciculating_here(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
565
+
566
+ def get_tracts_nerves_innervating_here_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
567
+ """
568
+ Enhanced get_tracts_nerves_innervating_here with SOLR caching.
569
+
570
+ Args:
571
+ short_form: Anatomical structure short form
572
+ return_dataframe: Whether to return DataFrame or list of dicts
573
+ limit: Maximum number of results (-1 for all)
574
+
575
+ Returns:
576
+ Tracts and nerves innervating the specified anatomical structure
577
+ """
578
+ return _original_get_tracts_nerves_innervating_here(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
579
+
580
+ def get_lineage_clones_in_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
581
+ """
582
+ Enhanced get_lineage_clones_in with SOLR caching.
583
+
584
+ Args:
585
+ short_form: Anatomical structure short form
586
+ return_dataframe: Whether to return DataFrame or list of dicts
587
+ limit: Maximum number of results (-1 for all)
588
+
589
+ Returns:
590
+ Lineage clones in the specified anatomical structure
591
+ """
592
+ return _original_get_lineage_clones_in(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
593
+
594
+ def get_images_neurons_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
595
+ """
596
+ Enhanced get_images_neurons with SOLR caching.
597
+
598
+ Args:
599
+ short_form: Neuron short form
600
+ return_dataframe: Whether to return DataFrame or list of dicts
601
+ limit: Maximum number of results (-1 for all)
602
+
603
+ Returns:
604
+ Images of the specified neuron
605
+ """
606
+ return _original_get_images_neurons(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
607
+
608
+ def get_images_that_develop_from_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
609
+ """
610
+ Enhanced get_images_that_develop_from with SOLR caching.
611
+
612
+ Args:
613
+ short_form: Anatomical structure short form
614
+ return_dataframe: Whether to return DataFrame or list of dicts
615
+ limit: Maximum number of results (-1 for all)
616
+
617
+ Returns:
618
+ Images that develop from the specified anatomical structure
619
+ """
620
+ return _original_get_images_that_develop_from(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
621
+
622
+ def get_expression_pattern_fragments_cached(short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
623
+ """
624
+ Enhanced get_expression_pattern_fragments with SOLR caching.
625
+
626
+ Args:
627
+ short_form: Expression pattern short form
628
+ return_dataframe: Whether to return DataFrame or list of dicts
629
+ limit: Maximum number of results (-1 for all)
630
+
631
+ Returns:
632
+ Expression pattern fragments data
633
+ """
634
+ return _original_get_expression_pattern_fragments(short_form=short_form, return_dataframe=return_dataframe, limit=limit)
635
+
636
+ def get_terms_for_pub_cached(pub_short_form: str, return_dataframe=True, limit: int = -1, force_refresh: bool = False):
637
+ """
638
+ Enhanced get_terms_for_pub with SOLR caching.
639
+
640
+ Args:
641
+ pub_short_form: Publication short form
642
+ return_dataframe: Whether to return DataFrame or list of dicts
643
+ limit: Maximum number of results (-1 for all)
644
+
645
+ Returns:
646
+ Terms associated with the specified publication
647
+ """
648
+ return _original_get_terms_for_pub(pub_short_form=pub_short_form, return_dataframe=return_dataframe, limit=limit)
198
649
 
199
650
  # Convenience function to replace original functions
200
651
  def patch_vfbquery_with_caching():
@@ -204,14 +655,130 @@ def patch_vfbquery_with_caching():
204
655
  This allows existing code to benefit from caching without changes.
205
656
  """
206
657
  import vfbquery.vfb_queries as vfb_queries
658
+ import vfbquery
207
659
 
208
660
  # Store original functions for fallback
209
661
  setattr(vfb_queries, '_original_get_term_info', vfb_queries.get_term_info)
210
662
  setattr(vfb_queries, '_original_get_instances', vfb_queries.get_instances)
663
+ setattr(vfb_queries, '_original_get_templates', vfb_queries.get_templates)
664
+ setattr(vfb_queries, '_original_get_related_anatomy', vfb_queries.get_related_anatomy)
665
+ setattr(vfb_queries, '_original_get_similar_neurons', vfb_queries.get_similar_neurons)
666
+ setattr(vfb_queries, '_original_get_individual_neuron_inputs', vfb_queries.get_individual_neuron_inputs)
667
+ setattr(vfb_queries, '_original_get_expression_overlaps_here', vfb_queries.get_expression_overlaps_here)
668
+ setattr(vfb_queries, '_original_get_neurons_with_part_in', vfb_queries.get_neurons_with_part_in)
669
+ setattr(vfb_queries, '_original_get_neurons_with_synapses_in', vfb_queries.get_neurons_with_synapses_in)
670
+ setattr(vfb_queries, '_original_get_neurons_with_presynaptic_terminals_in', vfb_queries.get_neurons_with_presynaptic_terminals_in)
671
+ setattr(vfb_queries, '_original_get_neurons_with_postsynaptic_terminals_in', vfb_queries.get_neurons_with_postsynaptic_terminals_in)
672
+ setattr(vfb_queries, '_original_get_components_of', vfb_queries.get_components_of)
673
+ setattr(vfb_queries, '_original_get_parts_of', vfb_queries.get_parts_of)
674
+ setattr(vfb_queries, '_original_get_subclasses_of', vfb_queries.get_subclasses_of)
675
+ setattr(vfb_queries, '_original_get_neuron_classes_fasciculating_here', vfb_queries.get_neuron_classes_fasciculating_here)
676
+ setattr(vfb_queries, '_original_get_tracts_nerves_innervating_here', vfb_queries.get_tracts_nerves_innervating_here)
677
+ setattr(vfb_queries, '_original_get_lineage_clones_in', vfb_queries.get_lineage_clones_in)
678
+ setattr(vfb_queries, '_original_get_neuron_neuron_connectivity', vfb_queries.get_neuron_neuron_connectivity)
679
+ setattr(vfb_queries, '_original_get_neuron_region_connectivity', vfb_queries.get_neuron_region_connectivity)
680
+ setattr(vfb_queries, '_original_get_images_neurons', vfb_queries.get_images_neurons)
681
+ setattr(vfb_queries, '_original_get_images_that_develop_from', vfb_queries.get_images_that_develop_from)
682
+ setattr(vfb_queries, '_original_get_expression_pattern_fragments', vfb_queries.get_expression_pattern_fragments)
683
+ setattr(vfb_queries, '_original_get_anatomy_scrnaseq', vfb_queries.get_anatomy_scrnaseq)
684
+ setattr(vfb_queries, '_original_get_cluster_expression', vfb_queries.get_cluster_expression)
685
+ setattr(vfb_queries, '_original_get_expression_cluster', vfb_queries.get_expression_cluster)
686
+ setattr(vfb_queries, '_original_get_scrnaseq_dataset_data', vfb_queries.get_scrnaseq_dataset_data)
687
+ setattr(vfb_queries, '_original_get_similar_morphology', vfb_queries.get_similar_morphology)
688
+ setattr(vfb_queries, '_original_get_similar_morphology_part_of', vfb_queries.get_similar_morphology_part_of)
689
+ setattr(vfb_queries, '_original_get_similar_morphology_part_of_exp', vfb_queries.get_similar_morphology_part_of_exp)
690
+ setattr(vfb_queries, '_original_get_similar_morphology_nb', vfb_queries.get_similar_morphology_nb)
691
+ setattr(vfb_queries, '_original_get_similar_morphology_nb_exp', vfb_queries.get_similar_morphology_nb_exp)
692
+ setattr(vfb_queries, '_original_get_similar_morphology_userdata', vfb_queries.get_similar_morphology_userdata)
693
+ setattr(vfb_queries, '_original_get_painted_domains', vfb_queries.get_painted_domains)
694
+ setattr(vfb_queries, '_original_get_dataset_images', vfb_queries.get_dataset_images)
695
+ setattr(vfb_queries, '_original_get_all_aligned_images', vfb_queries.get_all_aligned_images)
696
+ setattr(vfb_queries, '_original_get_aligned_datasets', vfb_queries.get_aligned_datasets)
697
+ setattr(vfb_queries, '_original_get_all_datasets', vfb_queries.get_all_datasets)
698
+ setattr(vfb_queries, '_original_get_terms_for_pub', vfb_queries.get_terms_for_pub)
699
+ setattr(vfb_queries, '_original_get_transgene_expression_here', vfb_queries.get_transgene_expression_here)
211
700
 
212
- # Replace with cached versions
701
+ # Replace with cached versions in vfb_queries module
213
702
  vfb_queries.get_term_info = get_term_info_cached
214
703
  vfb_queries.get_instances = get_instances_cached
704
+ vfb_queries.get_templates = get_templates_cached
705
+ vfb_queries.get_related_anatomy = get_related_anatomy_cached
706
+ vfb_queries.get_similar_neurons = get_similar_neurons_cached
707
+ vfb_queries.get_individual_neuron_inputs = get_individual_neuron_inputs_cached
708
+ vfb_queries.get_expression_overlaps_here = get_expression_overlaps_here_cached
709
+ vfb_queries.get_neurons_with_part_in = get_neurons_with_part_in_cached
710
+ vfb_queries.get_neurons_with_synapses_in = get_neurons_with_synapses_in_cached
711
+ vfb_queries.get_neurons_with_presynaptic_terminals_in = get_neurons_with_presynaptic_terminals_in_cached
712
+ vfb_queries.get_neurons_with_postsynaptic_terminals_in = get_neurons_with_postsynaptic_terminals_in_cached
713
+ vfb_queries.get_components_of = get_components_of_cached
714
+ vfb_queries.get_parts_of = get_parts_of_cached
715
+ vfb_queries.get_subclasses_of = get_subclasses_of_cached
716
+ vfb_queries.get_neuron_classes_fasciculating_here = get_neuron_classes_fasciculating_here_cached
717
+ vfb_queries.get_tracts_nerves_innervating_here = get_tracts_nerves_innervating_here_cached
718
+ vfb_queries.get_lineage_clones_in = get_lineage_clones_in_cached
719
+ vfb_queries.get_neuron_neuron_connectivity = get_neuron_neuron_connectivity_cached
720
+ vfb_queries.get_neuron_region_connectivity = get_neuron_region_connectivity_cached
721
+ vfb_queries.get_images_neurons = get_images_neurons_cached
722
+ vfb_queries.get_images_that_develop_from = get_images_that_develop_from_cached
723
+ vfb_queries.get_expression_pattern_fragments = get_expression_pattern_fragments_cached
724
+ vfb_queries.get_anatomy_scrnaseq = get_anatomy_scrnaseq_cached
725
+ vfb_queries.get_cluster_expression = get_cluster_expression_cached
726
+ vfb_queries.get_expression_cluster = get_expression_cluster_cached
727
+ vfb_queries.get_scrnaseq_dataset_data = get_scrnaseq_dataset_data_cached
728
+ vfb_queries.get_similar_morphology = get_similar_morphology_cached
729
+ vfb_queries.get_similar_morphology_part_of = get_similar_morphology_part_of_cached
730
+ vfb_queries.get_similar_morphology_part_of_exp = get_similar_morphology_part_of_exp_cached
731
+ vfb_queries.get_similar_morphology_nb = get_similar_morphology_nb_cached
732
+ vfb_queries.get_similar_morphology_nb_exp = get_similar_morphology_nb_exp_cached
733
+ vfb_queries.get_similar_morphology_userdata = get_similar_morphology_userdata_cached
734
+ vfb_queries.get_painted_domains = get_painted_domains_cached
735
+ vfb_queries.get_dataset_images = get_dataset_images_cached
736
+ vfb_queries.get_all_aligned_images = get_all_aligned_images_cached
737
+ vfb_queries.get_aligned_datasets = get_aligned_datasets_cached
738
+ vfb_queries.get_all_datasets = get_all_datasets_cached
739
+ vfb_queries.get_terms_for_pub = get_terms_for_pub_cached
740
+ vfb_queries.get_transgene_expression_here = get_transgene_expression_here_cached
741
+
742
+ # Also replace in the main vfbquery module namespace (since functions were imported with 'from .vfb_queries import *')
743
+ vfbquery.get_term_info = get_term_info_cached
744
+ vfbquery.get_instances = get_instances_cached
745
+ vfbquery.get_templates = get_templates_cached
746
+ vfbquery.get_related_anatomy = get_related_anatomy_cached
747
+ vfbquery.get_similar_neurons = get_similar_neurons_cached
748
+ vfbquery.get_individual_neuron_inputs = get_individual_neuron_inputs_cached
749
+ vfbquery.get_expression_overlaps_here = get_expression_overlaps_here_cached
750
+ vfbquery.get_neurons_with_part_in = get_neurons_with_part_in_cached
751
+ vfbquery.get_neurons_with_synapses_in = get_neurons_with_synapses_in_cached
752
+ vfbquery.get_neurons_with_presynaptic_terminals_in = get_neurons_with_presynaptic_terminals_in_cached
753
+ vfbquery.get_neurons_with_postsynaptic_terminals_in = get_neurons_with_postsynaptic_terminals_in_cached
754
+ vfbquery.get_components_of = get_components_of_cached
755
+ vfbquery.get_parts_of = get_parts_of_cached
756
+ vfbquery.get_subclasses_of = get_subclasses_of_cached
757
+ vfbquery.get_neuron_classes_fasciculating_here = get_neuron_classes_fasciculating_here_cached
758
+ vfbquery.get_tracts_nerves_innervating_here = get_tracts_nerves_innervating_here_cached
759
+ vfbquery.get_lineage_clones_in = get_lineage_clones_in_cached
760
+ vfbquery.get_neuron_neuron_connectivity = get_neuron_neuron_connectivity_cached
761
+ vfbquery.get_neuron_region_connectivity = get_neuron_region_connectivity_cached
762
+ vfbquery.get_images_neurons = get_images_neurons_cached
763
+ vfbquery.get_images_that_develop_from = get_images_that_develop_from_cached
764
+ vfbquery.get_expression_pattern_fragments = get_expression_pattern_fragments_cached
765
+ vfbquery.get_anatomy_scrnaseq = get_anatomy_scrnaseq_cached
766
+ vfbquery.get_cluster_expression = get_cluster_expression_cached
767
+ vfbquery.get_expression_cluster = get_expression_cluster_cached
768
+ vfbquery.get_scrnaseq_dataset_data = get_scrnaseq_dataset_data_cached
769
+ vfbquery.get_similar_morphology = get_similar_morphology_cached
770
+ vfbquery.get_similar_morphology_part_of = get_similar_morphology_part_of_cached
771
+ vfbquery.get_similar_morphology_part_of_exp = get_similar_morphology_part_of_exp_cached
772
+ vfbquery.get_similar_morphology_nb = get_similar_morphology_nb_cached
773
+ vfbquery.get_similar_morphology_nb_exp = get_similar_morphology_nb_exp_cached
774
+ vfbquery.get_similar_morphology_userdata = get_similar_morphology_userdata_cached
775
+ vfbquery.get_painted_domains = get_painted_domains_cached
776
+ vfbquery.get_dataset_images = get_dataset_images_cached
777
+ vfbquery.get_all_aligned_images = get_all_aligned_images_cached
778
+ vfbquery.get_aligned_datasets = get_aligned_datasets_cached
779
+ vfbquery.get_all_datasets = get_all_datasets_cached
780
+ vfbquery.get_terms_for_pub = get_terms_for_pub_cached
781
+ vfbquery.get_transgene_expression_here = get_transgene_expression_here_cached
215
782
 
216
783
  print("VFBquery functions patched with caching support")
217
784
 
@@ -223,5 +790,79 @@ def unpatch_vfbquery_caching():
223
790
  vfb_queries.get_term_info = getattr(vfb_queries, '_original_get_term_info')
224
791
  if hasattr(vfb_queries, '_original_get_instances'):
225
792
  vfb_queries.get_instances = getattr(vfb_queries, '_original_get_instances')
793
+ if hasattr(vfb_queries, '_original_get_templates'):
794
+ vfb_queries.get_templates = getattr(vfb_queries, '_original_get_templates')
795
+ if hasattr(vfb_queries, '_original_get_related_anatomy'):
796
+ vfb_queries.get_related_anatomy = getattr(vfb_queries, '_original_get_related_anatomy')
797
+ if hasattr(vfb_queries, '_original_get_similar_neurons'):
798
+ vfb_queries.get_similar_neurons = getattr(vfb_queries, '_original_get_similar_neurons')
799
+ if hasattr(vfb_queries, '_original_get_individual_neuron_inputs'):
800
+ vfb_queries.get_individual_neuron_inputs = getattr(vfb_queries, '_original_get_individual_neuron_inputs')
801
+ if hasattr(vfb_queries, '_original_get_expression_overlaps_here'):
802
+ vfb_queries.get_expression_overlaps_here = getattr(vfb_queries, '_original_get_expression_overlaps_here')
803
+ if hasattr(vfb_queries, '_original_get_neurons_with_part_in'):
804
+ vfb_queries.get_neurons_with_part_in = getattr(vfb_queries, '_original_get_neurons_with_part_in')
805
+ if hasattr(vfb_queries, '_original_get_neurons_with_synapses_in'):
806
+ vfb_queries.get_neurons_with_synapses_in = getattr(vfb_queries, '_original_get_neurons_with_synapses_in')
807
+ if hasattr(vfb_queries, '_original_get_neurons_with_presynaptic_terminals_in'):
808
+ vfb_queries.get_neurons_with_presynaptic_terminals_in = getattr(vfb_queries, '_original_get_neurons_with_presynaptic_terminals_in')
809
+ if hasattr(vfb_queries, '_original_get_neurons_with_postsynaptic_terminals_in'):
810
+ vfb_queries.get_neurons_with_postsynaptic_terminals_in = getattr(vfb_queries, '_original_get_neurons_with_postsynaptic_terminals_in')
811
+ if hasattr(vfb_queries, '_original_get_components_of'):
812
+ vfb_queries.get_components_of = getattr(vfb_queries, '_original_get_components_of')
813
+ if hasattr(vfb_queries, '_original_get_parts_of'):
814
+ vfb_queries.get_parts_of = getattr(vfb_queries, '_original_get_parts_of')
815
+ if hasattr(vfb_queries, '_original_get_subclasses_of'):
816
+ vfb_queries.get_subclasses_of = getattr(vfb_queries, '_original_get_subclasses_of')
817
+ if hasattr(vfb_queries, '_original_get_neuron_classes_fasciculating_here'):
818
+ vfb_queries.get_neuron_classes_fasciculating_here = getattr(vfb_queries, '_original_get_neuron_classes_fasciculating_here')
819
+ if hasattr(vfb_queries, '_original_get_tracts_nerves_innervating_here'):
820
+ vfb_queries.get_tracts_nerves_innervating_here = getattr(vfb_queries, '_original_get_tracts_nerves_innervating_here')
821
+ if hasattr(vfb_queries, '_original_get_lineage_clones_in'):
822
+ vfb_queries.get_lineage_clones_in = getattr(vfb_queries, '_original_get_lineage_clones_in')
823
+ if hasattr(vfb_queries, '_original_get_neuron_neuron_connectivity'):
824
+ vfb_queries.get_neuron_neuron_connectivity = getattr(vfb_queries, '_original_get_neuron_neuron_connectivity')
825
+ if hasattr(vfb_queries, '_original_get_neuron_region_connectivity'):
826
+ vfb_queries.get_neuron_region_connectivity = getattr(vfb_queries, '_original_get_neuron_region_connectivity')
827
+ if hasattr(vfb_queries, '_original_get_images_neurons'):
828
+ vfb_queries.get_images_neurons = getattr(vfb_queries, '_original_get_images_neurons')
829
+ if hasattr(vfb_queries, '_original_get_images_that_develop_from'):
830
+ vfb_queries.get_images_that_develop_from = getattr(vfb_queries, '_original_get_images_that_develop_from')
831
+ if hasattr(vfb_queries, '_original_get_expression_pattern_fragments'):
832
+ vfb_queries.get_expression_pattern_fragments = getattr(vfb_queries, '_original_get_expression_pattern_fragments')
833
+ if hasattr(vfb_queries, '_original_get_anatomy_scrnaseq'):
834
+ vfb_queries.get_anatomy_scrnaseq = getattr(vfb_queries, '_original_get_anatomy_scrnaseq')
835
+ if hasattr(vfb_queries, '_original_get_cluster_expression'):
836
+ vfb_queries.get_cluster_expression = getattr(vfb_queries, '_original_get_cluster_expression')
837
+ if hasattr(vfb_queries, '_original_get_expression_cluster'):
838
+ vfb_queries.get_expression_cluster = getattr(vfb_queries, '_original_get_expression_cluster')
839
+ if hasattr(vfb_queries, '_original_get_scrnaseq_dataset_data'):
840
+ vfb_queries.get_scrnaseq_dataset_data = getattr(vfb_queries, '_original_get_scrnaseq_dataset_data')
841
+ if hasattr(vfb_queries, '_original_get_similar_morphology'):
842
+ vfb_queries.get_similar_morphology = getattr(vfb_queries, '_original_get_similar_morphology')
843
+ if hasattr(vfb_queries, '_original_get_similar_morphology_part_of'):
844
+ vfb_queries.get_similar_morphology_part_of = getattr(vfb_queries, '_original_get_similar_morphology_part_of')
845
+ if hasattr(vfb_queries, '_original_get_similar_morphology_part_of_exp'):
846
+ vfb_queries.get_similar_morphology_part_of_exp = getattr(vfb_queries, '_original_get_similar_morphology_part_of_exp')
847
+ if hasattr(vfb_queries, '_original_get_similar_morphology_nb'):
848
+ vfb_queries.get_similar_morphology_nb = getattr(vfb_queries, '_original_get_similar_morphology_nb')
849
+ if hasattr(vfb_queries, '_original_get_similar_morphology_nb_exp'):
850
+ vfb_queries.get_similar_morphology_nb_exp = getattr(vfb_queries, '_original_get_similar_morphology_nb_exp')
851
+ if hasattr(vfb_queries, '_original_get_similar_morphology_userdata'):
852
+ vfb_queries.get_similar_morphology_userdata = getattr(vfb_queries, '_original_get_similar_morphology_userdata')
853
+ if hasattr(vfb_queries, '_original_get_painted_domains'):
854
+ vfb_queries.get_painted_domains = getattr(vfb_queries, '_original_get_painted_domains')
855
+ if hasattr(vfb_queries, '_original_get_dataset_images'):
856
+ vfb_queries.get_dataset_images = getattr(vfb_queries, '_original_get_dataset_images')
857
+ if hasattr(vfb_queries, '_original_get_all_aligned_images'):
858
+ vfb_queries.get_all_aligned_images = getattr(vfb_queries, '_original_get_all_aligned_images')
859
+ if hasattr(vfb_queries, '_original_get_aligned_datasets'):
860
+ vfb_queries.get_aligned_datasets = getattr(vfb_queries, '_original_get_aligned_datasets')
861
+ if hasattr(vfb_queries, '_original_get_all_datasets'):
862
+ vfb_queries.get_all_datasets = getattr(vfb_queries, '_original_get_all_datasets')
863
+ if hasattr(vfb_queries, '_original_get_terms_for_pub'):
864
+ vfb_queries.get_terms_for_pub = getattr(vfb_queries, '_original_get_terms_for_pub')
865
+ if hasattr(vfb_queries, '_original_get_transgene_expression_here'):
866
+ vfb_queries.get_transgene_expression_here = getattr(vfb_queries, '_original_get_transgene_expression_here')
226
867
 
227
868
  print("VFBquery functions restored to original (non-cached) versions")