Skip to content

Commit d2eeff4

Browse files
Overloads for scalars constructor. (#9693)
Summary: #8366 Reviewed By: bsoyluoglu Differential Revision: D71930240 Co-authored-by: Anthony Shoumikhin <[email protected]>
1 parent 4076f93 commit d2eeff4

File tree

3 files changed

+200
-5
lines changed

3 files changed

+200
-5
lines changed

extension/apple/ExecuTorch/Exported/ExecuTorchTensor.h

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,114 @@ __attribute__((deprecated("This API is experimental.")))
434434
shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism
435435
NS_SWIFT_NAME(init(_:shape:strides:dimensionOrder:dataType:shapeDynamism:));
436436

437+
/**
438+
* Initializes a tensor with an array of scalar values, specifying shape, strides, dimension order, and data type,
439+
* using a default dynamic bound shape for shape dynamism.
440+
*
441+
* @param scalars An NSArray of NSNumber objects representing the scalar values.
442+
* @param shape An NSArray of NSNumber objects representing the desired tensor shape.
443+
* @param strides An NSArray of NSNumber objects representing the tensor strides.
444+
* @param dimensionOrder An NSArray of NSNumber objects indicating the order of dimensions.
445+
* @param dataType An ExecuTorchDataType value specifying the element type.
446+
* @return An initialized ExecuTorchTensor instance containing the scalar values.
447+
*/
448+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
449+
shape:(NSArray<NSNumber *> *)shape
450+
strides:(NSArray<NSNumber *> *)strides
451+
dimensionOrder:(NSArray<NSNumber *> *)dimensionOrder
452+
dataType:(ExecuTorchDataType)dataType
453+
NS_SWIFT_NAME(init(_:shape:strides:dimensionOrder:dataType:));
454+
455+
/**
456+
* Initializes a tensor with an array of scalar values, specifying the desired shape, data type, and explicit shape dynamism.
457+
*
458+
* @param scalars An NSArray of NSNumber objects representing the scalar values.
459+
* @param shape An NSArray of NSNumber objects representing the desired tensor shape.
460+
* @param dataType An ExecuTorchDataType value specifying the element type.
461+
* @param shapeDynamism An ExecuTorchShapeDynamism value indicating the shape dynamism.
462+
* @return An initialized ExecuTorchTensor instance.
463+
*/
464+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
465+
shape:(NSArray<NSNumber *> *)shape
466+
dataType:(ExecuTorchDataType)dataType
467+
shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism
468+
NS_SWIFT_NAME(init(_:shape:dataType:shapeDynamism:));
469+
470+
/**
471+
* Initializes a tensor with an array of scalar values and a specified shape,
472+
* using a default dynamic bound shape for shape dynamism.
473+
*
474+
* @param scalars An NSArray of NSNumber objects representing the scalar values.
475+
* @param shape An NSArray of NSNumber objects representing the desired tensor shape.
476+
* @param dataType An ExecuTorchDataType value specifying the element type.
477+
* @return An initialized ExecuTorchTensor instance.
478+
*/
479+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
480+
shape:(NSArray<NSNumber *> *)shape
481+
dataType:(ExecuTorchDataType)dataType
482+
NS_SWIFT_NAME(init(_:shape:dataType:));
483+
484+
/**
485+
* Initializes a tensor with an array of scalar values, specifying the tensor data type and explicit shape dynamism.
486+
* The shape is deduced from the count of the scalar array.
487+
*
488+
* @param scalars An NSArray of NSNumber objects representing the scalar values.
489+
* @param dataType An ExecuTorchDataType value specifying the element type.
490+
* @param shapeDynamism An ExecuTorchShapeDynamism value indicating the shape dynamism.
491+
* @return An initialized ExecuTorchTensor instance with the shape deduced from the scalar count.
492+
*/
493+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
494+
dataType:(ExecuTorchDataType)dataType
495+
shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism
496+
NS_SWIFT_NAME(init(_:dataType:shapeDynamism:));
497+
498+
/**
499+
* Initializes a tensor with an array of scalar values, specifying the tensor data type.
500+
* The shape is deduced from the count of the scalar array.
501+
*
502+
* @param scalars An NSArray of NSNumber objects representing the scalar values.
503+
* @param dataType An ExecuTorchDataType value specifying the element type.
504+
* @return An initialized ExecuTorchTensor instance with the shape deduced from the scalar count.
505+
*/
506+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
507+
dataType:(ExecuTorchDataType)dataType
508+
NS_SWIFT_NAME(init(_:dataType:));
509+
510+
/**
511+
* Initializes a tensor with an array of scalar values, a specified shape and explicit shape dynamism.
512+
* The data type is automatically deduced from the first element of the array.
513+
*
514+
* @param scalars An NSArray of NSNumber objects representing the scalar values.
515+
* @param shape An NSArray of NSNumber objects representing the desired tensor shape.
516+
* @param shapeDynamism An ExecuTorchShapeDynamism value indicating the shape dynamism.
517+
* @return An initialized ExecuTorchTensor instance.
518+
*/
519+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
520+
shape:(NSArray<NSNumber *> *)shape
521+
shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism
522+
NS_SWIFT_NAME(init(_:shape:shapeDynamism:));
523+
524+
/**
525+
* Initializes a tensor with an array of scalar values and a specified shape.
526+
* The data type is automatically deduced from the first element of the array.
527+
*
528+
* @param scalars An NSArray of NSNumber objects representing the scalar values.
529+
* @param shape An NSArray of NSNumber objects representing the desired tensor shape.
530+
* @return An initialized ExecuTorchTensor instance.
531+
*/
532+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
533+
shape:(NSArray<NSNumber *> *)shape
534+
NS_SWIFT_NAME(init(_:shape:));
535+
536+
/**
537+
* Initializes a tensor with an array of scalar values, automatically deducing the tensor shape and data type.
538+
*
539+
* @param scalars An NSArray of NSNumber objects representing the scalar values.
540+
* @return An initialized ExecuTorchTensor instance with shape and data type deduced.
541+
*/
542+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
543+
NS_SWIFT_NAME(init(_:));
544+
437545
@end
438546

439547
NS_ASSUME_NONNULL_END

extension/apple/ExecuTorch/Exported/ExecuTorchTensor.mm

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,4 +367,91 @@ - (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
367367
return [self initWithNativeInstance:&tensor];
368368
}
369369

370+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
371+
shape:(NSArray<NSNumber *> *)shape
372+
strides:(NSArray<NSNumber *> *)strides
373+
dimensionOrder:(NSArray<NSNumber *> *)dimensionOrder
374+
dataType:(ExecuTorchDataType)dataType {
375+
return [self initWithScalars:scalars
376+
shape:shape
377+
strides:strides
378+
dimensionOrder:dimensionOrder
379+
dataType:dataType
380+
shapeDynamism:ExecuTorchShapeDynamismDynamicBound];
381+
}
382+
383+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
384+
shape:(NSArray<NSNumber *> *)shape
385+
dataType:(ExecuTorchDataType)dataType
386+
shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism {
387+
return [self initWithScalars:scalars
388+
shape:shape
389+
strides:@[]
390+
dimensionOrder:@[]
391+
dataType:dataType
392+
shapeDynamism:shapeDynamism];
393+
}
394+
395+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
396+
shape:(NSArray<NSNumber *> *)shape
397+
dataType:(ExecuTorchDataType)dataType {
398+
return [self initWithScalars:scalars
399+
shape:shape
400+
strides:@[]
401+
dimensionOrder:@[]
402+
dataType:dataType
403+
shapeDynamism:ExecuTorchShapeDynamismDynamicBound];
404+
}
405+
406+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
407+
dataType:(ExecuTorchDataType)dataType
408+
shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism {
409+
return [self initWithScalars:scalars
410+
shape:@[@(scalars.count)]
411+
strides:@[]
412+
dimensionOrder:@[]
413+
dataType:dataType
414+
shapeDynamism:shapeDynamism];
415+
}
416+
417+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
418+
dataType:(ExecuTorchDataType)dataType {
419+
return [self initWithScalars:scalars
420+
shape:@[@(scalars.count)]
421+
strides:@[]
422+
dimensionOrder:@[]
423+
dataType:dataType
424+
shapeDynamism:ExecuTorchShapeDynamismDynamicBound];
425+
}
426+
427+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
428+
shape:(NSArray<NSNumber *> *)shape
429+
shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism {
430+
return [self initWithScalars:scalars
431+
shape:shape
432+
strides:@[]
433+
dimensionOrder:@[]
434+
dataType:static_cast<ExecuTorchDataType>(utils::deduceType(scalars.firstObject))
435+
shapeDynamism:shapeDynamism];
436+
}
437+
438+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars
439+
shape:(NSArray<NSNumber *> *)shape {
440+
return [self initWithScalars:scalars
441+
shape:shape
442+
strides:@[]
443+
dimensionOrder:@[]
444+
dataType:static_cast<ExecuTorchDataType>(utils::deduceType(scalars.firstObject))
445+
shapeDynamism:ExecuTorchShapeDynamismDynamicBound];
446+
}
447+
448+
- (instancetype)initWithScalars:(NSArray<NSNumber *> *)scalars {
449+
return [self initWithScalars:scalars
450+
shape:@[@(scalars.count)]
451+
strides:@[]
452+
dimensionOrder:@[]
453+
dataType:static_cast<ExecuTorchDataType>(utils::deduceType(scalars.firstObject))
454+
shapeDynamism:ExecuTorchShapeDynamismDynamicBound];
455+
}
456+
370457
@end

extension/apple/ExecuTorch/__tests__/TensorTest.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -225,12 +225,12 @@ class TensorTest: XCTestCase {
225225
}
226226

227227
func testInitScalarsFloat() {
228-
let data: [Float] = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
229-
let tensor = Tensor(data.map(NSNumber.init), shape: [2, 3], strides: [3, 1], dimensionOrder: [0, 1], dataType: .float, shapeDynamism: .dynamicBound)
228+
let data: [Float] = [1, 2, 3, 4, 5, 6]
229+
let tensor = Tensor(data.map(NSNumber.init))
230230
XCTAssertEqual(tensor.dataType, .float)
231-
XCTAssertEqual(tensor.shape, [2, 3])
232-
XCTAssertEqual(tensor.strides, [3, 1])
233-
XCTAssertEqual(tensor.dimensionOrder, [0, 1])
231+
XCTAssertEqual(tensor.shape, [6])
232+
XCTAssertEqual(tensor.strides, [1])
233+
XCTAssertEqual(tensor.dimensionOrder, [0])
234234
XCTAssertEqual(tensor.count, 6)
235235
tensor.bytes { pointer, count, dataType in
236236
XCTAssertEqual(Array(UnsafeBufferPointer(start: pointer.assumingMemoryBound(to: Float.self), count: count)), data)

0 commit comments

Comments
 (0)