Update codegen and pretty tests
UI tests are pending, will depend on error messages change.
This commit is contained in:
parent
b725cf6af8
commit
2041de7083
11 changed files with 39 additions and 39 deletions
|
|
@ -11,11 +11,11 @@
|
|||
|
||||
#![feature(autodiff)]
|
||||
|
||||
use std::autodiff::autodiff;
|
||||
use std::autodiff::autodiff_forward;
|
||||
|
||||
#[autodiff(d_square3, Forward, Dual, DualOnly)]
|
||||
#[autodiff(d_square2, Forward, 4, Dual, DualOnly)]
|
||||
#[autodiff(d_square1, Forward, 4, Dual, Dual)]
|
||||
#[autodiff_forward(d_square3, Dual, DualOnly)]
|
||||
#[autodiff_forward(d_square2, 4, Dual, DualOnly)]
|
||||
#[autodiff_forward(d_square1, 4, Dual, Dual)]
|
||||
#[no_mangle]
|
||||
fn square(x: &f32) -> f32 {
|
||||
x * x
|
||||
|
|
|
|||
|
|
@ -11,14 +11,14 @@
|
|||
// identical function calls in the LLVM-IR, while having two different calls in the Rust code.
|
||||
#![feature(autodiff)]
|
||||
|
||||
use std::autodiff::autodiff;
|
||||
use std::autodiff::autodiff_reverse;
|
||||
|
||||
#[autodiff(d_square, Reverse, Duplicated, Active)]
|
||||
#[autodiff_reverse(d_square, Duplicated, Active)]
|
||||
fn square(x: &f64) -> f64 {
|
||||
x * x
|
||||
}
|
||||
|
||||
#[autodiff(d_square2, Reverse, Duplicated, Active)]
|
||||
#[autodiff_reverse(d_square2, Duplicated, Active)]
|
||||
fn square2(x: &f64) -> f64 {
|
||||
x * x
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
|
||||
#![feature(autodiff)]
|
||||
|
||||
use std::autodiff::autodiff;
|
||||
use std::autodiff::autodiff_reverse;
|
||||
|
||||
#[autodiff(d_square, Reverse, Duplicated, Active)]
|
||||
#[autodiff_reverse(d_square, Duplicated, Active)]
|
||||
fn square(x: &f64) -> f64 {
|
||||
x * x
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@
|
|||
//@ needs-enzyme
|
||||
#![feature(autodiff)]
|
||||
|
||||
use std::autodiff::autodiff;
|
||||
use std::autodiff::autodiff_reverse;
|
||||
|
||||
#[autodiff(d_square, Reverse, Duplicated, Active)]
|
||||
#[autodiff_reverse(d_square, Duplicated, Active)]
|
||||
#[no_mangle]
|
||||
fn square(x: &f64) -> f64 {
|
||||
x * x
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@
|
|||
|
||||
#![feature(autodiff)]
|
||||
|
||||
use std::autodiff::autodiff;
|
||||
use std::autodiff::autodiff_reverse;
|
||||
|
||||
#[no_mangle]
|
||||
#[autodiff(df, Reverse, Active, Active, Active)]
|
||||
#[autodiff_reverse(df, Active, Active, Active)]
|
||||
fn primal(x: f32, y: f32) -> f64 {
|
||||
(x * x * y) as f64
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ extern crate std;
|
|||
|
||||
// Test that forward mode ad macros are expanded correctly.
|
||||
|
||||
use std::autodiff::autodiff;
|
||||
use std::autodiff::{autodiff_forward, autodiff_reverse};
|
||||
|
||||
#[rustc_autodiff]
|
||||
#[inline(never)]
|
||||
|
|
|
|||
|
|
@ -7,48 +7,48 @@
|
|||
|
||||
// Test that forward mode ad macros are expanded correctly.
|
||||
|
||||
use std::autodiff::autodiff;
|
||||
use std::autodiff::{autodiff_forward, autodiff_reverse};
|
||||
|
||||
#[autodiff(df1, Forward, Dual, Const, Dual)]
|
||||
#[autodiff_forward(df1, Dual, Const, Dual)]
|
||||
pub fn f1(x: &[f64], y: f64) -> f64 {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
#[autodiff(df2, Forward, Dual, Const, Const)]
|
||||
#[autodiff_forward(df2, Dual, Const, Const)]
|
||||
pub fn f2(x: &[f64], y: f64) -> f64 {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
#[autodiff(df3, Forward, Dual, Const, Const)]
|
||||
#[autodiff_forward(df3, Dual, Const, Const)]
|
||||
pub fn f3(x: &[f64], y: f64) -> f64 {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
// Not the most interesting derivative, but who are we to judge
|
||||
#[autodiff(df4, Forward)]
|
||||
#[autodiff_forward(df4)]
|
||||
pub fn f4() {}
|
||||
|
||||
// We want to be sure that the same function can be differentiated in different ways
|
||||
#[autodiff(df5_rev, Reverse, Duplicated, Const, Active)]
|
||||
#[autodiff(df5_x, Forward, Dual, Const, Const)]
|
||||
#[autodiff(df5_y, Forward, Const, Dual, Const)]
|
||||
#[autodiff_reverse(df5_rev, Duplicated, Const, Active)]
|
||||
#[autodiff_forward(df5_x, Dual, Const, Const)]
|
||||
#[autodiff_forward(df5_y, Const, Dual, Const)]
|
||||
pub fn f5(x: &[f64], y: f64) -> f64 {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
struct DoesNotImplDefault;
|
||||
#[autodiff(df6, Forward, Const)]
|
||||
#[autodiff_forward(df6, Const)]
|
||||
pub fn f6() -> DoesNotImplDefault {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
// Make sure, that we add the None for the default return.
|
||||
#[autodiff(df7, Forward, Const)]
|
||||
#[autodiff_forward(df7, Const)]
|
||||
pub fn f7(x: f32) -> () {}
|
||||
|
||||
#[autodiff(f8_1, Forward, Dual, DualOnly)]
|
||||
#[autodiff(f8_2, Forward, 4, Dual, DualOnly)]
|
||||
#[autodiff(f8_3, Forward, 4, Dual, Dual)]
|
||||
#[autodiff_forward(f8_1, Dual, DualOnly)]
|
||||
#[autodiff_forward(f8_2, 4, Dual, DualOnly)]
|
||||
#[autodiff_forward(f8_3, 4, Dual, Dual)]
|
||||
#[no_mangle]
|
||||
fn f8(x: &f32) -> f32 {
|
||||
unimplemented!()
|
||||
|
|
@ -56,8 +56,8 @@ fn f8(x: &f32) -> f32 {
|
|||
|
||||
// We want to make sure that we can use the macro for functions defined inside of functions
|
||||
pub fn f9() {
|
||||
#[autodiff(d_inner_1, Forward, Dual, DualOnly)]
|
||||
#[autodiff(d_inner_2, Forward, Dual, Dual)]
|
||||
#[autodiff_forward(d_inner_1, Dual, DualOnly)]
|
||||
#[autodiff_forward(d_inner_2, Dual, Dual)]
|
||||
fn inner(x: f32) -> f32 {
|
||||
x * x
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ extern crate std;
|
|||
|
||||
// Test that reverse mode ad macros are expanded correctly.
|
||||
|
||||
use std::autodiff::autodiff;
|
||||
use std::autodiff::autodiff_reverse;
|
||||
|
||||
#[rustc_autodiff]
|
||||
#[inline(never)]
|
||||
|
|
|
|||
|
|
@ -7,18 +7,18 @@
|
|||
|
||||
// Test that reverse mode ad macros are expanded correctly.
|
||||
|
||||
use std::autodiff::autodiff;
|
||||
use std::autodiff::autodiff_reverse;
|
||||
|
||||
#[autodiff(df1, Reverse, Duplicated, Const, Active)]
|
||||
#[autodiff_reverse(df1, Duplicated, Const, Active)]
|
||||
pub fn f1(x: &[f64], y: f64) -> f64 {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
// Not the most interesting derivative, but who are we to judge
|
||||
#[autodiff(df2, Reverse)]
|
||||
#[autodiff_reverse(df2)]
|
||||
pub fn f2() {}
|
||||
|
||||
#[autodiff(df3, Reverse, Duplicated, Const, Active)]
|
||||
#[autodiff_reverse(df3, Duplicated, Const, Active)]
|
||||
pub fn f3(x: &[f64], y: f64) -> f64 {
|
||||
unimplemented!()
|
||||
}
|
||||
|
|
@ -27,12 +27,12 @@ enum Foo { Reverse }
|
|||
use Foo::Reverse;
|
||||
// What happens if we already have Reverse in type (enum variant decl) and value (enum variant
|
||||
// constructor) namespace? > It's expected to work normally.
|
||||
#[autodiff(df4, Reverse, Const)]
|
||||
#[autodiff_reverse(df4, Const)]
|
||||
pub fn f4(x: f32) {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
#[autodiff(df5, Reverse, DuplicatedOnly, Duplicated)]
|
||||
#[autodiff_reverse(df5, DuplicatedOnly, Duplicated)]
|
||||
pub fn f5(x: *const f32, y: &f32) {
|
||||
unimplemented!()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ extern crate std;
|
|||
//@ pretty-compare-only
|
||||
//@ pp-exact:inherent_impl.pp
|
||||
|
||||
use std::autodiff::autodiff;
|
||||
use std::autodiff::autodiff_reverse;
|
||||
|
||||
struct Foo {
|
||||
a: f64,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
//@ pretty-compare-only
|
||||
//@ pp-exact:inherent_impl.pp
|
||||
|
||||
use std::autodiff::autodiff;
|
||||
use std::autodiff::autodiff_reverse;
|
||||
|
||||
struct Foo {
|
||||
a: f64,
|
||||
|
|
@ -17,7 +17,7 @@ trait MyTrait {
|
|||
}
|
||||
|
||||
impl MyTrait for Foo {
|
||||
#[autodiff(df, Reverse, Const, Active, Active)]
|
||||
#[autodiff_reverse(df, Const, Active, Active)]
|
||||
fn f(&self, x: f64) -> f64 {
|
||||
self.a * 0.25 * (x * x - 1.0 - 2.0 * x.ln())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue