siibra 1.0a19__py3-none-any.whl → 1.0.1a1__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.

Potentially problematic release.


This version of siibra might be problematic. Click here for more details.

Files changed (82) hide show
  1. siibra/VERSION +1 -1
  2. siibra/__init__.py +7 -7
  3. siibra/commons.py +8 -53
  4. siibra/configuration/__init__.py +1 -1
  5. siibra/configuration/configuration.py +1 -1
  6. siibra/configuration/factory.py +11 -21
  7. siibra/core/__init__.py +1 -1
  8. siibra/core/assignment.py +1 -1
  9. siibra/core/atlas.py +21 -15
  10. siibra/core/concept.py +3 -3
  11. siibra/core/parcellation.py +69 -54
  12. siibra/core/region.py +178 -158
  13. siibra/core/space.py +1 -1
  14. siibra/core/structure.py +2 -2
  15. siibra/exceptions.py +13 -1
  16. siibra/experimental/__init__.py +1 -1
  17. siibra/experimental/contour.py +8 -8
  18. siibra/experimental/cortical_profile_sampler.py +1 -1
  19. siibra/experimental/patch.py +3 -3
  20. siibra/experimental/plane3d.py +12 -12
  21. siibra/explorer/__init__.py +1 -1
  22. siibra/explorer/url.py +2 -2
  23. siibra/explorer/util.py +1 -1
  24. siibra/features/__init__.py +1 -1
  25. siibra/features/anchor.py +14 -15
  26. siibra/features/connectivity/__init__.py +1 -1
  27. siibra/features/connectivity/functional_connectivity.py +1 -1
  28. siibra/features/connectivity/regional_connectivity.py +4 -4
  29. siibra/features/connectivity/streamline_counts.py +1 -1
  30. siibra/features/connectivity/streamline_lengths.py +1 -1
  31. siibra/features/connectivity/tracing_connectivity.py +1 -1
  32. siibra/features/dataset/__init__.py +1 -1
  33. siibra/features/dataset/ebrains.py +1 -1
  34. siibra/features/feature.py +24 -26
  35. siibra/features/image/__init__.py +1 -1
  36. siibra/features/image/image.py +2 -2
  37. siibra/features/image/sections.py +1 -1
  38. siibra/features/image/volume_of_interest.py +1 -1
  39. siibra/features/tabular/__init__.py +1 -1
  40. siibra/features/tabular/bigbrain_intensity_profile.py +2 -2
  41. siibra/features/tabular/cell_density_profile.py +98 -64
  42. siibra/features/tabular/cortical_profile.py +3 -3
  43. siibra/features/tabular/gene_expression.py +1 -1
  44. siibra/features/tabular/layerwise_bigbrain_intensities.py +1 -1
  45. siibra/features/tabular/layerwise_cell_density.py +4 -23
  46. siibra/features/tabular/receptor_density_fingerprint.py +13 -10
  47. siibra/features/tabular/receptor_density_profile.py +1 -1
  48. siibra/features/tabular/regional_timeseries_activity.py +4 -4
  49. siibra/features/tabular/tabular.py +7 -5
  50. siibra/livequeries/__init__.py +1 -1
  51. siibra/livequeries/allen.py +42 -19
  52. siibra/livequeries/bigbrain.py +21 -12
  53. siibra/livequeries/ebrains.py +1 -1
  54. siibra/livequeries/query.py +2 -3
  55. siibra/locations/__init__.py +11 -11
  56. siibra/locations/boundingbox.py +30 -29
  57. siibra/locations/location.py +1 -1
  58. siibra/locations/point.py +7 -7
  59. siibra/locations/{pointset.py → pointcloud.py} +36 -33
  60. siibra/retrieval/__init__.py +1 -1
  61. siibra/retrieval/cache.py +1 -1
  62. siibra/retrieval/datasets.py +4 -4
  63. siibra/retrieval/exceptions/__init__.py +1 -1
  64. siibra/retrieval/repositories.py +13 -30
  65. siibra/retrieval/requests.py +25 -8
  66. siibra/vocabularies/__init__.py +1 -1
  67. siibra/volumes/__init__.py +2 -2
  68. siibra/volumes/parcellationmap.py +119 -91
  69. siibra/volumes/providers/__init__.py +1 -1
  70. siibra/volumes/providers/freesurfer.py +3 -3
  71. siibra/volumes/providers/gifti.py +1 -1
  72. siibra/volumes/providers/neuroglancer.py +67 -41
  73. siibra/volumes/providers/nifti.py +12 -26
  74. siibra/volumes/providers/provider.py +1 -1
  75. siibra/volumes/sparsemap.py +125 -246
  76. siibra/volumes/volume.py +150 -61
  77. {siibra-1.0a19.dist-info → siibra-1.0.1a1.dist-info}/METADATA +26 -4
  78. siibra-1.0.1a1.dist-info/RECORD +84 -0
  79. {siibra-1.0a19.dist-info → siibra-1.0.1a1.dist-info}/WHEEL +1 -1
  80. siibra-1.0a19.dist-info/RECORD +0 -84
  81. {siibra-1.0a19.dist-info → siibra-1.0.1a1.dist-info}/LICENSE +0 -0
  82. {siibra-1.0a19.dist-info → siibra-1.0.1a1.dist-info}/top_level.txt +0 -0
siibra/volumes/volume.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2018-2024
1
+ # Copyright 2018-2025
2
2
  # Institute of Neuroscience and Medicine (INM-1), Forschungszentrum Jülich GmbH
3
3
 
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,9 +19,9 @@ from .providers import provider as _provider
19
19
  from .. import logger
20
20
  from ..retrieval import requests
21
21
  from ..core import space as _space, structure
22
- from ..locations import location, point, pointset, boundingbox
22
+ from ..locations import point, pointcloud, boundingbox
23
23
  from ..commons import resample_img_to_img, siibra_tqdm, affine_scaling, connected_components
24
- from ..exceptions import NoMapAvailableError, SpaceWarpingFailedError
24
+ from ..exceptions import NoMapAvailableError, SpaceWarpingFailedError, EmptyPointCloudError
25
25
 
26
26
  from dataclasses import dataclass
27
27
  from nibabel import Nifti1Image
@@ -92,7 +92,7 @@ class ComponentSpatialProperties:
92
92
  return spatial_props
93
93
 
94
94
 
