siibra 1.0a8__py3-none-any.whl → 1.0a11__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 (37) hide show
  1. siibra/VERSION +1 -1
  2. siibra/commons.py +75 -30
  3. siibra/configuration/factory.py +16 -17
  4. siibra/core/atlas.py +40 -16
  5. siibra/core/region.py +242 -39
  6. siibra/features/__init__.py +19 -8
  7. siibra/features/connectivity/functional_connectivity.py +1 -1
  8. siibra/features/connectivity/regional_connectivity.py +45 -3
  9. siibra/features/feature.py +63 -13
  10. siibra/features/image/image.py +3 -1
  11. siibra/features/tabular/bigbrain_intensity_profile.py +1 -1
  12. siibra/features/tabular/cell_density_profile.py +5 -3
  13. siibra/features/tabular/cortical_profile.py +79 -15
  14. siibra/features/tabular/gene_expression.py +110 -1
  15. siibra/features/tabular/layerwise_bigbrain_intensities.py +1 -1
  16. siibra/features/tabular/layerwise_cell_density.py +3 -1
  17. siibra/features/tabular/receptor_density_fingerprint.py +3 -1
  18. siibra/features/tabular/receptor_density_profile.py +3 -5
  19. siibra/features/tabular/regional_timeseries_activity.py +59 -10
  20. siibra/features/tabular/tabular.py +4 -2
  21. siibra/livequeries/bigbrain.py +34 -0
  22. siibra/locations/location.py +1 -1
  23. siibra/retrieval/cache.py +15 -10
  24. siibra/retrieval/repositories.py +2 -2
  25. siibra/retrieval/requests.py +30 -1
  26. siibra/volumes/parcellationmap.py +18 -22
  27. siibra/volumes/providers/__init__.py +1 -0
  28. siibra/volumes/providers/freesurfer.py +113 -0
  29. siibra/volumes/providers/neuroglancer.py +55 -25
  30. siibra/volumes/providers/nifti.py +14 -16
  31. siibra/volumes/sparsemap.py +1 -1
  32. siibra/volumes/volume.py +13 -15
  33. {siibra-1.0a8.dist-info → siibra-1.0a11.dist-info}/METADATA +1 -1
  34. {siibra-1.0a8.dist-info → siibra-1.0a11.dist-info}/RECORD +37 -36
  35. {siibra-1.0a8.dist-info → siibra-1.0a11.dist-info}/LICENSE +0 -0
  36. {siibra-1.0a8.dist-info → siibra-1.0a11.dist-info}/WHEEL +0 -0
  37. {siibra-1.0a8.dist-info → siibra-1.0a11.dist-info}/top_level.txt +0 -0
@@ -15,7 +15,14 @@
15
15
 
16
16
  from . import provider as _provider
17
17
 
18
- from ...commons import logger, MapType, merge_meshes, SIIBRA_MAX_FETCH_SIZE_GIB
18
+ from ...commons import (
19
+ logger,
20
+ MapType,
21
+ merge_meshes,
22
+ SIIBRA_MAX_FETCH_SIZE_GIB,
23
+ QUIET,
24
+ resample_img_to_img
25
+ )
19
26
  from ...retrieval import requests, cache
20
27
  from ...locations import boundingbox as _boundingbox
21
28
 
