@@ -1076,81 +1076,81 @@ mod sealed {
1076
1076
}
1077
1077
1078
1078
/// Connects the `select!` API to the `Selection` algebra by enabling
1079
- /// `base.reify_view(view )` syntax, where `base: Slice`.
1079
+ /// `base.reify_slice(slice )` syntax, where `base: Slice`.
1080
1080
///
1081
- /// The base slice defines the coordinate system in which the view is
1082
- /// interpreted. Views are themselves `Slice` values, typically
1081
+ /// The base slice defines the coordinate system in which the slice is
1082
+ /// interpreted. Slices are themselves `Slice` values, typically
1083
1083
/// produced by `select!`, and are reified as `Selection` expressions
1084
1084
/// over the base.
1085
- pub trait ReifyView : sealed:: Sealed {
1086
- /// Reify a view as a `Selection` in the coordinate system of
1085
+ pub trait ReifySlice : sealed:: Sealed {
1086
+ /// Reify a slice as a `Selection` in the coordinate system of
1087
1087
/// `self`.
1088
- fn reify_view ( & self , view : & Slice ) -> Result < Selection , SliceError > ;
1088
+ fn reify_slice ( & self , slice : & Slice ) -> Result < Selection , SliceError > ;
1089
1089
1090
- /// Reify multiple views as a union of selections in the
1090
+ /// Reify multiple slices as a union of selections in the
1091
1091
/// coordinate system of `self`.
1092
- fn reify_views < V : AsRef < [ Slice ] > > ( & self , views : V ) -> Result < Selection , SliceError > ;
1092
+ fn reify_slices < V : AsRef < [ Slice ] > > ( & self , slices : V ) -> Result < Selection , SliceError > ;
1093
1093
}
1094
1094
1095
- impl ReifyView for Slice {
1095
+ impl ReifySlice for Slice {
1096
1096
/// Constructs a [`Selection`] expression that symbolically
1097
- /// matches all coordinates in the given `view `, expressed in the
1097
+ /// matches all coordinates in the given `slice `, expressed in the
1098
1098
/// coordinate system of the provided `base` slice (`self`).
1099
1099
///
1100
1100
/// The result is a nested sequence of `range(start..end, step)`
1101
- /// combinators that match the rectangular region covered by `view `
1101
+ /// combinators that match the rectangular region covered by `slice `
1102
1102
/// in base coordinates. This preserves geometry and layout when
1103
- /// `view ` is *layout-aligned* — that is, each of its strides is
1103
+ /// `slice ` is *layout-aligned* — that is, each of its strides is
1104
1104
/// a multiple of the corresponding base stride.
1105
1105
///
1106
- /// If any dimension is not layout-aligned, the view is reified
1106
+ /// If any dimension is not layout-aligned, the slice is reified
1107
1107
/// by explicitly enumerating its coordinates.
1108
1108
///
1109
- /// Returns [`dsl::false_()`] if the view is empty.
1109
+ /// Returns [`dsl::false_()`] if the slice is empty.
1110
1110
///
1111
1111
/// # Errors
1112
1112
///
1113
1113
/// Returns an error if:
1114
1114
/// - The base is not contiguous and row-major
1115
- /// - The view lies outside the bounds of the base
1115
+ /// - The slice lies outside the bounds of the base
1116
1116
///
1117
1117
/// # Example
1118
1118
///
1119
1119
/// ```rust
1120
- /// use ndslice::selection::ReifyView ;
1120
+ /// use ndslice::selection::ReifySlice ;
1121
1121
/// let shape = ndslice::shape!(x = 4, y = 4);
1122
1122
/// let base = shape.slice();
1123
1123
/// let selected = ndslice::select!(shape, x = 1..3, y = 2..4).unwrap();
1124
- /// let view = selected.slice();
1125
- /// let selection = base.reify_view(view ).unwrap();
1124
+ /// let slice = selected.slice();
1125
+ /// let selection = base.reify_slice(slice ).unwrap();
1126
1126
/// ```
1127
- fn reify_view ( & self , view : & Slice ) -> Result < Selection , SliceError > {
1127
+ fn reify_slice ( & self , slice : & Slice ) -> Result < Selection , SliceError > {
1128
1128
// Precondition: the base is contiguous and row major.
1129
1129
if !self . is_contiguous ( ) {
1130
1130
return Err ( SliceError :: NonContiguous ) ;
1131
1131
}
1132
1132
1133
- if view . is_empty ( ) {
1133
+ if slice . is_empty ( ) {
1134
1134
return Ok ( dsl:: false_ ( ) ) ;
1135
1135
}
1136
1136
1137
- if view . num_dim ( ) != self . num_dim ( )
1138
- || view . sizes ( ) . iter ( ) . zip ( self . sizes ( ) ) . any ( |( & v, & s) | v > s)
1137
+ if slice . num_dim ( ) != self . num_dim ( )
1138
+ || slice . sizes ( ) . iter ( ) . zip ( self . sizes ( ) ) . any ( |( & v, & s) | v > s)
1139
1139
{
1140
- return Selection :: of_ranks ( self , & view . iter ( ) . collect :: < BTreeSet < usize > > ( ) ) ;
1140
+ return Selection :: of_ranks ( self , & slice . iter ( ) . collect :: < BTreeSet < usize > > ( ) ) ;
1141
1141
}
1142
1142
1143
- let origin = self . coordinates ( view . offset ( ) ) ?;
1143
+ let origin = self . coordinates ( slice . offset ( ) ) ?;
1144
1144
let mut acc = dsl:: true_ ( ) ;
1145
1145
for dim in ( 0 ..self . num_dim ( ) ) . rev ( ) {
1146
1146
let start = origin[ dim] ;
1147
- let len = view . sizes ( ) [ dim] ;
1148
- let view_stride = view . strides ( ) [ dim] ;
1147
+ let len = slice . sizes ( ) [ dim] ;
1148
+ let slice_stride = slice . strides ( ) [ dim] ;
1149
1149
let base_stride = self . strides ( ) [ dim] ;
1150
1150
1151
- if view_stride % base_stride == 0 {
1151
+ if slice_stride % base_stride == 0 {
1152
1152
// Layout-aligned with base.
1153
- let step = view_stride / base_stride;
1153
+ let step = slice_stride / base_stride;
1154
1154
let end = start + step * len;
1155
1155
// Check that `end` is within bounds.
1156
1156
if end - 1 > self . sizes ( ) [ dim] {
@@ -1166,32 +1166,32 @@ impl ReifyView for Slice {
1166
1166
acc = dsl:: range ( crate :: shape:: Range ( start, Some ( end) , step) , acc) ;
1167
1167
} else {
1168
1168
// Irregular layout; fallback to explicit enumeration.
1169
- return Selection :: of_ranks ( self , & view . iter ( ) . collect :: < BTreeSet < _ > > ( ) ) ;
1169
+ return Selection :: of_ranks ( self , & slice . iter ( ) . collect :: < BTreeSet < _ > > ( ) ) ;
1170
1170
}
1171
1171
}
1172
1172
1173
1173
Ok ( acc)
1174
1174
}
1175
1175
1176
- /// Converts a list of `views ` into a symbolic [`Selection`]
1176
+ /// Converts a list of `slices ` into a symbolic [`Selection`]
1177
1177
/// expression over a common `base` [`Slice`].
1178
1178
///
1179
- /// Each view describes a rectangular subregion of the base. This
1180
- /// function reifies each view into a nested `range(.., ..)`
1179
+ /// Each slice describes a rectangular subregion of the base. This
1180
+ /// function reifies each slice into a nested `range(.., ..)`
1181
1181
/// expression in the base coordinate system and returns the union
1182
1182
/// of all such selections.
1183
1183
///
1184
- /// Empty views are ignored.
1184
+ /// Empty slices are ignored.
1185
1185
///
1186
1186
/// # Errors
1187
1187
///
1188
- /// Returns an error if any view :
1188
+ /// Returns an error if any slice :
1189
1189
/// - Refers to coordinates not contained within the base
1190
1190
///
1191
1191
/// # Example
1192
1192
///
1193
1193
/// ```rust
1194
- /// use ndslice::selection::ReifyView ;
1194
+ /// use ndslice::selection::ReifySlice ;
1195
1195
///
1196
1196
/// let shape = ndslice::shape!(x = 4, y = 4);
1197
1197
/// let base = shape.slice();
@@ -1205,17 +1205,17 @@ impl ReifyView for Slice {
1205
1205
/// .slice()
1206
1206
/// .clone();
1207
1207
///
1208
- /// let sel = base.reify_views (&[a, b]).unwrap();
1208
+ /// let sel = base.reify_slices (&[a, b]).unwrap();
1209
1209
/// ```
1210
- fn reify_views < V : AsRef < [ Slice ] > > ( & self , views : V ) -> Result < Selection , SliceError > {
1211
- let views = views . as_ref ( ) ;
1212
- let mut selections = Vec :: with_capacity ( views . len ( ) ) ;
1210
+ fn reify_slices < V : AsRef < [ Slice ] > > ( & self , slices : V ) -> Result < Selection , SliceError > {
1211
+ let slices = slices . as_ref ( ) ;
1212
+ let mut selections = Vec :: with_capacity ( slices . len ( ) ) ;
1213
1213
1214
- for view in views {
1215
- if view . is_empty ( ) {
1214
+ for slice in slices {
1215
+ if slice . is_empty ( ) {
1216
1216
continue ;
1217
1217
}
1218
- selections. push ( self . reify_view ( view ) ?) ;
1218
+ selections. push ( self . reify_slice ( slice ) ?) ;
1219
1219
}
1220
1220
1221
1221
let mut iter = selections. into_iter ( ) ;
@@ -1445,7 +1445,7 @@ mod tests {
1445
1445
use std:: collections:: BTreeSet ;
1446
1446
1447
1447
use super :: EvalOpts ;
1448
- use super :: ReifyView ;
1448
+ use super :: ReifySlice ;
1449
1449
use super :: Selection ;
1450
1450
use super :: dsl:: * ;
1451
1451
use super :: is_equivalent_true;
@@ -2205,9 +2205,9 @@ mod tests {
2205
2205
}
2206
2206
2207
2207
#[ test]
2208
- fn test_reify_view_empty ( ) {
2208
+ fn test_reify_slice_empty ( ) {
2209
2209
let slice = Slice :: new_row_major ( [ 0 ] ) ;
2210
- let selection = slice. reify_view ( & slice) . unwrap ( ) ;
2210
+ let selection = slice. reify_slice ( & slice) . unwrap ( ) ;
2211
2211
let expected = false_ ( ) ;
2212
2212
assert_structurally_eq ! ( & selection, expected) ;
2213
2213
assert_eq ! (
@@ -2220,14 +2220,14 @@ mod tests {
2220
2220
}
2221
2221
2222
2222
#[ test]
2223
- fn test_reify_view_1d ( ) {
2223
+ fn test_reify_slice_1d ( ) {
2224
2224
let shape = shape ! ( x = 6 ) ; // 1D shape with 6 elements
2225
2225
let base = shape. slice ( ) ;
2226
2226
2227
2227
let selected = select ! ( shape, x = 2 ..5 ) . unwrap ( ) ;
2228
2228
let view = selected. slice ( ) ;
2229
2229
2230
- let selection = base. reify_view ( view) . unwrap ( ) ;
2230
+ let selection = base. reify_slice ( view) . unwrap ( ) ;
2231
2231
let expected = range ( 2 ..5 , true_ ( ) ) ;
2232
2232
assert_structurally_eq ! ( & selection, expected) ;
2233
2233
@@ -2236,14 +2236,14 @@ mod tests {
2236
2236
}
2237
2237
2238
2238
#[ test]
2239
- fn test_reify_view_2d ( ) {
2239
+ fn test_reify_slice_2d ( ) {
2240
2240
let shape = shape ! ( x = 4 , y = 5 ) ; // 2D shape: 4 rows, 5 columns
2241
2241
let base = shape. slice ( ) ;
2242
2242
2243
2243
// Select the middle 2x3 block: rows 1..3 and columns 2..5
2244
2244
let selected = select ! ( shape, x = 1 ..3 , y = 2 ..5 ) . unwrap ( ) ;
2245
2245
let view = selected. slice ( ) ;
2246
- let selection = base. reify_view ( view) . unwrap ( ) ;
2246
+ let selection = base. reify_slice ( view) . unwrap ( ) ;
2247
2247
let expected = range ( 1 ..3 , range ( 2 ..5 , true_ ( ) ) ) ;
2248
2248
assert_structurally_eq ! ( & selection, expected) ;
2249
2249
@@ -2263,17 +2263,17 @@ mod tests {
2263
2263
2264
2264
#[ test]
2265
2265
#[ allow( clippy:: identity_op) ]
2266
- fn test_reify_view_1d_with_stride ( ) {
2266
+ fn test_reify_slice_1d_with_stride ( ) {
2267
2267
let shape = shape ! ( x = 7 ) ; // 1D shape with 7 elements
2268
2268
let selected = shape. select ( "x" , Range ( 0 , None , 2 ) ) . unwrap ( ) ;
2269
2269
let view = selected. slice ( ) ;
2270
2270
assert_eq ! ( view, & Slice :: new( 0 , vec![ 4 ] , vec![ 1 * 2 ] ) . unwrap( ) ) ;
2271
2271
2272
2272
let base = shape. slice ( ) ;
2273
- let selection = base. reify_view ( view) . unwrap ( ) ;
2273
+ let selection = base. reify_slice ( view) . unwrap ( ) ;
2274
2274
// Note: ceil(7 / 2) = 4, hence end = 0 + 2 × 4 = 8. See the
2275
2275
// more detailed explanation in
2276
- // `test_reify_view_2d_with_stride `.
2276
+ // `test_reify_slice_2d_with_stride `.
2277
2277
let expected = range ( Range ( 0 , Some ( 8 ) , 2 ) , true_ ( ) ) ;
2278
2278
assert_structurally_eq ! ( & selection, expected) ;
2279
2279
@@ -2283,7 +2283,7 @@ mod tests {
2283
2283
2284
2284
#[ test]
2285
2285
#[ allow( clippy:: identity_op) ]
2286
- fn test_reify_view_2d_with_stride ( ) {
2286
+ fn test_reify_slice_2d_with_stride ( ) {
2287
2287
// 4 x 4: x = 4, y = 4.
2288
2288
let base = shape ! ( x = 4 , y = 4 ) ;
2289
2289
// Step 1: select odd rows (x = 1..4 step 2)
@@ -2297,7 +2297,7 @@ mod tests {
2297
2297
) ;
2298
2298
2299
2299
let base = base. slice ( ) ;
2300
- let selection = base. reify_view ( view) . unwrap ( ) ;
2300
+ let selection = base. reify_slice ( view) . unwrap ( ) ;
2301
2301
// We use `end = start + step * len` to reify the selection.
2302
2302
// Note: This may yield `end > original_end` (e.g., 5 instead of 4)
2303
2303
// when the selection length was computed via ceiling division.
@@ -2311,7 +2311,7 @@ mod tests {
2311
2311
}
2312
2312
2313
2313
#[ test]
2314
- fn test_reify_view_selects_column_across_rows ( ) {
2314
+ fn test_reify_slice_selects_column_across_rows ( ) {
2315
2315
let shape = shape ! ( host = 2 , gpu = 4 ) ; // shape [2, 4]
2316
2316
let base = shape. slice ( ) ;
2317
2317
@@ -2321,7 +2321,7 @@ mod tests {
2321
2321
let coordinates: Vec < _ > = view. iter ( ) . map ( |i| view. coordinates ( i) . unwrap ( ) ) . collect ( ) ;
2322
2322
assert_eq ! ( coordinates, [ [ 0 , 0 ] , [ 1 , 0 ] ] ) ;
2323
2323
2324
- let selection = base. reify_view ( view) . unwrap ( ) ;
2324
+ let selection = base. reify_slice ( view) . unwrap ( ) ;
2325
2325
let expected = range ( 0 ..2 , range ( 2 ..3 , true_ ( ) ) ) ;
2326
2326
assert_structurally_eq ! ( & selection, expected) ;
2327
2327
@@ -2339,7 +2339,7 @@ mod tests {
2339
2339
}
2340
2340
2341
2341
#[ test]
2342
- fn test_reify_view_dimension_mismatch ( ) {
2342
+ fn test_reify_slice_dimension_mismatch ( ) {
2343
2343
let shape = shape ! ( host = 2 , gpu = 4 ) ;
2344
2344
let base = shape. slice ( ) ;
2345
2345
@@ -2351,7 +2351,7 @@ mod tests {
2351
2351
] ;
2352
2352
2353
2353
let view = Slice :: new ( indices[ 0 ] , vec ! [ indices. len( ) ] , vec ! [ 4 ] ) . unwrap ( ) ;
2354
- let selection = base. reify_view ( & view) . unwrap ( ) ;
2354
+ let selection = base. reify_slice ( & view) . unwrap ( ) ;
2355
2355
2356
2356
let expected = Selection :: of_ranks ( base, & indices. iter ( ) . cloned ( ) . collect ( ) ) . unwrap ( ) ;
2357
2357
assert_structurally_eq ! ( & selection, expected) ;
@@ -2363,7 +2363,7 @@ mod tests {
2363
2363
#[ test]
2364
2364
fn test_union_of_slices_empty ( ) {
2365
2365
let base = Slice :: new_row_major ( [ 2 ] ) ;
2366
- let sel = base. reify_views ( & [ ] ) . unwrap ( ) ;
2366
+ let sel = base. reify_slices ( & [ ] ) . unwrap ( ) ;
2367
2367
assert_structurally_eq ! ( & sel, & false_( ) ) ;
2368
2368
assert_eq ! (
2369
2369
sel. eval( & EvalOpts :: strict( ) , & base)
@@ -2380,7 +2380,7 @@ mod tests {
2380
2380
let selected = select ! ( shape, x = 1 ) . unwrap ( ) ;
2381
2381
let view = selected. slice ( ) . clone ( ) ;
2382
2382
2383
- let selection = base. reify_views ( & [ view] ) . unwrap ( ) ;
2383
+ let selection = base. reify_slices ( & [ view] ) . unwrap ( ) ;
2384
2384
let expected = range ( 1 ..=1 , true_ ( ) ) ;
2385
2385
assert_structurally_eq ! ( & selection, & expected) ;
2386
2386
@@ -2406,7 +2406,7 @@ mod tests {
2406
2406
let b = select ! ( shape, x = 1 ) . unwrap ( ) ;
2407
2407
let view_b = b. slice ( ) . clone ( ) ;
2408
2408
2409
- let selection = base. reify_views ( & [ view_a, view_b] ) . unwrap ( ) ;
2409
+ let selection = base. reify_slices ( & [ view_a, view_b] ) . unwrap ( ) ;
2410
2410
let expected = union (
2411
2411
range ( 0 ..1 , range ( 0 ..2 , true_ ( ) ) ) ,
2412
2412
range ( 1 ..2 , range ( 0 ..2 , true_ ( ) ) ) ,
@@ -2432,7 +2432,7 @@ mod tests {
2432
2432
let selected2 = select ! ( shape, y = 1 ..4 ) . unwrap ( ) ;
2433
2433
let view2 = selected2. slice ( ) . clone ( ) ;
2434
2434
2435
- let selection = base. reify_views ( & [ view1, view2] ) . unwrap ( ) ;
2435
+ let selection = base. reify_slices ( & [ view1, view2] ) . unwrap ( ) ;
2436
2436
let expected = union (
2437
2437
range ( 0 ..1 , range ( 0 ..2 , true_ ( ) ) ) ,
2438
2438
range ( 0 ..1 , range ( 1 ..4 , true_ ( ) ) ) ,
0 commit comments