torch-rb 0.10.0 → 0.11.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/README.md +16 -3
- data/codegen/function.rb +1 -1
- data/codegen/generate_functions.rb +46 -11
- data/codegen/native_functions.yaml +1362 -199
- data/ext/torch/extconf.rb +1 -13
- data/ext/torch/ruby_arg_parser.h +37 -9
- data/ext/torch/utils.h +7 -0
- data/lib/torch/tensor.rb +8 -0
- data/lib/torch/version.rb +1 -1
- data/lib/torch.rb +1 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2f88c938144476a772fd7c606751e0a6e67a338cb1c37ede9c2011db7fc4579
|
4
|
+
data.tar.gz: f4408457e3bf8c7bf9b42863459248aa592c70e8e3924cdbe72863a979e65106
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90ebc506942809b02331f7accce6e93e714a57b5d2f58b06ad0d3c60204b947eba61fe0bf43431a19e27890f5c764cb348ccb1785a2ffccfba7969f4726b6f1f
|
7
|
+
data.tar.gz: 410af7b4934f79aaae94f6c1bde1d17ee8b043f02354b4ea9f139271575f43abb90afeba162badfa01a3ec406612ae6cdcb4a2adfb1067b1634982a590d10cc9
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
## 0.11.0 (2022-07-06)
|
2
|
+
|
3
|
+
- Updated LibTorch to 1.12.0
|
4
|
+
- Dropped support for Ruby < 2.7
|
5
|
+
|
6
|
+
## 0.10.2 (2022-06-14)
|
7
|
+
|
8
|
+
- Improved numeric operations between scalars and tensors
|
9
|
+
- Fixed `dtype` of `cumsum` method
|
10
|
+
|
11
|
+
## 0.10.1 (2022-04-12)
|
12
|
+
|
13
|
+
- Fixed `dtype`, `device`, and `layout` for `new_*` and `like_*` methods
|
14
|
+
|
1
15
|
## 0.10.0 (2022-03-13)
|
2
16
|
|
3
17
|
- Updated LibTorch to 1.11.0
|
data/README.md
CHANGED
@@ -409,7 +409,8 @@ Here’s the list of compatible versions.
|
|
409
409
|
|
410
410
|
Torch.rb | LibTorch
|
411
411
|
--- | ---
|
412
|
-
0.
|
412
|
+
0.11.0+ | 1.12.0+
|
413
|
+
0.10.0-0.10.2 | 1.11.0
|
413
414
|
0.9.0-0.9.2 | 1.10.0-1.10.2
|
414
415
|
0.8.0-0.8.3 | 1.9.0-1.9.1
|
415
416
|
0.6.0-0.7.0 | 1.8.0-1.8.1
|
@@ -421,13 +422,25 @@ Torch.rb | LibTorch
|
|
421
422
|
|
422
423
|
### Homebrew
|
423
424
|
|
424
|
-
|
425
|
+
You can also use Homebrew.
|
425
426
|
|
426
427
|
```sh
|
427
428
|
brew install libtorch
|
428
429
|
```
|
429
430
|
|
430
|
-
|
431
|
+
For Mac ARM, run:
|
432
|
+
|
433
|
+
```sh
|
434
|
+
bundle config build.torch-rb --with-torch-dir=/opt/homebrew
|
435
|
+
```
|
436
|
+
|
437
|
+
And for Linux, run:
|
438
|
+
|
439
|
+
```sh
|
440
|
+
bundle config build.torch-rb --with-torch-dir=/home/linuxbrew/.linuxbrew
|
441
|
+
```
|
442
|
+
|
443
|
+
Then install the gem.
|
431
444
|
|
432
445
|
## Performance
|
433
446
|
|
data/codegen/function.rb
CHANGED
@@ -39,7 +39,14 @@ def skip_functions(functions)
|
|
39
39
|
f.base_name == "index_put" ||
|
40
40
|
# not supported yet
|
41
41
|
f.func.include?("Dimname") ||
|
42
|
-
f.func.include?("ConstQuantizerPtr")
|
42
|
+
f.func.include?("ConstQuantizerPtr") ||
|
43
|
+
f.func.include?("SymInt") ||
|
44
|
+
# TODO fix LibTorch 1.12 changes
|
45
|
+
f.base_name == "histogramdd" ||
|
46
|
+
f.base_name == "nested_tensor" ||
|
47
|
+
f.base_name == "split_copy" ||
|
48
|
+
f.base_name == "split_with_sizes_copy" ||
|
49
|
+
f.base_name == "unbind_copy"
|
43
50
|
end
|
44
51
|
end
|
45
52
|
|
@@ -250,7 +257,7 @@ def generate_dispatch(function, def_method)
|
|
250
257
|
|
251
258
|
cpp_params = generate_dispatch_params(function, params)
|
252
259
|
if opt_index
|
253
|
-
cpp_params.insert(remove_self ? opt_index + 1 : opt_index, "
|
260
|
+
cpp_params.insert(remove_self ? opt_index + 1 : opt_index, "TensorOptions options")
|
254
261
|
end
|
255
262
|
|
256
263
|
retval = generate_dispatch_retval(function)
|
@@ -293,7 +300,13 @@ def split_opt_params(params)
|
|
293
300
|
end
|
294
301
|
|
295
302
|
def generate_tensor_options(function, opt_params)
|
296
|
-
|
303
|
+
new_function = function.base_name.start_with?("new_")
|
304
|
+
like_function = function.base_name.end_with?("_like")
|
305
|
+
|
306
|
+
code = String.new("")
|
307
|
+
code << "\n auto self = _r.tensor(0);" if like_function
|
308
|
+
code << "\n const auto options = TensorOptions()"
|
309
|
+
|
297
310
|
order = ["dtype", "device", "layout", "requires_grad", "pin_memory"]
|
298
311
|
opt_params.sort_by { |v| order.index(v[:name]) }.each do |opt|
|
299
312
|
i = opt[:position]
|
@@ -304,12 +317,24 @@ def generate_tensor_options(function, opt_params)
|
|
304
317
|
if function.base_name == "arange"
|
305
318
|
"dtype(_r.scalartypeOptional(#{i}))"
|
306
319
|
else
|
307
|
-
|
320
|
+
if new_function || like_function
|
321
|
+
"dtype(_r.scalartypeWithDefault(#{i}, self.scalar_type()))"
|
322
|
+
else
|
323
|
+
"dtype(_r.scalartype(#{i}))"
|
324
|
+
end
|
308
325
|
end
|
309
326
|
when "device"
|
310
|
-
|
327
|
+
if new_function || like_function
|
328
|
+
"device(_r.deviceWithDefault(#{i}, self.device()))"
|
329
|
+
else
|
330
|
+
"device(_r.device(#{i}))"
|
331
|
+
end
|
311
332
|
when "layout"
|
312
|
-
|
333
|
+
if new_function || like_function
|
334
|
+
"layout(_r.layoutWithDefault(#{i}, self.layout()))"
|
335
|
+
else
|
336
|
+
"layout(_r.layoutOptional(#{i}))"
|
337
|
+
end
|
313
338
|
when "requires_grad"
|
314
339
|
"requires_grad(_r.toBool(#{i}))"
|
315
340
|
when "pin_memory"
|
@@ -392,7 +417,7 @@ def generate_function_params(function, params, remove_self)
|
|
392
417
|
else
|
393
418
|
"optionalTensor"
|
394
419
|
end
|
395
|
-
when "generator", "tensorlist"
|
420
|
+
when "generator", "tensorlist"
|
396
421
|
func
|
397
422
|
when "string"
|
398
423
|
"stringViewOptional"
|
@@ -453,7 +478,11 @@ def generate_dispatch_params(function, params)
|
|
453
478
|
when "float"
|
454
479
|
"double"
|
455
480
|
when /\Aint\[/
|
456
|
-
|
481
|
+
if param[:optional]
|
482
|
+
"at::OptionalIntArrayRef"
|
483
|
+
else
|
484
|
+
"IntArrayRef"
|
485
|
+
end
|
457
486
|
when "float[]"
|
458
487
|
"ArrayRef<double>"
|
459
488
|
when "str"
|
@@ -462,13 +491,19 @@ def generate_dispatch_params(function, params)
|
|
462
491
|
else
|
463
492
|
"std::string"
|
464
493
|
end
|
465
|
-
when "Scalar"
|
494
|
+
when "Scalar"
|
495
|
+
if param[:optional]
|
496
|
+
"const c10::optional<Scalar> &"
|
497
|
+
else
|
498
|
+
"const Scalar &"
|
499
|
+
end
|
500
|
+
when "bool", "ScalarType", "Layout", "Device", "Storage", "Generator", "MemoryFormat", "Storage"
|
466
501
|
param[:type]
|
467
502
|
else
|
468
503
|
raise "Unknown type: #{param[:type]} (#{function.name})"
|
469
504
|
end
|
470
505
|
|
471
|
-
if param[:optional] && param[:type]
|
506
|
+
if param[:optional] && !["Tensor", "Scalar"].include?(param[:type]) && !param[:type].start_with?("int[")
|
472
507
|
type = "c10::optional<#{type}>"
|
473
508
|
end
|
474
509
|
|
@@ -511,7 +546,7 @@ def generate_dispatch_retval(function)
|
|
511
546
|
when ["float", "float"]
|
512
547
|
"std::tuple<double,double>"
|
513
548
|
else
|
514
|
-
raise "Unknown retvals: #{types}"
|
549
|
+
raise "Unknown retvals: #{types} (#{function.name})"
|
515
550
|
end
|
516
551
|
end
|
517
552
|
|