@@ -86,10 +93,11 @@ class NeuroglancerProvider(_provider.VolumeProvider, srctype="neuroglancer/preco
86
93
 
87
94
  if len(self._fragments) > 1:
88
95
  if fragment is None:
89
- raise RuntimeError(
90
- f"Merging of fragments not yet implemented in {self.__class__.__name__}. "
91
- f"Specify one of [{', '.join(self._fragments.keys())}] using fetch(fragment=<name>). "
96
+ logger.info(
97
+ f"Merging fragments [{', '.join(self._fragments.keys())}]. "
98
+ f"You can select one using `fragment` kwarg."
92
99
  )
100
+ result = self._merge_fragments(resolution_mm=resolution_mm, voi=voi, **kwargs)
93
101
  else:
94
102
  matched_names = [n for n in self._fragments if fragment.lower() in n.lower()]
95
103
  if len(matched_names) != 1:
@@ -157,45 +165,67 @@ class NeuroglancerProvider(_provider.VolumeProvider, srctype="neuroglancer/preco
157
165
  np.asanyarray(img.dataobj), threshold=background, space=None
158
166
  ).transform(img.affine) # use the affine of the image matching fetch_kwargs
159
167
  else:
160
- shape = frag.shape[:3]
168
+ resolution_mm = fetch_kwargs.get("resolution_mm")
169
+ if resolution_mm is None:
170
+ affine = frag.affine
171
+ shape = frag.shape[:3]
172
+ else:
173
+ scale = frag._select_scale(resolution_mm=resolution_mm)
174
+ affine = scale.affine
175
+ shape = scale.size[:3]
161
176
  next_bbox = _boundingbox.BoundingBox(
162
177
  (0, 0, 0), shape, space=None
163
- ).transform(frag.affine)
178
+ ).transform(affine)
164
179
  bbox = next_bbox if bbox is None else bbox.union(next_bbox)
165
180
  return bbox
166
181
 
167
- def _merge_fragments(self) -> nib.Nifti1Image:
168
- # TODO this only performs nearest neighbor interpolation, optimized for float types.
169
- bbox = self.get_boundingbox(clip=False, background=0.0)
182
+ def _merge_fragments(
183
+ self,
184
+ resolution_mm: float = None,
185
+ voi: _boundingbox.BoundingBox = None,
186
+ **kwargs
187
+ ) -> nib.Nifti1Image:
188
+ with QUIET:
189
+ bbox = self.get_boundingbox(
190
+ clip=False,
191
+ background=0,
192
+ resolution_mm=resolution_mm,
193
+ voi=voi
194
+ )
195
+
170
196
  num_conflicts = 0
171
197
  result = None
172
-
173
- for loader in self._img_loaders.values():
174
- img = loader()
198
+ for frag_vol in self._fragments.values():
199
+ frag_scale = frag_vol._select_scale(
200
+ resolution_mm=resolution_mm,
201
+ bbox=voi,
202
+ max_bytes=kwargs.pop("maxbytes", NeuroglancerVolume.MAX_BYTES)
203
+ )
204
+ img = frag_scale.fetch(voi=voi)
175
205
  if result is None:
176
206
  # build the empty result image with its own affine and voxel space
177
207
  s0 = np.identity(4)
178
208
  s0[:3, -1] = list(bbox.minpoint.transform(np.linalg.inv(img.affine)))
179
209
  result_affine = np.dot(img.affine, s0) # adjust global bounding box offset to get global affine
180
- voxdims = np.asanyarray(bbox.transform(result_affine).shape, dtype="int")
210
+ voxdims = np.asanyarray(np.ceil(
211
+ bbox.transform(np.linalg.inv(result_affine)).shape # transform to the voxel space
212
+ ), dtype="int")
181
213
  result_arr = np.zeros(voxdims, dtype=img.dataobj.dtype)
182
214
  result = nib.Nifti1Image(dataobj=result_arr, affine=result_affine)
183
215
 
184
- arr = np.asanyarray(img.dataobj)
185
- Xs, Ys, Zs = np.where(arr != 0)
186
- Xt, Yt, Zt, _ = np.split(
187
- (np.dot(
188
- np.linalg.inv(result_affine),
189
- np.dot(img.affine, np.c_[Xs, Ys, Zs, Zs * 0 + 1].T)
190
- ) + .5).astype('int'),
191
- 4, axis=0
192
- )
193
- num_conflicts += np.count_nonzero(result_arr[Xt, Yt, Zt])
194
- result_arr[Xt, Yt, Zt] = arr[Xs, Ys, Zs]
216
+ # resample to merge template and update it
217
+ resampled_img = resample_img_to_img(source_img=img, target_img=result)
218
+ arr = np.asanyarray(resampled_img.dataobj)
219
+ nonzero_voxels = arr != 0
220
+ num_conflicts += np.count_nonzero(result_arr[nonzero_voxels])
221
+ result_arr[nonzero_voxels] = arr[nonzero_voxels]
195
222
 
196
223
  if num_conflicts > 0:
197
224
  num_voxels = np.count_nonzero(result_arr)
198
- logger.warning(f"Merging fragments required to overwrite {num_conflicts} conflicting voxels ({num_conflicts/num_voxels*100.:2.1f}%).")
225
+ logger.warning(
226
+ f"Merging fragments required to overwrite {num_conflicts} "
227
+ f"conflicting voxels ({num_conflicts / num_voxels * 100.:2.3f}%)."
228
+ )
199
229
 
200
230
  return result
201
231
 
@@ -15,7 +15,7 @@
15
15
 
16
16
  from . import provider as _provider
17
17
 
18
- from ...commons import logger
18
+ from ...commons import logger, resample_img_to_img
19
19
  from ...retrieval import requests
20
20
  from ...locations import pointset, boundingbox as _boundingbox
21
21
 
@@ -108,11 +108,9 @@ class NiftiProvider(_provider.VolumeProvider, srctype="nii"):
108
108
  return bbox
109
109
 
110
110
  def _merge_fragments(self) -> nib.Nifti1Image:
111
- # TODO this only performs nearest neighbor interpolation, optimized for float types.
112
111
  bbox = self.get_boundingbox(clip=False, background=0.0)
113
112
  num_conflicts = 0
114
113
  result = None
115
-
116
114
  for loader in self._img_loaders.values():
117
115
  img = loader()
118
116
  if result is None:
@@ -120,25 +118,25 @@ class NiftiProvider(_provider.VolumeProvider, srctype="nii"):
120
118
  s0 = np.identity(4)
121
119
  s0[:3, -1] = list(bbox.minpoint.transform(np.linalg.inv(img.affine)))
122
120
  result_affine = np.dot(img.affine, s0) # adjust global bounding box offset to get global affine
123
- voxdims = np.asanyarray(bbox.transform(result_affine).shape, dtype="int")
121
+ voxdims = np.asanyarray(np.ceil(
122
+ bbox.transform(np.linalg.inv(result_affine)).shape
123
+ ), dtype="int")
124
124
  result_arr = np.zeros(voxdims, dtype=img.dataobj.dtype)
125
125
  result = nib.Nifti1Image(dataobj=result_arr, affine=result_affine)
126
126
 
127
- arr = np.asanyarray(img.dataobj)
128
- Xs, Ys, Zs = np.where(arr != 0)
129
- Xt, Yt, Zt, _ = np.split(
130
- (np.dot(
131
- np.linalg.inv(result_affine),
132
- np.dot(img.affine, np.c_[Xs, Ys, Zs, Zs * 0 + 1].T)
133
- ) + .5).astype('int'),
134
- 4, axis=0
135
- )
136
- num_conflicts += np.count_nonzero(result_arr[Xt, Yt, Zt])
137
- result_arr[Xt, Yt, Zt] = arr[Xs, Ys, Zs]
127
+ # resample to merge template and update it
128
+ resampled_img = resample_img_to_img(source_img=img, target_img=result)
129
+ arr = np.asanyarray(resampled_img.dataobj)
130
+ nonzero_voxels = arr != 0
131
+ num_conflicts += np.count_nonzero(result_arr[nonzero_voxels])
132
+ result_arr[nonzero_voxels] = arr[nonzero_voxels]
138
133
 
139
134
  if num_conflicts > 0:
140
135
  num_voxels = np.count_nonzero(result_arr)
141
- logger.warning(f"Merging fragments required to overwrite {num_conflicts} conflicting voxels ({num_conflicts/num_voxels*100.:2.1f}%).")
136
+ logger.warning(
137
+ f"Merging fragments required to overwrite {num_conflicts} "
138
+ f"conflicting voxels ({num_conflicts / num_voxels * 100.:2.1f}%)."
139
+ )
142
140
 
143
141
  return result
144
142
 
@@ -458,7 +458,7 @@ class SparseMap(parcellationmap.Map):
458
458
  """
459
459
  Assign an image volume to this sparse map.
460
460
 
461
- Parameters:
461
+ Parameters
462
462
  -----------
463
463
  queryvolume: Volume
464
464
  the volume to be compared with maps
siibra/volumes/volume.py CHANGED
@@ -20,7 +20,7 @@ from .. import logger
20
20
  from ..retrieval import requests
21
21
  from ..core import space as _space, structure
22
22
  from ..locations import location, point, pointset, boundingbox
23
- from ..commons import resample_array_to_array, siibra_tqdm
23
+ from ..commons import resample_img_to_img, siibra_tqdm
24
24
  from ..exceptions import NoMapAvailableError, SpaceWarpingFailedError
25
25
 
26
26
  from nibabel import Nifti1Image
@@ -52,7 +52,9 @@ class Volume(location.Location):
52
52
  "neuroglancer/precompmesh",
53
53
  "neuroglancer/precompmesh/surface",
54
54
  "gii-mesh",
55
- "gii-label"
55
+ "gii-label",
56
+ "freesurfer-annot",
57
+ "zip/freesurfer-annot",
56
58
  ]
57
59
 
58
60
  SUPPORTED_FORMATS = IMAGE_FORMATS + MESH_FORMATS
@@ -86,7 +88,7 @@ class Volume(location.Location):
86
88
  assert srctype not in self._providers
87
89
  self._providers[srctype] = provider
88
90
  if len(self._providers) == 0:
89
- logger.debug(f"No provider for volume {self}")
91
+ logger.debug(f"No provider for volume {name}")
90
92
 
91
93
  def __hash__(self):
92
94
  return super().__hash__()
@@ -141,7 +143,7 @@ class Volume(location.Location):
141
143
  If the volume provider does not have a bounding box calculator.
142
144
  """
143
145
  fmt = fetch_kwargs.get("format")
144
- if fmt in self._providers:
146
+ if (fmt is not None) and (fmt not in self.formats):
145
147
  raise ValueError(
146
148
  f"Requested format {fmt} is not available as provider of "
147
149
  "this volume. See `volume.formats` for possible options."
@@ -157,7 +159,7 @@ class Volume(location.Location):
157
159
  bbox.minpoint._space_cached = self.space
158
160
  bbox.maxpoint._space_cached = self.space
159
161
  except NotImplementedError as e:
160
- print(str(e))
162
+ logger.info(e)
161
163
  continue
162
164
  return bbox
163
165
  raise RuntimeError(f"No bounding box specified by any volume provider of {str(self)}")
@@ -342,7 +344,7 @@ class Volume(location.Location):
342
344
  v1 = self.fetch(format=format, **fetch_kwargs)
343
345
  v2 = other.fetch(format=format, **fetch_kwargs)
344
346
  arr1 = np.asanyarray(v1.dataobj)
345
- arr2 = resample_array_to_array(np.asanyarray(v2.dataobj), v2.affine, arr1, v1.affine)
347
+ arr2 = np.asanyarray(resample_img_to_img(v2, v1).dataobj)
346
348
  pointwise_min = np.minimum(arr1, arr2)
347
349
  if np.any(pointwise_min):
348
350
  return from_array(
@@ -425,7 +427,7 @@ class Volume(location.Location):
425
427
  fwd_args = {k: v for k, v in kwargs.items() if k != "format"}
426
428
  for try_count in range(6):
427
429
  try:
428
- if fmt == "gii-label":
430
+ if fmt in ["gii-label", "freesurfer-annot", "zip/freesurfer-annot"]:
429
431
  tpl = self.space.get_template(variant=kwargs.get('variant'))
430
432
  mesh = tpl.fetch(**kwargs)
431
433
  labels = self._providers[fmt].fetch(**fwd_args)
@@ -676,7 +678,6 @@ def merge(volumes: List[Volume], labels: List[int] = [], **fetch_kwargs) -> Volu
676
678
  assert all(v.space == space for v in volumes), "Cannot merge volumes from different spaces."
677
679
 
678
680
  template_img = space.get_template().fetch(**fetch_kwargs)
679
- template_arr = np.asanyarray(template_img.dataobj)
680
681
  merged_array = np.zeros(template_img.shape, dtype='uint8')
681
682
 
682
683
  for i, vol in siibra_tqdm(
@@ -687,17 +688,14 @@ def merge(volumes: List[Volume], labels: List[int] = [], **fetch_kwargs) -> Volu
687
688
  disable=len(volumes) < 3
688
689
  ):
689
690
  img = vol.fetch(**fetch_kwargs)
690
- arr_resampled = resample_array_to_array(
691
- source_data=np.asanyarray(img.dataobj),
692
- source_affine=img.affine,
693
- target_data=template_arr,
694
- target_affine=template_img.affine
691
+ resampled_arr = np.asanyarray(
692
+ resample_img_to_img(img, template_img).dataobj
695
693
  )
696
- nonzero_voxels = arr_resampled > 0
694
+ nonzero_voxels = resampled_arr > 0
697
695
  if labels:
698
696
  merged_array[nonzero_voxels] = labels[i]
699
697
  else:
700
- merged_array[nonzero_voxels] = arr_resampled[nonzero_voxels]
698
+ merged_array[nonzero_voxels] = resampled_arr[nonzero_voxels]
701
699
 
702
700
  return from_array(
703
701
  data=merged_array,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siibra
3
- Version: 1.0a8
3
+ Version: 1.0a11
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)
@@ -1,16 +1,16 @@
1
- siibra/VERSION,sha256=lWuEdaPubq6hEIKFx_VdDGeYuyQVT53Swbs1o1Lo0OU,7
1
+ siibra/VERSION,sha256=FkrBfNmMGsIgECPdtrQqgrSl5oiMXSJrUSM_-YKcX-E,7
2
2
  siibra/__init__.py,sha256=01VIBU4L5NLBTNFoAUskc7brJ-8TanNwl1Ejtl47YGI,4463
3
- siibra/commons.py,sha256=94cMkEbYfg-fLKGT6FByqhdhcBsVym-LoUC6F4_2XRY,27532
3
+ siibra/commons.py,sha256=ke6CI3vzMHIveJE8Xw9xZ126JrMFqApUsA1hiOyP6ls,28813
4
4
  siibra/exceptions.py,sha256=bs79_vEK9Dz4TntJnD66L_bJ5Tt4Z0mO9GXQ4f9kNQE,1109
5
5
  siibra/configuration/__init__.py,sha256=-_Kuf0TfMEdFXiSCTAdcHUL_krA8-cxhJypSNNay53Q,752
6
6
  siibra/configuration/configuration.py,sha256=p2R0dxD8HdvrwHokXuTCrVgz9DvXmEmHkxRL_oT0VRI,7263
7
- siibra/configuration/factory.py,sha256=nTvV31QLlbnUq_j1WGEd0blGw_fBubYx1Sy9XFfQbjE,21109
7
+ siibra/configuration/factory.py,sha256=4IGayJJ47PXa9jdwnmcrPLeYa0Pmu1EJehG4LR-smbw,21110
8
8
  siibra/core/__init__.py,sha256=YQkeqGqpOT3aH-PPHeGb1kxSyMbgR3ZHqDCy2I0Zlsk,735
9
9
  siibra/core/assignment.py,sha256=pWkivLA54NrX3j21E_YxSX9_S70MrGuGq_6aQQ5IBB4,3819
10
- siibra/core/atlas.py,sha256=Fj5o4ehlh4BpCdu-LuT9im21_NioWMxhFbIApqF9Mxg,7865
10
+ siibra/core/atlas.py,sha256=XZ0vy6_l-kuiNF6KYs1PpTk2XwBK-aMY6cUKUnLYb3A,8299
11
11
  siibra/core/concept.py,sha256=zL220pIYmqWhEZNMo01p2o0IC37rjApdNd1_dPmbNvU,10496
12
12
  siibra/core/parcellation.py,sha256=iIESwMVg-YQLkCn7KSj8LZl1QDttMxJOVGoRv7DL2kU,13873
13
- siibra/core/region.py,sha256=8n5EZQnQcDb60yygH3nR9-VLFRj5mEDkkhRCB-20t_s,38663
13
+ siibra/core/region.py,sha256=2tDlrjoVKTz2dO4Y3Q2GAVPIWbZuDnGc04iEOPLPveM,44049
14
14
  siibra/core/space.py,sha256=TvOvcBKextuRrptdFKU-je6w5g5lqK0I_Wga73jd0zk,4517
15
15
  siibra/core/structure.py,sha256=cZFR_eyXt6j2KT6ohiOQFnjmntFVcvA4k2FpSinPzWI,4498
16
16
  siibra/experimental/__init__.py,sha256=s4bEYpMO4Ox-Xlx3FdnRUNKYs0mTHz5Hu4VnfNXpgxU,791
@@ -21,63 +21,64 @@ siibra/experimental/plane3d.py,sha256=Z1MnK3qjGvYLGgNcAimgCejBhAOzcwfF8cYyajTLrA
21
21
  siibra/explorer/__init__.py,sha256=9TYF4i5o3guwqDtsQ7mV6MLVmKQIFG0AwxN8PA_6ctw,781
22
22
  siibra/explorer/url.py,sha256=kxfrfz8v6gl_Z2Vu4jJkb54WYk8reFJxf3TXhJGu2VQ,6421
23
23
  siibra/explorer/util.py,sha256=8Ap0tnVFk1LOzD70o-EUbHk6HPLAG4SLaDrvrEzaJGk,2083
24
- siibra/features/__init__.py,sha256=_0iV-NiIqci9PkkYIzdm8Fl474HXYtzFw14VC9xrdOE,3428
24
+ siibra/features/__init__.py,sha256=Jd19RXFBuVemhF6AtrhOG4luocYGauA0FjnaEZdyaa8,3970
25
25
  siibra/features/anchor.py,sha256=cp5cu-tJceenbJESXLe3DXhmjtdhdyTN0KYOIXDkhmU,9068
26
- siibra/features/feature.py,sha256=c9jKLfgp0Eza1z53MiOcI95YMZfIbC5t7wM9tYctVDc,32572
26
+ siibra/features/feature.py,sha256=MXhUZtf_7qwqQuVnmNtqTMfLMvGyVaN8O0ilFqIwv9A,34359
27
27
  siibra/features/connectivity/__init__.py,sha256=XU6w7kX6lN_fZLt0TFGqg39Z9FCfbcotSR79p-JhLV4,1161
28
- siibra/features/connectivity/functional_connectivity.py,sha256=9xHu_GaODGP6Q0--hTf_tMjLtg1IKWI4qw78sZ9GQ5M,2120
29
- siibra/features/connectivity/regional_connectivity.py,sha256=zNohbWDBq7fWz7EDIZjFEDNwMgKnvDfkq9lLUKNfSDw,16736
28
+ siibra/features/connectivity/functional_connectivity.py,sha256=USnlse_qmThBxqINnv9EmecQewxuOvK3Mzy3DqbQBzc,2122
29
+ siibra/features/connectivity/regional_connectivity.py,sha256=uweR77YFQ27B3jzbHu854NRsqUj8aA9ISTz0r7lMe9U,18211
30
30
  siibra/features/connectivity/streamline_counts.py,sha256=ngl7xCiCUOyflyBvjZYa3ShOmtf21E5e0A_BeWfFtSQ,1064
31
31
  siibra/features/connectivity/streamline_lengths.py,sha256=0a09Dag-eRvs1KgHSU47I3xQwbgHICsDozhZyuNzQME,1067
32
32
  siibra/features/connectivity/tracing_connectivity.py,sha256=pyTMTLvkJL3ftk56s0AbT8dHexV4EyuTJ2yX27kLGfc,1083
33
33
  siibra/features/dataset/__init__.py,sha256=5h_wstfa3h35emL1qoKOtcFOiIjKZX9oIy-GwsChEyc,748
34
34
  siibra/features/dataset/ebrains.py,sha256=0cul8rtp6n1lCxTOfLL2AYCWx36q2ILezTXk2i44few,2544
35
35
  siibra/features/image/__init__.py,sha256=UIECVLwKYKeuCPNa4WcjcLDuNr_3JxCyiOQSjBRf36U,1013
36
- siibra/features/image/image.py,sha256=BOX7lx5w8sAgLVLp_pu1E8Kk2zbtEs420rCOL_BWvu0,3342
36
+ siibra/features/image/image.py,sha256=XJczatDzEvEbihq5I6hq5IuifN9avCbieRoVxdoZLpc,3384
37
37
  siibra/features/image/sections.py,sha256=d4TQSs6nIKQ5vgi89htERfWOMgnvOA9k4LhaXBMWNbE,961
38
38
  siibra/features/image/volume_of_interest.py,sha256=DIv9GNOptfungLddA_CfrrCfY8p36rbWCT9xkE6K66w,2654
39
39
  siibra/features/tabular/__init__.py,sha256=3DBwa8JtGd-npeOyyw6kJzcveKXadbqSATyJtTnY3-w,1176
40
- siibra/features/tabular/bigbrain_intensity_profile.py,sha256=Yt3wa8WWjA0F0uzmLwbamIthEmkEQovcRrof94Hr3dQ,2707
41
- siibra/features/tabular/cell_density_profile.py,sha256=YFC64ghEf5AfnyAALMdFE4ZAVbCsTOCFek2gNP6F83k,9245
42
- siibra/features/tabular/cortical_profile.py,sha256=euyAxi5C2Ths0fR93oM5B9oD9ej73dslVabDr4XH2Qo,9632
43
- siibra/features/tabular/gene_expression.py,sha256=r6XsmejxYVd0-pfZxHwu5QsA4ipZiEK_QE47J7agrk0,5035
44
- siibra/features/tabular/layerwise_bigbrain_intensities.py,sha256=051Jd78h-Ndva3vEW-Ch2sYnG6m1H2sRT6xDVX_tBWk,2118
45
- siibra/features/tabular/layerwise_cell_density.py,sha256=CJMcUeN_aawfCzZTLq4xKq-Kas5sHFNVNVL6bqhCOEc,4167
46
- siibra/features/tabular/receptor_density_fingerprint.py,sha256=oQAK2nk_zcxyySHdimdmNXjkgEwnMDszPqZlS5bcJA4,7186
47
- siibra/features/tabular/receptor_density_profile.py,sha256=bBAiLdbF2Lgnc8_33R2XoFQmyie96j5dQsBIkzXsRw0,3702
48
- siibra/features/tabular/regional_timeseries_activity.py,sha256=A2GiDVojuOaH73f4ql8BcHWW7uS2WqfQjL6svSydJEI,8251
49
- siibra/features/tabular/tabular.py,sha256=rZHCA71x6Trx2jOj1pBWZblmCc3jI3PzhMS-nxzMS-E,5210
40
+ siibra/features/tabular/bigbrain_intensity_profile.py,sha256=M2b5Qg75hrsy6CxnSRvdMq-wGjUOATMLt8b4OxfL1us,2706
41
+ siibra/features/tabular/cell_density_profile.py,sha256=kzjsOt_dM3dpvaBQlKZKlfvFjYpvwOpsF0WzNEERfos,9289
42
+ siibra/features/tabular/cortical_profile.py,sha256=Mvp_vobov8z7k0tgqNMRYPdaX3o2cGFvvkC58KQ9BKE,12469
43
+ siibra/features/tabular/gene_expression.py,sha256=3NxSdPNFLKvug69hgduNnds4JQ4wnTeVMFkJq6fCBiY,9803
44
+ siibra/features/tabular/layerwise_bigbrain_intensities.py,sha256=saUb1vzXX4zbmrZwrjpOx0VlPFLEJ9NXZjtouRz33oc,2117
45
+ siibra/features/tabular/layerwise_cell_density.py,sha256=eJxVq794rI7_Tb2K1f8x5j8jXrh_E7XzoXlQA1UVdTw,4209
46
+ siibra/features/tabular/receptor_density_fingerprint.py,sha256=iJMBoILm1vVq2jFP8RCvKyAXHtv00iVbgbuo-2RT3to,7228
47
+ siibra/features/tabular/receptor_density_profile.py,sha256=l8i6WICH1o_J_8wDjnqXdadQIR6Mdoz9VCmaYzuUd_4,3655
48
+ siibra/features/tabular/regional_timeseries_activity.py,sha256=HhdavuEFWWWTmBFNg50HdLipGsJBmqAY7mTVGo7oA0U,9949
49
+ siibra/features/tabular/tabular.py,sha256=pLRheZh8qXZHVQQDQ4RxjhLl7F_7ENoaKD3yW4Za__E,5253
50
50
  siibra/livequeries/__init__.py,sha256=yt5613mOZCxGVPG65oI9rmYrIS2L5BIgS1LT1fO2RTI,875
51
51
  siibra/livequeries/allen.py,sha256=OnjBepPvDA7_X1dQN3QC8pOEip_bG21qG0jkOss680k,13650
52
- siibra/livequeries/bigbrain.py,sha256=nXBYBTUmkYJBOymEgAHbmMjVCberVnCW8A36SKhGqxQ,6872
52
+ siibra/livequeries/bigbrain.py,sha256=-zPSQvivDzwGjWNqQHZDrQw7Z87cGrIk2SJJ-SSPW_g,8339
53
53
  siibra/livequeries/ebrains.py,sha256=QsIjBnjTme_bL5p9StXLnvGIZ2SJDKwORs4V0D1yR8M,5820
54
54
  siibra/livequeries/query.py,sha256=8npNqiovJpWioVe_vYof10y128E7sH0LJh62d7OJTSQ,1862
55
55
  siibra/locations/__init__.py,sha256=rp-a39N3mVTMMuQOP4j6C_R_uziMOaPkIKzTJZuLVUM,3316
56
56
  siibra/locations/boundingbox.py,sha256=5zNnGsMkZn1mLkmJQ_YDuVysf9hU6rZemfw-HJltsQM,15298
57
- siibra/locations/location.py,sha256=iAd0P6tlW4jvgPY2jYQFyPJV0NqVyJlFG1FvPY9VpQM,3991
57
+ siibra/locations/location.py,sha256=I-nOsxH5sFST7uaU_oe14WdJNwe26g-RmEkYjbX-NA4,3993
58
58
  siibra/locations/point.py,sha256=ZWIbKGdqjoNash53sqiKwbGNY4rQRf7OD3TkhTEimB0,12473
59
59
  siibra/locations/pointset.py,sha256=yW_aE0mW3Ji8XgcVqBmf3LEddLBgIgGwN-NVeV2tDLA,10957
60
60
  siibra/retrieval/__init__.py,sha256=pAJ2WsNk9tVY1RddmXzya1iFgJXJarO4TVCJTob1Ej0,1062
61
- siibra/retrieval/cache.py,sha256=l8ztKZBc2iobWCJiiPD2x32domYHRwTvexuHC7XMaRU,7781
61
+ siibra/retrieval/cache.py,sha256=G4YV9rvh0F-awdLXILDU6CHYlzTgIKCuP1uD7tuNCpo,7832
62
62
  siibra/retrieval/datasets.py,sha256=1epaeR_K6B2y8Nq92mMoWSrdjGT9Nx9CP8-xMdQy-h4,11031
63
- siibra/retrieval/repositories.py,sha256=CHnYzyAwGTXRz3fLySfXzGlElO6UWpbNqjw2XHvN-Z0,30441
64
- siibra/retrieval/requests.py,sha256=sQUJqk7mn9dPNzjgR-B6mBSsYhxL5ohgUCh6IbooRZ0,21664
63
+ siibra/retrieval/repositories.py,sha256=M_rE7A0mW9-r4801wH9woQ07sH8Lj6o6UwdoYgjO0eA,30443
64
+ siibra/retrieval/requests.py,sha256=7aqKIWZZy7aStBlZD8Ugi7Kyo7ZTJKl4gG46o8NXnoU,22540
65
65
  siibra/retrieval/exceptions/__init__.py,sha256=BUqXwKksbQsdwrnmIONgFbhwasnhN92BYQ6dqvxW9fY,875
66
66
  siibra/vocabularies/__init__.py,sha256=qwq01KzdTS7ck9rFxOZxNNYCP1GwqgxpK5u4T_w2aKo,1288
67
67
  siibra/vocabularies/gene_names.json,sha256=i-gnh753GyZtQfX_dWibNYr_d5ccDPHooOwsdeKUYqE,1647972
68
68
  siibra/vocabularies/receptor_symbols.json,sha256=F6DZIArPCBmJV_lWGV-zDpBBH_GOJOZm67LBE4qzMa4,5722
69
69
  siibra/vocabularies/region_aliases.json,sha256=T2w1wRlxPNTsPppXn0bzC70tNsb8mOjLsoHuxDSYm2w,8563
70
70
  siibra/volumes/__init__.py,sha256=8JDrNqKmPLcaiPEpHXbjGoFz2ezupLBS9rxdLxOjqfs,933
71
- siibra/volumes/parcellationmap.py,sha256=37vxyBcphRs7B0wQ27PA0ENSwpjB-1_u-kdpVWrSxDE,48644
72
- siibra/volumes/sparsemap.py,sha256=15jPeGVkWhxczy9YSHbk_iwy6-u6Ht716j2SnaIrpgg,22274
73
- siibra/volumes/volume.py,sha256=BAIz_iwjB6o3R7r5jvOHcojDcHXF-h7LsQI2lVnMwpg,25771
74
- siibra/volumes/providers/__init__.py,sha256=J3_qNlZEEmGAAp4itUN69L2zJHLgQf1sD6GdLYXWkx8,871
71
+ siibra/volumes/parcellationmap.py,sha256=qgr_dRFc4uo4bxiRMvIVLOdOOTL-7jOBzNHjMS3Yq-w,48489
72
+ siibra/volumes/sparsemap.py,sha256=aZfJVYGYGrkwZ0mn-MUzLNb6eP1FXtE_v-UdOb-Ut6s,22273
73
+ siibra/volumes/volume.py,sha256=qMmRLi8LRrUdPJwFz8O5cEAaVTQWE4WSB-VfEjhfH14,25692
74
+ siibra/volumes/providers/__init__.py,sha256=gzHWZ8wtAI89H13e8Px2KSkSdiGbLvpO4btD8siOsFc,934
75
+ siibra/volumes/providers/freesurfer.py,sha256=uDKF97U79givztf_dKz47dHmB8kRbx89483DCoVlh40,4893
75
76
  siibra/volumes/providers/gifti.py,sha256=D1aEq740VjIaldw_iYCy0U-yZlUnJHMfTmCLmmNwX7s,6231
76
- siibra/volumes/providers/neuroglancer.py,sha256=jn6eWPG-2QcmrNGU9JIm4j8CaZfHUTOM44OQeG9J7R0,26936
77
- siibra/volumes/providers/nifti.py,sha256=RuRgw776YeHBbz4VySin5WiisCcLR4ODHsvZ0YOxh_I,10522
77
+ siibra/volumes/providers/neuroglancer.py,sha256=DwgMejJkQqAEkfy_Nx4TvRuwbvcg33PyUtEZ_YisQWE,27784
78
+ siibra/volumes/providers/nifti.py,sha256=DB8EP2jEtp-bkSQTwJXSgA_nmJpqhUNnB4k6qbyDC2E,10455
78
79
  siibra/volumes/providers/provider.py,sha256=6Q-47h4pRHtAU3PYpoirnt80bKyzPxxZh02leQ23yQE,3673
79
- siibra-1.0a8.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
80
- siibra-1.0a8.dist-info/METADATA,sha256=5BAyeXmzKzGnKuFkHHVEAEoj_DuHWGCi33dMxb5KLCU,8431
81
- siibra-1.0a8.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
82
- siibra-1.0a8.dist-info/top_level.txt,sha256=NF0OSGLL0li2qyC7MaU0iBB5Y9S09_euPpvisD0-8Hg,7
83
- siibra-1.0a8.dist-info/RECORD,,
80
+ siibra-1.0a11.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
81
+ siibra-1.0a11.dist-info/METADATA,sha256=poLz-a3iIyoH9ai_twrre0YW-XZ-_xdbktFlQCekuMo,8432
82
+ siibra-1.0a11.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
83
+ siibra-1.0a11.dist-info/top_level.txt,sha256=NF0OSGLL0li2qyC7MaU0iBB5Y9S09_euPpvisD0-8Hg,7
84
+ siibra-1.0a11.dist-info/RECORD,,