95
- class Volume(location.Location):
95
+ class Volume(structure.BrainStructure):
96
96
  """
97
97
  A volume is a specific mesh or 3D array,
98
98
  which can be accessible via multiple providers in different formats.
@@ -191,7 +191,7 @@ class Volume(location.Location):
191
191
  ----
192
192
  To use it, clip must be True.
193
193
  fetch_kwargs:
194
- key word arguments that are used for fetchin volumes,
194
+ key word arguments that are used for fetching volumes,
195
195
  such as voi or resolution_mm. Currently, only possible for
196
196
  Neuroglancer volumes except for `format`.
197
197
 
@@ -203,6 +203,19 @@ class Volume(location.Location):
203
203
  if self._boundingbox is not None and len(fetch_kwargs) == 0:
204
204
  return self._boundingbox
205
205
 
206
+ if not self.provides_image:
207
+ raise NotImplementedError("Bounding box calculation of meshes is not implemented yet.")
208
+
209
+ if clip: # clipping requires fetching the image
210
+ img = self.fetch(**fetch_kwargs)
211
+ assert isinstance(img, Nifti1Image)
212
+ return boundingbox.from_array(
213
+ array=np.asanyarray(img.dataobj),
214
+ background=background,
215
+ ).transform(img.affine, space=self.space)
216
+
217
+ # if clipping is not required, providers might have methods of creating
218
+ # bounding boxes without fetching the image
206
219
  fmt = fetch_kwargs.get("format")
207
220
  if (fmt is not None) and (fmt not in self.formats):
208
221
  raise ValueError(
@@ -212,15 +225,15 @@ class Volume(location.Location):
212
225
  providers = [self._providers[fmt]] if fmt else self._providers.values()
213
226
  for provider in providers:
214
227
  try:
228
+ assert clip is False
215
229
  bbox = provider.get_boundingbox(
216
- clip=clip, background=background, **fetch_kwargs
230
+ background=background, **fetch_kwargs
217
231
  )
218
- if bbox.space is None: # provider does usually not know the space!
232
+ if bbox.space is None: # provider do not know the space!
219
233
  bbox._space_cached = self.space
220
234
  bbox.minpoint._space_cached = self.space
221
235
  bbox.maxpoint._space_cached = self.space
222
- except NotImplementedError as e:
223
- logger.info(e)
236
+ except NotImplementedError:
224
237
  continue
225
238
  return bbox
226
239
  raise RuntimeError(f"No bounding box specified by any volume provider of {str(self)}")
@@ -275,7 +288,7 @@ class Volume(location.Location):
275
288
 
276
289
  def evaluate_points(
277
290
  self,
278
- points: Union['point.Point', 'pointset.PointSet'],
291
+ points: Union['point.Point', 'pointcloud.PointCloud'],
279
292
  outside_value: Union[int, float] = 0,
280
293
  **fetch_kwargs
281
294
  ) -> np.ndarray:
@@ -294,7 +307,7 @@ class Volume(location.Location):
294
307
 
295
308
  Parameters
296
309
  ----------
297
- points: PointSet
310
+ points: PointCloud
298
311
  outside_value: int, float. Default: 0
299
312
  fetch_kwargs: dict
300
313
  Any additional arguments are passed to the `fetch()` call for
@@ -314,8 +327,8 @@ class Volume(location.Location):
314
327
  raise NotImplementedError("Filtering of points by pure mesh volumes not yet implemented.")
315
328
 
316
329
  # make sure the points are in the same physical space as this volume
317
- as_pointset = pointset.from_points([points]) if isinstance(points, point.Point) else points
318
- warped = as_pointset.warp(self.space)
330
+ as_pointcloud = pointcloud.from_points([points]) if isinstance(points, point.Point) else points
331
+ warped = as_pointcloud.warp(self.space)
319
332
  assert warped is not None, SpaceWarpingFailedError
320
333
 
321
334
  # get the voxel array of this volume
@@ -342,57 +355,50 @@ class Volume(location.Location):
342
355
 
343
356
  def _points_inside(
344
357
  self,
345
- points: Union['point.Point', 'pointset.PointSet'],
358
+ points: Union['point.Point', 'pointcloud.PointCloud'],
346
359
  keep_labels: bool = True,
347
360
  outside_value: Union[int, float] = 0,
348
361
  **fetch_kwargs
349
- ) -> 'pointset.PointSet':
362
+ ) -> 'pointcloud.PointCloud':
350
363
  """
351
- Reduce a pointset to the points which fall inside nonzero pixels of
364
+ Reduce a pointcloud to the points which fall inside nonzero pixels of
352
365
  this map.
353
366
 
354
367
 
355
- Paramaters
368
+ Parameters
356
369
  ----------
357
- points: PointSet
370
+ points: PointCloud
358
371
  keep_labels: bool
359
- If False, the returned PointSet will be labeled with their indices
360
- in the original PointSet.
372
+ If False, the returned PointCloud will be labeled with their indices
373
+ in the original PointCloud.
361
374
  fetch_kwargs: dict
362
375
  Any additional arguments are passed to the `fetch()` call for
363
376
  retrieving the image data.
364
377
 
365
378
  Returns
366
379
  -------
367
- PointSet
368
- A new PointSet containing only the points inside the volume.
380
+ PointCloud
381
+ A new PointCloud containing only the points inside the volume.
369
382
  Labels reflect the indices of the original points if `keep_labels`
370
383
  is False.
371
384
  """
372
- ptset = pointset.from_points([points]) if isinstance(points, point.Point) else points
385
+ ptset = pointcloud.from_points([points]) if isinstance(points, point.Point) else points
373
386
  values = self.evaluate_points(ptset, outside_value=outside_value, **fetch_kwargs)
374
387
  inside = list(np.where(values != outside_value)[0])
375
- return pointset.from_points(
388
+ return pointcloud.from_points(
376
389
  [ptset[i] for i in inside],
377
390
  newlabels=None if keep_labels else inside
378
391
  )
379
392
 
380
- def union(self, other: location.Location):
381
- if isinstance(other, Volume):
382
- return merge([self, other])
383
- else:
384
- raise NotImplementedError(
385
- f"There are no union method for {(self.__class__.__name__, other.__class__.__name__)}"
386
- )
387
-
388
393
  def intersection(self, other: structure.BrainStructure, **fetch_kwargs) -> structure.BrainStructure:
389
394
  """
390
395
  Compute the intersection of a location with this volume. This will
391
396
  fetch actual image data. Any additional arguments are passed to fetch.
