@@ -58,10 +58,6 @@ class Array(Freezable):
58
58
"""
59
59
60
60
data : da .Array
61
- _voxel_size : Coordinate
62
- _offset : Coordinate
63
- _axis_names : list [str ]
64
- _units : list [str ]
65
61
adapter : Adapter
66
62
67
63
def __init__ (
@@ -76,18 +72,14 @@ def __init__(
76
72
):
77
73
self .data = da .from_array (data , chunks = chunks )
78
74
self ._uncollapsed_dims = [True for _ in self .data .shape ]
79
- self .voxel_size = (
80
- voxel_size if voxel_size is not None else (1 ,) * len (data .shape )
81
- )
82
- self .offset = offset if offset is not None else (0 ,) * len (data .shape )
83
- self .axis_names = (
84
- axis_names
85
- if axis_names is not None
86
- else tuple (f"c{ i } ^" for i in range (self .channel_dims ))
87
- + tuple (f"d{ i } " for i in range (self .voxel_size .dims ))
88
- )
89
- self .units = units if units is not None else ("" ,) * self .voxel_size .dims
90
75
self ._source_data = data
76
+ self ._metadata = MetaData (
77
+ offset = Coordinate (offset ) if offset is not None else None ,
78
+ voxel_size = Coordinate (voxel_size ) if voxel_size is not None else None ,
79
+ axis_names = list (axis_names ) if axis_names is not None else None ,
80
+ units = list (units ) if units is not None else None ,
81
+ shape = self ._source_data .shape ,
82
+ )
91
83
92
84
if adapter is not None :
93
85
self .apply_adapter (adapter )
@@ -99,22 +91,13 @@ def __init__(
99
91
100
92
self .validate ()
101
93
102
- @property
103
- def metadata (self ) -> MetaData :
104
- return MetaData (
105
- offset = self ._offset ,
106
- voxel_size = self ._voxel_size ,
107
- axis_names = self ._axis_names ,
108
- units = self ._units ,
109
- )
110
-
111
94
@property
112
95
def chunk_shape (self ) -> Coordinate :
113
96
return Coordinate (self .data .chunksize )
114
97
115
98
def uncollapsed_dims (self , physical : bool = False ) -> list [bool ]:
116
99
if physical :
117
- return self ._uncollapsed_dims [- self ._voxel_size .dims :]
100
+ return self ._uncollapsed_dims [- self ._metadata . voxel_size .dims :]
118
101
else :
119
102
return self ._uncollapsed_dims
120
103
@@ -123,54 +106,54 @@ def offset(self) -> Coordinate:
123
106
"""Get the offset of this array in world units."""
124
107
return Coordinate (
125
108
[
126
- self ._offset [ii ]
109
+ self ._metadata . offset [ii ]
127
110
for ii , uncollapsed in enumerate (self .uncollapsed_dims (physical = True ))
128
111
if uncollapsed
129
112
]
130
113
)
131
114
132
115
@offset .setter
133
116
def offset (self , offset : Iterable [int ]) -> None :
134
- self ._offset = Coordinate (offset )
117
+ self ._metadata . offset = Coordinate (offset )
135
118
136
119
@property
137
120
def voxel_size (self ) -> Coordinate :
138
121
"""Get the size of a voxel in world units."""
139
122
return Coordinate (
140
123
[
141
- self ._voxel_size [ii ]
124
+ self ._metadata . voxel_size [ii ]
142
125
for ii , uncollapsed in enumerate (self .uncollapsed_dims (physical = True ))
143
126
if uncollapsed
144
127
]
145
128
)
146
129
147
130
@voxel_size .setter
148
131
def voxel_size (self , voxel_size : Iterable [int ]) -> None :
149
- self ._voxel_size = Coordinate (voxel_size )
132
+ self ._metadata . voxel_size = Coordinate (voxel_size )
150
133
151
134
@property
152
135
def units (self ) -> list [str ]:
153
136
return [
154
- self ._units [ii ]
137
+ self ._metadata . units [ii ]
155
138
for ii , uncollapsed in enumerate (self .uncollapsed_dims (physical = True ))
156
139
if uncollapsed
157
140
]
158
141
159
142
@units .setter
160
143
def units (self , units : list [str ]) -> None :
161
- self ._units = list (units )
144
+ self ._metadata . units = list (units )
162
145
163
146
@property
164
147
def axis_names (self ) -> list [str ]:
165
148
return [
166
- self ._axis_names [ii ]
149
+ self ._metadata . axis_names [ii ]
167
150
for ii , uncollapsed in enumerate (self .uncollapsed_dims (physical = False ))
168
151
if uncollapsed
169
152
]
170
153
171
154
@axis_names .setter
172
155
def axis_names (self , axis_names ):
173
- self ._axis_names = list (axis_names )
156
+ self ._metadata . axis_names = list (axis_names )
174
157
175
158
@property
176
159
def roi (self ):
@@ -438,9 +421,9 @@ def __index(self, coordinate):
438
421
return index
439
422
440
423
def validate (self ):
441
- self .metadata .validate ()
442
- assert len (self ._axis_names ) == len (self ._source_data .shape ), (
443
- f"Axis names must be provided for every dimension. Got ({ self ._axis_names } ) "
424
+ self ._metadata .validate ()
425
+ assert len (self .axis_names ) == len (self ._source_data .shape ), (
426
+ f"Axis names must be provided for every dimension. Got ({ self .axis_names } ) "
444
427
f"but expected { len (self .shape )} to match the data shape: { self .shape } "
445
428
)
446
429
if self .chunk_shape is not None :
0 commit comments