use dfdx::{
shapes::{Const, Rank0, Rank1, Rank2},
tensor::{AsArray, AutoDevice, SampleTensor, Tensor},
tensor_ops::{MeanTo, RealizeTo, TryMatMul},
};
fn main() {
let dev = AutoDevice::default();
let a: Tensor<Rank2<2, 3>, f32, _> = dev.sample_normal();
dbg!(a.array());
let b = dev.sample_normal();
dbg!(b.array());
let c = a + b;
dbg!(c.array());
let d = c.relu();
dbg!(d.array());
let e = d + 0.5;
dbg!(e.array());
let f = e.mean::<Rank0, _>();
dbg!(f.array());
let _ = dev
.sample_normal::<Rank2<5, 10>>()
.clamp(-1.0, 1.0)
.exp()
.abs()
.powf(0.5)
/ 2.0;
let mut a: Tensor<(Const<3>, usize), f32, _> = dev.sample_uniform_like(&(Const, 5));
a = a + 0.5;
let b: Tensor<(usize, Const<5>), f32, _> = dev.sample_uniform_like(&(3, Const));
let _: Tensor<(Const<3>, usize), f32, _> = a + b.try_realize().expect("`b` should have 3 rows");
let a: Tensor<(usize, Const<5>), f32, _> = dev.sample_normal_like(&(3, Const));
let b: Tensor<(usize, usize), f32, _> = dev.sample_normal_like(&(5, 7));
let _: Tensor<(usize, usize), f32, _> = a.matmul(
b.try_realize::<(Const<5>, usize)>()
.expect("`b` should have 5 rows"),
);
let a: Tensor<Rank1<3>, f32, _> = dev.sample_normal();
let b: Tensor<Rank1<7>, f32, _> = dev.sample_normal();
let c = a.matmul(b);
dbg!(c.array());
#[cfg(feature = "cuda")]
{
use dfdx::tensor::Cpu;
let cpu = Cpu::default();
let a: Tensor<Rank1<3>, f32, _> = dev.sample_normal();
let b: Tensor<Rank1<7>, f32, _> = dev.sample_normal();
let a_cpu = a.to_device(&cpu);
let b_cpu = b.to_device(&cpu);
assert_eq!(a_cpu.matmul(b_cpu).array(), a.matmul(b).array());
}
}