392
397
  """
393
- if isinstance(other, (pointset.PointSet, point.Point)):
394
- points_inside = self._points_inside(other, keep_labels=False, **fetch_kwargs)
395
- if len(points_inside) == 0:
398
+ if isinstance(other, (pointcloud.PointCloud, point.Point)):
399
+ try:
400
+ points_inside = self._points_inside(other, keep_labels=False, **fetch_kwargs)
401
+ except EmptyPointCloudError:
396
402
  return None # BrainStructure.intersects checks for not None
397
403
  if isinstance(other, point.Point): # preserve the type
398
404
  return points_inside[0]
@@ -401,7 +407,7 @@ class Volume(location.Location):
401
407
  return self.get_boundingbox(clip=True, background=0.0, **fetch_kwargs).intersection(other)
402
408
  elif isinstance(other, Volume):
403
409
  if self.space != other.space:
404
- raise NotImplementedError("Cannot intersect volumes from different spaces. Try comparing their boudning boxes.")
410
+ raise NotImplementedError("Cannot intersect volumes from different spaces. Try comparing their bounding boxes.")
405
411
  format = fetch_kwargs.pop('format', 'image')
406
412
  v1 = self.fetch(format=format, **fetch_kwargs)
407
413
  v2 = other.fetch(format=format, **fetch_kwargs)
@@ -423,15 +429,6 @@ class Volume(location.Location):
423
429
  except NoMapAvailableError:
424
430
  return None
425
431
 
426
- def transform(self, affine: np.ndarray, space=None):
427
- raise NotImplementedError("Volume transformation is not yet implemented.")
428
-
429
- def warp(self, space):
430
- if self.space.matches(space):
431
- return self
432
- else:
433
- raise SpaceWarpingFailedError('Warping of full volumes is not yet supported.')
434
-
435
432
  def fetch(
436
433
  self,
437
434
  format: str = None,
@@ -464,7 +461,7 @@ class Volume(location.Location):
464
461
  format = 'neuroglancer/precomputed'
465
462
 
466
463
  if format is None:
467
- # preseve fetch order in SUPPORTED_FORMATS
464
+ # preserve fetch order in SUPPORTED_FORMATS
468
465
  possible_formats = [f for f in self.SUPPORTED_FORMATS if f in self.formats]
469
466
  elif format in self._FORMAT_LOOKUP: # allow use of aliases
470
467
  possible_formats = [f for f in self._FORMAT_LOOKUP[format] if f in self.formats]
@@ -522,7 +519,7 @@ class Volume(location.Location):
522
519
  break
523
520
  else:
524
521
  break
525
- # udpate the cache if fetch is successful
522
+ # update the cache if fetch is successful
526
523
  if result is not None:
527
524
  self._FETCH_CACHE[fetch_hash] = result
528
525
  while len(self._FETCH_CACHE) >= self._FETCH_CACHE_MAX_ENTRIES:
@@ -542,7 +539,7 @@ class Volume(location.Location):
542
539
  """
543
540
  img = self.fetch(**fetch_kwargs)
544
541
  assert isinstance(img, Nifti1Image), NotImplementedError(
545
- f"Connected components for type {type(img)} is not yet implemeneted."
542
+ f"Connected components for type {type(img)} is not yet implemented."
546
543
  )
547
544
  for label, component in connected_components(np.asanyarray(img.dataobj)):
548
545
  yield (
@@ -562,7 +559,7 @@ class Volume(location.Location):
562
559
  found by skimage.measure.label.
563
560
  """
564
561
  assert self.provides_image, NotImplementedError("Spatial properties can currently on be calculated for images.")
565
- img = self.fetch(format="image", **fetch_kwargs)
562
+ img = self.fetch(format=fetch_kwargs.pop("format", "image"), **fetch_kwargs)
566
563
  return ComponentSpatialProperties.compute_from_image(
567
564
  img=img,
568
565
  space=self.space,
@@ -572,7 +569,7 @@ class Volume(location.Location):
572
569
  def draw_samples(self, N: int, sample_size: int = 100, e: float = 1, sigma_mm=None, invert=False, **kwargs):
573
570
  """
574
571
  Draw samples from the volume, by interpreting its values as an
575
- unnormalized empirical probability distribtution.
572
+ unnormalized empirical probability distributions.
576
573
  Any keyword arguments are passed over to fetch()
577
574
  """
578
575
  if not self.provides_image:
@@ -596,7 +593,7 @@ class Volume(location.Location):
596
593
  samples.extend(list(pts[inside, :][choice, :]))
597
594
  if len(samples) > N:
598
595
  break
599
- voxels = pointset.PointSet(
596
+ voxels = pointcloud.PointCloud(
600
597
  np.random.permutation(samples)[:N, :],
601
598
  space=None
602
599
  )
@@ -617,11 +614,96 @@ class Volume(location.Location):
617
614
  img = self.fetch(**kwargs)
618
615
  array = np.asanyarray(img.dataobj)
619
616
  voxels = skimage_feature.peak_local_max(array, min_distance=mindist)
620
- points = pointset.PointSet(voxels, space=None, labels=list(range(len(voxels)))).transform(img.affine, space=self.space)
617
+ points = pointcloud.PointCloud(voxels, space=None, labels=list(range(len(voxels)))).transform(img.affine, space=self.space)
621
618
  points.sigma_mm = [sigma_mm for _ in points]
622
619
  return points
623
620
 
624
621
 
622
+ class FilteredVolume(Volume):
623
+
624
+ def __init__(
625
+ self,
626
+ parent_volume: Volume,
627
+ label: int = None,
628
+ fragment: str = None,
629
+ threshold: float = None,
630
+ ):
631
+ """
632
+ A prescribed Volume to fetch specified label and fragment.
633
+ If threshold is defined, a mask of the values above the threshold.
634
+
635
+ Parameters
636
+ ----------
637
+ parent_volume : Volume
638
+ label : int, default: None
639
+ Get the mask of value equal to label.
640
+ fragment : str, default None
641
+ If a volume is fragmented, get a specified one.
642
+ threshold : float, default None
643
+ Provide a float value to threshold the image.
644
+ """
645
+ name = parent_volume.name
646
+ if label:
647
+ name += f" - label: {label}"
648
+ if fragment:
649
+ name += f" - fragment: {fragment}"
650
+ if threshold:
651
+ name += f" - threshold: {threshold}"
652
+ Volume.__init__(
653
+ self,
654
+ space_spec=parent_volume._space_spec,
655
+ providers=list(parent_volume._providers.values()),
656
+ name=name
657
+ )
658
+ self.fragment = fragment
659
+ self.label = label
660
+ self.threshold = threshold
661
+
662
+ def fetch(
663
+ self,
664
+ format: str = None,
665
+ **kwargs
666
+ ):
667
+ if "fragment" in kwargs:
668
+ assert kwargs.get("fragment") == self.fragment, f"This is a filtered volume that can only fetch fragment '{self.fragment}'."
669
+ else:
670
+ kwargs["fragment"] = self.fragment
671
+ if "label" in kwargs:
672
+ assert kwargs.get("label") == self.label, f"This is a filtered volume that can only fetch label '{self.label}' only."
673
+ else:
674
+ kwargs["label"] = self.label
675
+
676
+ result = super().fetch(format=format, **kwargs)
677
+
678
+ if self.threshold is not None:
679
+ assert self.label is None
680
+ if not isinstance(result, Nifti1Image):
681
+ raise NotImplementedError("Cannot threshold meshes.")
682
+ imgdata = np.asanyarray(result.dataobj)
683
+ return Nifti1Image(
684
+ dataobj=(imgdata > self.threshold).astype("uint8"),
685
+ affine=result.affine,
686
+ dtype="uint8"
687
+ )
688
+
689
+ return result
690
+
691
+ def get_boundingbox(
692
+ self,
693
+ clip: bool = True,
694
+ background: float = 0.0,
695
+ **fetch_kwargs
696
+ ) -> "boundingbox.BoundingBox":
697
+ # NOTE: since some providers enable different simpllified ways to create a
698
+ # bounding box without fetching the image, the correct kwargs must be
699
+ # forwarded since FilteredVolumes enforce their specs to be fetched.
700
+ return super().get_boundingbox(
701
+ clip=clip,
702
+ background=background,
703
+ **fetch_kwargs
704
+ )
705
+
706
+
625
707
  class Subvolume(Volume):
626
708
  """
627
709
  Wrapper class for exposing a z level of a 4D volume to be used like a 3D volume.
@@ -634,7 +716,8 @@ class Subvolume(Volume):
634
716
  providers=[
635
717
  _provider.SubvolumeProvider(p, z=z)
636
718
  for p in parent_volume._providers.values()
637
- ]
719
+ ],
720
+ name=parent_volume.name + f" - z: {z}"
638
721
  )
639
722
 
640
723
 
@@ -682,8 +765,8 @@ def from_array(
682
765
  )
683
766
 
684
767
 
685
- def from_pointset(
686
- points: pointset.PointSet,
768
+ def from_pointcloud(
769
+ points: pointcloud.PointCloud,
687
770
  label: int = None,
688
771
  target: Volume = None,
689
772
  normalize=True,
@@ -695,7 +778,7 @@ def from_pointset(
695
778
 
696
779
  Parameters
697
780
  ----------
698
- points: pointset.PointSet
781
+ points: pointcloud.PointCloud
699
782
  label: int, default: None
700
783
  If None, finds the KDE for all points. Otherwise, selects the points
701
784
  labelled with this integer value.
@@ -727,11 +810,11 @@ def from_pointset(
727
810
  )
728
811
  voxelcount_img[tuple(unique_coords.T)] = counts
729
812
 
730
- # TODO: consider how to handle pointsets with varied sigma_mm
813
+ # TODO: consider how to handle pointclouds with varied sigma_mm
731
814
  sigmas = np.array(points.sigma_mm)[selection]
732
815
  bandwidth = np.mean(sigmas)
733
816
  if len(np.unique(sigmas)) > 1:
734
- logger.warning(f"KDE of pointset uses average bandwith {bandwidth} instead of the points' individual sigmas.")
817
+ logger.warning(f"KDE of pointcloud uses average bandwidth {bandwidth} instead of the points' individual sigmas.")
735
818
 
736
819
  filtered_arr = filters.gaussian(voxelcount_img, bandwidth)
737
820
  if normalize:
@@ -747,7 +830,7 @@ def from_pointset(
747
830
 
748
831
  def merge(volumes: List[Volume], labels: List[int] = [], **fetch_kwargs) -> Volume:
749
832
  """
750
- Merge a list of volumes in the same space into a single volume.
833
+ Merge a list of nifti volumes in the same space into a single volume.
751
834
 
752
835
  Note
753
836
  ----
@@ -758,7 +841,7 @@ def merge(volumes: List[Volume], labels: List[int] = [], **fetch_kwargs) -> Volu
758
841
  ----------
759
842
  volumes : List[Volume]
760
843
  labels : List[int], optional
761
- Supply new labels to replace exisiting values per volume.
844
+ Supply new labels to replace existing values per volume.
762
845
 
763
846
  Returns
764
847
  -------
@@ -775,8 +858,14 @@ def merge(volumes: List[Volume], labels: List[int] = [], **fetch_kwargs) -> Volu
775
858
  space = volumes[0].space
776
859
  assert all(v.space == space for v in volumes), "Cannot merge volumes from different spaces."
777
860
 
861
+ if len(labels) > 0:
862
+ dtype = 'int32'
863
+ elif FilteredVolume in {type(v) for v in volumes}:
864
+ dtype = 'uint8'
865
+ else:
866
+ dtype = volumes[0].fetch().dataobj.dtype
778
867
  template_img = space.get_template().fetch(**fetch_kwargs)
779
- merged_array = np.zeros(template_img.shape, dtype='uint8')
868
+ merged_array = np.zeros(template_img.shape, dtype=dtype)
780
869
 
781
870
  for i, vol in siibra_tqdm(
782
871
  enumerate(volumes),
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: siibra
3
- Version: 1.0a19
3
+ Version: 1.0.1a1
4
4
  Summary: siibra - Software interfaces for interacting with brain atlases
5
5
  Home-page: https://github.com/FZJ-INM1-BDA/siibra-python
6
6
  Author: Big Data Analytics Group, Forschungszentrum Juelich, Institute of Neuroscience and Medicine (INM-1)
@@ -24,9 +24,18 @@ Requires-Dist: scikit-image
24
24
  Requires-Dist: requests
25
25
  Requires-Dist: neuroglancer-scripts
26
26
  Requires-Dist: nilearn
27
+ Requires-Dist: typing-extensions; python_version < "3.8"
27
28
  Requires-Dist: filelock
28
29
  Requires-Dist: ebrains-drive>=0.6.0
29
- Requires-Dist: typing-extensions; python_version < "3.8"
30
+ Dynamic: author
31
+ Dynamic: author-email
32
+ Dynamic: classifier
33
+ Dynamic: description
34
+ Dynamic: description-content-type
35
+ Dynamic: home-page
36
+ Dynamic: requires-dist
37
+ Dynamic: requires-python
38
+ Dynamic: summary
30
39
 
31
40
  |License| |PyPI version| |doi| |Python versions| |Documentation Status|
32
41
 
@@ -34,7 +43,7 @@ Requires-Dist: typing-extensions; python_version < "3.8"
34
43
  siibra - Software interface for interacting with brain atlases
35
44
  ==============================================================
36
45
 
37
- Copyright 2020-2023, Forschungszentrum Jülich GmbH
46
+ Copyright 2018-2024, Forschungszentrum Jülich GmbH
38
47
 
39
48
  *Authors: Big Data Analytics Group, Institute of Neuroscience and
40
49
  Medicine (INM-1), Forschungszentrum Jülich GmbH*
@@ -145,3 +154,16 @@ https://doi.org/10.5281/zenodo.7885728`.
145
154
  :target: https://siibra-python.readthedocs.io/en/latest/?badge=latest
146
155
  .. |doi| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.7885728.svg
147
156
  :target: https://doi.org/10.5281/zenodo.7885728
157
+
158
+
159
+ Versioning
160
+ ==========
161
+ Given a version number MAJOR.MINOR.PATCH, increments imply:
162
+ - MAJOR: incompatible API changes
163
+ - MINOR: a functionality in a backward compatible manner is added
164
+ - PATCH: backward compatible bug fixes and new configuration added such as new maps or features
165
+
166
+ Pre-release
167
+ -----------
168
+ For x.y.z, a full release,
169
+ - `x.y.z-alpha.t` is the development prerelease. By changing `t`, different siibra-configurations are targeted.
@@ -0,0 +1,84 @@
1
+ siibra/VERSION,sha256=9ScdUIV7rZMdtIHh1xiZnvlgNqft2-RuTXdHqzbCywk,14
2
+ siibra/__init__.py,sha256=I5Sc9l00TyrHE9M3zqYa-vuTTku8XrT1txyfdwmoJdo,4716
3
+ siibra/commons.py,sha256=oZNGMp1O25S71Bn82jPZbI_a90HYJZqyv9Ad2kkq86g,27644
4
+ siibra/exceptions.py,sha256=6MlXOadwXcCsceOE4lmy4fLJyAaBCCVvJF6BZlMYjU8,1371
5
+ siibra/configuration/__init__.py,sha256=ArqQ_B8C_O61KA4Fk3ho8ksckbjLu-COOlPGiXyf8LE,752
6
+ siibra/configuration/configuration.py,sha256=3ZI8ZksdpzGqGqYZq2Dj5y_jwpVaiXoWeDl4P2MGIl8,7263
7
+ siibra/configuration/factory.py,sha256=l94pNXJGxLBJvrwGjLi09XZ8A9GEU4ipRaH0igUv7Zg,22627
8
+ siibra/core/__init__.py,sha256=GFTX-RbJoM_EUSXsBcxl4meHoMMFBQUtqsn-Q_2HPMI,735
9
+ siibra/core/assignment.py,sha256=WfpVaKXK58H4LXxMN1Wm2886h0h_8AeDRQ2wNIi2L70,3819
10
+ siibra/core/atlas.py,sha256=lVQJSmIbwPvrQoXSj9OGz6Nub3FFUCU9PpCEdeFPc0w,8549
11
+ siibra/core/concept.py,sha256=4vDpyYzcqffK2xB4zvELHOd_F6LaenI0sKo52PPGNW0,10889
12
+ siibra/core/parcellation.py,sha256=RV6KVHojom0uXGIgISkVMw5hwKwaqKk5xr6-HnptgRQ,14480
13
+ siibra/core/region.py,sha256=67Obqi4PT68CZzvK6GAtzShxXguhpWRXfjSHfBF13v8,44013
14
+ siibra/core/space.py,sha256=ydOw0LIkX17Q1vjLbTRO_KkAoEqogwR_GadxI6oAqs0,4586
15
+ siibra/core/structure.py,sha256=TC7nKU5phDt0I7uUlXS87Ihy98W0FiEfD3eiIPnrLVg,4498
16
+ siibra/experimental/__init__.py,sha256=6yRLup4NclsScLviwlvNp4Uu4qWQ1ky2H7KS1qd06Q8,791
17
+ siibra/experimental/contour.py,sha256=SoFwpUOZbnW8oVEJgEz5OoHIY-y6Bvga_NZI5IhmXpo,2453
18
+ siibra/experimental/cortical_profile_sampler.py,sha256=JPj40JtWBQMNwJS9KcR_q9Uo98aTH58vgME3bAoHueI,2086
19
+ siibra/experimental/patch.py,sha256=-CJIjvZYoaZUlwjVGxWjrAAVodeJeYklBA010D-iWJs,3809
20
+ siibra/experimental/plane3d.py,sha256=v0KQnXlAAt_D8mSRcsW-oWQwq21Qz3FfRoVZoDfYqMA,10856
21
+ siibra/explorer/__init__.py,sha256=XBAeYm4W3HlbWsKtt8gOwqE_FinIEY7RdA6Rg4Y275A,781
22
+ siibra/explorer/url.py,sha256=ja5i-VkEMYwqhlQ-K5tEfnlYTcgMpPFYJCK7IV0d3Us,7069
23
+ siibra/explorer/util.py,sha256=ul82TQZAULdupr4tJBACdkjlHm2mt8LJ9UpwNWGHYhE,2083
24
+ siibra/features/__init__.py,sha256=FER6DMnkPhXSV1XMZWibZdyBwVhIgWYSUGYMEYEKb9c,3970
25
+ siibra/features/anchor.py,sha256=sptZnJPTbkLAi5TWeY5Q1paDTa8YXI0Om5qztTjwwmI,9131
26
+ siibra/features/feature.py,sha256=bREzxEKP0_7PJdjPhwHMl2X6wgcIq0CbiaNVvz8tq7A,35194
27
+ siibra/features/connectivity/__init__.py,sha256=FkPf0vyrLo3ERxrDbsRHUd7FUgJyajD87NiiXIiXhmY,1161
28
+ siibra/features/connectivity/functional_connectivity.py,sha256=9lQoOXv8lZUnyMduAbWABwDIkQC0QTI8V23yx0NjOBg,2122
29
+ siibra/features/connectivity/regional_connectivity.py,sha256=RHK14xVF2rn4kJBIRHfJaJ42hjUlqndb4B5PTw6qdIo,18286
30
+ siibra/features/connectivity/streamline_counts.py,sha256=JaAYf6-1S8NYhkE4lhshCSY__EQ5BFcL2i_XXdFfgrM,1064
31
+ siibra/features/connectivity/streamline_lengths.py,sha256=QeuoW_ZDVa9dxCguaemj4Cq9CCPB8ur8_alhATto2-w,1067
32
+ siibra/features/connectivity/tracing_connectivity.py,sha256=rkYgD8mOZzDp0STo5djhDqOaEdz-9j5EuLffXE0F01A,1083
33
+ siibra/features/dataset/__init__.py,sha256=qRV_P0335b4LnSMiONRpSC4elGckp0FXmtJz_QQuVLA,748
34
+ siibra/features/dataset/ebrains.py,sha256=2lyRVc4NleLuD_n2fPkRG8tNl7Ab6ZtCCR7evsk8Zng,2544
35
+ siibra/features/image/__init__.py,sha256=KEwWl2tjyC8D9QinIKtswBVJ1_eGyelTA-iBqfSFLis,1013
36
+ siibra/features/image/image.py,sha256=DQWM8giRaJ_XeOrD9CKUYOdASZ8N9oE-ZjTYxlj3We8,3585
37
+ siibra/features/image/sections.py,sha256=XxZ5THbKIuRvCwA8f3COk2AgeWwXaR-Y9h14nNa3M-s,961
38
+ siibra/features/image/volume_of_interest.py,sha256=Nfwagn_eqtc1TVD7VDEcItCR4n6qM5m_AbS2BF77ZIY,2654
39
+ siibra/features/tabular/__init__.py,sha256=HA0LcTLvJG2tnYolu48Rn7vxhVHl1X98Pn-27s1XR7s,1176
40
+ siibra/features/tabular/bigbrain_intensity_profile.py,sha256=aUuLpqVgHwzHG6ZCNUS9G4YbrxnWywaUynatFTXdao4,2708
41
+ siibra/features/tabular/cell_density_profile.py,sha256=8dI7MZaAFwaLRR-xPstDAVi3X6z2E7D-ATNmJ2JyEkw,10819
42
+ siibra/features/tabular/cortical_profile.py,sha256=Sod25RABEUlcC8Ct_r2Ujd6FjGbqhJHp0yOIBRAbYho,12542
43
+ siibra/features/tabular/gene_expression.py,sha256=Gg6dkm8YX2TiR-zxDK8qhfwrvYRHh0Bef5b9sry5jsw,9827
44
+ siibra/features/tabular/layerwise_bigbrain_intensities.py,sha256=8Doy4Mnitm-ODBepS2Nep3D1BeXx3lmmjHb-tJWyjVY,2117
45
+ siibra/features/tabular/layerwise_cell_density.py,sha256=v2TDCCinOc_sOeTZP43zSVx_y8uJ_fbFVQ-XHtEx_ww,3783
46
+ siibra/features/tabular/receptor_density_fingerprint.py,sha256=7Uc9j2QUijy-KeqzL8Tf3nfWz2eAv23Qk-Br_iA7_Mk,7354
47
+ siibra/features/tabular/receptor_density_profile.py,sha256=zKHzHpavxo6ZWpGXiiW99XrP6yrdrhVKJmAKeXYFvIg,3725
48
+ siibra/features/tabular/regional_timeseries_activity.py,sha256=J4sXJHrkLrLm3WaMcaWy3QgkA6-bGN_Jj1HmydjDejo,10027
49
+ siibra/features/tabular/tabular.py,sha256=9qI9UicIRX-9FbA31S-KHuLDm-mPFkAeEfxmAfGTldw,5393
50
+ siibra/livequeries/__init__.py,sha256=hToUNmyFq1UW5CxScHyBB-mSZ7kUK_w1Cvrk1OkZQf0,875
51
+ siibra/livequeries/allen.py,sha256=wOmdS2PaRvK7FbBRNz2AxFAwyS86uw_qAVfwlW80JAo,14811
52
+ siibra/livequeries/bigbrain.py,sha256=-eqNFAe43Lo-Yt_hOIDokU07G7fpwaqUiOrFrR1jpFc,8929
53
+ siibra/livequeries/ebrains.py,sha256=KDLu9SPM35Qo46mOiSgxGUEsP2XzZbcYOAl9P_FwybU,5820
54
+ siibra/livequeries/query.py,sha256=on7f-HSm8aqe8YbQucsvjBCvCo3kDv8I3I8TpDoWK2s,1849
55
+ siibra/locations/__init__.py,sha256=mBwPNip68fu8J9M-1ZOMkQs75HmOad2wjXkJhGgiK-U,3343
56
+ siibra/locations/boundingbox.py,sha256=wlVXVL6CAs7K6rhoe9QuV9zDjtLc146iMd2W6t2StRU,16370
57
+ siibra/locations/location.py,sha256=CVawSj0QuKBHLogPtPGCWxeFSjfFGbGqe6RZf12m3iA,4361
58
+ siibra/locations/point.py,sha256=hutOgQ4QiRrGd-utlZ75ynnzpRFBJcp47UU1rBXcVsg,12863
59
+ siibra/locations/pointcloud.py,sha256=h91luJwN974qakhZyaz7bNNj4POjdX3uDyWOcYxdmqs,12361
60
+ siibra/retrieval/__init__.py,sha256=E-UA8rDQZFGkHmAcmit6siONo7G2mH_Y0xgLlR1RfvY,1062
61
+ siibra/retrieval/cache.py,sha256=rqXjWnMBI5RuxUEtC9QW7scZTArwdOQcM4EZveSX3D0,7832
62
+ siibra/retrieval/datasets.py,sha256=kb9D0QNP3R9emc-ss2jwaVLyrWOt-kSjujf-UNZUhRQ,11031
63
+ siibra/retrieval/repositories.py,sha256=7bfHXjbtnpE8oBj24-fxvQDZddGaH7O3g7CrtmN6_jI,29938
64
+ siibra/retrieval/requests.py,sha256=mSXBPZaUSLuLpvN6WSTZF4ccdlmXFUfHbq7ijmSdxS4,23072
65
+ siibra/retrieval/exceptions/__init__.py,sha256=sOuzPHh2xq1p55T0zAcrSW2B1wfwwYEXBOWIuCjGePE,875
66
+ siibra/vocabularies/__init__.py,sha256=oxI4K9tBuFLo4WgRYmzog5IxOBi5Hyf9iBbkhZPhhoc,1288
67
+ siibra/vocabularies/gene_names.json,sha256=i-gnh753GyZtQfX_dWibNYr_d5ccDPHooOwsdeKUYqE,1647972
68
+ siibra/vocabularies/receptor_symbols.json,sha256=F6DZIArPCBmJV_lWGV-zDpBBH_GOJOZm67LBE4qzMa4,5722
69
+ siibra/vocabularies/region_aliases.json,sha256=T2w1wRlxPNTsPppXn0bzC70tNsb8mOjLsoHuxDSYm2w,8563
70
+ siibra/volumes/__init__.py,sha256=mZ7xrI-MsAXMctff2eFiM3-Dx_vX1PNdfYjgP0mZuN4,935
71
+ siibra/volumes/parcellationmap.py,sha256=opdC2TphSVXWuzFpQMBOtLAYmxlNkQRoELe4KE-oTi4,50847
72
+ siibra/volumes/sparsemap.py,sha256=LjTgqOua2NDgsFSNrC7NC2FwDp2FwPUfJPe_lwsBGUQ,17437
73
+ siibra/volumes/volume.py,sha256=EAAaA2yu8Qu_-YGTy4LKp6Pw1qg6FdWSJc0hiujcr9M,32621
74
+ siibra/volumes/providers/__init__.py,sha256=AHZCjutCqO4mnHxyykVjqxlz85jDqFWcSjsa4ciwc1A,934
75
+ siibra/volumes/providers/freesurfer.py,sha256=zvBExeq34d8JwVqj2_HQ04865XwBqRAz5O4yNbNMsms,4893
76
+ siibra/volumes/providers/gifti.py,sha256=vCuUCO5QzVBGVO-SmRNDYVoT70CXu_s7_p9F-TlEIro,6231
77
+ siibra/volumes/providers/neuroglancer.py,sha256=9uMWCNYvqJxuQd0NVPWmc6aG3sZ3cxnpGra7j9sc7xQ,28716
78
+ siibra/volumes/providers/nifti.py,sha256=jTNrq__phdd-nhQoKFhQU5s6je4p2UuUTMQvAunnPHE,10135
79
+ siibra/volumes/providers/provider.py,sha256=9IkEJCYwUwr-rBpQuW1bGOUOEnlzQLXuA9e6WHKTOyM,3695
80
+ siibra-1.0.1a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
81
+ siibra-1.0.1a1.dist-info/METADATA,sha256=8krNAo5-9sNMyKfhzjseNoUtsF6UhqCsjbFa5FWXpiQ,9081
82
+ siibra-1.0.1a1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
83
+ siibra-1.0.1a1.dist-info/top_level.txt,sha256=NF0OSGLL0li2qyC7MaU0iBB5Y9S09_euPpvisD0-8Hg,7
84
+ siibra-1.0.1a1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.5.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,84 +0,0 @@
1
- siibra/VERSION,sha256=Cdi0wzpL8NlKlp0VzB6oQx8xWmnEYrmKnDfIy1W6r5g,7
2
- siibra/__init__.py,sha256=78LtIsJ1EzoYT-yIRednOec9JpC99g9orUqvhyHrztE,4724
3
- siibra/commons.py,sha256=Hp4_5Ri2Ze9CqEKpuIeqPmC74RFlkJcK8jmMGOHGZoU,28880
4
- siibra/exceptions.py,sha256=rpXOjNapL4RHx97XmERwlTMgCpB8YCL08snOi700Jgg,1218
5
- siibra/configuration/__init__.py,sha256=Kp00hs44rVSU5OPuZ26KFJpd6HXtMocEiLiZihdvav4,752
6
- siibra/configuration/configuration.py,sha256=um31WGN0Ozl-3v5bUYECkJEJ5GMrEnrJO3_syUXgzFc,7263
7
- siibra/configuration/factory.py,sha256=2DVqEg5WB4tEZYWN6xoQXjw41ipmiPQ8zNeeR35Rysw,23044
8
- siibra/core/__init__.py,sha256=907tEZ3HxZSZqqhv0md3Sk8t9iy0-aWtbuo1G1oxN_w,735
9
- siibra/core/assignment.py,sha256=9g2lLOj_ftuS623ZlVauTTLtJGAvDfE10wknJXJA7m4,3819
10
- siibra/core/atlas.py,sha256=mYV1MaBBk-zQuUNWvXHfK5bseD7CT9kxSFMODeKAeUg,8331
11
- siibra/core/concept.py,sha256=cmWR2PFdWR3pdVa0NSOiPC-EWl0i_WBjyF3JjKt74gc,10889
12
- siibra/core/parcellation.py,sha256=k_n-yCf0Bo7Zw-xrqtZevpZvWEz8Day1Kg2cCXJrFvk,14005
13
- siibra/core/region.py,sha256=k4vk1Zc1phyR-iGN1Z7Y8GcuWQdHWP17oyWs61Mt3AE,43575
14
- siibra/core/space.py,sha256=0v_7aERZcVNPJmbr_LbeLRkbJj8TGaTrbqnXzr-I5Jg,4586
15
- siibra/core/structure.py,sha256=eHvCRBZEDjTI8xc2UmSgt26ujgDxHTLai8NoGmeUU64,4497
16
- siibra/experimental/__init__.py,sha256=s4bEYpMO4Ox-Xlx3FdnRUNKYs0mTHz5Hu4VnfNXpgxU,791
17
- siibra/experimental/contour.py,sha256=z4-gVvTLcoB-faozy42u3Y-gI9q_rZ0F6qdFJmIbqbQ,2436
18
- siibra/experimental/cortical_profile_sampler.py,sha256=JsX0FCJqvozdhWuayYJ-r3kHNsgSUfA00O9D0X6D7Rg,2086
19
- siibra/experimental/patch.py,sha256=Gp9qm1ToSdv8pTmCYuiPfjcWxo1G675QGAINQH0iCCQ,3803
20
- siibra/experimental/plane3d.py,sha256=Z1MnK3qjGvYLGgNcAimgCejBhAOzcwfF8cYyajTLrAo,10827
21
- siibra/explorer/__init__.py,sha256=ZEBJlKs3r5tFWWoKvfrASb1M031FPwSVeysaktUnhbQ,781
22
- siibra/explorer/url.py,sha256=1UWJyt18gMKTXuixfO8P1Xa5SJDUUagollow67VYT20,7068
23
- siibra/explorer/util.py,sha256=lAy1pd-ym90H-BZx2X8GMT3qJIsRTgGCz6tW3t1duig,2083
24
- siibra/features/__init__.py,sha256=NMmDmfrzscV-RHHZMoyjlH_bYfjNhGDX72dQ6-JCYXg,3970
25
- siibra/features/anchor.py,sha256=5a7eaUXi2yLfIW7cgpsgDCw7Oa2hD6f_cF2Qy4l-lFw,9068
26
- siibra/features/feature.py,sha256=zrMEYBT4RTYSKIOj4uWXRryqAbJbA5PDtsLXe8lVoyw,35395
27
- siibra/features/connectivity/__init__.py,sha256=A7fcXqlAtfFmuymfyOl7A7ecaP8nqIBPFaM76qwh4HA,1161
28
- siibra/features/connectivity/functional_connectivity.py,sha256=3UiPpHfbYAOBwMn7TI79wy1fR9lWwI3ePMSRVziJONw,2122
29
- siibra/features/connectivity/regional_connectivity.py,sha256=6_5MUfhGDrTDvPgDcvyVQjU1hML6mEp3LqcY_HtxrYw,18281
30
- siibra/features/connectivity/streamline_counts.py,sha256=OBOQblhsqnfsvf2kdySRAoWxGsFi4Ulr2PNT9wOu1Ls,1064
31
- siibra/features/connectivity/streamline_lengths.py,sha256=B9D6Y7szMRCuHRwisAorgTJfkq-1aTNB08H_HVZHpJs,1067
32
- siibra/features/connectivity/tracing_connectivity.py,sha256=JehDrEEeYl_i-T81AE_AnamlKfzHkZ3nbheRAybFn24,1083
33
- siibra/features/dataset/__init__.py,sha256=KlHddELER_5IQ-xQ1xx5ExcEtqXWI8gpNvzGlC2on-Y,748
34
- siibra/features/dataset/ebrains.py,sha256=G3-jWGBMLyJm3X8g8vTVtXN2Kws3JZ7zIEDkO9jwWxc,2544
35
- siibra/features/image/__init__.py,sha256=HZ5LdR6DzkkkgsftTu314-DAMMLdf6Sfg6ceYVzYjas,1013
36
- siibra/features/image/image.py,sha256=QtFtXBt4rRkFq6AHeUOaQSCOjgBygIJ7lhz1gjsQ4c4,3585
37
- siibra/features/image/sections.py,sha256=oQparLp7Nj5dLBvUAs09rgnSgAxH86wN1SMmwkit0S0,961
38
- siibra/features/image/volume_of_interest.py,sha256=FuYxt-r6YOWN4tLaaZPL3_GAvX_WcZz3jRHxEnWySnQ,2654
39
- siibra/features/tabular/__init__.py,sha256=sldsgKiwpGOk5PvntIO16lJlWiTy68qVI_pLhepqbdI,1176
40
- siibra/features/tabular/bigbrain_intensity_profile.py,sha256=h4f78waLed4SfqipIvRUtW7sbZmSVw9VG1DzYopzR-o,2706
41
- siibra/features/tabular/cell_density_profile.py,sha256=AGNIrHsmwPMQ0yRM6hsMhieS7T9fAKaZI5DHGsmff9M,9360
42
- siibra/features/tabular/cortical_profile.py,sha256=I3MFsytAjvi6A2GaMhgXnF9-94LnAScIo_GR-HMEAv0,12540
43
- siibra/features/tabular/gene_expression.py,sha256=GbXmsdHCz8eFErTLUd6DXhQaeObftrwl9aIEgzlEdXA,9827
44
- siibra/features/tabular/layerwise_bigbrain_intensities.py,sha256=GIYjX7_Bfs7ywhJBkXd878BZGSiaKUV0BhILr-6D4zc,2117
45
- siibra/features/tabular/layerwise_cell_density.py,sha256=IiGM1D9YPxwEu-bCgi-voDjyjXt4jdQKnOSHCxjHt7E,4280
46
- siibra/features/tabular/receptor_density_fingerprint.py,sha256=GudVpZ2wWF1yGsDFKz4AEU761qA45rItLOwHYpY4Zcs,7299
47
- siibra/features/tabular/receptor_density_profile.py,sha256=ZYgL-3WxevVFtmEQSbR8Ot24VCMg5xzfXYEPBH1oM6k,3725
48
- siibra/features/tabular/regional_timeseries_activity.py,sha256=Y1R6w8ddHqzNEUISqcSZmhvwWssndIyiFnjI7MmDrcI,10020
49
- siibra/features/tabular/tabular.py,sha256=NoNexdPJ3nhSsztWdWnnIHcX6PakcjEAOV-f9azqa-s,5323
50
- siibra/livequeries/__init__.py,sha256=yZ2bFYizwF_Z3F9VLNI95IrHcmSO5lqfFML_juifVHs,875
51
- siibra/livequeries/allen.py,sha256=p1dMBpR_NHpQmR8eP5k_YBnxdaJi11cyoocFRDYiyDo,13733
52
- siibra/livequeries/bigbrain.py,sha256=jisDJwfMhyO_JvE3ZHV__zZY_Ap9snhximF5-N3S7G8,8339
53
- siibra/livequeries/ebrains.py,sha256=nAIhyPlVeRPNmmMKkGATUSDRoGK7aAg8zOGEKuS-z_w,5820
54
- siibra/livequeries/query.py,sha256=Nn-uzizbr_7qecy08n2pyH4i5VvfMKnsYfLT0BHGzoE,1862
55
- siibra/locations/__init__.py,sha256=TPbjufNb7DhCdEnFVo9X8h1paPOTRhTj1hVqn1g9QZM,3316
56
- siibra/locations/boundingbox.py,sha256=eacbu1sftD7QH4rhbwYMimaFaFNLyH0niB77eTnk7B4,16265
57
- siibra/locations/location.py,sha256=Taw7oUIFBdXTE8C3b2vbGicPusJlad_KI1wW6iLL324,4361
58
- siibra/locations/point.py,sha256=fRmWD2_-AKkTX5xR0Z3RyxCN8hCYod_VhlUVcTepZ1U,12851
59
- siibra/locations/pointset.py,sha256=jqqOGuazc5KJqmU4GKfWAEIQomm2ZhvbJHbBMZVVuyM,12023
60
- siibra/retrieval/__init__.py,sha256=bgoasCN6LFDlKVFCJC0q4kfGMZCsxt_NVCcJ5qy0sIo,1062
61
- siibra/retrieval/cache.py,sha256=kVB-hYtvQIQmlCozKlYJPaQxgtCKWOS3jB2qqefCVNc,7832
62
- siibra/retrieval/datasets.py,sha256=Hjai2cSFK1WoMgXp4uMJWBUqlO_APLQ_iDQ__8EpKEI,11031
63
- siibra/retrieval/repositories.py,sha256=Mv49X9qdZ3fg0fN2wKiDhpES4VWH9-rXD7G01O8D5Sk,30443
64
- siibra/retrieval/requests.py,sha256=08HdVMRuWwQsyqs8XslMBdSLZTLDNQlBQDxy3JCHJcU,22540
65
- siibra/retrieval/exceptions/__init__.py,sha256=CEY_n-Eh0_EBXYHDPxmIXzO6C_Km0WQFvENAMvRXmYg,875
66
- siibra/vocabularies/__init__.py,sha256=Qn_xBKrFhla7d_PjDgN6gX4gxroeSRP3ntBZ6gNnvtE,1288
67
- siibra/vocabularies/gene_names.json,sha256=i-gnh753GyZtQfX_dWibNYr_d5ccDPHooOwsdeKUYqE,1647972
68
- siibra/vocabularies/receptor_symbols.json,sha256=F6DZIArPCBmJV_lWGV-zDpBBH_GOJOZm67LBE4qzMa4,5722
69
- siibra/vocabularies/region_aliases.json,sha256=T2w1wRlxPNTsPppXn0bzC70tNsb8mOjLsoHuxDSYm2w,8563
70
- siibra/volumes/__init__.py,sha256=pxykhkXig_D8Co_3zy6CiXt3hE5hUKdX8Oxxr61dhbE,933
71
- siibra/volumes/parcellationmap.py,sha256=ZW166ftPB5RrqJ5ewa7EXoCFMIKfbccGtLiWEW9SxV4,49418
72
- siibra/volumes/sparsemap.py,sha256=IVAmqOrYoaEz7sRZ3tXJMq-afCW7CmIcATeALg22wtw,22394
73
- siibra/volumes/volume.py,sha256=Lmk9sy6XGtsT9FxMShMn11E1vlRbElwXmp4kxOHJEhs,29493
74
- siibra/volumes/providers/__init__.py,sha256=0uDbnsjlAHnxoSdFghzYfhtjVki9721hi7Sp1P6GjNY,934
75
- siibra/volumes/providers/freesurfer.py,sha256=LxPHbfVJLXkP4WVXCYhsildRUZUvzgv6jJOWeNLavw8,4893
76
- siibra/volumes/providers/gifti.py,sha256=mPVFkBFnwbCbMks_ysuNbhe0Pj5ndxONPmq-Xr-ir3w,6231
77
- siibra/volumes/providers/neuroglancer.py,sha256=sfFwOALQ2w3bizYhmMLAic21JEmE7CdObIuOiBxGYW0,27919
78
- siibra/volumes/providers/nifti.py,sha256=xxm09bLowhDzPSUjg5FbXNLNh7QoVKEEEWfVDbKtuuQ,10749
79
- siibra/volumes/providers/provider.py,sha256=jxhOGHrSEeBgN0tAi7p8ju3twtUkhkjrk-e-3-chtxI,3695
80
- siibra-1.0a19.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
81
- siibra-1.0a19.dist-info/METADATA,sha256=TJwoEzv1-eVN1-C254lHcW8T4dasmnGkEkmmZROeO-c,8430
82
- siibra-1.0a19.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
83
- siibra-1.0a19.dist-info/top_level.txt,sha256=NF0OSGLL0li2qyC7MaU0iBB5Y9S09_euPpvisD0-8Hg,7
84
- siibra-1.0a19.dist-info/RECORD,,