extern crate alloc;
use burn::prelude::*;
use burn::nn::LayerNorm;
use burn::nn::LayerNormConfig;
use burn::nn::Linear;
use burn::nn::LinearConfig;
use burn::nn::PaddingConfig1d;
use burn::nn::conv::Conv1d;
use burn::nn::conv::Conv1dConfig;
use burn::nn::pool::AvgPool1d;
use burn::nn::pool::AvgPool1dConfig;
use burn::tensor::TensorData;
#[derive(Module, Debug)]
pub struct Submodule1 {
linear1: Linear,
constant378: burn::module::Param<Tensor<1, Int>>,
constant379: burn::module::Param<Tensor<1, Int>>,
constant380: burn::module::Param<Tensor<1, Int>>,
constant411: burn::module::Param<Tensor<1, Int>>,
constant421: burn::module::Param<Tensor<1, Int>>,
constant431: burn::module::Param<Tensor<1, Int>>,
#[module(skip)]
device: Device,
}
impl Submodule1 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let linear1 = LinearConfig::new(1024, 512).with_bias(false).init(device);
let constant378: burn::module::Param<Tensor<1, Int>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
Int,
>::from_data(
burn::tensor::TensorData::from([8i64]),
(device, burn::tensor::DType::I64),
),
device.clone(),
false,
[1].into(),
);
let constant379: burn::module::Param<Tensor<1, Int>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
Int,
>::from_data(
burn::tensor::TensorData::from([1i64]),
(device, burn::tensor::DType::I64),
),
device.clone(),
false,
[1].into(),
);
let constant380: burn::module::Param<Tensor<1, Int>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
Int,
>::from_data(
burn::tensor::TensorData::from([8i64]),
(device, burn::tensor::DType::I64),
),
device.clone(),
false,
[1].into(),
);
let constant411: burn::module::Param<Tensor<1, Int>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
Int,
>::from_data(
burn::tensor::TensorData::from([-1i64]),
(device, burn::tensor::DType::I64),
),
device.clone(),
false,
[1].into(),
);
let constant421: burn::module::Param<Tensor<1, Int>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
Int,
>::from_data(
burn::tensor::TensorData::from([-1i64]),
(device, burn::tensor::DType::I64),
),
device.clone(),
false,
[1].into(),
);
let constant431: burn::module::Param<Tensor<1, Int>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
Int,
>::from_data(
burn::tensor::TensorData::from([-1i64]),
(device, burn::tensor::DType::I64),
),
device.clone(),
false,
[1].into(),
);
Self {
linear1,
constant378,
constant379,
constant380,
constant411,
constant421,
constant431,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
chunk: Tensor<3>,
chunk_lengths: Tensor<1, Int>,
spkcache: Tensor<3>,
fifo: Tensor<3>,
spkcache_lengths: Tensor<1, Int>,
fifo_lengths: Tensor<1, Int>,
) -> (Tensor<1, Int>, Tensor<3>, Tensor<3>, Tensor<1, Int>) {
let shape1_out1: [i64; 3] = {
let axes = &chunk.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather1_out1 = shape1_out1[0] as i64;
let shape2_out1: [i64; 3] = {
let axes = &chunk.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather2_out1 = shape2_out1[1] as i64;
let shape3_out1: [i64; 3] = {
let axes = &chunk.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather3_out1 = shape3_out1[2] as i64;
let constant370_out1 = 8i64;
let mod1_out1 = gather2_out1.rem_euclid(constant370_out1);
let constant371_out1 = 8i64;
let sub1_out1 = constant371_out1 - mod1_out1;
let constant372_out1 = 8i64;
let mod2_out1 = sub1_out1.rem_euclid(constant372_out1);
let add1_out1 = gather2_out1 + mod2_out1;
let constant373_out1 = 8i64;
let div1_out1 = add1_out1 / constant373_out1;
let cast1_out1 = div1_out1;
let cast2_out1 = cast1_out1;
let constant374_out1 = 8i64;
let mul1_out1 = gather3_out1 * constant374_out1;
let unsqueeze1_out1 = [gather1_out1 as i64];
let unsqueeze2_out1 = [cast2_out1 as i64];
let unsqueeze3_out1 = [mul1_out1 as i64];
let concat1_out1: [i64; 3usize] = [
&unsqueeze1_out1[..],
&unsqueeze2_out1[..],
&unsqueeze3_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape1_out1 = chunk.reshape(concat1_out1);
let linear1_out1 = self.linear1.forward(reshape1_out1);
let constant378_out1 = self.constant378.val();
let add2_out1 = chunk_lengths.add(constant378_out1);
let constant379_out1 = self.constant379.val();
let sub2_out1 = add2_out1.sub(constant379_out1);
let constant380_out1 = self.constant380.val();
let div2_out1 = sub2_out1.div(constant380_out1);
let cast3_out1 = div2_out1;
let cast4_out1 = cast3_out1;
let cast5_out1 = cast4_out1;
let shape4_out1: [i64; 3] = {
let axes = &spkcache.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather4_out1 = shape4_out1[1] as i64;
let shape5_out1: [i64; 3] = {
let axes = &fifo.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather5_out1 = shape5_out1[1] as i64;
let add3_out1 = gather4_out1 + gather5_out1;
let shape6_out1: [i64; 3] = {
let axes = &linear1_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather6_out1 = shape6_out1[1] as i64;
let add4_out1 = add3_out1 + gather6_out1;
let shape7_out1: [i64; 3] = {
let axes = &spkcache.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather7_out1 = shape7_out1[0] as i64;
let shape8_out1: [i64; 3] = {
let axes = &spkcache.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather8_out1 = shape8_out1[2] as i64;
let unsqueeze4_out1: Tensor<2, Int> = spkcache_lengths
.clone()
.unsqueeze_dims::<2>(&[0]);
let unsqueeze5_out1: Tensor<2, Int> = fifo_lengths
.clone()
.unsqueeze_dims::<2>(&[0]);
let unsqueeze6_out1: Tensor<2, Int> = cast5_out1
.clone()
.unsqueeze_dims::<2>(&[0]);
let concat2_out1 = burn::tensor::Tensor::cat(
[unsqueeze4_out1, unsqueeze5_out1, unsqueeze6_out1].into(),
0,
);
let reducesum1_out1 = {
concat2_out1.sum_dim(0usize).squeeze_dims::<1usize>(&[0])
};
let mul2_out1 = gather7_out1 * add4_out1;
let constant390_out1 = 1i64;
let add5_out1 = mul2_out1 + constant390_out1;
let unsqueeze7_out1 = [add5_out1 as i64];
let unsqueeze8_out1 = [gather8_out1 as i64];
let concat3_out1: [i64; 2usize] = [&unsqueeze7_out1[..], &unsqueeze8_out1[..]]
.concat()
.try_into()
.unwrap();
let constantofshape1_out1 = Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0f32 as f64]),
(&self.device, burn::tensor::DType::F32),
)
.reshape([1, 1])
.expand(concat3_out1);
let unsqueeze9_out1 = [gather7_out1 as i64];
let concat4_out1: [i64; 1usize] = [&unsqueeze9_out1[..]]
.concat()
.try_into()
.unwrap();
let constantofshape2_out1 = Tensor::<
1,
Int,
>::from_data(
burn::tensor::TensorData::from([0i64 as i64]),
(&self.device, burn::tensor::DType::I64),
)
.reshape([1])
.expand(concat4_out1);
let cast6_out1 = gather7_out1;
let range1_out1 = {
let start = 0i64;
let delta = 1i64;
assert!(delta != 0);
let n = (((cast6_out1 as i128 - start as i128) as f64) / delta as f64)
.ceil()
.max(0.0) as i64;
Tensor::arange(0..n, &self.device)
.cast(burn::tensor::DType::I64)
.mul_scalar(delta)
.add_scalar(start)
};
let unsqueeze10_out1: Tensor<2, Int> = range1_out1.unsqueeze_dims::<2>(&[1]);
let mul3_out1 = unsqueeze10_out1.mul_scalar(add4_out1);
let cast7_out1 = mul2_out1;
let cast8_out1 = gather4_out1;
let range2_out1 = {
let start = 0i64;
let delta = 1i64;
assert!(delta != 0);
let n = (((cast8_out1 as i128 - start as i128) as f64) / delta as f64)
.ceil()
.max(0.0) as i64;
Tensor::arange(0..n, &self.device)
.cast(burn::tensor::DType::I64)
.mul_scalar(delta)
.add_scalar(start)
};
let unsqueeze11_out1: Tensor<2, Int> = range2_out1.unsqueeze_dims::<2>(&[0]);
let unsqueeze12_out1: Tensor<2, Int> = spkcache_lengths
.clone()
.unsqueeze_dims::<2>(&[1]);
let less1_out1 = unsqueeze11_out1.clone().lower(unsqueeze12_out1);
let unsqueeze13_out1: Tensor<2, Int> = constantofshape2_out1
.clone()
.unsqueeze_dims::<2>(&[1]);
let add6_out1 = mul3_out1.clone().add(unsqueeze13_out1);
let add7_out1 = add6_out1.add(unsqueeze11_out1);
let where1_out1 = Tensor::<
1,
burn::tensor::Int,
>::from_data(
burn::tensor::TensorData::from([cast7_out1 as i64]),
(&self.device, burn::tensor::DType::I64),
)
.reshape([1, 1])
.mask_where(less1_out1, add7_out1);
let reshape2_out1 = where1_out1.reshape([-1]);
let unsqueeze14_out1 = [gather8_out1 as i64];
let constant403_out1: [i64; 1] = [-1i64];
let concat5_out1: [i64; 2usize] = [&constant403_out1[..], &unsqueeze14_out1[..]]
.concat()
.try_into()
.unwrap();
let unsqueeze15_out1 = [gather8_out1 as i64];
let constant405_out1: [i64; 1] = [-1i64];
let concat6_out1: [i64; 2usize] = [&constant405_out1[..], &unsqueeze15_out1[..]]
.concat()
.try_into()
.unwrap();
let unsqueeze16_out1 = [gather8_out1 as i64];
let constant407_out1: [i64; 1] = [-1i64];
let concat7_out1: [i64; 2usize] = [&constant407_out1[..], &unsqueeze16_out1[..]]
.concat()
.try_into()
.unwrap();
let reshape3_out1 = spkcache.reshape(concat5_out1);
let unsqueeze17_out1: Tensor<2, Int> = reshape2_out1
.clone()
.unsqueeze_dims::<2>(&[1]);
let shape9_out1: [i64; 2] = {
let axes = &constantofshape1_out1.clone().dims()[0..2];
let mut output = [0i64; 2];
for i in 0..2 {
output[i] = axes[i] as i64;
}
output
};
let shape10_out1: [i64; 1] = {
let axes = &reshape2_out1.dims()[0..1];
let mut output = [0i64; 1];
for i in 0..1 {
output[i] = axes[i] as i64;
}
output
};
let slice1_out1: [i64; 1] = shape9_out1[1..2].try_into().unwrap();
let concat8_out1: [i64; 2usize] = [&shape10_out1[..], &slice1_out1[..]]
.concat()
.try_into()
.unwrap();
let shape11_out1: [i64; 1] = [2i64];
let constantofshape3_out1 = Tensor::<
1,
Int,
>::from_data(
burn::tensor::TensorData::from([1i64 as i64]),
(&self.device, burn::tensor::DType::I64),
)
.reshape([1])
.expand(shape11_out1);
let constant411_out1 = self.constant411.val();
let mul4_out1 = constantofshape3_out1.clone().mul(constant411_out1);
let equal1_out1 = Tensor::<
1,
burn::tensor::Int,
>::from_data(
burn::tensor::TensorData::from(&concat8_out1 as &[i64]),
(&self.device, burn::tensor::DType::I64),
)
.equal(mul4_out1);
let where2_out1 = Tensor::<
1,
burn::tensor::Int,
>::from_data(
burn::tensor::TensorData::from(&concat8_out1 as &[i64]),
(&self.device, burn::tensor::DType::I64),
)
.mask_where(equal1_out1, constantofshape3_out1);
let constant412_out1 = -1i64;
let mul5_out1 = {
let mut result = concat8_out1;
let scalar = constant412_out1;
for result_item in result.iter_mut() {
*result_item = result_item.saturating_mul(scalar);
}
result
};
let max1_out1 = {
let __lhs = concat8_out1;
let __rhs = mul5_out1;
core::array::from_fn::<i64, 2usize, _>(|__i| (__lhs[__i]).max(__rhs[__i]))
};
let expand1_out1 = {
let onnx_shape: [i64; 2usize] = max1_out1;
let input_dims = unsqueeze17_out1.dims();
let mut shape = onnx_shape;
#[allow(clippy::needless_range_loop)]
for i in 0..2usize {
let dim_offset = i;
if shape[dim_offset] == 1 && input_dims[i] > 1 {
shape[dim_offset] = input_dims[i] as i64;
}
}
unsqueeze17_out1.expand(shape)
};
let scatterelements1_out1 = {
let (data, indices, updates) = (
constantofshape1_out1,
expand1_out1,
reshape3_out1,
);
let axis_size = data.dims()[0] as i64;
let indices = indices
.cast(burn::tensor::DType::I64)
.remainder_scalar(axis_size);
let idx_dims = indices.dims();
let data_dims = data.dims();
let n: usize = idx_dims.iter().product();
if n == 0 {
data
} else if (0..2).all(|d| d == 0 || idx_dims[d] == data_dims[d]) {
data.scatter(0, indices, updates, burn::tensor::IndexingUpdateOp::Assign)
} else {
let mut strides = [1usize; 2];
for d in (0..2 - 1).rev() {
strides[d] = strides[d + 1] * idx_dims[d + 1];
}
let flat = Tensor::<
1,
Int,
>::arange(0..n as i64, (&self.device, burn::tensor::DType::I64));
let mut columns: alloc::vec::Vec<Tensor<2, Int>> = alloc::vec::Vec::with_capacity(
2,
);
for d in 0..2 {
columns
.push(
if d == 0 {
indices.clone().reshape([n, 1])
} else {
flat.clone()
.div_scalar(strides[d] as i64)
.remainder_scalar(idx_dims[d] as i64)
.reshape([n, 1])
},
);
}
let coordinates = Tensor::cat(columns, 1);
data.scatter_nd(
coordinates,
updates.reshape([n]),
burn::tensor::IndexingUpdateOp::Assign,
)
}
};
let add8_out1 = constantofshape2_out1.add(spkcache_lengths);
let cast9_out1 = gather5_out1;
let range3_out1 = {
let start = 0i64;
let delta = 1i64;
assert!(delta != 0);
let n = (((cast9_out1 as i128 - start as i128) as f64) / delta as f64)
.ceil()
.max(0.0) as i64;
Tensor::arange(0..n, &self.device)
.cast(burn::tensor::DType::I64)
.mul_scalar(delta)
.add_scalar(start)
};
let unsqueeze18_out1: Tensor<2, Int> = range3_out1.unsqueeze_dims::<2>(&[0]);
let unsqueeze19_out1: Tensor<2, Int> = fifo_lengths
.clone()
.unsqueeze_dims::<2>(&[1]);
let less2_out1 = unsqueeze18_out1.clone().lower(unsqueeze19_out1);
let unsqueeze20_out1: Tensor<2, Int> = add8_out1
.clone()
.unsqueeze_dims::<2>(&[1]);
let add9_out1 = mul3_out1.clone().add(unsqueeze20_out1);
let add10_out1 = add9_out1.add(unsqueeze18_out1);
let where3_out1 = Tensor::<
1,
burn::tensor::Int,
>::from_data(
burn::tensor::TensorData::from([cast7_out1 as i64]),
(&self.device, burn::tensor::DType::I64),
)
.reshape([1, 1])
.mask_where(less2_out1, add10_out1);
let reshape4_out1 = where3_out1.reshape([-1]);
let reshape5_out1 = fifo.reshape(concat6_out1);
let unsqueeze21_out1: Tensor<2, Int> = reshape4_out1
.clone()
.unsqueeze_dims::<2>(&[1]);
let shape12_out1: [i64; 2] = {
let axes = &scatterelements1_out1.clone().dims()[0..2];
let mut output = [0i64; 2];
for i in 0..2 {
output[i] = axes[i] as i64;
}
output
};
let shape13_out1: [i64; 1] = {
let axes = &reshape4_out1.dims()[0..1];
let mut output = [0i64; 1];
for i in 0..1 {
output[i] = axes[i] as i64;
}
output
};
let slice2_out1: [i64; 1] = shape12_out1[1..2].try_into().unwrap();
let concat9_out1: [i64; 2usize] = [&shape13_out1[..], &slice2_out1[..]]
.concat()
.try_into()
.unwrap();
let shape14_out1: [i64; 1] = [2i64];
let constantofshape4_out1 = Tensor::<
1,
Int,
>::from_data(
burn::tensor::TensorData::from([1i64 as i64]),
(&self.device, burn::tensor::DType::I64),
)
.reshape([1])
.expand(shape14_out1);
let constant421_out1 = self.constant421.val();
let mul6_out1 = constantofshape4_out1.clone().mul(constant421_out1);
let equal2_out1 = Tensor::<
1,
burn::tensor::Int,
>::from_data(
burn::tensor::TensorData::from(&concat9_out1 as &[i64]),
(&self.device, burn::tensor::DType::I64),
)
.equal(mul6_out1);
let where4_out1 = Tensor::<
1,
burn::tensor::Int,
>::from_data(
burn::tensor::TensorData::from(&concat9_out1 as &[i64]),
(&self.device, burn::tensor::DType::I64),
)
.mask_where(equal2_out1, constantofshape4_out1);
let constant422_out1 = -1i64;
let mul7_out1 = {
let mut result = concat9_out1;
let scalar = constant422_out1;
for result_item in result.iter_mut() {
*result_item = result_item.saturating_mul(scalar);
}
result
};
let max2_out1 = {
let __lhs = concat9_out1;
let __rhs = mul7_out1;
core::array::from_fn::<i64, 2usize, _>(|__i| (__lhs[__i]).max(__rhs[__i]))
};
let expand2_out1 = {
let onnx_shape: [i64; 2usize] = max2_out1;
let input_dims = unsqueeze21_out1.dims();
let mut shape = onnx_shape;
#[allow(clippy::needless_range_loop)]
for i in 0..2usize {
let dim_offset = i;
if shape[dim_offset] == 1 && input_dims[i] > 1 {
shape[dim_offset] = input_dims[i] as i64;
}
}
unsqueeze21_out1.expand(shape)
};
let scatterelements2_out1 = {
let (data, indices, updates) = (
scatterelements1_out1,
expand2_out1,
reshape5_out1,
);
let axis_size = data.dims()[0] as i64;
let indices = indices
.cast(burn::tensor::DType::I64)
.remainder_scalar(axis_size);
let idx_dims = indices.dims();
let data_dims = data.dims();
let n: usize = idx_dims.iter().product();
if n == 0 {
data
} else if (0..2).all(|d| d == 0 || idx_dims[d] == data_dims[d]) {
data.scatter(0, indices, updates, burn::tensor::IndexingUpdateOp::Assign)
} else {
let mut strides = [1usize; 2];
for d in (0..2 - 1).rev() {
strides[d] = strides[d + 1] * idx_dims[d + 1];
}
let flat = Tensor::<
1,
Int,
>::arange(0..n as i64, (&self.device, burn::tensor::DType::I64));
let mut columns: alloc::vec::Vec<Tensor<2, Int>> = alloc::vec::Vec::with_capacity(
2,
);
for d in 0..2 {
columns
.push(
if d == 0 {
indices.clone().reshape([n, 1])
} else {
flat.clone()
.div_scalar(strides[d] as i64)
.remainder_scalar(idx_dims[d] as i64)
.reshape([n, 1])
},
);
}
let coordinates = Tensor::cat(columns, 1);
data.scatter_nd(
coordinates,
updates.reshape([n]),
burn::tensor::IndexingUpdateOp::Assign,
)
}
};
let add11_out1 = add8_out1.add(fifo_lengths);
let cast10_out1 = gather6_out1;
let range4_out1 = {
let start = 0i64;
let delta = 1i64;
assert!(delta != 0);
let n = (((cast10_out1 as i128 - start as i128) as f64) / delta as f64)
.ceil()
.max(0.0) as i64;
Tensor::arange(0..n, &self.device)
.cast(burn::tensor::DType::I64)
.mul_scalar(delta)
.add_scalar(start)
};
let unsqueeze22_out1: Tensor<2, Int> = range4_out1.unsqueeze_dims::<2>(&[0]);
let unsqueeze23_out1: Tensor<2, Int> = cast5_out1
.clone()
.unsqueeze_dims::<2>(&[1]);
let less3_out1 = unsqueeze22_out1.clone().lower(unsqueeze23_out1);
let unsqueeze24_out1: Tensor<2, Int> = add11_out1.unsqueeze_dims::<2>(&[1]);
let add12_out1 = mul3_out1.add(unsqueeze24_out1);
let add13_out1 = add12_out1.add(unsqueeze22_out1);
let where5_out1 = Tensor::<
1,
burn::tensor::Int,
>::from_data(
burn::tensor::TensorData::from([cast7_out1 as i64]),
(&self.device, burn::tensor::DType::I64),
)
.reshape([1, 1])
.mask_where(less3_out1, add13_out1);
let reshape6_out1 = where5_out1.reshape([-1]);
let reshape7_out1 = linear1_out1.clone().reshape(concat7_out1);
let unsqueeze25_out1: Tensor<2, Int> = reshape6_out1
.clone()
.unsqueeze_dims::<2>(&[1]);
let shape15_out1: [i64; 2] = {
let axes = &scatterelements2_out1.clone().dims()[0..2];
let mut output = [0i64; 2];
for i in 0..2 {
output[i] = axes[i] as i64;
}
output
};
let shape16_out1: [i64; 1] = {
let axes = &reshape6_out1.dims()[0..1];
let mut output = [0i64; 1];
for i in 0..1 {
output[i] = axes[i] as i64;
}
output
};
let slice3_out1: [i64; 1] = shape15_out1[1..2].try_into().unwrap();
let concat10_out1: [i64; 2usize] = [&shape16_out1[..], &slice3_out1[..]]
.concat()
.try_into()
.unwrap();
let shape17_out1: [i64; 1] = [2i64];
let constantofshape5_out1 = Tensor::<
1,
Int,
>::from_data(
burn::tensor::TensorData::from([1i64 as i64]),
(&self.device, burn::tensor::DType::I64),
)
.reshape([1])
.expand(shape17_out1);
let constant431_out1 = self.constant431.val();
let mul8_out1 = constantofshape5_out1.clone().mul(constant431_out1);
let equal3_out1 = Tensor::<
1,
burn::tensor::Int,
>::from_data(
burn::tensor::TensorData::from(&concat10_out1 as &[i64]),
(&self.device, burn::tensor::DType::I64),
)
.equal(mul8_out1);
let where6_out1 = Tensor::<
1,
burn::tensor::Int,
>::from_data(
burn::tensor::TensorData::from(&concat10_out1 as &[i64]),
(&self.device, burn::tensor::DType::I64),
)
.mask_where(equal3_out1, constantofshape5_out1);
let constant432_out1 = -1i64;
let mul9_out1 = {
let mut result = concat10_out1;
let scalar = constant432_out1;
for result_item in result.iter_mut() {
*result_item = result_item.saturating_mul(scalar);
}
result
};
let max3_out1 = {
let __lhs = concat10_out1;
let __rhs = mul9_out1;
core::array::from_fn::<i64, 2usize, _>(|__i| (__lhs[__i]).max(__rhs[__i]))
};
let expand3_out1 = {
let onnx_shape: [i64; 2usize] = max3_out1;
let input_dims = unsqueeze25_out1.dims();
let mut shape = onnx_shape;
#[allow(clippy::needless_range_loop)]
for i in 0..2usize {
let dim_offset = i;
if shape[dim_offset] == 1 && input_dims[i] > 1 {
shape[dim_offset] = input_dims[i] as i64;
}
}
unsqueeze25_out1.expand(shape)
};
let scatterelements3_out1 = {
let (data, indices, updates) = (
scatterelements2_out1,
expand3_out1,
reshape7_out1,
);
let axis_size = data.dims()[0] as i64;
let indices = indices
.cast(burn::tensor::DType::I64)
.remainder_scalar(axis_size);
let idx_dims = indices.dims();
let data_dims = data.dims();
let n: usize = idx_dims.iter().product();
if n == 0 {
data
} else if (0..2).all(|d| d == 0 || idx_dims[d] == data_dims[d]) {
data.scatter(0, indices, updates, burn::tensor::IndexingUpdateOp::Assign)
} else {
let mut strides = [1usize; 2];
for d in (0..2 - 1).rev() {
strides[d] = strides[d + 1] * idx_dims[d + 1];
}
let flat = Tensor::<
1,
Int,
>::arange(0..n as i64, (&self.device, burn::tensor::DType::I64));
let mut columns: alloc::vec::Vec<Tensor<2, Int>> = alloc::vec::Vec::with_capacity(
2,
);
for d in 0..2 {
columns
.push(
if d == 0 {
indices.clone().reshape([n, 1])
} else {
flat.clone()
.div_scalar(strides[d] as i64)
.remainder_scalar(idx_dims[d] as i64)
.reshape([n, 1])
},
);
}
let coordinates = Tensor::cat(columns, 1);
data.scatter_nd(
coordinates,
updates.reshape([n]),
burn::tensor::IndexingUpdateOp::Assign,
)
}
};
let unsqueeze26_out1 = [mul2_out1 as i64];
let slice4_out1 = scatterelements3_out1.slice(s![0..unsqueeze26_out1[0], ..]);
let unsqueeze27_out1 = [gather7_out1 as i64];
let unsqueeze28_out1 = [add4_out1 as i64];
let unsqueeze29_out1 = [gather8_out1 as i64];
let concat11_out1: [i64; 3usize] = [
&unsqueeze27_out1[..],
&unsqueeze28_out1[..],
&unsqueeze29_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape8_out1 = slice4_out1.reshape(concat11_out1);
(reducesum1_out1, reshape8_out1, linear1_out1, cast5_out1)
}
}
#[derive(Module, Debug)]
pub struct Submodule2 {
layernormalization1: LayerNorm,
layernormalization2: LayerNorm,
linear2: Linear,
constant461: burn::module::Param<Tensor<2>>,
constant474: burn::module::Param<Tensor<2>>,
constant517: burn::module::Param<Tensor<1>>,
constant519: burn::module::Param<Tensor<1>>,
constant518: burn::module::Param<Tensor<1>>,
constant520: burn::module::Param<Tensor<1>>,
linear3: Linear,
#[module(skip)]
device: Device,
}
impl Submodule2 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization1 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let layernormalization2 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear2 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant461: burn::module::Param<Tensor<2>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
2,
>::zeros([5000, 64], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[5000, 64].into(),
);
let constant474: burn::module::Param<Tensor<2>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
2,
>::zeros([5000, 64], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[5000, 64].into(),
);
let constant517: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant519: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant518: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant520: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear3 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization1,
layernormalization2,
linear2,
constant461,
constant474,
constant517,
constant519,
constant518,
constant520,
linear3,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
reducesum1_out1: Tensor<1, Int>,
reshape8_out1: Tensor<3>,
) -> (Tensor<3>, Tensor<2>, Tensor<2>, Tensor<4, Bool>, Tensor<1, Int>) {
let cast11_out1 = reducesum1_out1;
let layernormalization1_out1 = {
let dtype = reshape8_out1.dtype();
self.layernormalization1
.forward(reshape8_out1.cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape18_out1: [i64; 3] = {
let axes = &layernormalization1_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather9_out1 = shape18_out1[0] as i64;
let shape19_out1: [i64; 3] = {
let axes = &layernormalization1_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather10_out1 = shape19_out1[1] as i64;
let cast12_out1 = gather9_out1;
let range5_out1 = {
let start = 0i64;
let delta = 1i64;
assert!(delta != 0);
let n = (((cast12_out1 as i128 - start as i128) as f64) / delta as f64)
.ceil()
.max(0.0) as i64;
Tensor::arange(0..n, &self.device)
.cast(burn::tensor::DType::I64)
.mul_scalar(delta)
.add_scalar(start)
};
let reshape9_out1 = range5_out1.reshape([-1, 1, 1, 1]);
let cast13_out1 = gather10_out1;
let range6_out1 = {
let start = 0i64;
let delta = 1i64;
assert!(delta != 0);
let n = (((cast13_out1 as i128 - start as i128) as f64) / delta as f64)
.ceil()
.max(0.0) as i64;
Tensor::arange(0..n, &self.device)
.cast(burn::tensor::DType::I64)
.mul_scalar(delta)
.add_scalar(start)
};
let reshape10_out1 = range6_out1.reshape([1, 1, 1, -1]);
let gather11_out1 = {
let axis_size = cast11_out1.clone().dims()[0] as i64;
let negative = reshape9_out1.clone().lower_elem(0i64);
let corrected = reshape9_out1.clone() + axis_size;
let indices = reshape9_out1.mask_where(negative, corrected);
cast11_out1.clone().take::<4, 4>(0, indices)
};
let less4_out1 = reshape10_out1.lower(gather11_out1);
let layernormalization2_out1 = {
let dtype = layernormalization1_out1.clone().dtype();
self.layernormalization2
.forward(layernormalization1_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape20_out1: [i64; 3] = {
let axes = &layernormalization2_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather12_out1 = shape20_out1[0] as i64;
let shape21_out1: [i64; 3] = {
let axes = &layernormalization2_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather13_out1 = shape21_out1[1] as i64;
let linear2_out1 = self.linear2.forward(layernormalization2_out1);
let unsqueeze30_out1 = [gather12_out1 as i64];
let unsqueeze31_out1 = [gather13_out1 as i64];
let constant454_out1: [i64; 1] = [64i64];
let constant452_out1: [i64; 1] = [3i64];
let constant453_out1: [i64; 1] = [8i64];
let concat12_out1: [i64; 5usize] = [
&unsqueeze30_out1[..],
&unsqueeze31_out1[..],
&constant452_out1[..],
&constant453_out1[..],
&constant454_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape11_out1 = linear2_out1.reshape(concat12_out1);
let transpose1_out1 = reshape11_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose1_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split1_out1, split1_out2, split1_out3] = split_tensors.try_into().unwrap();
let squeeze1_out1 = split1_out1.squeeze_dims::<4>(&[0]);
let squeeze2_out1 = split1_out2.squeeze_dims::<4>(&[0]);
let squeeze3_out1 = split1_out3.squeeze_dims::<4>(&[0]);
let shape22_out1: [i64; 4] = {
let axes = &squeeze1_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather14_out1 = shape22_out1[2] as i64;
let shape23_out1: [i64; 4] = {
let axes = &squeeze2_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather15_out1 = shape23_out1[2] as i64;
let sub3_out1 = gather15_out1 - gather14_out1;
let unsqueeze32_out1 = [gather15_out1 as i64];
let constant461_out1 = self.constant461.val();
let slice5_out1 = constant461_out1.clone().slice(s![0..unsqueeze32_out1[0], ..]);
let unsqueeze33_out1 = [gather15_out1 as i64];
let constant469_out1: [i64; 1] = [64i64];
let constant466_out1: [i64; 1] = [1i64];
let constant467_out1: [i64; 1] = [1i64];
let concat13_out1: [i64; 4usize] = [
&constant466_out1[..],
&constant467_out1[..],
&unsqueeze33_out1[..],
&constant469_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze34_out1 = [gather15_out1 as i64];
let constant473_out1: [i64; 1] = [64i64];
let constant470_out1: [i64; 1] = [1i64];
let constant471_out1: [i64; 1] = [1i64];
let concat14_out1: [i64; 4usize] = [
&constant470_out1[..],
&constant471_out1[..],
&unsqueeze34_out1[..],
&constant473_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape12_out1 = slice5_out1.reshape(concat13_out1);
let unsqueeze35_out1 = [gather15_out1 as i64];
let constant474_out1 = self.constant474.val();
let slice6_out1 = constant474_out1.clone().slice(s![0..unsqueeze35_out1[0], ..]);
let reshape13_out1 = slice6_out1.reshape(concat14_out1);
let unsqueeze36_out1 = [sub3_out1 as i64];
let unsqueeze37_out1 = [gather15_out1 as i64];
let slice7_out1 = constant461_out1
.clone()
.slice(s![unsqueeze36_out1[0]..unsqueeze37_out1[0], ..]);
let unsqueeze38_out1 = [gather14_out1 as i64];
let constant486_out1: [i64; 1] = [64i64];
let constant483_out1: [i64; 1] = [1i64];
let constant484_out1: [i64; 1] = [1i64];
let concat15_out1: [i64; 4usize] = [
&constant483_out1[..],
&constant484_out1[..],
&unsqueeze38_out1[..],
&constant486_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze39_out1 = [gather14_out1 as i64];
let constant490_out1: [i64; 1] = [64i64];
let constant487_out1: [i64; 1] = [1i64];
let constant488_out1: [i64; 1] = [1i64];
let concat16_out1: [i64; 4usize] = [
&constant487_out1[..],
&constant488_out1[..],
&unsqueeze39_out1[..],
&constant490_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape14_out1 = slice7_out1.reshape(concat15_out1);
let unsqueeze40_out1 = [sub3_out1 as i64];
let unsqueeze41_out1 = [gather15_out1 as i64];
let slice8_out1 = constant474_out1
.clone()
.slice(s![unsqueeze40_out1[0]..unsqueeze41_out1[0], ..]);
let reshape15_out1 = slice8_out1.reshape(concat16_out1);
let cast14_out1 = reshape14_out1;
let cast15_out1 = reshape15_out1;
let mul10_out1 = squeeze1_out1.clone().mul(cast14_out1);
let shape24_out1: [i64; 4] = {
let axes = &squeeze1_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather16_out1 = shape24_out1[3] as i64;
let constant496_out1 = 2i64;
let div3_out1 = gather16_out1 / constant496_out1;
let cast16_out1 = div3_out1;
let cast17_out1 = cast16_out1;
let unsqueeze42_out1 = [cast17_out1 as i64];
let slice9_out1 = squeeze1_out1
.clone()
.slice(s![.., .., .., unsqueeze42_out1[0]..9223372036854775807]);
let neg1_out1 = slice9_out1.neg();
let unsqueeze43_out1 = [cast17_out1 as i64];
let slice10_out1 = squeeze1_out1.slice(s![.., .., .., 0..unsqueeze43_out1[0]]);
let concat17_out1 = burn::tensor::Tensor::cat(
[neg1_out1, slice10_out1].into(),
3,
);
let mul11_out1 = concat17_out1.mul(cast15_out1);
let add14_out1 = mul10_out1.add(mul11_out1);
let cast18_out1 = reshape12_out1;
let cast19_out1 = reshape13_out1;
let mul12_out1 = squeeze2_out1.clone().mul(cast18_out1);
let shape25_out1: [i64; 4] = {
let axes = &squeeze2_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather17_out1 = shape25_out1[3] as i64;
let constant506_out1 = 2i64;
let div4_out1 = gather17_out1 / constant506_out1;
let cast20_out1 = div4_out1;
let cast21_out1 = cast20_out1;
let unsqueeze44_out1 = [cast21_out1 as i64];
let slice11_out1 = squeeze2_out1
.clone()
.slice(s![.., .., .., unsqueeze44_out1[0]..9223372036854775807]);
let neg2_out1 = slice11_out1.neg();
let unsqueeze45_out1 = [cast21_out1 as i64];
let slice12_out1 = squeeze2_out1.slice(s![.., .., .., 0..unsqueeze45_out1[0]]);
let concat18_out1 = burn::tensor::Tensor::cat(
[neg2_out1, slice12_out1].into(),
3,
);
let mul13_out1 = concat18_out1.mul(cast19_out1);
let add15_out1 = mul12_out1.add(mul13_out1);
let shape26_out1: [i64; 4] = {
let axes = &add14_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice13_out1: [i64; 1] = shape26_out1[3..4].try_into().unwrap();
let cast22_out1 = {
let shape_array = slice13_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt1_out1 = cast22_out1.sqrt();
let constant517_out1 = self.constant517.val();
let div5_out1 = constant517_out1.div(sqrt1_out1);
let cast23_out1 = div5_out1;
let transpose2_out1 = add15_out1.permute([0, 1, 3, 2]);
let sqrt2_out1 = cast23_out1.clone().sqrt();
let mul14_out1 = add14_out1
.mul((sqrt2_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt3_out1 = cast23_out1.sqrt();
let mul15_out1 = transpose2_out1
.mul((sqrt3_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul3_out1 = mul14_out1.matmul(mul15_out1);
let constant519_out1 = self.constant519.val();
let constant518_out1 = self.constant518.val();
let where7_out1 = constant519_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1.clone(),
constant518_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add16_out1 = matmul3_out1.add(where7_out1);
let softmax1_out1 = burn::tensor::activation::softmax(add16_out1, 3);
let isnan1_out1 = softmax1_out1.clone().is_nan();
let constant520_out1 = self.constant520.val();
let where8_out1 = softmax1_out1
.mask_where(
isnan1_out1,
constant520_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul4_out1 = where8_out1.matmul(squeeze3_out1);
let transpose3_out1 = matmul4_out1.permute([0, 2, 1, 3]);
let unsqueeze46_out1 = [gather12_out1 as i64];
let unsqueeze47_out1 = [gather13_out1 as i64];
let constant523_out1: [i64; 1] = [512i64];
let concat19_out1: [i64; 3usize] = [
&unsqueeze46_out1[..],
&unsqueeze47_out1[..],
&constant523_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape16_out1 = transpose3_out1.reshape(concat19_out1);
let linear3_out1 = self.linear3.forward(reshape16_out1);
let add17_out1 = layernormalization1_out1.add(linear3_out1);
(add17_out1, constant461_out1, constant474_out1, less4_out1, cast11_out1)
}
}
#[derive(Module, Debug)]
pub struct Submodule3 {
layernormalization3: LayerNorm,
linear4: Linear,
constant524: burn::module::Param<Tensor<1>>,
constant525: burn::module::Param<Tensor<1>>,
constant526: burn::module::Param<Tensor<1>>,
linear5: Linear,
layernormalization4: LayerNorm,
linear6: Linear,
constant594: burn::module::Param<Tensor<1>>,
constant596: burn::module::Param<Tensor<1>>,
constant595: burn::module::Param<Tensor<1>>,
constant597: burn::module::Param<Tensor<1>>,
linear7: Linear,
#[module(skip)]
device: Device,
}
impl Submodule3 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization3 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear4 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant524: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant525: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant526: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear5 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization4 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear6 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant594: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant596: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant595: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant597: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear7 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization3,
linear4,
constant524,
constant525,
constant526,
linear5,
layernormalization4,
linear6,
constant594,
constant596,
constant595,
constant597,
linear7,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add17_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization3_out1 = {
let dtype = add17_out1.clone().dtype();
self.layernormalization3
.forward(add17_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear4_out1 = self.linear4.forward(layernormalization3_out1);
let constant524_out1 = self.constant524.val();
let div6_out1 = linear4_out1
.clone()
.div((constant524_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf1_out1 = div6_out1.erf();
let constant525_out1 = self.constant525.val();
let add18_out1 = erf1_out1
.add((constant525_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul16_out1 = linear4_out1.mul(add18_out1);
let constant526_out1 = self.constant526.val();
let mul17_out1 = mul16_out1
.mul((constant526_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear5_out1 = self.linear5.forward(mul17_out1);
let add19_out1 = add17_out1.add(linear5_out1);
let layernormalization4_out1 = {
let dtype = add19_out1.clone().dtype();
self.layernormalization4
.forward(add19_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape27_out1: [i64; 3] = {
let axes = &layernormalization4_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather18_out1 = shape27_out1[0] as i64;
let shape28_out1: [i64; 3] = {
let axes = &layernormalization4_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather19_out1 = shape28_out1[1] as i64;
let linear6_out1 = self.linear6.forward(layernormalization4_out1);
let unsqueeze48_out1 = [gather18_out1 as i64];
let unsqueeze49_out1 = [gather19_out1 as i64];
let constant533_out1: [i64; 1] = [64i64];
let constant531_out1: [i64; 1] = [3i64];
let constant532_out1: [i64; 1] = [8i64];
let concat20_out1: [i64; 5usize] = [
&unsqueeze48_out1[..],
&unsqueeze49_out1[..],
&constant531_out1[..],
&constant532_out1[..],
&constant533_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape17_out1 = linear6_out1.reshape(concat20_out1);
let transpose4_out1 = reshape17_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose4_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split2_out1, split2_out2, split2_out3] = split_tensors.try_into().unwrap();
let squeeze4_out1 = split2_out1.squeeze_dims::<4>(&[0]);
let squeeze5_out1 = split2_out2.squeeze_dims::<4>(&[0]);
let squeeze6_out1 = split2_out3.squeeze_dims::<4>(&[0]);
let shape29_out1: [i64; 4] = {
let axes = &squeeze4_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather20_out1 = shape29_out1[2] as i64;
let shape30_out1: [i64; 4] = {
let axes = &squeeze5_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather21_out1 = shape30_out1[2] as i64;
let sub4_out1 = gather21_out1 - gather20_out1;
let unsqueeze50_out1 = [gather21_out1 as i64];
let slice14_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze50_out1[0], ..]);
let unsqueeze51_out1 = [gather21_out1 as i64];
let constant547_out1: [i64; 1] = [64i64];
let constant544_out1: [i64; 1] = [1i64];
let constant545_out1: [i64; 1] = [1i64];
let concat21_out1: [i64; 4usize] = [
&constant544_out1[..],
&constant545_out1[..],
&unsqueeze51_out1[..],
&constant547_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze52_out1 = [gather21_out1 as i64];
let constant551_out1: [i64; 1] = [64i64];
let constant548_out1: [i64; 1] = [1i64];
let constant549_out1: [i64; 1] = [1i64];
let concat22_out1: [i64; 4usize] = [
&constant548_out1[..],
&constant549_out1[..],
&unsqueeze52_out1[..],
&constant551_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape18_out1 = slice14_out1.reshape(concat21_out1);
let unsqueeze53_out1 = [gather21_out1 as i64];
let slice15_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze53_out1[0], ..]);
let reshape19_out1 = slice15_out1.reshape(concat22_out1);
let unsqueeze54_out1 = [sub4_out1 as i64];
let unsqueeze55_out1 = [gather21_out1 as i64];
let slice16_out1 = constant461_out1
.slice(s![unsqueeze54_out1[0]..unsqueeze55_out1[0], ..]);
let unsqueeze56_out1 = [gather20_out1 as i64];
let constant563_out1: [i64; 1] = [64i64];
let constant560_out1: [i64; 1] = [1i64];
let constant561_out1: [i64; 1] = [1i64];
let concat23_out1: [i64; 4usize] = [
&constant560_out1[..],
&constant561_out1[..],
&unsqueeze56_out1[..],
&constant563_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze57_out1 = [gather20_out1 as i64];
let constant567_out1: [i64; 1] = [64i64];
let constant564_out1: [i64; 1] = [1i64];
let constant565_out1: [i64; 1] = [1i64];
let concat24_out1: [i64; 4usize] = [
&constant564_out1[..],
&constant565_out1[..],
&unsqueeze57_out1[..],
&constant567_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape20_out1 = slice16_out1.reshape(concat23_out1);
let unsqueeze58_out1 = [sub4_out1 as i64];
let unsqueeze59_out1 = [gather21_out1 as i64];
let slice17_out1 = constant474_out1
.slice(s![unsqueeze58_out1[0]..unsqueeze59_out1[0], ..]);
let reshape21_out1 = slice17_out1.reshape(concat24_out1);
let cast24_out1 = reshape20_out1;
let cast25_out1 = reshape21_out1;
let mul18_out1 = squeeze4_out1.clone().mul(cast24_out1);
let shape31_out1: [i64; 4] = {
let axes = &squeeze4_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather22_out1 = shape31_out1[3] as i64;
let constant573_out1 = 2i64;
let div7_out1 = gather22_out1 / constant573_out1;
let cast26_out1 = div7_out1;
let cast27_out1 = cast26_out1;
let unsqueeze60_out1 = [cast27_out1 as i64];
let slice18_out1 = squeeze4_out1
.clone()
.slice(s![.., .., .., unsqueeze60_out1[0]..9223372036854775807]);
let neg3_out1 = slice18_out1.neg();
let unsqueeze61_out1 = [cast27_out1 as i64];
let slice19_out1 = squeeze4_out1.slice(s![.., .., .., 0..unsqueeze61_out1[0]]);
let concat25_out1 = burn::tensor::Tensor::cat(
[neg3_out1, slice19_out1].into(),
3,
);
let mul19_out1 = concat25_out1.mul(cast25_out1);
let add20_out1 = mul18_out1.add(mul19_out1);
let cast28_out1 = reshape18_out1;
let cast29_out1 = reshape19_out1;
let mul20_out1 = squeeze5_out1.clone().mul(cast28_out1);
let shape32_out1: [i64; 4] = {
let axes = &squeeze5_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather23_out1 = shape32_out1[3] as i64;
let constant583_out1 = 2i64;
let div8_out1 = gather23_out1 / constant583_out1;
let cast30_out1 = div8_out1;
let cast31_out1 = cast30_out1;
let unsqueeze62_out1 = [cast31_out1 as i64];
let slice20_out1 = squeeze5_out1
.clone()
.slice(s![.., .., .., unsqueeze62_out1[0]..9223372036854775807]);
let neg4_out1 = slice20_out1.neg();
let unsqueeze63_out1 = [cast31_out1 as i64];
let slice21_out1 = squeeze5_out1.slice(s![.., .., .., 0..unsqueeze63_out1[0]]);
let concat26_out1 = burn::tensor::Tensor::cat(
[neg4_out1, slice21_out1].into(),
3,
);
let mul21_out1 = concat26_out1.mul(cast29_out1);
let add21_out1 = mul20_out1.add(mul21_out1);
let shape33_out1: [i64; 4] = {
let axes = &add20_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice22_out1: [i64; 1] = shape33_out1[3..4].try_into().unwrap();
let cast32_out1 = {
let shape_array = slice22_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt4_out1 = cast32_out1.sqrt();
let constant594_out1 = self.constant594.val();
let div9_out1 = constant594_out1.div(sqrt4_out1);
let cast33_out1 = div9_out1;
let transpose5_out1 = add21_out1.permute([0, 1, 3, 2]);
let sqrt5_out1 = cast33_out1.clone().sqrt();
let mul22_out1 = add20_out1
.mul((sqrt5_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt6_out1 = cast33_out1.sqrt();
let mul23_out1 = transpose5_out1
.mul((sqrt6_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul9_out1 = mul22_out1.matmul(mul23_out1);
let constant596_out1 = self.constant596.val();
let constant595_out1 = self.constant595.val();
let where9_out1 = constant596_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant595_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add22_out1 = matmul9_out1.add(where9_out1);
let softmax2_out1 = burn::tensor::activation::softmax(add22_out1, 3);
let isnan2_out1 = softmax2_out1.clone().is_nan();
let constant597_out1 = self.constant597.val();
let where10_out1 = softmax2_out1
.mask_where(
isnan2_out1,
constant597_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul10_out1 = where10_out1.matmul(squeeze6_out1);
let transpose6_out1 = matmul10_out1.permute([0, 2, 1, 3]);
let unsqueeze64_out1 = [gather18_out1 as i64];
let unsqueeze65_out1 = [gather19_out1 as i64];
let constant600_out1: [i64; 1] = [512i64];
let concat27_out1: [i64; 3usize] = [
&unsqueeze64_out1[..],
&unsqueeze65_out1[..],
&constant600_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape22_out1 = transpose6_out1.reshape(concat27_out1);
let linear7_out1 = self.linear7.forward(reshape22_out1);
let add23_out1 = add19_out1.add(linear7_out1);
add23_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule4 {
layernormalization5: LayerNorm,
linear8: Linear,
constant601: burn::module::Param<Tensor<1>>,
constant602: burn::module::Param<Tensor<1>>,
constant603: burn::module::Param<Tensor<1>>,
linear9: Linear,
layernormalization6: LayerNorm,
linear10: Linear,
constant671: burn::module::Param<Tensor<1>>,
constant673: burn::module::Param<Tensor<1>>,
constant672: burn::module::Param<Tensor<1>>,
constant674: burn::module::Param<Tensor<1>>,
linear11: Linear,
#[module(skip)]
device: Device,
}
impl Submodule4 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization5 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear8 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant601: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant602: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant603: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear9 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization6 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear10 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant671: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant673: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant672: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant674: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear11 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization5,
linear8,
constant601,
constant602,
constant603,
linear9,
layernormalization6,
linear10,
constant671,
constant673,
constant672,
constant674,
linear11,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add23_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization5_out1 = {
let dtype = add23_out1.clone().dtype();
self.layernormalization5
.forward(add23_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear8_out1 = self.linear8.forward(layernormalization5_out1);
let constant601_out1 = self.constant601.val();
let div10_out1 = linear8_out1
.clone()
.div((constant601_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf2_out1 = div10_out1.erf();
let constant602_out1 = self.constant602.val();
let add24_out1 = erf2_out1
.add((constant602_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul24_out1 = linear8_out1.mul(add24_out1);
let constant603_out1 = self.constant603.val();
let mul25_out1 = mul24_out1
.mul((constant603_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear9_out1 = self.linear9.forward(mul25_out1);
let add25_out1 = add23_out1.add(linear9_out1);
let layernormalization6_out1 = {
let dtype = add25_out1.clone().dtype();
self.layernormalization6
.forward(add25_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape34_out1: [i64; 3] = {
let axes = &layernormalization6_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather24_out1 = shape34_out1[0] as i64;
let shape35_out1: [i64; 3] = {
let axes = &layernormalization6_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather25_out1 = shape35_out1[1] as i64;
let linear10_out1 = self.linear10.forward(layernormalization6_out1);
let unsqueeze66_out1 = [gather24_out1 as i64];
let unsqueeze67_out1 = [gather25_out1 as i64];
let constant610_out1: [i64; 1] = [64i64];
let constant608_out1: [i64; 1] = [3i64];
let constant609_out1: [i64; 1] = [8i64];
let concat28_out1: [i64; 5usize] = [
&unsqueeze66_out1[..],
&unsqueeze67_out1[..],
&constant608_out1[..],
&constant609_out1[..],
&constant610_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape23_out1 = linear10_out1.reshape(concat28_out1);
let transpose7_out1 = reshape23_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose7_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split3_out1, split3_out2, split3_out3] = split_tensors.try_into().unwrap();
let squeeze7_out1 = split3_out1.squeeze_dims::<4>(&[0]);
let squeeze8_out1 = split3_out2.squeeze_dims::<4>(&[0]);
let squeeze9_out1 = split3_out3.squeeze_dims::<4>(&[0]);
let shape36_out1: [i64; 4] = {
let axes = &squeeze7_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather26_out1 = shape36_out1[2] as i64;
let shape37_out1: [i64; 4] = {
let axes = &squeeze8_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather27_out1 = shape37_out1[2] as i64;
let sub5_out1 = gather27_out1 - gather26_out1;
let unsqueeze68_out1 = [gather27_out1 as i64];
let slice23_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze68_out1[0], ..]);
let unsqueeze69_out1 = [gather27_out1 as i64];
let constant624_out1: [i64; 1] = [64i64];
let constant621_out1: [i64; 1] = [1i64];
let constant622_out1: [i64; 1] = [1i64];
let concat29_out1: [i64; 4usize] = [
&constant621_out1[..],
&constant622_out1[..],
&unsqueeze69_out1[..],
&constant624_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze70_out1 = [gather27_out1 as i64];
let constant628_out1: [i64; 1] = [64i64];
let constant625_out1: [i64; 1] = [1i64];
let constant626_out1: [i64; 1] = [1i64];
let concat30_out1: [i64; 4usize] = [
&constant625_out1[..],
&constant626_out1[..],
&unsqueeze70_out1[..],
&constant628_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape24_out1 = slice23_out1.reshape(concat29_out1);
let unsqueeze71_out1 = [gather27_out1 as i64];
let slice24_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze71_out1[0], ..]);
let reshape25_out1 = slice24_out1.reshape(concat30_out1);
let unsqueeze72_out1 = [sub5_out1 as i64];
let unsqueeze73_out1 = [gather27_out1 as i64];
let slice25_out1 = constant461_out1
.slice(s![unsqueeze72_out1[0]..unsqueeze73_out1[0], ..]);
let unsqueeze74_out1 = [gather26_out1 as i64];
let constant640_out1: [i64; 1] = [64i64];
let constant637_out1: [i64; 1] = [1i64];
let constant638_out1: [i64; 1] = [1i64];
let concat31_out1: [i64; 4usize] = [
&constant637_out1[..],
&constant638_out1[..],
&unsqueeze74_out1[..],
&constant640_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze75_out1 = [gather26_out1 as i64];
let constant644_out1: [i64; 1] = [64i64];
let constant641_out1: [i64; 1] = [1i64];
let constant642_out1: [i64; 1] = [1i64];
let concat32_out1: [i64; 4usize] = [
&constant641_out1[..],
&constant642_out1[..],
&unsqueeze75_out1[..],
&constant644_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape26_out1 = slice25_out1.reshape(concat31_out1);
let unsqueeze76_out1 = [sub5_out1 as i64];
let unsqueeze77_out1 = [gather27_out1 as i64];
let slice26_out1 = constant474_out1
.slice(s![unsqueeze76_out1[0]..unsqueeze77_out1[0], ..]);
let reshape27_out1 = slice26_out1.reshape(concat32_out1);
let cast34_out1 = reshape26_out1;
let cast35_out1 = reshape27_out1;
let mul26_out1 = squeeze7_out1.clone().mul(cast34_out1);
let shape38_out1: [i64; 4] = {
let axes = &squeeze7_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather28_out1 = shape38_out1[3] as i64;
let constant650_out1 = 2i64;
let div11_out1 = gather28_out1 / constant650_out1;
let cast36_out1 = div11_out1;
let cast37_out1 = cast36_out1;
let unsqueeze78_out1 = [cast37_out1 as i64];
let slice27_out1 = squeeze7_out1
.clone()
.slice(s![.., .., .., unsqueeze78_out1[0]..9223372036854775807]);
let neg5_out1 = slice27_out1.neg();
let unsqueeze79_out1 = [cast37_out1 as i64];
let slice28_out1 = squeeze7_out1.slice(s![.., .., .., 0..unsqueeze79_out1[0]]);
let concat33_out1 = burn::tensor::Tensor::cat(
[neg5_out1, slice28_out1].into(),
3,
);
let mul27_out1 = concat33_out1.mul(cast35_out1);
let add26_out1 = mul26_out1.add(mul27_out1);
let cast38_out1 = reshape24_out1;
let cast39_out1 = reshape25_out1;
let mul28_out1 = squeeze8_out1.clone().mul(cast38_out1);
let shape39_out1: [i64; 4] = {
let axes = &squeeze8_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather29_out1 = shape39_out1[3] as i64;
let constant660_out1 = 2i64;
let div12_out1 = gather29_out1 / constant660_out1;
let cast40_out1 = div12_out1;
let cast41_out1 = cast40_out1;
let unsqueeze80_out1 = [cast41_out1 as i64];
let slice29_out1 = squeeze8_out1
.clone()
.slice(s![.., .., .., unsqueeze80_out1[0]..9223372036854775807]);
let neg6_out1 = slice29_out1.neg();
let unsqueeze81_out1 = [cast41_out1 as i64];
let slice30_out1 = squeeze8_out1.slice(s![.., .., .., 0..unsqueeze81_out1[0]]);
let concat34_out1 = burn::tensor::Tensor::cat(
[neg6_out1, slice30_out1].into(),
3,
);
let mul29_out1 = concat34_out1.mul(cast39_out1);
let add27_out1 = mul28_out1.add(mul29_out1);
let shape40_out1: [i64; 4] = {
let axes = &add26_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice31_out1: [i64; 1] = shape40_out1[3..4].try_into().unwrap();
let cast42_out1 = {
let shape_array = slice31_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt7_out1 = cast42_out1.sqrt();
let constant671_out1 = self.constant671.val();
let div13_out1 = constant671_out1.div(sqrt7_out1);
let cast43_out1 = div13_out1;
let transpose8_out1 = add27_out1.permute([0, 1, 3, 2]);
let sqrt8_out1 = cast43_out1.clone().sqrt();
let mul30_out1 = add26_out1
.mul((sqrt8_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt9_out1 = cast43_out1.sqrt();
let mul31_out1 = transpose8_out1
.mul((sqrt9_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul15_out1 = mul30_out1.matmul(mul31_out1);
let constant673_out1 = self.constant673.val();
let constant672_out1 = self.constant672.val();
let where11_out1 = constant673_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant672_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add28_out1 = matmul15_out1.add(where11_out1);
let softmax3_out1 = burn::tensor::activation::softmax(add28_out1, 3);
let isnan3_out1 = softmax3_out1.clone().is_nan();
let constant674_out1 = self.constant674.val();
let where12_out1 = softmax3_out1
.mask_where(
isnan3_out1,
constant674_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul16_out1 = where12_out1.matmul(squeeze9_out1);
let transpose9_out1 = matmul16_out1.permute([0, 2, 1, 3]);
let unsqueeze82_out1 = [gather24_out1 as i64];
let unsqueeze83_out1 = [gather25_out1 as i64];
let constant677_out1: [i64; 1] = [512i64];
let concat35_out1: [i64; 3usize] = [
&unsqueeze82_out1[..],
&unsqueeze83_out1[..],
&constant677_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape28_out1 = transpose9_out1.reshape(concat35_out1);
let linear11_out1 = self.linear11.forward(reshape28_out1);
let add29_out1 = add25_out1.add(linear11_out1);
add29_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule5 {
layernormalization7: LayerNorm,
linear12: Linear,
constant678: burn::module::Param<Tensor<1>>,
constant679: burn::module::Param<Tensor<1>>,
constant680: burn::module::Param<Tensor<1>>,
linear13: Linear,
layernormalization8: LayerNorm,
linear14: Linear,
constant748: burn::module::Param<Tensor<1>>,
constant750: burn::module::Param<Tensor<1>>,
constant749: burn::module::Param<Tensor<1>>,
constant751: burn::module::Param<Tensor<1>>,
linear15: Linear,
#[module(skip)]
device: Device,
}
impl Submodule5 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization7 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear12 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant678: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant679: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant680: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear13 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization8 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear14 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant748: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant750: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant749: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant751: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear15 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization7,
linear12,
constant678,
constant679,
constant680,
linear13,
layernormalization8,
linear14,
constant748,
constant750,
constant749,
constant751,
linear15,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add29_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization7_out1 = {
let dtype = add29_out1.clone().dtype();
self.layernormalization7
.forward(add29_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear12_out1 = self.linear12.forward(layernormalization7_out1);
let constant678_out1 = self.constant678.val();
let div14_out1 = linear12_out1
.clone()
.div((constant678_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf3_out1 = div14_out1.erf();
let constant679_out1 = self.constant679.val();
let add30_out1 = erf3_out1
.add((constant679_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul32_out1 = linear12_out1.mul(add30_out1);
let constant680_out1 = self.constant680.val();
let mul33_out1 = mul32_out1
.mul((constant680_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear13_out1 = self.linear13.forward(mul33_out1);
let add31_out1 = add29_out1.add(linear13_out1);
let layernormalization8_out1 = {
let dtype = add31_out1.clone().dtype();
self.layernormalization8
.forward(add31_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape41_out1: [i64; 3] = {
let axes = &layernormalization8_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather30_out1 = shape41_out1[0] as i64;
let shape42_out1: [i64; 3] = {
let axes = &layernormalization8_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather31_out1 = shape42_out1[1] as i64;
let linear14_out1 = self.linear14.forward(layernormalization8_out1);
let unsqueeze84_out1 = [gather30_out1 as i64];
let unsqueeze85_out1 = [gather31_out1 as i64];
let constant687_out1: [i64; 1] = [64i64];
let constant685_out1: [i64; 1] = [3i64];
let constant686_out1: [i64; 1] = [8i64];
let concat36_out1: [i64; 5usize] = [
&unsqueeze84_out1[..],
&unsqueeze85_out1[..],
&constant685_out1[..],
&constant686_out1[..],
&constant687_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape29_out1 = linear14_out1.reshape(concat36_out1);
let transpose10_out1 = reshape29_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose10_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split4_out1, split4_out2, split4_out3] = split_tensors.try_into().unwrap();
let squeeze10_out1 = split4_out1.squeeze_dims::<4>(&[0]);
let squeeze11_out1 = split4_out2.squeeze_dims::<4>(&[0]);
let squeeze12_out1 = split4_out3.squeeze_dims::<4>(&[0]);
let shape43_out1: [i64; 4] = {
let axes = &squeeze10_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather32_out1 = shape43_out1[2] as i64;
let shape44_out1: [i64; 4] = {
let axes = &squeeze11_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather33_out1 = shape44_out1[2] as i64;
let sub6_out1 = gather33_out1 - gather32_out1;
let unsqueeze86_out1 = [gather33_out1 as i64];
let slice32_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze86_out1[0], ..]);
let unsqueeze87_out1 = [gather33_out1 as i64];
let constant701_out1: [i64; 1] = [64i64];
let constant698_out1: [i64; 1] = [1i64];
let constant699_out1: [i64; 1] = [1i64];
let concat37_out1: [i64; 4usize] = [
&constant698_out1[..],
&constant699_out1[..],
&unsqueeze87_out1[..],
&constant701_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze88_out1 = [gather33_out1 as i64];
let constant705_out1: [i64; 1] = [64i64];
let constant702_out1: [i64; 1] = [1i64];
let constant703_out1: [i64; 1] = [1i64];
let concat38_out1: [i64; 4usize] = [
&constant702_out1[..],
&constant703_out1[..],
&unsqueeze88_out1[..],
&constant705_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape30_out1 = slice32_out1.reshape(concat37_out1);
let unsqueeze89_out1 = [gather33_out1 as i64];
let slice33_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze89_out1[0], ..]);
let reshape31_out1 = slice33_out1.reshape(concat38_out1);
let unsqueeze90_out1 = [sub6_out1 as i64];
let unsqueeze91_out1 = [gather33_out1 as i64];
let slice34_out1 = constant461_out1
.slice(s![unsqueeze90_out1[0]..unsqueeze91_out1[0], ..]);
let unsqueeze92_out1 = [gather32_out1 as i64];
let constant717_out1: [i64; 1] = [64i64];
let constant714_out1: [i64; 1] = [1i64];
let constant715_out1: [i64; 1] = [1i64];
let concat39_out1: [i64; 4usize] = [
&constant714_out1[..],
&constant715_out1[..],
&unsqueeze92_out1[..],
&constant717_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze93_out1 = [gather32_out1 as i64];
let constant721_out1: [i64; 1] = [64i64];
let constant718_out1: [i64; 1] = [1i64];
let constant719_out1: [i64; 1] = [1i64];
let concat40_out1: [i64; 4usize] = [
&constant718_out1[..],
&constant719_out1[..],
&unsqueeze93_out1[..],
&constant721_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape32_out1 = slice34_out1.reshape(concat39_out1);
let unsqueeze94_out1 = [sub6_out1 as i64];
let unsqueeze95_out1 = [gather33_out1 as i64];
let slice35_out1 = constant474_out1
.slice(s![unsqueeze94_out1[0]..unsqueeze95_out1[0], ..]);
let reshape33_out1 = slice35_out1.reshape(concat40_out1);
let cast44_out1 = reshape32_out1;
let cast45_out1 = reshape33_out1;
let mul34_out1 = squeeze10_out1.clone().mul(cast44_out1);
let shape45_out1: [i64; 4] = {
let axes = &squeeze10_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather34_out1 = shape45_out1[3] as i64;
let constant727_out1 = 2i64;
let div15_out1 = gather34_out1 / constant727_out1;
let cast46_out1 = div15_out1;
let cast47_out1 = cast46_out1;
let unsqueeze96_out1 = [cast47_out1 as i64];
let slice36_out1 = squeeze10_out1
.clone()
.slice(s![.., .., .., unsqueeze96_out1[0]..9223372036854775807]);
let neg7_out1 = slice36_out1.neg();
let unsqueeze97_out1 = [cast47_out1 as i64];
let slice37_out1 = squeeze10_out1.slice(s![.., .., .., 0..unsqueeze97_out1[0]]);
let concat41_out1 = burn::tensor::Tensor::cat(
[neg7_out1, slice37_out1].into(),
3,
);
let mul35_out1 = concat41_out1.mul(cast45_out1);
let add32_out1 = mul34_out1.add(mul35_out1);
let cast48_out1 = reshape30_out1;
let cast49_out1 = reshape31_out1;
let mul36_out1 = squeeze11_out1.clone().mul(cast48_out1);
let shape46_out1: [i64; 4] = {
let axes = &squeeze11_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather35_out1 = shape46_out1[3] as i64;
let constant737_out1 = 2i64;
let div16_out1 = gather35_out1 / constant737_out1;
let cast50_out1 = div16_out1;
let cast51_out1 = cast50_out1;
let unsqueeze98_out1 = [cast51_out1 as i64];
let slice38_out1 = squeeze11_out1
.clone()
.slice(s![.., .., .., unsqueeze98_out1[0]..9223372036854775807]);
let neg8_out1 = slice38_out1.neg();
let unsqueeze99_out1 = [cast51_out1 as i64];
let slice39_out1 = squeeze11_out1.slice(s![.., .., .., 0..unsqueeze99_out1[0]]);
let concat42_out1 = burn::tensor::Tensor::cat(
[neg8_out1, slice39_out1].into(),
3,
);
let mul37_out1 = concat42_out1.mul(cast49_out1);
let add33_out1 = mul36_out1.add(mul37_out1);
let shape47_out1: [i64; 4] = {
let axes = &add32_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice40_out1: [i64; 1] = shape47_out1[3..4].try_into().unwrap();
let cast52_out1 = {
let shape_array = slice40_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt10_out1 = cast52_out1.sqrt();
let constant748_out1 = self.constant748.val();
let div17_out1 = constant748_out1.div(sqrt10_out1);
let cast53_out1 = div17_out1;
let transpose11_out1 = add33_out1.permute([0, 1, 3, 2]);
let sqrt11_out1 = cast53_out1.clone().sqrt();
let mul38_out1 = add32_out1
.mul((sqrt11_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt12_out1 = cast53_out1.sqrt();
let mul39_out1 = transpose11_out1
.mul((sqrt12_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul21_out1 = mul38_out1.matmul(mul39_out1);
let constant750_out1 = self.constant750.val();
let constant749_out1 = self.constant749.val();
let where13_out1 = constant750_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant749_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add34_out1 = matmul21_out1.add(where13_out1);
let softmax4_out1 = burn::tensor::activation::softmax(add34_out1, 3);
let isnan4_out1 = softmax4_out1.clone().is_nan();
let constant751_out1 = self.constant751.val();
let where14_out1 = softmax4_out1
.mask_where(
isnan4_out1,
constant751_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul22_out1 = where14_out1.matmul(squeeze12_out1);
let transpose12_out1 = matmul22_out1.permute([0, 2, 1, 3]);
let unsqueeze100_out1 = [gather30_out1 as i64];
let unsqueeze101_out1 = [gather31_out1 as i64];
let constant754_out1: [i64; 1] = [512i64];
let concat43_out1: [i64; 3usize] = [
&unsqueeze100_out1[..],
&unsqueeze101_out1[..],
&constant754_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape34_out1 = transpose12_out1.reshape(concat43_out1);
let linear15_out1 = self.linear15.forward(reshape34_out1);
let add35_out1 = add31_out1.add(linear15_out1);
add35_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule6 {
layernormalization9: LayerNorm,
linear16: Linear,
constant755: burn::module::Param<Tensor<1>>,
constant756: burn::module::Param<Tensor<1>>,
constant757: burn::module::Param<Tensor<1>>,
linear17: Linear,
layernormalization10: LayerNorm,
linear18: Linear,
constant825: burn::module::Param<Tensor<1>>,
constant827: burn::module::Param<Tensor<1>>,
constant826: burn::module::Param<Tensor<1>>,
constant828: burn::module::Param<Tensor<1>>,
linear19: Linear,
#[module(skip)]
device: Device,
}
impl Submodule6 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization9 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear16 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant755: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant756: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant757: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear17 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization10 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear18 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant825: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant827: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant826: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant828: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear19 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization9,
linear16,
constant755,
constant756,
constant757,
linear17,
layernormalization10,
linear18,
constant825,
constant827,
constant826,
constant828,
linear19,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add35_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization9_out1 = {
let dtype = add35_out1.clone().dtype();
self.layernormalization9
.forward(add35_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear16_out1 = self.linear16.forward(layernormalization9_out1);
let constant755_out1 = self.constant755.val();
let div18_out1 = linear16_out1
.clone()
.div((constant755_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf4_out1 = div18_out1.erf();
let constant756_out1 = self.constant756.val();
let add36_out1 = erf4_out1
.add((constant756_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul40_out1 = linear16_out1.mul(add36_out1);
let constant757_out1 = self.constant757.val();
let mul41_out1 = mul40_out1
.mul((constant757_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear17_out1 = self.linear17.forward(mul41_out1);
let add37_out1 = add35_out1.add(linear17_out1);
let layernormalization10_out1 = {
let dtype = add37_out1.clone().dtype();
self.layernormalization10
.forward(add37_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape48_out1: [i64; 3] = {
let axes = &layernormalization10_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather36_out1 = shape48_out1[0] as i64;
let shape49_out1: [i64; 3] = {
let axes = &layernormalization10_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather37_out1 = shape49_out1[1] as i64;
let linear18_out1 = self.linear18.forward(layernormalization10_out1);
let unsqueeze102_out1 = [gather36_out1 as i64];
let unsqueeze103_out1 = [gather37_out1 as i64];
let constant764_out1: [i64; 1] = [64i64];
let constant762_out1: [i64; 1] = [3i64];
let constant763_out1: [i64; 1] = [8i64];
let concat44_out1: [i64; 5usize] = [
&unsqueeze102_out1[..],
&unsqueeze103_out1[..],
&constant762_out1[..],
&constant763_out1[..],
&constant764_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape35_out1 = linear18_out1.reshape(concat44_out1);
let transpose13_out1 = reshape35_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose13_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split5_out1, split5_out2, split5_out3] = split_tensors.try_into().unwrap();
let squeeze13_out1 = split5_out1.squeeze_dims::<4>(&[0]);
let squeeze14_out1 = split5_out2.squeeze_dims::<4>(&[0]);
let squeeze15_out1 = split5_out3.squeeze_dims::<4>(&[0]);
let shape50_out1: [i64; 4] = {
let axes = &squeeze13_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather38_out1 = shape50_out1[2] as i64;
let shape51_out1: [i64; 4] = {
let axes = &squeeze14_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather39_out1 = shape51_out1[2] as i64;
let sub7_out1 = gather39_out1 - gather38_out1;
let unsqueeze104_out1 = [gather39_out1 as i64];
let slice41_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze104_out1[0], ..]);
let unsqueeze105_out1 = [gather39_out1 as i64];
let constant778_out1: [i64; 1] = [64i64];
let constant775_out1: [i64; 1] = [1i64];
let constant776_out1: [i64; 1] = [1i64];
let concat45_out1: [i64; 4usize] = [
&constant775_out1[..],
&constant776_out1[..],
&unsqueeze105_out1[..],
&constant778_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze106_out1 = [gather39_out1 as i64];
let constant782_out1: [i64; 1] = [64i64];
let constant779_out1: [i64; 1] = [1i64];
let constant780_out1: [i64; 1] = [1i64];
let concat46_out1: [i64; 4usize] = [
&constant779_out1[..],
&constant780_out1[..],
&unsqueeze106_out1[..],
&constant782_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape36_out1 = slice41_out1.reshape(concat45_out1);
let unsqueeze107_out1 = [gather39_out1 as i64];
let slice42_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze107_out1[0], ..]);
let reshape37_out1 = slice42_out1.reshape(concat46_out1);
let unsqueeze108_out1 = [sub7_out1 as i64];
let unsqueeze109_out1 = [gather39_out1 as i64];
let slice43_out1 = constant461_out1
.slice(s![unsqueeze108_out1[0]..unsqueeze109_out1[0], ..]);
let unsqueeze110_out1 = [gather38_out1 as i64];
let constant794_out1: [i64; 1] = [64i64];
let constant791_out1: [i64; 1] = [1i64];
let constant792_out1: [i64; 1] = [1i64];
let concat47_out1: [i64; 4usize] = [
&constant791_out1[..],
&constant792_out1[..],
&unsqueeze110_out1[..],
&constant794_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze111_out1 = [gather38_out1 as i64];
let constant798_out1: [i64; 1] = [64i64];
let constant795_out1: [i64; 1] = [1i64];
let constant796_out1: [i64; 1] = [1i64];
let concat48_out1: [i64; 4usize] = [
&constant795_out1[..],
&constant796_out1[..],
&unsqueeze111_out1[..],
&constant798_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape38_out1 = slice43_out1.reshape(concat47_out1);
let unsqueeze112_out1 = [sub7_out1 as i64];
let unsqueeze113_out1 = [gather39_out1 as i64];
let slice44_out1 = constant474_out1
.slice(s![unsqueeze112_out1[0]..unsqueeze113_out1[0], ..]);
let reshape39_out1 = slice44_out1.reshape(concat48_out1);
let cast54_out1 = reshape38_out1;
let cast55_out1 = reshape39_out1;
let mul42_out1 = squeeze13_out1.clone().mul(cast54_out1);
let shape52_out1: [i64; 4] = {
let axes = &squeeze13_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather40_out1 = shape52_out1[3] as i64;
let constant804_out1 = 2i64;
let div19_out1 = gather40_out1 / constant804_out1;
let cast56_out1 = div19_out1;
let cast57_out1 = cast56_out1;
let unsqueeze114_out1 = [cast57_out1 as i64];
let slice45_out1 = squeeze13_out1
.clone()
.slice(s![.., .., .., unsqueeze114_out1[0]..9223372036854775807]);
let neg9_out1 = slice45_out1.neg();
let unsqueeze115_out1 = [cast57_out1 as i64];
let slice46_out1 = squeeze13_out1.slice(s![.., .., .., 0..unsqueeze115_out1[0]]);
let concat49_out1 = burn::tensor::Tensor::cat(
[neg9_out1, slice46_out1].into(),
3,
);
let mul43_out1 = concat49_out1.mul(cast55_out1);
let add38_out1 = mul42_out1.add(mul43_out1);
let cast58_out1 = reshape36_out1;
let cast59_out1 = reshape37_out1;
let mul44_out1 = squeeze14_out1.clone().mul(cast58_out1);
let shape53_out1: [i64; 4] = {
let axes = &squeeze14_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather41_out1 = shape53_out1[3] as i64;
let constant814_out1 = 2i64;
let div20_out1 = gather41_out1 / constant814_out1;
let cast60_out1 = div20_out1;
let cast61_out1 = cast60_out1;
let unsqueeze116_out1 = [cast61_out1 as i64];
let slice47_out1 = squeeze14_out1
.clone()
.slice(s![.., .., .., unsqueeze116_out1[0]..9223372036854775807]);
let neg10_out1 = slice47_out1.neg();
let unsqueeze117_out1 = [cast61_out1 as i64];
let slice48_out1 = squeeze14_out1.slice(s![.., .., .., 0..unsqueeze117_out1[0]]);
let concat50_out1 = burn::tensor::Tensor::cat(
[neg10_out1, slice48_out1].into(),
3,
);
let mul45_out1 = concat50_out1.mul(cast59_out1);
let add39_out1 = mul44_out1.add(mul45_out1);
let shape54_out1: [i64; 4] = {
let axes = &add38_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice49_out1: [i64; 1] = shape54_out1[3..4].try_into().unwrap();
let cast62_out1 = {
let shape_array = slice49_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt13_out1 = cast62_out1.sqrt();
let constant825_out1 = self.constant825.val();
let div21_out1 = constant825_out1.div(sqrt13_out1);
let cast63_out1 = div21_out1;
let transpose14_out1 = add39_out1.permute([0, 1, 3, 2]);
let sqrt14_out1 = cast63_out1.clone().sqrt();
let mul46_out1 = add38_out1
.mul((sqrt14_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt15_out1 = cast63_out1.sqrt();
let mul47_out1 = transpose14_out1
.mul((sqrt15_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul27_out1 = mul46_out1.matmul(mul47_out1);
let constant827_out1 = self.constant827.val();
let constant826_out1 = self.constant826.val();
let where15_out1 = constant827_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant826_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add40_out1 = matmul27_out1.add(where15_out1);
let softmax5_out1 = burn::tensor::activation::softmax(add40_out1, 3);
let isnan5_out1 = softmax5_out1.clone().is_nan();
let constant828_out1 = self.constant828.val();
let where16_out1 = softmax5_out1
.mask_where(
isnan5_out1,
constant828_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul28_out1 = where16_out1.matmul(squeeze15_out1);
let transpose15_out1 = matmul28_out1.permute([0, 2, 1, 3]);
let unsqueeze118_out1 = [gather36_out1 as i64];
let unsqueeze119_out1 = [gather37_out1 as i64];
let constant831_out1: [i64; 1] = [512i64];
let concat51_out1: [i64; 3usize] = [
&unsqueeze118_out1[..],
&unsqueeze119_out1[..],
&constant831_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape40_out1 = transpose15_out1.reshape(concat51_out1);
let linear19_out1 = self.linear19.forward(reshape40_out1);
let add41_out1 = add37_out1.add(linear19_out1);
add41_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule7 {
layernormalization11: LayerNorm,
linear20: Linear,
constant832: burn::module::Param<Tensor<1>>,
constant833: burn::module::Param<Tensor<1>>,
constant834: burn::module::Param<Tensor<1>>,
linear21: Linear,
layernormalization12: LayerNorm,
linear22: Linear,
constant902: burn::module::Param<Tensor<1>>,
constant904: burn::module::Param<Tensor<1>>,
constant903: burn::module::Param<Tensor<1>>,
constant905: burn::module::Param<Tensor<1>>,
linear23: Linear,
#[module(skip)]
device: Device,
}
impl Submodule7 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization11 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear20 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant832: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant833: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant834: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear21 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization12 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear22 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant902: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant904: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant903: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant905: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear23 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization11,
linear20,
constant832,
constant833,
constant834,
linear21,
layernormalization12,
linear22,
constant902,
constant904,
constant903,
constant905,
linear23,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add41_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization11_out1 = {
let dtype = add41_out1.clone().dtype();
self.layernormalization11
.forward(add41_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear20_out1 = self.linear20.forward(layernormalization11_out1);
let constant832_out1 = self.constant832.val();
let div22_out1 = linear20_out1
.clone()
.div((constant832_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf5_out1 = div22_out1.erf();
let constant833_out1 = self.constant833.val();
let add42_out1 = erf5_out1
.add((constant833_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul48_out1 = linear20_out1.mul(add42_out1);
let constant834_out1 = self.constant834.val();
let mul49_out1 = mul48_out1
.mul((constant834_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear21_out1 = self.linear21.forward(mul49_out1);
let add43_out1 = add41_out1.add(linear21_out1);
let layernormalization12_out1 = {
let dtype = add43_out1.clone().dtype();
self.layernormalization12
.forward(add43_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape55_out1: [i64; 3] = {
let axes = &layernormalization12_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather42_out1 = shape55_out1[0] as i64;
let shape56_out1: [i64; 3] = {
let axes = &layernormalization12_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather43_out1 = shape56_out1[1] as i64;
let linear22_out1 = self.linear22.forward(layernormalization12_out1);
let unsqueeze120_out1 = [gather42_out1 as i64];
let unsqueeze121_out1 = [gather43_out1 as i64];
let constant841_out1: [i64; 1] = [64i64];
let constant839_out1: [i64; 1] = [3i64];
let constant840_out1: [i64; 1] = [8i64];
let concat52_out1: [i64; 5usize] = [
&unsqueeze120_out1[..],
&unsqueeze121_out1[..],
&constant839_out1[..],
&constant840_out1[..],
&constant841_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape41_out1 = linear22_out1.reshape(concat52_out1);
let transpose16_out1 = reshape41_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose16_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split6_out1, split6_out2, split6_out3] = split_tensors.try_into().unwrap();
let squeeze16_out1 = split6_out1.squeeze_dims::<4>(&[0]);
let squeeze17_out1 = split6_out2.squeeze_dims::<4>(&[0]);
let squeeze18_out1 = split6_out3.squeeze_dims::<4>(&[0]);
let shape57_out1: [i64; 4] = {
let axes = &squeeze16_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather44_out1 = shape57_out1[2] as i64;
let shape58_out1: [i64; 4] = {
let axes = &squeeze17_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather45_out1 = shape58_out1[2] as i64;
let sub8_out1 = gather45_out1 - gather44_out1;
let unsqueeze122_out1 = [gather45_out1 as i64];
let slice50_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze122_out1[0], ..]);
let unsqueeze123_out1 = [gather45_out1 as i64];
let constant855_out1: [i64; 1] = [64i64];
let constant852_out1: [i64; 1] = [1i64];
let constant853_out1: [i64; 1] = [1i64];
let concat53_out1: [i64; 4usize] = [
&constant852_out1[..],
&constant853_out1[..],
&unsqueeze123_out1[..],
&constant855_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze124_out1 = [gather45_out1 as i64];
let constant859_out1: [i64; 1] = [64i64];
let constant856_out1: [i64; 1] = [1i64];
let constant857_out1: [i64; 1] = [1i64];
let concat54_out1: [i64; 4usize] = [
&constant856_out1[..],
&constant857_out1[..],
&unsqueeze124_out1[..],
&constant859_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape42_out1 = slice50_out1.reshape(concat53_out1);
let unsqueeze125_out1 = [gather45_out1 as i64];
let slice51_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze125_out1[0], ..]);
let reshape43_out1 = slice51_out1.reshape(concat54_out1);
let unsqueeze126_out1 = [sub8_out1 as i64];
let unsqueeze127_out1 = [gather45_out1 as i64];
let slice52_out1 = constant461_out1
.slice(s![unsqueeze126_out1[0]..unsqueeze127_out1[0], ..]);
let unsqueeze128_out1 = [gather44_out1 as i64];
let constant871_out1: [i64; 1] = [64i64];
let constant868_out1: [i64; 1] = [1i64];
let constant869_out1: [i64; 1] = [1i64];
let concat55_out1: [i64; 4usize] = [
&constant868_out1[..],
&constant869_out1[..],
&unsqueeze128_out1[..],
&constant871_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze129_out1 = [gather44_out1 as i64];
let constant875_out1: [i64; 1] = [64i64];
let constant872_out1: [i64; 1] = [1i64];
let constant873_out1: [i64; 1] = [1i64];
let concat56_out1: [i64; 4usize] = [
&constant872_out1[..],
&constant873_out1[..],
&unsqueeze129_out1[..],
&constant875_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape44_out1 = slice52_out1.reshape(concat55_out1);
let unsqueeze130_out1 = [sub8_out1 as i64];
let unsqueeze131_out1 = [gather45_out1 as i64];
let slice53_out1 = constant474_out1
.slice(s![unsqueeze130_out1[0]..unsqueeze131_out1[0], ..]);
let reshape45_out1 = slice53_out1.reshape(concat56_out1);
let cast64_out1 = reshape44_out1;
let cast65_out1 = reshape45_out1;
let mul50_out1 = squeeze16_out1.clone().mul(cast64_out1);
let shape59_out1: [i64; 4] = {
let axes = &squeeze16_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather46_out1 = shape59_out1[3] as i64;
let constant881_out1 = 2i64;
let div23_out1 = gather46_out1 / constant881_out1;
let cast66_out1 = div23_out1;
let cast67_out1 = cast66_out1;
let unsqueeze132_out1 = [cast67_out1 as i64];
let slice54_out1 = squeeze16_out1
.clone()
.slice(s![.., .., .., unsqueeze132_out1[0]..9223372036854775807]);
let neg11_out1 = slice54_out1.neg();
let unsqueeze133_out1 = [cast67_out1 as i64];
let slice55_out1 = squeeze16_out1.slice(s![.., .., .., 0..unsqueeze133_out1[0]]);
let concat57_out1 = burn::tensor::Tensor::cat(
[neg11_out1, slice55_out1].into(),
3,
);
let mul51_out1 = concat57_out1.mul(cast65_out1);
let add44_out1 = mul50_out1.add(mul51_out1);
let cast68_out1 = reshape42_out1;
let cast69_out1 = reshape43_out1;
let mul52_out1 = squeeze17_out1.clone().mul(cast68_out1);
let shape60_out1: [i64; 4] = {
let axes = &squeeze17_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather47_out1 = shape60_out1[3] as i64;
let constant891_out1 = 2i64;
let div24_out1 = gather47_out1 / constant891_out1;
let cast70_out1 = div24_out1;
let cast71_out1 = cast70_out1;
let unsqueeze134_out1 = [cast71_out1 as i64];
let slice56_out1 = squeeze17_out1
.clone()
.slice(s![.., .., .., unsqueeze134_out1[0]..9223372036854775807]);
let neg12_out1 = slice56_out1.neg();
let unsqueeze135_out1 = [cast71_out1 as i64];
let slice57_out1 = squeeze17_out1.slice(s![.., .., .., 0..unsqueeze135_out1[0]]);
let concat58_out1 = burn::tensor::Tensor::cat(
[neg12_out1, slice57_out1].into(),
3,
);
let mul53_out1 = concat58_out1.mul(cast69_out1);
let add45_out1 = mul52_out1.add(mul53_out1);
let shape61_out1: [i64; 4] = {
let axes = &add44_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice58_out1: [i64; 1] = shape61_out1[3..4].try_into().unwrap();
let cast72_out1 = {
let shape_array = slice58_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt16_out1 = cast72_out1.sqrt();
let constant902_out1 = self.constant902.val();
let div25_out1 = constant902_out1.div(sqrt16_out1);
let cast73_out1 = div25_out1;
let transpose17_out1 = add45_out1.permute([0, 1, 3, 2]);
let sqrt17_out1 = cast73_out1.clone().sqrt();
let mul54_out1 = add44_out1
.mul((sqrt17_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt18_out1 = cast73_out1.sqrt();
let mul55_out1 = transpose17_out1
.mul((sqrt18_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul33_out1 = mul54_out1.matmul(mul55_out1);
let constant904_out1 = self.constant904.val();
let constant903_out1 = self.constant903.val();
let where17_out1 = constant904_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant903_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add46_out1 = matmul33_out1.add(where17_out1);
let softmax6_out1 = burn::tensor::activation::softmax(add46_out1, 3);
let isnan6_out1 = softmax6_out1.clone().is_nan();
let constant905_out1 = self.constant905.val();
let where18_out1 = softmax6_out1
.mask_where(
isnan6_out1,
constant905_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul34_out1 = where18_out1.matmul(squeeze18_out1);
let transpose18_out1 = matmul34_out1.permute([0, 2, 1, 3]);
let unsqueeze136_out1 = [gather42_out1 as i64];
let unsqueeze137_out1 = [gather43_out1 as i64];
let constant908_out1: [i64; 1] = [512i64];
let concat59_out1: [i64; 3usize] = [
&unsqueeze136_out1[..],
&unsqueeze137_out1[..],
&constant908_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape46_out1 = transpose18_out1.reshape(concat59_out1);
let linear23_out1 = self.linear23.forward(reshape46_out1);
let add47_out1 = add43_out1.add(linear23_out1);
add47_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule8 {
layernormalization13: LayerNorm,
linear24: Linear,
constant909: burn::module::Param<Tensor<1>>,
constant910: burn::module::Param<Tensor<1>>,
constant911: burn::module::Param<Tensor<1>>,
linear25: Linear,
layernormalization14: LayerNorm,
linear26: Linear,
constant979: burn::module::Param<Tensor<1>>,
constant981: burn::module::Param<Tensor<1>>,
constant980: burn::module::Param<Tensor<1>>,
constant982: burn::module::Param<Tensor<1>>,
linear27: Linear,
#[module(skip)]
device: Device,
}
impl Submodule8 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization13 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear24 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant909: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant910: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant911: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear25 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization14 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear26 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant979: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant981: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant980: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant982: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear27 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization13,
linear24,
constant909,
constant910,
constant911,
linear25,
layernormalization14,
linear26,
constant979,
constant981,
constant980,
constant982,
linear27,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add47_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization13_out1 = {
let dtype = add47_out1.clone().dtype();
self.layernormalization13
.forward(add47_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear24_out1 = self.linear24.forward(layernormalization13_out1);
let constant909_out1 = self.constant909.val();
let div26_out1 = linear24_out1
.clone()
.div((constant909_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf6_out1 = div26_out1.erf();
let constant910_out1 = self.constant910.val();
let add48_out1 = erf6_out1
.add((constant910_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul56_out1 = linear24_out1.mul(add48_out1);
let constant911_out1 = self.constant911.val();
let mul57_out1 = mul56_out1
.mul((constant911_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear25_out1 = self.linear25.forward(mul57_out1);
let add49_out1 = add47_out1.add(linear25_out1);
let layernormalization14_out1 = {
let dtype = add49_out1.clone().dtype();
self.layernormalization14
.forward(add49_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape62_out1: [i64; 3] = {
let axes = &layernormalization14_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather48_out1 = shape62_out1[0] as i64;
let shape63_out1: [i64; 3] = {
let axes = &layernormalization14_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather49_out1 = shape63_out1[1] as i64;
let linear26_out1 = self.linear26.forward(layernormalization14_out1);
let unsqueeze138_out1 = [gather48_out1 as i64];
let unsqueeze139_out1 = [gather49_out1 as i64];
let constant918_out1: [i64; 1] = [64i64];
let constant916_out1: [i64; 1] = [3i64];
let constant917_out1: [i64; 1] = [8i64];
let concat60_out1: [i64; 5usize] = [
&unsqueeze138_out1[..],
&unsqueeze139_out1[..],
&constant916_out1[..],
&constant917_out1[..],
&constant918_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape47_out1 = linear26_out1.reshape(concat60_out1);
let transpose19_out1 = reshape47_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose19_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split7_out1, split7_out2, split7_out3] = split_tensors.try_into().unwrap();
let squeeze19_out1 = split7_out1.squeeze_dims::<4>(&[0]);
let squeeze20_out1 = split7_out2.squeeze_dims::<4>(&[0]);
let squeeze21_out1 = split7_out3.squeeze_dims::<4>(&[0]);
let shape64_out1: [i64; 4] = {
let axes = &squeeze19_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather50_out1 = shape64_out1[2] as i64;
let shape65_out1: [i64; 4] = {
let axes = &squeeze20_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather51_out1 = shape65_out1[2] as i64;
let sub9_out1 = gather51_out1 - gather50_out1;
let unsqueeze140_out1 = [gather51_out1 as i64];
let slice59_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze140_out1[0], ..]);
let unsqueeze141_out1 = [gather51_out1 as i64];
let constant932_out1: [i64; 1] = [64i64];
let constant929_out1: [i64; 1] = [1i64];
let constant930_out1: [i64; 1] = [1i64];
let concat61_out1: [i64; 4usize] = [
&constant929_out1[..],
&constant930_out1[..],
&unsqueeze141_out1[..],
&constant932_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze142_out1 = [gather51_out1 as i64];
let constant936_out1: [i64; 1] = [64i64];
let constant933_out1: [i64; 1] = [1i64];
let constant934_out1: [i64; 1] = [1i64];
let concat62_out1: [i64; 4usize] = [
&constant933_out1[..],
&constant934_out1[..],
&unsqueeze142_out1[..],
&constant936_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape48_out1 = slice59_out1.reshape(concat61_out1);
let unsqueeze143_out1 = [gather51_out1 as i64];
let slice60_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze143_out1[0], ..]);
let reshape49_out1 = slice60_out1.reshape(concat62_out1);
let unsqueeze144_out1 = [sub9_out1 as i64];
let unsqueeze145_out1 = [gather51_out1 as i64];
let slice61_out1 = constant461_out1
.slice(s![unsqueeze144_out1[0]..unsqueeze145_out1[0], ..]);
let unsqueeze146_out1 = [gather50_out1 as i64];
let constant948_out1: [i64; 1] = [64i64];
let constant945_out1: [i64; 1] = [1i64];
let constant946_out1: [i64; 1] = [1i64];
let concat63_out1: [i64; 4usize] = [
&constant945_out1[..],
&constant946_out1[..],
&unsqueeze146_out1[..],
&constant948_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze147_out1 = [gather50_out1 as i64];
let constant952_out1: [i64; 1] = [64i64];
let constant949_out1: [i64; 1] = [1i64];
let constant950_out1: [i64; 1] = [1i64];
let concat64_out1: [i64; 4usize] = [
&constant949_out1[..],
&constant950_out1[..],
&unsqueeze147_out1[..],
&constant952_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape50_out1 = slice61_out1.reshape(concat63_out1);
let unsqueeze148_out1 = [sub9_out1 as i64];
let unsqueeze149_out1 = [gather51_out1 as i64];
let slice62_out1 = constant474_out1
.slice(s![unsqueeze148_out1[0]..unsqueeze149_out1[0], ..]);
let reshape51_out1 = slice62_out1.reshape(concat64_out1);
let cast74_out1 = reshape50_out1;
let cast75_out1 = reshape51_out1;
let mul58_out1 = squeeze19_out1.clone().mul(cast74_out1);
let shape66_out1: [i64; 4] = {
let axes = &squeeze19_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather52_out1 = shape66_out1[3] as i64;
let constant958_out1 = 2i64;
let div27_out1 = gather52_out1 / constant958_out1;
let cast76_out1 = div27_out1;
let cast77_out1 = cast76_out1;
let unsqueeze150_out1 = [cast77_out1 as i64];
let slice63_out1 = squeeze19_out1
.clone()
.slice(s![.., .., .., unsqueeze150_out1[0]..9223372036854775807]);
let neg13_out1 = slice63_out1.neg();
let unsqueeze151_out1 = [cast77_out1 as i64];
let slice64_out1 = squeeze19_out1.slice(s![.., .., .., 0..unsqueeze151_out1[0]]);
let concat65_out1 = burn::tensor::Tensor::cat(
[neg13_out1, slice64_out1].into(),
3,
);
let mul59_out1 = concat65_out1.mul(cast75_out1);
let add50_out1 = mul58_out1.add(mul59_out1);
let cast78_out1 = reshape48_out1;
let cast79_out1 = reshape49_out1;
let mul60_out1 = squeeze20_out1.clone().mul(cast78_out1);
let shape67_out1: [i64; 4] = {
let axes = &squeeze20_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather53_out1 = shape67_out1[3] as i64;
let constant968_out1 = 2i64;
let div28_out1 = gather53_out1 / constant968_out1;
let cast80_out1 = div28_out1;
let cast81_out1 = cast80_out1;
let unsqueeze152_out1 = [cast81_out1 as i64];
let slice65_out1 = squeeze20_out1
.clone()
.slice(s![.., .., .., unsqueeze152_out1[0]..9223372036854775807]);
let neg14_out1 = slice65_out1.neg();
let unsqueeze153_out1 = [cast81_out1 as i64];
let slice66_out1 = squeeze20_out1.slice(s![.., .., .., 0..unsqueeze153_out1[0]]);
let concat66_out1 = burn::tensor::Tensor::cat(
[neg14_out1, slice66_out1].into(),
3,
);
let mul61_out1 = concat66_out1.mul(cast79_out1);
let add51_out1 = mul60_out1.add(mul61_out1);
let shape68_out1: [i64; 4] = {
let axes = &add50_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice67_out1: [i64; 1] = shape68_out1[3..4].try_into().unwrap();
let cast82_out1 = {
let shape_array = slice67_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt19_out1 = cast82_out1.sqrt();
let constant979_out1 = self.constant979.val();
let div29_out1 = constant979_out1.div(sqrt19_out1);
let cast83_out1 = div29_out1;
let transpose20_out1 = add51_out1.permute([0, 1, 3, 2]);
let sqrt20_out1 = cast83_out1.clone().sqrt();
let mul62_out1 = add50_out1
.mul((sqrt20_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt21_out1 = cast83_out1.sqrt();
let mul63_out1 = transpose20_out1
.mul((sqrt21_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul39_out1 = mul62_out1.matmul(mul63_out1);
let constant981_out1 = self.constant981.val();
let constant980_out1 = self.constant980.val();
let where19_out1 = constant981_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant980_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add52_out1 = matmul39_out1.add(where19_out1);
let softmax7_out1 = burn::tensor::activation::softmax(add52_out1, 3);
let isnan7_out1 = softmax7_out1.clone().is_nan();
let constant982_out1 = self.constant982.val();
let where20_out1 = softmax7_out1
.mask_where(
isnan7_out1,
constant982_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul40_out1 = where20_out1.matmul(squeeze21_out1);
let transpose21_out1 = matmul40_out1.permute([0, 2, 1, 3]);
let unsqueeze154_out1 = [gather48_out1 as i64];
let unsqueeze155_out1 = [gather49_out1 as i64];
let constant985_out1: [i64; 1] = [512i64];
let concat67_out1: [i64; 3usize] = [
&unsqueeze154_out1[..],
&unsqueeze155_out1[..],
&constant985_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape52_out1 = transpose21_out1.reshape(concat67_out1);
let linear27_out1 = self.linear27.forward(reshape52_out1);
let add53_out1 = add49_out1.add(linear27_out1);
add53_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule9 {
layernormalization15: LayerNorm,
linear28: Linear,
constant986: burn::module::Param<Tensor<1>>,
constant987: burn::module::Param<Tensor<1>>,
constant988: burn::module::Param<Tensor<1>>,
linear29: Linear,
layernormalization16: LayerNorm,
linear30: Linear,
constant1056: burn::module::Param<Tensor<1>>,
constant1058: burn::module::Param<Tensor<1>>,
constant1057: burn::module::Param<Tensor<1>>,
constant1059: burn::module::Param<Tensor<1>>,
linear31: Linear,
#[module(skip)]
device: Device,
}
impl Submodule9 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization15 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear28 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant986: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant987: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant988: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear29 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization16 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear30 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant1056: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1058: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1057: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1059: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear31 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization15,
linear28,
constant986,
constant987,
constant988,
linear29,
layernormalization16,
linear30,
constant1056,
constant1058,
constant1057,
constant1059,
linear31,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add53_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization15_out1 = {
let dtype = add53_out1.clone().dtype();
self.layernormalization15
.forward(add53_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear28_out1 = self.linear28.forward(layernormalization15_out1);
let constant986_out1 = self.constant986.val();
let div30_out1 = linear28_out1
.clone()
.div((constant986_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf7_out1 = div30_out1.erf();
let constant987_out1 = self.constant987.val();
let add54_out1 = erf7_out1
.add((constant987_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul64_out1 = linear28_out1.mul(add54_out1);
let constant988_out1 = self.constant988.val();
let mul65_out1 = mul64_out1
.mul((constant988_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear29_out1 = self.linear29.forward(mul65_out1);
let add55_out1 = add53_out1.add(linear29_out1);
let layernormalization16_out1 = {
let dtype = add55_out1.clone().dtype();
self.layernormalization16
.forward(add55_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape69_out1: [i64; 3] = {
let axes = &layernormalization16_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather54_out1 = shape69_out1[0] as i64;
let shape70_out1: [i64; 3] = {
let axes = &layernormalization16_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather55_out1 = shape70_out1[1] as i64;
let linear30_out1 = self.linear30.forward(layernormalization16_out1);
let unsqueeze156_out1 = [gather54_out1 as i64];
let unsqueeze157_out1 = [gather55_out1 as i64];
let constant995_out1: [i64; 1] = [64i64];
let constant993_out1: [i64; 1] = [3i64];
let constant994_out1: [i64; 1] = [8i64];
let concat68_out1: [i64; 5usize] = [
&unsqueeze156_out1[..],
&unsqueeze157_out1[..],
&constant993_out1[..],
&constant994_out1[..],
&constant995_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape53_out1 = linear30_out1.reshape(concat68_out1);
let transpose22_out1 = reshape53_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose22_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split8_out1, split8_out2, split8_out3] = split_tensors.try_into().unwrap();
let squeeze22_out1 = split8_out1.squeeze_dims::<4>(&[0]);
let squeeze23_out1 = split8_out2.squeeze_dims::<4>(&[0]);
let squeeze24_out1 = split8_out3.squeeze_dims::<4>(&[0]);
let shape71_out1: [i64; 4] = {
let axes = &squeeze22_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather56_out1 = shape71_out1[2] as i64;
let shape72_out1: [i64; 4] = {
let axes = &squeeze23_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather57_out1 = shape72_out1[2] as i64;
let sub10_out1 = gather57_out1 - gather56_out1;
let unsqueeze158_out1 = [gather57_out1 as i64];
let slice68_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze158_out1[0], ..]);
let unsqueeze159_out1 = [gather57_out1 as i64];
let constant1009_out1: [i64; 1] = [64i64];
let constant1006_out1: [i64; 1] = [1i64];
let constant1007_out1: [i64; 1] = [1i64];
let concat69_out1: [i64; 4usize] = [
&constant1006_out1[..],
&constant1007_out1[..],
&unsqueeze159_out1[..],
&constant1009_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze160_out1 = [gather57_out1 as i64];
let constant1013_out1: [i64; 1] = [64i64];
let constant1010_out1: [i64; 1] = [1i64];
let constant1011_out1: [i64; 1] = [1i64];
let concat70_out1: [i64; 4usize] = [
&constant1010_out1[..],
&constant1011_out1[..],
&unsqueeze160_out1[..],
&constant1013_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape54_out1 = slice68_out1.reshape(concat69_out1);
let unsqueeze161_out1 = [gather57_out1 as i64];
let slice69_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze161_out1[0], ..]);
let reshape55_out1 = slice69_out1.reshape(concat70_out1);
let unsqueeze162_out1 = [sub10_out1 as i64];
let unsqueeze163_out1 = [gather57_out1 as i64];
let slice70_out1 = constant461_out1
.slice(s![unsqueeze162_out1[0]..unsqueeze163_out1[0], ..]);
let unsqueeze164_out1 = [gather56_out1 as i64];
let constant1025_out1: [i64; 1] = [64i64];
let constant1022_out1: [i64; 1] = [1i64];
let constant1023_out1: [i64; 1] = [1i64];
let concat71_out1: [i64; 4usize] = [
&constant1022_out1[..],
&constant1023_out1[..],
&unsqueeze164_out1[..],
&constant1025_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze165_out1 = [gather56_out1 as i64];
let constant1029_out1: [i64; 1] = [64i64];
let constant1026_out1: [i64; 1] = [1i64];
let constant1027_out1: [i64; 1] = [1i64];
let concat72_out1: [i64; 4usize] = [
&constant1026_out1[..],
&constant1027_out1[..],
&unsqueeze165_out1[..],
&constant1029_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape56_out1 = slice70_out1.reshape(concat71_out1);
let unsqueeze166_out1 = [sub10_out1 as i64];
let unsqueeze167_out1 = [gather57_out1 as i64];
let slice71_out1 = constant474_out1
.slice(s![unsqueeze166_out1[0]..unsqueeze167_out1[0], ..]);
let reshape57_out1 = slice71_out1.reshape(concat72_out1);
let cast84_out1 = reshape56_out1;
let cast85_out1 = reshape57_out1;
let mul66_out1 = squeeze22_out1.clone().mul(cast84_out1);
let shape73_out1: [i64; 4] = {
let axes = &squeeze22_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather58_out1 = shape73_out1[3] as i64;
let constant1035_out1 = 2i64;
let div31_out1 = gather58_out1 / constant1035_out1;
let cast86_out1 = div31_out1;
let cast87_out1 = cast86_out1;
let unsqueeze168_out1 = [cast87_out1 as i64];
let slice72_out1 = squeeze22_out1
.clone()
.slice(s![.., .., .., unsqueeze168_out1[0]..9223372036854775807]);
let neg15_out1 = slice72_out1.neg();
let unsqueeze169_out1 = [cast87_out1 as i64];
let slice73_out1 = squeeze22_out1.slice(s![.., .., .., 0..unsqueeze169_out1[0]]);
let concat73_out1 = burn::tensor::Tensor::cat(
[neg15_out1, slice73_out1].into(),
3,
);
let mul67_out1 = concat73_out1.mul(cast85_out1);
let add56_out1 = mul66_out1.add(mul67_out1);
let cast88_out1 = reshape54_out1;
let cast89_out1 = reshape55_out1;
let mul68_out1 = squeeze23_out1.clone().mul(cast88_out1);
let shape74_out1: [i64; 4] = {
let axes = &squeeze23_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather59_out1 = shape74_out1[3] as i64;
let constant1045_out1 = 2i64;
let div32_out1 = gather59_out1 / constant1045_out1;
let cast90_out1 = div32_out1;
let cast91_out1 = cast90_out1;
let unsqueeze170_out1 = [cast91_out1 as i64];
let slice74_out1 = squeeze23_out1
.clone()
.slice(s![.., .., .., unsqueeze170_out1[0]..9223372036854775807]);
let neg16_out1 = slice74_out1.neg();
let unsqueeze171_out1 = [cast91_out1 as i64];
let slice75_out1 = squeeze23_out1.slice(s![.., .., .., 0..unsqueeze171_out1[0]]);
let concat74_out1 = burn::tensor::Tensor::cat(
[neg16_out1, slice75_out1].into(),
3,
);
let mul69_out1 = concat74_out1.mul(cast89_out1);
let add57_out1 = mul68_out1.add(mul69_out1);
let shape75_out1: [i64; 4] = {
let axes = &add56_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice76_out1: [i64; 1] = shape75_out1[3..4].try_into().unwrap();
let cast92_out1 = {
let shape_array = slice76_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt22_out1 = cast92_out1.sqrt();
let constant1056_out1 = self.constant1056.val();
let div33_out1 = constant1056_out1.div(sqrt22_out1);
let cast93_out1 = div33_out1;
let transpose23_out1 = add57_out1.permute([0, 1, 3, 2]);
let sqrt23_out1 = cast93_out1.clone().sqrt();
let mul70_out1 = add56_out1
.mul((sqrt23_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt24_out1 = cast93_out1.sqrt();
let mul71_out1 = transpose23_out1
.mul((sqrt24_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul45_out1 = mul70_out1.matmul(mul71_out1);
let constant1058_out1 = self.constant1058.val();
let constant1057_out1 = self.constant1057.val();
let where21_out1 = constant1058_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant1057_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add58_out1 = matmul45_out1.add(where21_out1);
let softmax8_out1 = burn::tensor::activation::softmax(add58_out1, 3);
let isnan8_out1 = softmax8_out1.clone().is_nan();
let constant1059_out1 = self.constant1059.val();
let where22_out1 = softmax8_out1
.mask_where(
isnan8_out1,
constant1059_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul46_out1 = where22_out1.matmul(squeeze24_out1);
let transpose24_out1 = matmul46_out1.permute([0, 2, 1, 3]);
let unsqueeze172_out1 = [gather54_out1 as i64];
let unsqueeze173_out1 = [gather55_out1 as i64];
let constant1062_out1: [i64; 1] = [512i64];
let concat75_out1: [i64; 3usize] = [
&unsqueeze172_out1[..],
&unsqueeze173_out1[..],
&constant1062_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape58_out1 = transpose24_out1.reshape(concat75_out1);
let linear31_out1 = self.linear31.forward(reshape58_out1);
let add59_out1 = add55_out1.add(linear31_out1);
add59_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule10 {
layernormalization17: LayerNorm,
linear32: Linear,
constant1063: burn::module::Param<Tensor<1>>,
constant1064: burn::module::Param<Tensor<1>>,
constant1065: burn::module::Param<Tensor<1>>,
linear33: Linear,
layernormalization18: LayerNorm,
linear34: Linear,
constant1133: burn::module::Param<Tensor<1>>,
constant1135: burn::module::Param<Tensor<1>>,
constant1134: burn::module::Param<Tensor<1>>,
constant1136: burn::module::Param<Tensor<1>>,
linear35: Linear,
#[module(skip)]
device: Device,
}
impl Submodule10 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization17 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear32 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant1063: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1064: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1065: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear33 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization18 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear34 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant1133: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1135: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1134: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1136: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear35 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization17,
linear32,
constant1063,
constant1064,
constant1065,
linear33,
layernormalization18,
linear34,
constant1133,
constant1135,
constant1134,
constant1136,
linear35,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add59_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization17_out1 = {
let dtype = add59_out1.clone().dtype();
self.layernormalization17
.forward(add59_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear32_out1 = self.linear32.forward(layernormalization17_out1);
let constant1063_out1 = self.constant1063.val();
let div34_out1 = linear32_out1
.clone()
.div((constant1063_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf8_out1 = div34_out1.erf();
let constant1064_out1 = self.constant1064.val();
let add60_out1 = erf8_out1
.add((constant1064_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul72_out1 = linear32_out1.mul(add60_out1);
let constant1065_out1 = self.constant1065.val();
let mul73_out1 = mul72_out1
.mul((constant1065_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear33_out1 = self.linear33.forward(mul73_out1);
let add61_out1 = add59_out1.add(linear33_out1);
let layernormalization18_out1 = {
let dtype = add61_out1.clone().dtype();
self.layernormalization18
.forward(add61_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape76_out1: [i64; 3] = {
let axes = &layernormalization18_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather60_out1 = shape76_out1[0] as i64;
let shape77_out1: [i64; 3] = {
let axes = &layernormalization18_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather61_out1 = shape77_out1[1] as i64;
let linear34_out1 = self.linear34.forward(layernormalization18_out1);
let unsqueeze174_out1 = [gather60_out1 as i64];
let unsqueeze175_out1 = [gather61_out1 as i64];
let constant1072_out1: [i64; 1] = [64i64];
let constant1070_out1: [i64; 1] = [3i64];
let constant1071_out1: [i64; 1] = [8i64];
let concat76_out1: [i64; 5usize] = [
&unsqueeze174_out1[..],
&unsqueeze175_out1[..],
&constant1070_out1[..],
&constant1071_out1[..],
&constant1072_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape59_out1 = linear34_out1.reshape(concat76_out1);
let transpose25_out1 = reshape59_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose25_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split9_out1, split9_out2, split9_out3] = split_tensors.try_into().unwrap();
let squeeze25_out1 = split9_out1.squeeze_dims::<4>(&[0]);
let squeeze26_out1 = split9_out2.squeeze_dims::<4>(&[0]);
let squeeze27_out1 = split9_out3.squeeze_dims::<4>(&[0]);
let shape78_out1: [i64; 4] = {
let axes = &squeeze25_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather62_out1 = shape78_out1[2] as i64;
let shape79_out1: [i64; 4] = {
let axes = &squeeze26_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather63_out1 = shape79_out1[2] as i64;
let sub11_out1 = gather63_out1 - gather62_out1;
let unsqueeze176_out1 = [gather63_out1 as i64];
let slice77_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze176_out1[0], ..]);
let unsqueeze177_out1 = [gather63_out1 as i64];
let constant1086_out1: [i64; 1] = [64i64];
let constant1083_out1: [i64; 1] = [1i64];
let constant1084_out1: [i64; 1] = [1i64];
let concat77_out1: [i64; 4usize] = [
&constant1083_out1[..],
&constant1084_out1[..],
&unsqueeze177_out1[..],
&constant1086_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze178_out1 = [gather63_out1 as i64];
let constant1090_out1: [i64; 1] = [64i64];
let constant1087_out1: [i64; 1] = [1i64];
let constant1088_out1: [i64; 1] = [1i64];
let concat78_out1: [i64; 4usize] = [
&constant1087_out1[..],
&constant1088_out1[..],
&unsqueeze178_out1[..],
&constant1090_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape60_out1 = slice77_out1.reshape(concat77_out1);
let unsqueeze179_out1 = [gather63_out1 as i64];
let slice78_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze179_out1[0], ..]);
let reshape61_out1 = slice78_out1.reshape(concat78_out1);
let unsqueeze180_out1 = [sub11_out1 as i64];
let unsqueeze181_out1 = [gather63_out1 as i64];
let slice79_out1 = constant461_out1
.slice(s![unsqueeze180_out1[0]..unsqueeze181_out1[0], ..]);
let unsqueeze182_out1 = [gather62_out1 as i64];
let constant1102_out1: [i64; 1] = [64i64];
let constant1099_out1: [i64; 1] = [1i64];
let constant1100_out1: [i64; 1] = [1i64];
let concat79_out1: [i64; 4usize] = [
&constant1099_out1[..],
&constant1100_out1[..],
&unsqueeze182_out1[..],
&constant1102_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze183_out1 = [gather62_out1 as i64];
let constant1106_out1: [i64; 1] = [64i64];
let constant1103_out1: [i64; 1] = [1i64];
let constant1104_out1: [i64; 1] = [1i64];
let concat80_out1: [i64; 4usize] = [
&constant1103_out1[..],
&constant1104_out1[..],
&unsqueeze183_out1[..],
&constant1106_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape62_out1 = slice79_out1.reshape(concat79_out1);
let unsqueeze184_out1 = [sub11_out1 as i64];
let unsqueeze185_out1 = [gather63_out1 as i64];
let slice80_out1 = constant474_out1
.slice(s![unsqueeze184_out1[0]..unsqueeze185_out1[0], ..]);
let reshape63_out1 = slice80_out1.reshape(concat80_out1);
let cast94_out1 = reshape62_out1;
let cast95_out1 = reshape63_out1;
let mul74_out1 = squeeze25_out1.clone().mul(cast94_out1);
let shape80_out1: [i64; 4] = {
let axes = &squeeze25_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather64_out1 = shape80_out1[3] as i64;
let constant1112_out1 = 2i64;
let div35_out1 = gather64_out1 / constant1112_out1;
let cast96_out1 = div35_out1;
let cast97_out1 = cast96_out1;
let unsqueeze186_out1 = [cast97_out1 as i64];
let slice81_out1 = squeeze25_out1
.clone()
.slice(s![.., .., .., unsqueeze186_out1[0]..9223372036854775807]);
let neg17_out1 = slice81_out1.neg();
let unsqueeze187_out1 = [cast97_out1 as i64];
let slice82_out1 = squeeze25_out1.slice(s![.., .., .., 0..unsqueeze187_out1[0]]);
let concat81_out1 = burn::tensor::Tensor::cat(
[neg17_out1, slice82_out1].into(),
3,
);
let mul75_out1 = concat81_out1.mul(cast95_out1);
let add62_out1 = mul74_out1.add(mul75_out1);
let cast98_out1 = reshape60_out1;
let cast99_out1 = reshape61_out1;
let mul76_out1 = squeeze26_out1.clone().mul(cast98_out1);
let shape81_out1: [i64; 4] = {
let axes = &squeeze26_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather65_out1 = shape81_out1[3] as i64;
let constant1122_out1 = 2i64;
let div36_out1 = gather65_out1 / constant1122_out1;
let cast100_out1 = div36_out1;
let cast101_out1 = cast100_out1;
let unsqueeze188_out1 = [cast101_out1 as i64];
let slice83_out1 = squeeze26_out1
.clone()
.slice(s![.., .., .., unsqueeze188_out1[0]..9223372036854775807]);
let neg18_out1 = slice83_out1.neg();
let unsqueeze189_out1 = [cast101_out1 as i64];
let slice84_out1 = squeeze26_out1.slice(s![.., .., .., 0..unsqueeze189_out1[0]]);
let concat82_out1 = burn::tensor::Tensor::cat(
[neg18_out1, slice84_out1].into(),
3,
);
let mul77_out1 = concat82_out1.mul(cast99_out1);
let add63_out1 = mul76_out1.add(mul77_out1);
let shape82_out1: [i64; 4] = {
let axes = &add62_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice85_out1: [i64; 1] = shape82_out1[3..4].try_into().unwrap();
let cast102_out1 = {
let shape_array = slice85_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt25_out1 = cast102_out1.sqrt();
let constant1133_out1 = self.constant1133.val();
let div37_out1 = constant1133_out1.div(sqrt25_out1);
let cast103_out1 = div37_out1;
let transpose26_out1 = add63_out1.permute([0, 1, 3, 2]);
let sqrt26_out1 = cast103_out1.clone().sqrt();
let mul78_out1 = add62_out1
.mul((sqrt26_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt27_out1 = cast103_out1.sqrt();
let mul79_out1 = transpose26_out1
.mul((sqrt27_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul51_out1 = mul78_out1.matmul(mul79_out1);
let constant1135_out1 = self.constant1135.val();
let constant1134_out1 = self.constant1134.val();
let where23_out1 = constant1135_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant1134_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add64_out1 = matmul51_out1.add(where23_out1);
let softmax9_out1 = burn::tensor::activation::softmax(add64_out1, 3);
let isnan9_out1 = softmax9_out1.clone().is_nan();
let constant1136_out1 = self.constant1136.val();
let where24_out1 = softmax9_out1
.mask_where(
isnan9_out1,
constant1136_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul52_out1 = where24_out1.matmul(squeeze27_out1);
let transpose27_out1 = matmul52_out1.permute([0, 2, 1, 3]);
let unsqueeze190_out1 = [gather60_out1 as i64];
let unsqueeze191_out1 = [gather61_out1 as i64];
let constant1139_out1: [i64; 1] = [512i64];
let concat83_out1: [i64; 3usize] = [
&unsqueeze190_out1[..],
&unsqueeze191_out1[..],
&constant1139_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape64_out1 = transpose27_out1.reshape(concat83_out1);
let linear35_out1 = self.linear35.forward(reshape64_out1);
let add65_out1 = add61_out1.add(linear35_out1);
add65_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule11 {
layernormalization19: LayerNorm,
linear36: Linear,
constant1140: burn::module::Param<Tensor<1>>,
constant1141: burn::module::Param<Tensor<1>>,
constant1142: burn::module::Param<Tensor<1>>,
linear37: Linear,
layernormalization20: LayerNorm,
linear38: Linear,
constant1210: burn::module::Param<Tensor<1>>,
constant1212: burn::module::Param<Tensor<1>>,
constant1211: burn::module::Param<Tensor<1>>,
constant1213: burn::module::Param<Tensor<1>>,
linear39: Linear,
#[module(skip)]
device: Device,
}
impl Submodule11 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization19 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear36 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant1140: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1141: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1142: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear37 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization20 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear38 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant1210: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1212: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1211: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1213: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear39 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization19,
linear36,
constant1140,
constant1141,
constant1142,
linear37,
layernormalization20,
linear38,
constant1210,
constant1212,
constant1211,
constant1213,
linear39,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add65_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization19_out1 = {
let dtype = add65_out1.clone().dtype();
self.layernormalization19
.forward(add65_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear36_out1 = self.linear36.forward(layernormalization19_out1);
let constant1140_out1 = self.constant1140.val();
let div38_out1 = linear36_out1
.clone()
.div((constant1140_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf9_out1 = div38_out1.erf();
let constant1141_out1 = self.constant1141.val();
let add66_out1 = erf9_out1
.add((constant1141_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul80_out1 = linear36_out1.mul(add66_out1);
let constant1142_out1 = self.constant1142.val();
let mul81_out1 = mul80_out1
.mul((constant1142_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear37_out1 = self.linear37.forward(mul81_out1);
let add67_out1 = add65_out1.add(linear37_out1);
let layernormalization20_out1 = {
let dtype = add67_out1.clone().dtype();
self.layernormalization20
.forward(add67_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape83_out1: [i64; 3] = {
let axes = &layernormalization20_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather66_out1 = shape83_out1[0] as i64;
let shape84_out1: [i64; 3] = {
let axes = &layernormalization20_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather67_out1 = shape84_out1[1] as i64;
let linear38_out1 = self.linear38.forward(layernormalization20_out1);
let unsqueeze192_out1 = [gather66_out1 as i64];
let unsqueeze193_out1 = [gather67_out1 as i64];
let constant1149_out1: [i64; 1] = [64i64];
let constant1147_out1: [i64; 1] = [3i64];
let constant1148_out1: [i64; 1] = [8i64];
let concat84_out1: [i64; 5usize] = [
&unsqueeze192_out1[..],
&unsqueeze193_out1[..],
&constant1147_out1[..],
&constant1148_out1[..],
&constant1149_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape65_out1 = linear38_out1.reshape(concat84_out1);
let transpose28_out1 = reshape65_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose28_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split10_out1, split10_out2, split10_out3] = split_tensors
.try_into()
.unwrap();
let squeeze28_out1 = split10_out1.squeeze_dims::<4>(&[0]);
let squeeze29_out1 = split10_out2.squeeze_dims::<4>(&[0]);
let squeeze30_out1 = split10_out3.squeeze_dims::<4>(&[0]);
let shape85_out1: [i64; 4] = {
let axes = &squeeze28_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather68_out1 = shape85_out1[2] as i64;
let shape86_out1: [i64; 4] = {
let axes = &squeeze29_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather69_out1 = shape86_out1[2] as i64;
let sub12_out1 = gather69_out1 - gather68_out1;
let unsqueeze194_out1 = [gather69_out1 as i64];
let slice86_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze194_out1[0], ..]);
let unsqueeze195_out1 = [gather69_out1 as i64];
let constant1163_out1: [i64; 1] = [64i64];
let constant1160_out1: [i64; 1] = [1i64];
let constant1161_out1: [i64; 1] = [1i64];
let concat85_out1: [i64; 4usize] = [
&constant1160_out1[..],
&constant1161_out1[..],
&unsqueeze195_out1[..],
&constant1163_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze196_out1 = [gather69_out1 as i64];
let constant1167_out1: [i64; 1] = [64i64];
let constant1164_out1: [i64; 1] = [1i64];
let constant1165_out1: [i64; 1] = [1i64];
let concat86_out1: [i64; 4usize] = [
&constant1164_out1[..],
&constant1165_out1[..],
&unsqueeze196_out1[..],
&constant1167_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape66_out1 = slice86_out1.reshape(concat85_out1);
let unsqueeze197_out1 = [gather69_out1 as i64];
let slice87_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze197_out1[0], ..]);
let reshape67_out1 = slice87_out1.reshape(concat86_out1);
let unsqueeze198_out1 = [sub12_out1 as i64];
let unsqueeze199_out1 = [gather69_out1 as i64];
let slice88_out1 = constant461_out1
.slice(s![unsqueeze198_out1[0]..unsqueeze199_out1[0], ..]);
let unsqueeze200_out1 = [gather68_out1 as i64];
let constant1179_out1: [i64; 1] = [64i64];
let constant1176_out1: [i64; 1] = [1i64];
let constant1177_out1: [i64; 1] = [1i64];
let concat87_out1: [i64; 4usize] = [
&constant1176_out1[..],
&constant1177_out1[..],
&unsqueeze200_out1[..],
&constant1179_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze201_out1 = [gather68_out1 as i64];
let constant1183_out1: [i64; 1] = [64i64];
let constant1180_out1: [i64; 1] = [1i64];
let constant1181_out1: [i64; 1] = [1i64];
let concat88_out1: [i64; 4usize] = [
&constant1180_out1[..],
&constant1181_out1[..],
&unsqueeze201_out1[..],
&constant1183_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape68_out1 = slice88_out1.reshape(concat87_out1);
let unsqueeze202_out1 = [sub12_out1 as i64];
let unsqueeze203_out1 = [gather69_out1 as i64];
let slice89_out1 = constant474_out1
.slice(s![unsqueeze202_out1[0]..unsqueeze203_out1[0], ..]);
let reshape69_out1 = slice89_out1.reshape(concat88_out1);
let cast104_out1 = reshape68_out1;
let cast105_out1 = reshape69_out1;
let mul82_out1 = squeeze28_out1.clone().mul(cast104_out1);
let shape87_out1: [i64; 4] = {
let axes = &squeeze28_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather70_out1 = shape87_out1[3] as i64;
let constant1189_out1 = 2i64;
let div39_out1 = gather70_out1 / constant1189_out1;
let cast106_out1 = div39_out1;
let cast107_out1 = cast106_out1;
let unsqueeze204_out1 = [cast107_out1 as i64];
let slice90_out1 = squeeze28_out1
.clone()
.slice(s![.., .., .., unsqueeze204_out1[0]..9223372036854775807]);
let neg19_out1 = slice90_out1.neg();
let unsqueeze205_out1 = [cast107_out1 as i64];
let slice91_out1 = squeeze28_out1.slice(s![.., .., .., 0..unsqueeze205_out1[0]]);
let concat89_out1 = burn::tensor::Tensor::cat(
[neg19_out1, slice91_out1].into(),
3,
);
let mul83_out1 = concat89_out1.mul(cast105_out1);
let add68_out1 = mul82_out1.add(mul83_out1);
let cast108_out1 = reshape66_out1;
let cast109_out1 = reshape67_out1;
let mul84_out1 = squeeze29_out1.clone().mul(cast108_out1);
let shape88_out1: [i64; 4] = {
let axes = &squeeze29_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather71_out1 = shape88_out1[3] as i64;
let constant1199_out1 = 2i64;
let div40_out1 = gather71_out1 / constant1199_out1;
let cast110_out1 = div40_out1;
let cast111_out1 = cast110_out1;
let unsqueeze206_out1 = [cast111_out1 as i64];
let slice92_out1 = squeeze29_out1
.clone()
.slice(s![.., .., .., unsqueeze206_out1[0]..9223372036854775807]);
let neg20_out1 = slice92_out1.neg();
let unsqueeze207_out1 = [cast111_out1 as i64];
let slice93_out1 = squeeze29_out1.slice(s![.., .., .., 0..unsqueeze207_out1[0]]);
let concat90_out1 = burn::tensor::Tensor::cat(
[neg20_out1, slice93_out1].into(),
3,
);
let mul85_out1 = concat90_out1.mul(cast109_out1);
let add69_out1 = mul84_out1.add(mul85_out1);
let shape89_out1: [i64; 4] = {
let axes = &add68_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice94_out1: [i64; 1] = shape89_out1[3..4].try_into().unwrap();
let cast112_out1 = {
let shape_array = slice94_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt28_out1 = cast112_out1.sqrt();
let constant1210_out1 = self.constant1210.val();
let div41_out1 = constant1210_out1.div(sqrt28_out1);
let cast113_out1 = div41_out1;
let transpose29_out1 = add69_out1.permute([0, 1, 3, 2]);
let sqrt29_out1 = cast113_out1.clone().sqrt();
let mul86_out1 = add68_out1
.mul((sqrt29_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt30_out1 = cast113_out1.sqrt();
let mul87_out1 = transpose29_out1
.mul((sqrt30_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul57_out1 = mul86_out1.matmul(mul87_out1);
let constant1212_out1 = self.constant1212.val();
let constant1211_out1 = self.constant1211.val();
let where25_out1 = constant1212_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant1211_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add70_out1 = matmul57_out1.add(where25_out1);
let softmax10_out1 = burn::tensor::activation::softmax(add70_out1, 3);
let isnan10_out1 = softmax10_out1.clone().is_nan();
let constant1213_out1 = self.constant1213.val();
let where26_out1 = softmax10_out1
.mask_where(
isnan10_out1,
constant1213_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul58_out1 = where26_out1.matmul(squeeze30_out1);
let transpose30_out1 = matmul58_out1.permute([0, 2, 1, 3]);
let unsqueeze208_out1 = [gather66_out1 as i64];
let unsqueeze209_out1 = [gather67_out1 as i64];
let constant1216_out1: [i64; 1] = [512i64];
let concat91_out1: [i64; 3usize] = [
&unsqueeze208_out1[..],
&unsqueeze209_out1[..],
&constant1216_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape70_out1 = transpose30_out1.reshape(concat91_out1);
let linear39_out1 = self.linear39.forward(reshape70_out1);
let add71_out1 = add67_out1.add(linear39_out1);
add71_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule12 {
layernormalization21: LayerNorm,
linear40: Linear,
constant1217: burn::module::Param<Tensor<1>>,
constant1218: burn::module::Param<Tensor<1>>,
constant1219: burn::module::Param<Tensor<1>>,
linear41: Linear,
layernormalization22: LayerNorm,
linear42: Linear,
constant1287: burn::module::Param<Tensor<1>>,
constant1289: burn::module::Param<Tensor<1>>,
constant1288: burn::module::Param<Tensor<1>>,
constant1290: burn::module::Param<Tensor<1>>,
linear43: Linear,
#[module(skip)]
device: Device,
}
impl Submodule12 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization21 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear40 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant1217: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1218: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1219: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear41 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization22 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear42 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant1287: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1289: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1288: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1290: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear43 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization21,
linear40,
constant1217,
constant1218,
constant1219,
linear41,
layernormalization22,
linear42,
constant1287,
constant1289,
constant1288,
constant1290,
linear43,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add71_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization21_out1 = {
let dtype = add71_out1.clone().dtype();
self.layernormalization21
.forward(add71_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear40_out1 = self.linear40.forward(layernormalization21_out1);
let constant1217_out1 = self.constant1217.val();
let div42_out1 = linear40_out1
.clone()
.div((constant1217_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf10_out1 = div42_out1.erf();
let constant1218_out1 = self.constant1218.val();
let add72_out1 = erf10_out1
.add((constant1218_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul88_out1 = linear40_out1.mul(add72_out1);
let constant1219_out1 = self.constant1219.val();
let mul89_out1 = mul88_out1
.mul((constant1219_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear41_out1 = self.linear41.forward(mul89_out1);
let add73_out1 = add71_out1.add(linear41_out1);
let layernormalization22_out1 = {
let dtype = add73_out1.clone().dtype();
self.layernormalization22
.forward(add73_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape90_out1: [i64; 3] = {
let axes = &layernormalization22_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather72_out1 = shape90_out1[0] as i64;
let shape91_out1: [i64; 3] = {
let axes = &layernormalization22_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather73_out1 = shape91_out1[1] as i64;
let linear42_out1 = self.linear42.forward(layernormalization22_out1);
let unsqueeze210_out1 = [gather72_out1 as i64];
let unsqueeze211_out1 = [gather73_out1 as i64];
let constant1226_out1: [i64; 1] = [64i64];
let constant1224_out1: [i64; 1] = [3i64];
let constant1225_out1: [i64; 1] = [8i64];
let concat92_out1: [i64; 5usize] = [
&unsqueeze210_out1[..],
&unsqueeze211_out1[..],
&constant1224_out1[..],
&constant1225_out1[..],
&constant1226_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape71_out1 = linear42_out1.reshape(concat92_out1);
let transpose31_out1 = reshape71_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose31_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split11_out1, split11_out2, split11_out3] = split_tensors
.try_into()
.unwrap();
let squeeze31_out1 = split11_out1.squeeze_dims::<4>(&[0]);
let squeeze32_out1 = split11_out2.squeeze_dims::<4>(&[0]);
let squeeze33_out1 = split11_out3.squeeze_dims::<4>(&[0]);
let shape92_out1: [i64; 4] = {
let axes = &squeeze31_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather74_out1 = shape92_out1[2] as i64;
let shape93_out1: [i64; 4] = {
let axes = &squeeze32_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather75_out1 = shape93_out1[2] as i64;
let sub13_out1 = gather75_out1 - gather74_out1;
let unsqueeze212_out1 = [gather75_out1 as i64];
let slice95_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze212_out1[0], ..]);
let unsqueeze213_out1 = [gather75_out1 as i64];
let constant1240_out1: [i64; 1] = [64i64];
let constant1237_out1: [i64; 1] = [1i64];
let constant1238_out1: [i64; 1] = [1i64];
let concat93_out1: [i64; 4usize] = [
&constant1237_out1[..],
&constant1238_out1[..],
&unsqueeze213_out1[..],
&constant1240_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze214_out1 = [gather75_out1 as i64];
let constant1244_out1: [i64; 1] = [64i64];
let constant1241_out1: [i64; 1] = [1i64];
let constant1242_out1: [i64; 1] = [1i64];
let concat94_out1: [i64; 4usize] = [
&constant1241_out1[..],
&constant1242_out1[..],
&unsqueeze214_out1[..],
&constant1244_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape72_out1 = slice95_out1.reshape(concat93_out1);
let unsqueeze215_out1 = [gather75_out1 as i64];
let slice96_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze215_out1[0], ..]);
let reshape73_out1 = slice96_out1.reshape(concat94_out1);
let unsqueeze216_out1 = [sub13_out1 as i64];
let unsqueeze217_out1 = [gather75_out1 as i64];
let slice97_out1 = constant461_out1
.slice(s![unsqueeze216_out1[0]..unsqueeze217_out1[0], ..]);
let unsqueeze218_out1 = [gather74_out1 as i64];
let constant1256_out1: [i64; 1] = [64i64];
let constant1253_out1: [i64; 1] = [1i64];
let constant1254_out1: [i64; 1] = [1i64];
let concat95_out1: [i64; 4usize] = [
&constant1253_out1[..],
&constant1254_out1[..],
&unsqueeze218_out1[..],
&constant1256_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze219_out1 = [gather74_out1 as i64];
let constant1260_out1: [i64; 1] = [64i64];
let constant1257_out1: [i64; 1] = [1i64];
let constant1258_out1: [i64; 1] = [1i64];
let concat96_out1: [i64; 4usize] = [
&constant1257_out1[..],
&constant1258_out1[..],
&unsqueeze219_out1[..],
&constant1260_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape74_out1 = slice97_out1.reshape(concat95_out1);
let unsqueeze220_out1 = [sub13_out1 as i64];
let unsqueeze221_out1 = [gather75_out1 as i64];
let slice98_out1 = constant474_out1
.slice(s![unsqueeze220_out1[0]..unsqueeze221_out1[0], ..]);
let reshape75_out1 = slice98_out1.reshape(concat96_out1);
let cast114_out1 = reshape74_out1;
let cast115_out1 = reshape75_out1;
let mul90_out1 = squeeze31_out1.clone().mul(cast114_out1);
let shape94_out1: [i64; 4] = {
let axes = &squeeze31_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather76_out1 = shape94_out1[3] as i64;
let constant1266_out1 = 2i64;
let div43_out1 = gather76_out1 / constant1266_out1;
let cast116_out1 = div43_out1;
let cast117_out1 = cast116_out1;
let unsqueeze222_out1 = [cast117_out1 as i64];
let slice99_out1 = squeeze31_out1
.clone()
.slice(s![.., .., .., unsqueeze222_out1[0]..9223372036854775807]);
let neg21_out1 = slice99_out1.neg();
let unsqueeze223_out1 = [cast117_out1 as i64];
let slice100_out1 = squeeze31_out1
.slice(s![.., .., .., 0..unsqueeze223_out1[0]]);
let concat97_out1 = burn::tensor::Tensor::cat(
[neg21_out1, slice100_out1].into(),
3,
);
let mul91_out1 = concat97_out1.mul(cast115_out1);
let add74_out1 = mul90_out1.add(mul91_out1);
let cast118_out1 = reshape72_out1;
let cast119_out1 = reshape73_out1;
let mul92_out1 = squeeze32_out1.clone().mul(cast118_out1);
let shape95_out1: [i64; 4] = {
let axes = &squeeze32_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather77_out1 = shape95_out1[3] as i64;
let constant1276_out1 = 2i64;
let div44_out1 = gather77_out1 / constant1276_out1;
let cast120_out1 = div44_out1;
let cast121_out1 = cast120_out1;
let unsqueeze224_out1 = [cast121_out1 as i64];
let slice101_out1 = squeeze32_out1
.clone()
.slice(s![.., .., .., unsqueeze224_out1[0]..9223372036854775807]);
let neg22_out1 = slice101_out1.neg();
let unsqueeze225_out1 = [cast121_out1 as i64];
let slice102_out1 = squeeze32_out1
.slice(s![.., .., .., 0..unsqueeze225_out1[0]]);
let concat98_out1 = burn::tensor::Tensor::cat(
[neg22_out1, slice102_out1].into(),
3,
);
let mul93_out1 = concat98_out1.mul(cast119_out1);
let add75_out1 = mul92_out1.add(mul93_out1);
let shape96_out1: [i64; 4] = {
let axes = &add74_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice103_out1: [i64; 1] = shape96_out1[3..4].try_into().unwrap();
let cast122_out1 = {
let shape_array = slice103_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt31_out1 = cast122_out1.sqrt();
let constant1287_out1 = self.constant1287.val();
let div45_out1 = constant1287_out1.div(sqrt31_out1);
let cast123_out1 = div45_out1;
let transpose32_out1 = add75_out1.permute([0, 1, 3, 2]);
let sqrt32_out1 = cast123_out1.clone().sqrt();
let mul94_out1 = add74_out1
.mul((sqrt32_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt33_out1 = cast123_out1.sqrt();
let mul95_out1 = transpose32_out1
.mul((sqrt33_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul63_out1 = mul94_out1.matmul(mul95_out1);
let constant1289_out1 = self.constant1289.val();
let constant1288_out1 = self.constant1288.val();
let where27_out1 = constant1289_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant1288_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add76_out1 = matmul63_out1.add(where27_out1);
let softmax11_out1 = burn::tensor::activation::softmax(add76_out1, 3);
let isnan11_out1 = softmax11_out1.clone().is_nan();
let constant1290_out1 = self.constant1290.val();
let where28_out1 = softmax11_out1
.mask_where(
isnan11_out1,
constant1290_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul64_out1 = where28_out1.matmul(squeeze33_out1);
let transpose33_out1 = matmul64_out1.permute([0, 2, 1, 3]);
let unsqueeze226_out1 = [gather72_out1 as i64];
let unsqueeze227_out1 = [gather73_out1 as i64];
let constant1293_out1: [i64; 1] = [512i64];
let concat99_out1: [i64; 3usize] = [
&unsqueeze226_out1[..],
&unsqueeze227_out1[..],
&constant1293_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape76_out1 = transpose33_out1.reshape(concat99_out1);
let linear43_out1 = self.linear43.forward(reshape76_out1);
let add77_out1 = add73_out1.add(linear43_out1);
add77_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule13 {
layernormalization23: LayerNorm,
linear44: Linear,
constant1294: burn::module::Param<Tensor<1>>,
constant1295: burn::module::Param<Tensor<1>>,
constant1296: burn::module::Param<Tensor<1>>,
linear45: Linear,
layernormalization24: LayerNorm,
linear46: Linear,
constant1364: burn::module::Param<Tensor<1>>,
constant1366: burn::module::Param<Tensor<1>>,
constant1365: burn::module::Param<Tensor<1>>,
constant1367: burn::module::Param<Tensor<1>>,
linear47: Linear,
#[module(skip)]
device: Device,
}
impl Submodule13 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization23 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear44 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant1294: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1295: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1296: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear45 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization24 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear46 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant1364: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1366: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1365: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1367: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear47 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization23,
linear44,
constant1294,
constant1295,
constant1296,
linear45,
layernormalization24,
linear46,
constant1364,
constant1366,
constant1365,
constant1367,
linear47,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add77_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization23_out1 = {
let dtype = add77_out1.clone().dtype();
self.layernormalization23
.forward(add77_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear44_out1 = self.linear44.forward(layernormalization23_out1);
let constant1294_out1 = self.constant1294.val();
let div46_out1 = linear44_out1
.clone()
.div((constant1294_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf11_out1 = div46_out1.erf();
let constant1295_out1 = self.constant1295.val();
let add78_out1 = erf11_out1
.add((constant1295_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul96_out1 = linear44_out1.mul(add78_out1);
let constant1296_out1 = self.constant1296.val();
let mul97_out1 = mul96_out1
.mul((constant1296_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear45_out1 = self.linear45.forward(mul97_out1);
let add79_out1 = add77_out1.add(linear45_out1);
let layernormalization24_out1 = {
let dtype = add79_out1.clone().dtype();
self.layernormalization24
.forward(add79_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape97_out1: [i64; 3] = {
let axes = &layernormalization24_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather78_out1 = shape97_out1[0] as i64;
let shape98_out1: [i64; 3] = {
let axes = &layernormalization24_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather79_out1 = shape98_out1[1] as i64;
let linear46_out1 = self.linear46.forward(layernormalization24_out1);
let unsqueeze228_out1 = [gather78_out1 as i64];
let unsqueeze229_out1 = [gather79_out1 as i64];
let constant1303_out1: [i64; 1] = [64i64];
let constant1301_out1: [i64; 1] = [3i64];
let constant1302_out1: [i64; 1] = [8i64];
let concat100_out1: [i64; 5usize] = [
&unsqueeze228_out1[..],
&unsqueeze229_out1[..],
&constant1301_out1[..],
&constant1302_out1[..],
&constant1303_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape77_out1 = linear46_out1.reshape(concat100_out1);
let transpose34_out1 = reshape77_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose34_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split12_out1, split12_out2, split12_out3] = split_tensors
.try_into()
.unwrap();
let squeeze34_out1 = split12_out1.squeeze_dims::<4>(&[0]);
let squeeze35_out1 = split12_out2.squeeze_dims::<4>(&[0]);
let squeeze36_out1 = split12_out3.squeeze_dims::<4>(&[0]);
let shape99_out1: [i64; 4] = {
let axes = &squeeze34_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather80_out1 = shape99_out1[2] as i64;
let shape100_out1: [i64; 4] = {
let axes = &squeeze35_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather81_out1 = shape100_out1[2] as i64;
let sub14_out1 = gather81_out1 - gather80_out1;
let unsqueeze230_out1 = [gather81_out1 as i64];
let slice104_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze230_out1[0], ..]);
let unsqueeze231_out1 = [gather81_out1 as i64];
let constant1317_out1: [i64; 1] = [64i64];
let constant1314_out1: [i64; 1] = [1i64];
let constant1315_out1: [i64; 1] = [1i64];
let concat101_out1: [i64; 4usize] = [
&constant1314_out1[..],
&constant1315_out1[..],
&unsqueeze231_out1[..],
&constant1317_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze232_out1 = [gather81_out1 as i64];
let constant1321_out1: [i64; 1] = [64i64];
let constant1318_out1: [i64; 1] = [1i64];
let constant1319_out1: [i64; 1] = [1i64];
let concat102_out1: [i64; 4usize] = [
&constant1318_out1[..],
&constant1319_out1[..],
&unsqueeze232_out1[..],
&constant1321_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape78_out1 = slice104_out1.reshape(concat101_out1);
let unsqueeze233_out1 = [gather81_out1 as i64];
let slice105_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze233_out1[0], ..]);
let reshape79_out1 = slice105_out1.reshape(concat102_out1);
let unsqueeze234_out1 = [sub14_out1 as i64];
let unsqueeze235_out1 = [gather81_out1 as i64];
let slice106_out1 = constant461_out1
.slice(s![unsqueeze234_out1[0]..unsqueeze235_out1[0], ..]);
let unsqueeze236_out1 = [gather80_out1 as i64];
let constant1333_out1: [i64; 1] = [64i64];
let constant1330_out1: [i64; 1] = [1i64];
let constant1331_out1: [i64; 1] = [1i64];
let concat103_out1: [i64; 4usize] = [
&constant1330_out1[..],
&constant1331_out1[..],
&unsqueeze236_out1[..],
&constant1333_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze237_out1 = [gather80_out1 as i64];
let constant1337_out1: [i64; 1] = [64i64];
let constant1334_out1: [i64; 1] = [1i64];
let constant1335_out1: [i64; 1] = [1i64];
let concat104_out1: [i64; 4usize] = [
&constant1334_out1[..],
&constant1335_out1[..],
&unsqueeze237_out1[..],
&constant1337_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape80_out1 = slice106_out1.reshape(concat103_out1);
let unsqueeze238_out1 = [sub14_out1 as i64];
let unsqueeze239_out1 = [gather81_out1 as i64];
let slice107_out1 = constant474_out1
.slice(s![unsqueeze238_out1[0]..unsqueeze239_out1[0], ..]);
let reshape81_out1 = slice107_out1.reshape(concat104_out1);
let cast124_out1 = reshape80_out1;
let cast125_out1 = reshape81_out1;
let mul98_out1 = squeeze34_out1.clone().mul(cast124_out1);
let shape101_out1: [i64; 4] = {
let axes = &squeeze34_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather82_out1 = shape101_out1[3] as i64;
let constant1343_out1 = 2i64;
let div47_out1 = gather82_out1 / constant1343_out1;
let cast126_out1 = div47_out1;
let cast127_out1 = cast126_out1;
let unsqueeze240_out1 = [cast127_out1 as i64];
let slice108_out1 = squeeze34_out1
.clone()
.slice(s![.., .., .., unsqueeze240_out1[0]..9223372036854775807]);
let neg23_out1 = slice108_out1.neg();
let unsqueeze241_out1 = [cast127_out1 as i64];
let slice109_out1 = squeeze34_out1
.slice(s![.., .., .., 0..unsqueeze241_out1[0]]);
let concat105_out1 = burn::tensor::Tensor::cat(
[neg23_out1, slice109_out1].into(),
3,
);
let mul99_out1 = concat105_out1.mul(cast125_out1);
let add80_out1 = mul98_out1.add(mul99_out1);
let cast128_out1 = reshape78_out1;
let cast129_out1 = reshape79_out1;
let mul100_out1 = squeeze35_out1.clone().mul(cast128_out1);
let shape102_out1: [i64; 4] = {
let axes = &squeeze35_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather83_out1 = shape102_out1[3] as i64;
let constant1353_out1 = 2i64;
let div48_out1 = gather83_out1 / constant1353_out1;
let cast130_out1 = div48_out1;
let cast131_out1 = cast130_out1;
let unsqueeze242_out1 = [cast131_out1 as i64];
let slice110_out1 = squeeze35_out1
.clone()
.slice(s![.., .., .., unsqueeze242_out1[0]..9223372036854775807]);
let neg24_out1 = slice110_out1.neg();
let unsqueeze243_out1 = [cast131_out1 as i64];
let slice111_out1 = squeeze35_out1
.slice(s![.., .., .., 0..unsqueeze243_out1[0]]);
let concat106_out1 = burn::tensor::Tensor::cat(
[neg24_out1, slice111_out1].into(),
3,
);
let mul101_out1 = concat106_out1.mul(cast129_out1);
let add81_out1 = mul100_out1.add(mul101_out1);
let shape103_out1: [i64; 4] = {
let axes = &add80_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice112_out1: [i64; 1] = shape103_out1[3..4].try_into().unwrap();
let cast132_out1 = {
let shape_array = slice112_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt34_out1 = cast132_out1.sqrt();
let constant1364_out1 = self.constant1364.val();
let div49_out1 = constant1364_out1.div(sqrt34_out1);
let cast133_out1 = div49_out1;
let transpose35_out1 = add81_out1.permute([0, 1, 3, 2]);
let sqrt35_out1 = cast133_out1.clone().sqrt();
let mul102_out1 = add80_out1
.mul((sqrt35_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt36_out1 = cast133_out1.sqrt();
let mul103_out1 = transpose35_out1
.mul((sqrt36_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul69_out1 = mul102_out1.matmul(mul103_out1);
let constant1366_out1 = self.constant1366.val();
let constant1365_out1 = self.constant1365.val();
let where29_out1 = constant1366_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant1365_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add82_out1 = matmul69_out1.add(where29_out1);
let softmax12_out1 = burn::tensor::activation::softmax(add82_out1, 3);
let isnan12_out1 = softmax12_out1.clone().is_nan();
let constant1367_out1 = self.constant1367.val();
let where30_out1 = softmax12_out1
.mask_where(
isnan12_out1,
constant1367_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul70_out1 = where30_out1.matmul(squeeze36_out1);
let transpose36_out1 = matmul70_out1.permute([0, 2, 1, 3]);
let unsqueeze244_out1 = [gather78_out1 as i64];
let unsqueeze245_out1 = [gather79_out1 as i64];
let constant1370_out1: [i64; 1] = [512i64];
let concat107_out1: [i64; 3usize] = [
&unsqueeze244_out1[..],
&unsqueeze245_out1[..],
&constant1370_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape82_out1 = transpose36_out1.reshape(concat107_out1);
let linear47_out1 = self.linear47.forward(reshape82_out1);
let add83_out1 = add79_out1.add(linear47_out1);
add83_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule14 {
layernormalization25: LayerNorm,
linear48: Linear,
constant1371: burn::module::Param<Tensor<1>>,
constant1372: burn::module::Param<Tensor<1>>,
constant1373: burn::module::Param<Tensor<1>>,
linear49: Linear,
layernormalization26: LayerNorm,
linear50: Linear,
constant1441: burn::module::Param<Tensor<1>>,
constant1443: burn::module::Param<Tensor<1>>,
constant1442: burn::module::Param<Tensor<1>>,
constant1444: burn::module::Param<Tensor<1>>,
linear51: Linear,
#[module(skip)]
device: Device,
}
impl Submodule14 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization25 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear48 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant1371: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1372: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1373: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear49 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization26 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear50 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant1441: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1443: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1442: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1444: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear51 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization25,
linear48,
constant1371,
constant1372,
constant1373,
linear49,
layernormalization26,
linear50,
constant1441,
constant1443,
constant1442,
constant1444,
linear51,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add83_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization25_out1 = {
let dtype = add83_out1.clone().dtype();
self.layernormalization25
.forward(add83_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear48_out1 = self.linear48.forward(layernormalization25_out1);
let constant1371_out1 = self.constant1371.val();
let div50_out1 = linear48_out1
.clone()
.div((constant1371_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf12_out1 = div50_out1.erf();
let constant1372_out1 = self.constant1372.val();
let add84_out1 = erf12_out1
.add((constant1372_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul104_out1 = linear48_out1.mul(add84_out1);
let constant1373_out1 = self.constant1373.val();
let mul105_out1 = mul104_out1
.mul((constant1373_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear49_out1 = self.linear49.forward(mul105_out1);
let add85_out1 = add83_out1.add(linear49_out1);
let layernormalization26_out1 = {
let dtype = add85_out1.clone().dtype();
self.layernormalization26
.forward(add85_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape104_out1: [i64; 3] = {
let axes = &layernormalization26_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather84_out1 = shape104_out1[0] as i64;
let shape105_out1: [i64; 3] = {
let axes = &layernormalization26_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather85_out1 = shape105_out1[1] as i64;
let linear50_out1 = self.linear50.forward(layernormalization26_out1);
let unsqueeze246_out1 = [gather84_out1 as i64];
let unsqueeze247_out1 = [gather85_out1 as i64];
let constant1380_out1: [i64; 1] = [64i64];
let constant1378_out1: [i64; 1] = [3i64];
let constant1379_out1: [i64; 1] = [8i64];
let concat108_out1: [i64; 5usize] = [
&unsqueeze246_out1[..],
&unsqueeze247_out1[..],
&constant1378_out1[..],
&constant1379_out1[..],
&constant1380_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape83_out1 = linear50_out1.reshape(concat108_out1);
let transpose37_out1 = reshape83_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose37_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split13_out1, split13_out2, split13_out3] = split_tensors
.try_into()
.unwrap();
let squeeze37_out1 = split13_out1.squeeze_dims::<4>(&[0]);
let squeeze38_out1 = split13_out2.squeeze_dims::<4>(&[0]);
let squeeze39_out1 = split13_out3.squeeze_dims::<4>(&[0]);
let shape106_out1: [i64; 4] = {
let axes = &squeeze37_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather86_out1 = shape106_out1[2] as i64;
let shape107_out1: [i64; 4] = {
let axes = &squeeze38_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather87_out1 = shape107_out1[2] as i64;
let sub15_out1 = gather87_out1 - gather86_out1;
let unsqueeze248_out1 = [gather87_out1 as i64];
let slice113_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze248_out1[0], ..]);
let unsqueeze249_out1 = [gather87_out1 as i64];
let constant1394_out1: [i64; 1] = [64i64];
let constant1391_out1: [i64; 1] = [1i64];
let constant1392_out1: [i64; 1] = [1i64];
let concat109_out1: [i64; 4usize] = [
&constant1391_out1[..],
&constant1392_out1[..],
&unsqueeze249_out1[..],
&constant1394_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze250_out1 = [gather87_out1 as i64];
let constant1398_out1: [i64; 1] = [64i64];
let constant1395_out1: [i64; 1] = [1i64];
let constant1396_out1: [i64; 1] = [1i64];
let concat110_out1: [i64; 4usize] = [
&constant1395_out1[..],
&constant1396_out1[..],
&unsqueeze250_out1[..],
&constant1398_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape84_out1 = slice113_out1.reshape(concat109_out1);
let unsqueeze251_out1 = [gather87_out1 as i64];
let slice114_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze251_out1[0], ..]);
let reshape85_out1 = slice114_out1.reshape(concat110_out1);
let unsqueeze252_out1 = [sub15_out1 as i64];
let unsqueeze253_out1 = [gather87_out1 as i64];
let slice115_out1 = constant461_out1
.slice(s![unsqueeze252_out1[0]..unsqueeze253_out1[0], ..]);
let unsqueeze254_out1 = [gather86_out1 as i64];
let constant1410_out1: [i64; 1] = [64i64];
let constant1407_out1: [i64; 1] = [1i64];
let constant1408_out1: [i64; 1] = [1i64];
let concat111_out1: [i64; 4usize] = [
&constant1407_out1[..],
&constant1408_out1[..],
&unsqueeze254_out1[..],
&constant1410_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze255_out1 = [gather86_out1 as i64];
let constant1414_out1: [i64; 1] = [64i64];
let constant1411_out1: [i64; 1] = [1i64];
let constant1412_out1: [i64; 1] = [1i64];
let concat112_out1: [i64; 4usize] = [
&constant1411_out1[..],
&constant1412_out1[..],
&unsqueeze255_out1[..],
&constant1414_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape86_out1 = slice115_out1.reshape(concat111_out1);
let unsqueeze256_out1 = [sub15_out1 as i64];
let unsqueeze257_out1 = [gather87_out1 as i64];
let slice116_out1 = constant474_out1
.slice(s![unsqueeze256_out1[0]..unsqueeze257_out1[0], ..]);
let reshape87_out1 = slice116_out1.reshape(concat112_out1);
let cast134_out1 = reshape86_out1;
let cast135_out1 = reshape87_out1;
let mul106_out1 = squeeze37_out1.clone().mul(cast134_out1);
let shape108_out1: [i64; 4] = {
let axes = &squeeze37_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather88_out1 = shape108_out1[3] as i64;
let constant1420_out1 = 2i64;
let div51_out1 = gather88_out1 / constant1420_out1;
let cast136_out1 = div51_out1;
let cast137_out1 = cast136_out1;
let unsqueeze258_out1 = [cast137_out1 as i64];
let slice117_out1 = squeeze37_out1
.clone()
.slice(s![.., .., .., unsqueeze258_out1[0]..9223372036854775807]);
let neg25_out1 = slice117_out1.neg();
let unsqueeze259_out1 = [cast137_out1 as i64];
let slice118_out1 = squeeze37_out1
.slice(s![.., .., .., 0..unsqueeze259_out1[0]]);
let concat113_out1 = burn::tensor::Tensor::cat(
[neg25_out1, slice118_out1].into(),
3,
);
let mul107_out1 = concat113_out1.mul(cast135_out1);
let add86_out1 = mul106_out1.add(mul107_out1);
let cast138_out1 = reshape84_out1;
let cast139_out1 = reshape85_out1;
let mul108_out1 = squeeze38_out1.clone().mul(cast138_out1);
let shape109_out1: [i64; 4] = {
let axes = &squeeze38_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather89_out1 = shape109_out1[3] as i64;
let constant1430_out1 = 2i64;
let div52_out1 = gather89_out1 / constant1430_out1;
let cast140_out1 = div52_out1;
let cast141_out1 = cast140_out1;
let unsqueeze260_out1 = [cast141_out1 as i64];
let slice119_out1 = squeeze38_out1
.clone()
.slice(s![.., .., .., unsqueeze260_out1[0]..9223372036854775807]);
let neg26_out1 = slice119_out1.neg();
let unsqueeze261_out1 = [cast141_out1 as i64];
let slice120_out1 = squeeze38_out1
.slice(s![.., .., .., 0..unsqueeze261_out1[0]]);
let concat114_out1 = burn::tensor::Tensor::cat(
[neg26_out1, slice120_out1].into(),
3,
);
let mul109_out1 = concat114_out1.mul(cast139_out1);
let add87_out1 = mul108_out1.add(mul109_out1);
let shape110_out1: [i64; 4] = {
let axes = &add86_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice121_out1: [i64; 1] = shape110_out1[3..4].try_into().unwrap();
let cast142_out1 = {
let shape_array = slice121_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt37_out1 = cast142_out1.sqrt();
let constant1441_out1 = self.constant1441.val();
let div53_out1 = constant1441_out1.div(sqrt37_out1);
let cast143_out1 = div53_out1;
let transpose38_out1 = add87_out1.permute([0, 1, 3, 2]);
let sqrt38_out1 = cast143_out1.clone().sqrt();
let mul110_out1 = add86_out1
.mul((sqrt38_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt39_out1 = cast143_out1.sqrt();
let mul111_out1 = transpose38_out1
.mul((sqrt39_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul75_out1 = mul110_out1.matmul(mul111_out1);
let constant1443_out1 = self.constant1443.val();
let constant1442_out1 = self.constant1442.val();
let where31_out1 = constant1443_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant1442_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add88_out1 = matmul75_out1.add(where31_out1);
let softmax13_out1 = burn::tensor::activation::softmax(add88_out1, 3);
let isnan13_out1 = softmax13_out1.clone().is_nan();
let constant1444_out1 = self.constant1444.val();
let where32_out1 = softmax13_out1
.mask_where(
isnan13_out1,
constant1444_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul76_out1 = where32_out1.matmul(squeeze39_out1);
let transpose39_out1 = matmul76_out1.permute([0, 2, 1, 3]);
let unsqueeze262_out1 = [gather84_out1 as i64];
let unsqueeze263_out1 = [gather85_out1 as i64];
let constant1447_out1: [i64; 1] = [512i64];
let concat115_out1: [i64; 3usize] = [
&unsqueeze262_out1[..],
&unsqueeze263_out1[..],
&constant1447_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape88_out1 = transpose39_out1.reshape(concat115_out1);
let linear51_out1 = self.linear51.forward(reshape88_out1);
let add89_out1 = add85_out1.add(linear51_out1);
add89_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule15 {
layernormalization27: LayerNorm,
linear52: Linear,
constant1448: burn::module::Param<Tensor<1>>,
constant1449: burn::module::Param<Tensor<1>>,
constant1450: burn::module::Param<Tensor<1>>,
linear53: Linear,
layernormalization28: LayerNorm,
linear54: Linear,
constant1518: burn::module::Param<Tensor<1>>,
constant1520: burn::module::Param<Tensor<1>>,
constant1519: burn::module::Param<Tensor<1>>,
constant1521: burn::module::Param<Tensor<1>>,
linear55: Linear,
#[module(skip)]
device: Device,
}
impl Submodule15 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization27 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear52 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant1448: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1449: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1450: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear53 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization28 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear54 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant1518: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1520: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1519: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1521: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear55 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization27,
linear52,
constant1448,
constant1449,
constant1450,
linear53,
layernormalization28,
linear54,
constant1518,
constant1520,
constant1519,
constant1521,
linear55,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add89_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization27_out1 = {
let dtype = add89_out1.clone().dtype();
self.layernormalization27
.forward(add89_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear52_out1 = self.linear52.forward(layernormalization27_out1);
let constant1448_out1 = self.constant1448.val();
let div54_out1 = linear52_out1
.clone()
.div((constant1448_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf13_out1 = div54_out1.erf();
let constant1449_out1 = self.constant1449.val();
let add90_out1 = erf13_out1
.add((constant1449_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul112_out1 = linear52_out1.mul(add90_out1);
let constant1450_out1 = self.constant1450.val();
let mul113_out1 = mul112_out1
.mul((constant1450_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear53_out1 = self.linear53.forward(mul113_out1);
let add91_out1 = add89_out1.add(linear53_out1);
let layernormalization28_out1 = {
let dtype = add91_out1.clone().dtype();
self.layernormalization28
.forward(add91_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape111_out1: [i64; 3] = {
let axes = &layernormalization28_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather90_out1 = shape111_out1[0] as i64;
let shape112_out1: [i64; 3] = {
let axes = &layernormalization28_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather91_out1 = shape112_out1[1] as i64;
let linear54_out1 = self.linear54.forward(layernormalization28_out1);
let unsqueeze264_out1 = [gather90_out1 as i64];
let unsqueeze265_out1 = [gather91_out1 as i64];
let constant1457_out1: [i64; 1] = [64i64];
let constant1455_out1: [i64; 1] = [3i64];
let constant1456_out1: [i64; 1] = [8i64];
let concat116_out1: [i64; 5usize] = [
&unsqueeze264_out1[..],
&unsqueeze265_out1[..],
&constant1455_out1[..],
&constant1456_out1[..],
&constant1457_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape89_out1 = linear54_out1.reshape(concat116_out1);
let transpose40_out1 = reshape89_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose40_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split14_out1, split14_out2, split14_out3] = split_tensors
.try_into()
.unwrap();
let squeeze40_out1 = split14_out1.squeeze_dims::<4>(&[0]);
let squeeze41_out1 = split14_out2.squeeze_dims::<4>(&[0]);
let squeeze42_out1 = split14_out3.squeeze_dims::<4>(&[0]);
let shape113_out1: [i64; 4] = {
let axes = &squeeze40_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather92_out1 = shape113_out1[2] as i64;
let shape114_out1: [i64; 4] = {
let axes = &squeeze41_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather93_out1 = shape114_out1[2] as i64;
let sub16_out1 = gather93_out1 - gather92_out1;
let unsqueeze266_out1 = [gather93_out1 as i64];
let slice122_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze266_out1[0], ..]);
let unsqueeze267_out1 = [gather93_out1 as i64];
let constant1471_out1: [i64; 1] = [64i64];
let constant1468_out1: [i64; 1] = [1i64];
let constant1469_out1: [i64; 1] = [1i64];
let concat117_out1: [i64; 4usize] = [
&constant1468_out1[..],
&constant1469_out1[..],
&unsqueeze267_out1[..],
&constant1471_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze268_out1 = [gather93_out1 as i64];
let constant1475_out1: [i64; 1] = [64i64];
let constant1472_out1: [i64; 1] = [1i64];
let constant1473_out1: [i64; 1] = [1i64];
let concat118_out1: [i64; 4usize] = [
&constant1472_out1[..],
&constant1473_out1[..],
&unsqueeze268_out1[..],
&constant1475_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape90_out1 = slice122_out1.reshape(concat117_out1);
let unsqueeze269_out1 = [gather93_out1 as i64];
let slice123_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze269_out1[0], ..]);
let reshape91_out1 = slice123_out1.reshape(concat118_out1);
let unsqueeze270_out1 = [sub16_out1 as i64];
let unsqueeze271_out1 = [gather93_out1 as i64];
let slice124_out1 = constant461_out1
.slice(s![unsqueeze270_out1[0]..unsqueeze271_out1[0], ..]);
let unsqueeze272_out1 = [gather92_out1 as i64];
let constant1487_out1: [i64; 1] = [64i64];
let constant1484_out1: [i64; 1] = [1i64];
let constant1485_out1: [i64; 1] = [1i64];
let concat119_out1: [i64; 4usize] = [
&constant1484_out1[..],
&constant1485_out1[..],
&unsqueeze272_out1[..],
&constant1487_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze273_out1 = [gather92_out1 as i64];
let constant1491_out1: [i64; 1] = [64i64];
let constant1488_out1: [i64; 1] = [1i64];
let constant1489_out1: [i64; 1] = [1i64];
let concat120_out1: [i64; 4usize] = [
&constant1488_out1[..],
&constant1489_out1[..],
&unsqueeze273_out1[..],
&constant1491_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape92_out1 = slice124_out1.reshape(concat119_out1);
let unsqueeze274_out1 = [sub16_out1 as i64];
let unsqueeze275_out1 = [gather93_out1 as i64];
let slice125_out1 = constant474_out1
.slice(s![unsqueeze274_out1[0]..unsqueeze275_out1[0], ..]);
let reshape93_out1 = slice125_out1.reshape(concat120_out1);
let cast144_out1 = reshape92_out1;
let cast145_out1 = reshape93_out1;
let mul114_out1 = squeeze40_out1.clone().mul(cast144_out1);
let shape115_out1: [i64; 4] = {
let axes = &squeeze40_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather94_out1 = shape115_out1[3] as i64;
let constant1497_out1 = 2i64;
let div55_out1 = gather94_out1 / constant1497_out1;
let cast146_out1 = div55_out1;
let cast147_out1 = cast146_out1;
let unsqueeze276_out1 = [cast147_out1 as i64];
let slice126_out1 = squeeze40_out1
.clone()
.slice(s![.., .., .., unsqueeze276_out1[0]..9223372036854775807]);
let neg27_out1 = slice126_out1.neg();
let unsqueeze277_out1 = [cast147_out1 as i64];
let slice127_out1 = squeeze40_out1
.slice(s![.., .., .., 0..unsqueeze277_out1[0]]);
let concat121_out1 = burn::tensor::Tensor::cat(
[neg27_out1, slice127_out1].into(),
3,
);
let mul115_out1 = concat121_out1.mul(cast145_out1);
let add92_out1 = mul114_out1.add(mul115_out1);
let cast148_out1 = reshape90_out1;
let cast149_out1 = reshape91_out1;
let mul116_out1 = squeeze41_out1.clone().mul(cast148_out1);
let shape116_out1: [i64; 4] = {
let axes = &squeeze41_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather95_out1 = shape116_out1[3] as i64;
let constant1507_out1 = 2i64;
let div56_out1 = gather95_out1 / constant1507_out1;
let cast150_out1 = div56_out1;
let cast151_out1 = cast150_out1;
let unsqueeze278_out1 = [cast151_out1 as i64];
let slice128_out1 = squeeze41_out1
.clone()
.slice(s![.., .., .., unsqueeze278_out1[0]..9223372036854775807]);
let neg28_out1 = slice128_out1.neg();
let unsqueeze279_out1 = [cast151_out1 as i64];
let slice129_out1 = squeeze41_out1
.slice(s![.., .., .., 0..unsqueeze279_out1[0]]);
let concat122_out1 = burn::tensor::Tensor::cat(
[neg28_out1, slice129_out1].into(),
3,
);
let mul117_out1 = concat122_out1.mul(cast149_out1);
let add93_out1 = mul116_out1.add(mul117_out1);
let shape117_out1: [i64; 4] = {
let axes = &add92_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice130_out1: [i64; 1] = shape117_out1[3..4].try_into().unwrap();
let cast152_out1 = {
let shape_array = slice130_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt40_out1 = cast152_out1.sqrt();
let constant1518_out1 = self.constant1518.val();
let div57_out1 = constant1518_out1.div(sqrt40_out1);
let cast153_out1 = div57_out1;
let transpose41_out1 = add93_out1.permute([0, 1, 3, 2]);
let sqrt41_out1 = cast153_out1.clone().sqrt();
let mul118_out1 = add92_out1
.mul((sqrt41_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt42_out1 = cast153_out1.sqrt();
let mul119_out1 = transpose41_out1
.mul((sqrt42_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul81_out1 = mul118_out1.matmul(mul119_out1);
let constant1520_out1 = self.constant1520.val();
let constant1519_out1 = self.constant1519.val();
let where33_out1 = constant1520_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant1519_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add94_out1 = matmul81_out1.add(where33_out1);
let softmax14_out1 = burn::tensor::activation::softmax(add94_out1, 3);
let isnan14_out1 = softmax14_out1.clone().is_nan();
let constant1521_out1 = self.constant1521.val();
let where34_out1 = softmax14_out1
.mask_where(
isnan14_out1,
constant1521_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul82_out1 = where34_out1.matmul(squeeze42_out1);
let transpose42_out1 = matmul82_out1.permute([0, 2, 1, 3]);
let unsqueeze280_out1 = [gather90_out1 as i64];
let unsqueeze281_out1 = [gather91_out1 as i64];
let constant1524_out1: [i64; 1] = [512i64];
let concat123_out1: [i64; 3usize] = [
&unsqueeze280_out1[..],
&unsqueeze281_out1[..],
&constant1524_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape94_out1 = transpose42_out1.reshape(concat123_out1);
let linear55_out1 = self.linear55.forward(reshape94_out1);
let add95_out1 = add91_out1.add(linear55_out1);
add95_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule16 {
layernormalization29: LayerNorm,
linear56: Linear,
constant1525: burn::module::Param<Tensor<1>>,
constant1526: burn::module::Param<Tensor<1>>,
constant1527: burn::module::Param<Tensor<1>>,
linear57: Linear,
layernormalization30: LayerNorm,
linear58: Linear,
constant1595: burn::module::Param<Tensor<1>>,
constant1597: burn::module::Param<Tensor<1>>,
constant1596: burn::module::Param<Tensor<1>>,
constant1598: burn::module::Param<Tensor<1>>,
linear59: Linear,
#[module(skip)]
device: Device,
}
impl Submodule16 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization29 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear56 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant1525: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1526: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1527: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear57 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization30 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear58 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant1595: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1597: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1596: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1598: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear59 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization29,
linear56,
constant1525,
constant1526,
constant1527,
linear57,
layernormalization30,
linear58,
constant1595,
constant1597,
constant1596,
constant1598,
linear59,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add95_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization29_out1 = {
let dtype = add95_out1.clone().dtype();
self.layernormalization29
.forward(add95_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear56_out1 = self.linear56.forward(layernormalization29_out1);
let constant1525_out1 = self.constant1525.val();
let div58_out1 = linear56_out1
.clone()
.div((constant1525_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf14_out1 = div58_out1.erf();
let constant1526_out1 = self.constant1526.val();
let add96_out1 = erf14_out1
.add((constant1526_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul120_out1 = linear56_out1.mul(add96_out1);
let constant1527_out1 = self.constant1527.val();
let mul121_out1 = mul120_out1
.mul((constant1527_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear57_out1 = self.linear57.forward(mul121_out1);
let add97_out1 = add95_out1.add(linear57_out1);
let layernormalization30_out1 = {
let dtype = add97_out1.clone().dtype();
self.layernormalization30
.forward(add97_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape118_out1: [i64; 3] = {
let axes = &layernormalization30_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather96_out1 = shape118_out1[0] as i64;
let shape119_out1: [i64; 3] = {
let axes = &layernormalization30_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather97_out1 = shape119_out1[1] as i64;
let linear58_out1 = self.linear58.forward(layernormalization30_out1);
let unsqueeze282_out1 = [gather96_out1 as i64];
let unsqueeze283_out1 = [gather97_out1 as i64];
let constant1534_out1: [i64; 1] = [64i64];
let constant1532_out1: [i64; 1] = [3i64];
let constant1533_out1: [i64; 1] = [8i64];
let concat124_out1: [i64; 5usize] = [
&unsqueeze282_out1[..],
&unsqueeze283_out1[..],
&constant1532_out1[..],
&constant1533_out1[..],
&constant1534_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape95_out1 = linear58_out1.reshape(concat124_out1);
let transpose43_out1 = reshape95_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose43_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split15_out1, split15_out2, split15_out3] = split_tensors
.try_into()
.unwrap();
let squeeze43_out1 = split15_out1.squeeze_dims::<4>(&[0]);
let squeeze44_out1 = split15_out2.squeeze_dims::<4>(&[0]);
let squeeze45_out1 = split15_out3.squeeze_dims::<4>(&[0]);
let shape120_out1: [i64; 4] = {
let axes = &squeeze43_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather98_out1 = shape120_out1[2] as i64;
let shape121_out1: [i64; 4] = {
let axes = &squeeze44_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather99_out1 = shape121_out1[2] as i64;
let sub17_out1 = gather99_out1 - gather98_out1;
let unsqueeze284_out1 = [gather99_out1 as i64];
let slice131_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze284_out1[0], ..]);
let unsqueeze285_out1 = [gather99_out1 as i64];
let constant1548_out1: [i64; 1] = [64i64];
let constant1545_out1: [i64; 1] = [1i64];
let constant1546_out1: [i64; 1] = [1i64];
let concat125_out1: [i64; 4usize] = [
&constant1545_out1[..],
&constant1546_out1[..],
&unsqueeze285_out1[..],
&constant1548_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze286_out1 = [gather99_out1 as i64];
let constant1552_out1: [i64; 1] = [64i64];
let constant1549_out1: [i64; 1] = [1i64];
let constant1550_out1: [i64; 1] = [1i64];
let concat126_out1: [i64; 4usize] = [
&constant1549_out1[..],
&constant1550_out1[..],
&unsqueeze286_out1[..],
&constant1552_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape96_out1 = slice131_out1.reshape(concat125_out1);
let unsqueeze287_out1 = [gather99_out1 as i64];
let slice132_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze287_out1[0], ..]);
let reshape97_out1 = slice132_out1.reshape(concat126_out1);
let unsqueeze288_out1 = [sub17_out1 as i64];
let unsqueeze289_out1 = [gather99_out1 as i64];
let slice133_out1 = constant461_out1
.slice(s![unsqueeze288_out1[0]..unsqueeze289_out1[0], ..]);
let unsqueeze290_out1 = [gather98_out1 as i64];
let constant1564_out1: [i64; 1] = [64i64];
let constant1561_out1: [i64; 1] = [1i64];
let constant1562_out1: [i64; 1] = [1i64];
let concat127_out1: [i64; 4usize] = [
&constant1561_out1[..],
&constant1562_out1[..],
&unsqueeze290_out1[..],
&constant1564_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze291_out1 = [gather98_out1 as i64];
let constant1568_out1: [i64; 1] = [64i64];
let constant1565_out1: [i64; 1] = [1i64];
let constant1566_out1: [i64; 1] = [1i64];
let concat128_out1: [i64; 4usize] = [
&constant1565_out1[..],
&constant1566_out1[..],
&unsqueeze291_out1[..],
&constant1568_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape98_out1 = slice133_out1.reshape(concat127_out1);
let unsqueeze292_out1 = [sub17_out1 as i64];
let unsqueeze293_out1 = [gather99_out1 as i64];
let slice134_out1 = constant474_out1
.slice(s![unsqueeze292_out1[0]..unsqueeze293_out1[0], ..]);
let reshape99_out1 = slice134_out1.reshape(concat128_out1);
let cast154_out1 = reshape98_out1;
let cast155_out1 = reshape99_out1;
let mul122_out1 = squeeze43_out1.clone().mul(cast154_out1);
let shape122_out1: [i64; 4] = {
let axes = &squeeze43_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather100_out1 = shape122_out1[3] as i64;
let constant1574_out1 = 2i64;
let div59_out1 = gather100_out1 / constant1574_out1;
let cast156_out1 = div59_out1;
let cast157_out1 = cast156_out1;
let unsqueeze294_out1 = [cast157_out1 as i64];
let slice135_out1 = squeeze43_out1
.clone()
.slice(s![.., .., .., unsqueeze294_out1[0]..9223372036854775807]);
let neg29_out1 = slice135_out1.neg();
let unsqueeze295_out1 = [cast157_out1 as i64];
let slice136_out1 = squeeze43_out1
.slice(s![.., .., .., 0..unsqueeze295_out1[0]]);
let concat129_out1 = burn::tensor::Tensor::cat(
[neg29_out1, slice136_out1].into(),
3,
);
let mul123_out1 = concat129_out1.mul(cast155_out1);
let add98_out1 = mul122_out1.add(mul123_out1);
let cast158_out1 = reshape96_out1;
let cast159_out1 = reshape97_out1;
let mul124_out1 = squeeze44_out1.clone().mul(cast158_out1);
let shape123_out1: [i64; 4] = {
let axes = &squeeze44_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather101_out1 = shape123_out1[3] as i64;
let constant1584_out1 = 2i64;
let div60_out1 = gather101_out1 / constant1584_out1;
let cast160_out1 = div60_out1;
let cast161_out1 = cast160_out1;
let unsqueeze296_out1 = [cast161_out1 as i64];
let slice137_out1 = squeeze44_out1
.clone()
.slice(s![.., .., .., unsqueeze296_out1[0]..9223372036854775807]);
let neg30_out1 = slice137_out1.neg();
let unsqueeze297_out1 = [cast161_out1 as i64];
let slice138_out1 = squeeze44_out1
.slice(s![.., .., .., 0..unsqueeze297_out1[0]]);
let concat130_out1 = burn::tensor::Tensor::cat(
[neg30_out1, slice138_out1].into(),
3,
);
let mul125_out1 = concat130_out1.mul(cast159_out1);
let add99_out1 = mul124_out1.add(mul125_out1);
let shape124_out1: [i64; 4] = {
let axes = &add98_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice139_out1: [i64; 1] = shape124_out1[3..4].try_into().unwrap();
let cast162_out1 = {
let shape_array = slice139_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt43_out1 = cast162_out1.sqrt();
let constant1595_out1 = self.constant1595.val();
let div61_out1 = constant1595_out1.div(sqrt43_out1);
let cast163_out1 = div61_out1;
let transpose44_out1 = add99_out1.permute([0, 1, 3, 2]);
let sqrt44_out1 = cast163_out1.clone().sqrt();
let mul126_out1 = add98_out1
.mul((sqrt44_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt45_out1 = cast163_out1.sqrt();
let mul127_out1 = transpose44_out1
.mul((sqrt45_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul87_out1 = mul126_out1.matmul(mul127_out1);
let constant1597_out1 = self.constant1597.val();
let constant1596_out1 = self.constant1596.val();
let where35_out1 = constant1597_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant1596_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add100_out1 = matmul87_out1.add(where35_out1);
let softmax15_out1 = burn::tensor::activation::softmax(add100_out1, 3);
let isnan15_out1 = softmax15_out1.clone().is_nan();
let constant1598_out1 = self.constant1598.val();
let where36_out1 = softmax15_out1
.mask_where(
isnan15_out1,
constant1598_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul88_out1 = where36_out1.matmul(squeeze45_out1);
let transpose45_out1 = matmul88_out1.permute([0, 2, 1, 3]);
let unsqueeze298_out1 = [gather96_out1 as i64];
let unsqueeze299_out1 = [gather97_out1 as i64];
let constant1601_out1: [i64; 1] = [512i64];
let concat131_out1: [i64; 3usize] = [
&unsqueeze298_out1[..],
&unsqueeze299_out1[..],
&constant1601_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape100_out1 = transpose45_out1.reshape(concat131_out1);
let linear59_out1 = self.linear59.forward(reshape100_out1);
let add101_out1 = add97_out1.add(linear59_out1);
add101_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule17 {
layernormalization31: LayerNorm,
linear60: Linear,
constant1602: burn::module::Param<Tensor<1>>,
constant1603: burn::module::Param<Tensor<1>>,
constant1604: burn::module::Param<Tensor<1>>,
linear61: Linear,
layernormalization32: LayerNorm,
linear62: Linear,
constant1672: burn::module::Param<Tensor<1>>,
constant1674: burn::module::Param<Tensor<1>>,
constant1673: burn::module::Param<Tensor<1>>,
constant1675: burn::module::Param<Tensor<1>>,
linear63: Linear,
#[module(skip)]
device: Device,
}
impl Submodule17 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization31 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear60 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant1602: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1603: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1604: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear61 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization32 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear62 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant1672: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1674: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1673: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1675: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear63 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization31,
linear60,
constant1602,
constant1603,
constant1604,
linear61,
layernormalization32,
linear62,
constant1672,
constant1674,
constant1673,
constant1675,
linear63,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add101_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization31_out1 = {
let dtype = add101_out1.clone().dtype();
self.layernormalization31
.forward(add101_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear60_out1 = self.linear60.forward(layernormalization31_out1);
let constant1602_out1 = self.constant1602.val();
let div62_out1 = linear60_out1
.clone()
.div((constant1602_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf15_out1 = div62_out1.erf();
let constant1603_out1 = self.constant1603.val();
let add102_out1 = erf15_out1
.add((constant1603_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul128_out1 = linear60_out1.mul(add102_out1);
let constant1604_out1 = self.constant1604.val();
let mul129_out1 = mul128_out1
.mul((constant1604_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear61_out1 = self.linear61.forward(mul129_out1);
let add103_out1 = add101_out1.add(linear61_out1);
let layernormalization32_out1 = {
let dtype = add103_out1.clone().dtype();
self.layernormalization32
.forward(add103_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape125_out1: [i64; 3] = {
let axes = &layernormalization32_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather102_out1 = shape125_out1[0] as i64;
let shape126_out1: [i64; 3] = {
let axes = &layernormalization32_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather103_out1 = shape126_out1[1] as i64;
let linear62_out1 = self.linear62.forward(layernormalization32_out1);
let unsqueeze300_out1 = [gather102_out1 as i64];
let unsqueeze301_out1 = [gather103_out1 as i64];
let constant1611_out1: [i64; 1] = [64i64];
let constant1609_out1: [i64; 1] = [3i64];
let constant1610_out1: [i64; 1] = [8i64];
let concat132_out1: [i64; 5usize] = [
&unsqueeze300_out1[..],
&unsqueeze301_out1[..],
&constant1609_out1[..],
&constant1610_out1[..],
&constant1611_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape101_out1 = linear62_out1.reshape(concat132_out1);
let transpose46_out1 = reshape101_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose46_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split16_out1, split16_out2, split16_out3] = split_tensors
.try_into()
.unwrap();
let squeeze46_out1 = split16_out1.squeeze_dims::<4>(&[0]);
let squeeze47_out1 = split16_out2.squeeze_dims::<4>(&[0]);
let squeeze48_out1 = split16_out3.squeeze_dims::<4>(&[0]);
let shape127_out1: [i64; 4] = {
let axes = &squeeze46_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather104_out1 = shape127_out1[2] as i64;
let shape128_out1: [i64; 4] = {
let axes = &squeeze47_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather105_out1 = shape128_out1[2] as i64;
let sub18_out1 = gather105_out1 - gather104_out1;
let unsqueeze302_out1 = [gather105_out1 as i64];
let slice140_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze302_out1[0], ..]);
let unsqueeze303_out1 = [gather105_out1 as i64];
let constant1625_out1: [i64; 1] = [64i64];
let constant1622_out1: [i64; 1] = [1i64];
let constant1623_out1: [i64; 1] = [1i64];
let concat133_out1: [i64; 4usize] = [
&constant1622_out1[..],
&constant1623_out1[..],
&unsqueeze303_out1[..],
&constant1625_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze304_out1 = [gather105_out1 as i64];
let constant1629_out1: [i64; 1] = [64i64];
let constant1626_out1: [i64; 1] = [1i64];
let constant1627_out1: [i64; 1] = [1i64];
let concat134_out1: [i64; 4usize] = [
&constant1626_out1[..],
&constant1627_out1[..],
&unsqueeze304_out1[..],
&constant1629_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape102_out1 = slice140_out1.reshape(concat133_out1);
let unsqueeze305_out1 = [gather105_out1 as i64];
let slice141_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze305_out1[0], ..]);
let reshape103_out1 = slice141_out1.reshape(concat134_out1);
let unsqueeze306_out1 = [sub18_out1 as i64];
let unsqueeze307_out1 = [gather105_out1 as i64];
let slice142_out1 = constant461_out1
.slice(s![unsqueeze306_out1[0]..unsqueeze307_out1[0], ..]);
let unsqueeze308_out1 = [gather104_out1 as i64];
let constant1641_out1: [i64; 1] = [64i64];
let constant1638_out1: [i64; 1] = [1i64];
let constant1639_out1: [i64; 1] = [1i64];
let concat135_out1: [i64; 4usize] = [
&constant1638_out1[..],
&constant1639_out1[..],
&unsqueeze308_out1[..],
&constant1641_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze309_out1 = [gather104_out1 as i64];
let constant1645_out1: [i64; 1] = [64i64];
let constant1642_out1: [i64; 1] = [1i64];
let constant1643_out1: [i64; 1] = [1i64];
let concat136_out1: [i64; 4usize] = [
&constant1642_out1[..],
&constant1643_out1[..],
&unsqueeze309_out1[..],
&constant1645_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape104_out1 = slice142_out1.reshape(concat135_out1);
let unsqueeze310_out1 = [sub18_out1 as i64];
let unsqueeze311_out1 = [gather105_out1 as i64];
let slice143_out1 = constant474_out1
.slice(s![unsqueeze310_out1[0]..unsqueeze311_out1[0], ..]);
let reshape105_out1 = slice143_out1.reshape(concat136_out1);
let cast164_out1 = reshape104_out1;
let cast165_out1 = reshape105_out1;
let mul130_out1 = squeeze46_out1.clone().mul(cast164_out1);
let shape129_out1: [i64; 4] = {
let axes = &squeeze46_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather106_out1 = shape129_out1[3] as i64;
let constant1651_out1 = 2i64;
let div63_out1 = gather106_out1 / constant1651_out1;
let cast166_out1 = div63_out1;
let cast167_out1 = cast166_out1;
let unsqueeze312_out1 = [cast167_out1 as i64];
let slice144_out1 = squeeze46_out1
.clone()
.slice(s![.., .., .., unsqueeze312_out1[0]..9223372036854775807]);
let neg31_out1 = slice144_out1.neg();
let unsqueeze313_out1 = [cast167_out1 as i64];
let slice145_out1 = squeeze46_out1
.slice(s![.., .., .., 0..unsqueeze313_out1[0]]);
let concat137_out1 = burn::tensor::Tensor::cat(
[neg31_out1, slice145_out1].into(),
3,
);
let mul131_out1 = concat137_out1.mul(cast165_out1);
let add104_out1 = mul130_out1.add(mul131_out1);
let cast168_out1 = reshape102_out1;
let cast169_out1 = reshape103_out1;
let mul132_out1 = squeeze47_out1.clone().mul(cast168_out1);
let shape130_out1: [i64; 4] = {
let axes = &squeeze47_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather107_out1 = shape130_out1[3] as i64;
let constant1661_out1 = 2i64;
let div64_out1 = gather107_out1 / constant1661_out1;
let cast170_out1 = div64_out1;
let cast171_out1 = cast170_out1;
let unsqueeze314_out1 = [cast171_out1 as i64];
let slice146_out1 = squeeze47_out1
.clone()
.slice(s![.., .., .., unsqueeze314_out1[0]..9223372036854775807]);
let neg32_out1 = slice146_out1.neg();
let unsqueeze315_out1 = [cast171_out1 as i64];
let slice147_out1 = squeeze47_out1
.slice(s![.., .., .., 0..unsqueeze315_out1[0]]);
let concat138_out1 = burn::tensor::Tensor::cat(
[neg32_out1, slice147_out1].into(),
3,
);
let mul133_out1 = concat138_out1.mul(cast169_out1);
let add105_out1 = mul132_out1.add(mul133_out1);
let shape131_out1: [i64; 4] = {
let axes = &add104_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice148_out1: [i64; 1] = shape131_out1[3..4].try_into().unwrap();
let cast172_out1 = {
let shape_array = slice148_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt46_out1 = cast172_out1.sqrt();
let constant1672_out1 = self.constant1672.val();
let div65_out1 = constant1672_out1.div(sqrt46_out1);
let cast173_out1 = div65_out1;
let transpose47_out1 = add105_out1.permute([0, 1, 3, 2]);
let sqrt47_out1 = cast173_out1.clone().sqrt();
let mul134_out1 = add104_out1
.mul((sqrt47_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt48_out1 = cast173_out1.sqrt();
let mul135_out1 = transpose47_out1
.mul((sqrt48_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul93_out1 = mul134_out1.matmul(mul135_out1);
let constant1674_out1 = self.constant1674.val();
let constant1673_out1 = self.constant1673.val();
let where37_out1 = constant1674_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant1673_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add106_out1 = matmul93_out1.add(where37_out1);
let softmax16_out1 = burn::tensor::activation::softmax(add106_out1, 3);
let isnan16_out1 = softmax16_out1.clone().is_nan();
let constant1675_out1 = self.constant1675.val();
let where38_out1 = softmax16_out1
.mask_where(
isnan16_out1,
constant1675_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul94_out1 = where38_out1.matmul(squeeze48_out1);
let transpose48_out1 = matmul94_out1.permute([0, 2, 1, 3]);
let unsqueeze316_out1 = [gather102_out1 as i64];
let unsqueeze317_out1 = [gather103_out1 as i64];
let constant1678_out1: [i64; 1] = [512i64];
let concat139_out1: [i64; 3usize] = [
&unsqueeze316_out1[..],
&unsqueeze317_out1[..],
&constant1678_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape106_out1 = transpose48_out1.reshape(concat139_out1);
let linear63_out1 = self.linear63.forward(reshape106_out1);
let add107_out1 = add103_out1.add(linear63_out1);
add107_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule18 {
layernormalization33: LayerNorm,
linear64: Linear,
constant1679: burn::module::Param<Tensor<1>>,
constant1680: burn::module::Param<Tensor<1>>,
constant1681: burn::module::Param<Tensor<1>>,
linear65: Linear,
layernormalization34: LayerNorm,
linear66: Linear,
constant1749: burn::module::Param<Tensor<1>>,
constant1751: burn::module::Param<Tensor<1>>,
constant1750: burn::module::Param<Tensor<1>>,
constant1752: burn::module::Param<Tensor<1>>,
linear67: Linear,
#[module(skip)]
device: Device,
}
impl Submodule18 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization33 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear64 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant1679: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1680: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1681: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear65 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization34 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear66 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant1749: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1751: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1750: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1752: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear67 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization33,
linear64,
constant1679,
constant1680,
constant1681,
linear65,
layernormalization34,
linear66,
constant1749,
constant1751,
constant1750,
constant1752,
linear67,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add107_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization33_out1 = {
let dtype = add107_out1.clone().dtype();
self.layernormalization33
.forward(add107_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear64_out1 = self.linear64.forward(layernormalization33_out1);
let constant1679_out1 = self.constant1679.val();
let div66_out1 = linear64_out1
.clone()
.div((constant1679_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf16_out1 = div66_out1.erf();
let constant1680_out1 = self.constant1680.val();
let add108_out1 = erf16_out1
.add((constant1680_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul136_out1 = linear64_out1.mul(add108_out1);
let constant1681_out1 = self.constant1681.val();
let mul137_out1 = mul136_out1
.mul((constant1681_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear65_out1 = self.linear65.forward(mul137_out1);
let add109_out1 = add107_out1.add(linear65_out1);
let layernormalization34_out1 = {
let dtype = add109_out1.clone().dtype();
self.layernormalization34
.forward(add109_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape132_out1: [i64; 3] = {
let axes = &layernormalization34_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather108_out1 = shape132_out1[0] as i64;
let shape133_out1: [i64; 3] = {
let axes = &layernormalization34_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather109_out1 = shape133_out1[1] as i64;
let linear66_out1 = self.linear66.forward(layernormalization34_out1);
let unsqueeze318_out1 = [gather108_out1 as i64];
let unsqueeze319_out1 = [gather109_out1 as i64];
let constant1688_out1: [i64; 1] = [64i64];
let constant1686_out1: [i64; 1] = [3i64];
let constant1687_out1: [i64; 1] = [8i64];
let concat140_out1: [i64; 5usize] = [
&unsqueeze318_out1[..],
&unsqueeze319_out1[..],
&constant1686_out1[..],
&constant1687_out1[..],
&constant1688_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape107_out1 = linear66_out1.reshape(concat140_out1);
let transpose49_out1 = reshape107_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose49_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split17_out1, split17_out2, split17_out3] = split_tensors
.try_into()
.unwrap();
let squeeze49_out1 = split17_out1.squeeze_dims::<4>(&[0]);
let squeeze50_out1 = split17_out2.squeeze_dims::<4>(&[0]);
let squeeze51_out1 = split17_out3.squeeze_dims::<4>(&[0]);
let shape134_out1: [i64; 4] = {
let axes = &squeeze49_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather110_out1 = shape134_out1[2] as i64;
let shape135_out1: [i64; 4] = {
let axes = &squeeze50_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather111_out1 = shape135_out1[2] as i64;
let sub19_out1 = gather111_out1 - gather110_out1;
let unsqueeze320_out1 = [gather111_out1 as i64];
let slice149_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze320_out1[0], ..]);
let unsqueeze321_out1 = [gather111_out1 as i64];
let constant1702_out1: [i64; 1] = [64i64];
let constant1699_out1: [i64; 1] = [1i64];
let constant1700_out1: [i64; 1] = [1i64];
let concat141_out1: [i64; 4usize] = [
&constant1699_out1[..],
&constant1700_out1[..],
&unsqueeze321_out1[..],
&constant1702_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze322_out1 = [gather111_out1 as i64];
let constant1706_out1: [i64; 1] = [64i64];
let constant1703_out1: [i64; 1] = [1i64];
let constant1704_out1: [i64; 1] = [1i64];
let concat142_out1: [i64; 4usize] = [
&constant1703_out1[..],
&constant1704_out1[..],
&unsqueeze322_out1[..],
&constant1706_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape108_out1 = slice149_out1.reshape(concat141_out1);
let unsqueeze323_out1 = [gather111_out1 as i64];
let slice150_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze323_out1[0], ..]);
let reshape109_out1 = slice150_out1.reshape(concat142_out1);
let unsqueeze324_out1 = [sub19_out1 as i64];
let unsqueeze325_out1 = [gather111_out1 as i64];
let slice151_out1 = constant461_out1
.slice(s![unsqueeze324_out1[0]..unsqueeze325_out1[0], ..]);
let unsqueeze326_out1 = [gather110_out1 as i64];
let constant1718_out1: [i64; 1] = [64i64];
let constant1715_out1: [i64; 1] = [1i64];
let constant1716_out1: [i64; 1] = [1i64];
let concat143_out1: [i64; 4usize] = [
&constant1715_out1[..],
&constant1716_out1[..],
&unsqueeze326_out1[..],
&constant1718_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze327_out1 = [gather110_out1 as i64];
let constant1722_out1: [i64; 1] = [64i64];
let constant1719_out1: [i64; 1] = [1i64];
let constant1720_out1: [i64; 1] = [1i64];
let concat144_out1: [i64; 4usize] = [
&constant1719_out1[..],
&constant1720_out1[..],
&unsqueeze327_out1[..],
&constant1722_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape110_out1 = slice151_out1.reshape(concat143_out1);
let unsqueeze328_out1 = [sub19_out1 as i64];
let unsqueeze329_out1 = [gather111_out1 as i64];
let slice152_out1 = constant474_out1
.slice(s![unsqueeze328_out1[0]..unsqueeze329_out1[0], ..]);
let reshape111_out1 = slice152_out1.reshape(concat144_out1);
let cast174_out1 = reshape110_out1;
let cast175_out1 = reshape111_out1;
let mul138_out1 = squeeze49_out1.clone().mul(cast174_out1);
let shape136_out1: [i64; 4] = {
let axes = &squeeze49_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather112_out1 = shape136_out1[3] as i64;
let constant1728_out1 = 2i64;
let div67_out1 = gather112_out1 / constant1728_out1;
let cast176_out1 = div67_out1;
let cast177_out1 = cast176_out1;
let unsqueeze330_out1 = [cast177_out1 as i64];
let slice153_out1 = squeeze49_out1
.clone()
.slice(s![.., .., .., unsqueeze330_out1[0]..9223372036854775807]);
let neg33_out1 = slice153_out1.neg();
let unsqueeze331_out1 = [cast177_out1 as i64];
let slice154_out1 = squeeze49_out1
.slice(s![.., .., .., 0..unsqueeze331_out1[0]]);
let concat145_out1 = burn::tensor::Tensor::cat(
[neg33_out1, slice154_out1].into(),
3,
);
let mul139_out1 = concat145_out1.mul(cast175_out1);
let add110_out1 = mul138_out1.add(mul139_out1);
let cast178_out1 = reshape108_out1;
let cast179_out1 = reshape109_out1;
let mul140_out1 = squeeze50_out1.clone().mul(cast178_out1);
let shape137_out1: [i64; 4] = {
let axes = &squeeze50_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather113_out1 = shape137_out1[3] as i64;
let constant1738_out1 = 2i64;
let div68_out1 = gather113_out1 / constant1738_out1;
let cast180_out1 = div68_out1;
let cast181_out1 = cast180_out1;
let unsqueeze332_out1 = [cast181_out1 as i64];
let slice155_out1 = squeeze50_out1
.clone()
.slice(s![.., .., .., unsqueeze332_out1[0]..9223372036854775807]);
let neg34_out1 = slice155_out1.neg();
let unsqueeze333_out1 = [cast181_out1 as i64];
let slice156_out1 = squeeze50_out1
.slice(s![.., .., .., 0..unsqueeze333_out1[0]]);
let concat146_out1 = burn::tensor::Tensor::cat(
[neg34_out1, slice156_out1].into(),
3,
);
let mul141_out1 = concat146_out1.mul(cast179_out1);
let add111_out1 = mul140_out1.add(mul141_out1);
let shape138_out1: [i64; 4] = {
let axes = &add110_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice157_out1: [i64; 1] = shape138_out1[3..4].try_into().unwrap();
let cast182_out1 = {
let shape_array = slice157_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt49_out1 = cast182_out1.sqrt();
let constant1749_out1 = self.constant1749.val();
let div69_out1 = constant1749_out1.div(sqrt49_out1);
let cast183_out1 = div69_out1;
let transpose50_out1 = add111_out1.permute([0, 1, 3, 2]);
let sqrt50_out1 = cast183_out1.clone().sqrt();
let mul142_out1 = add110_out1
.mul((sqrt50_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt51_out1 = cast183_out1.sqrt();
let mul143_out1 = transpose50_out1
.mul((sqrt51_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul99_out1 = mul142_out1.matmul(mul143_out1);
let constant1751_out1 = self.constant1751.val();
let constant1750_out1 = self.constant1750.val();
let where39_out1 = constant1751_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant1750_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add112_out1 = matmul99_out1.add(where39_out1);
let softmax17_out1 = burn::tensor::activation::softmax(add112_out1, 3);
let isnan17_out1 = softmax17_out1.clone().is_nan();
let constant1752_out1 = self.constant1752.val();
let where40_out1 = softmax17_out1
.mask_where(
isnan17_out1,
constant1752_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul100_out1 = where40_out1.matmul(squeeze51_out1);
let transpose51_out1 = matmul100_out1.permute([0, 2, 1, 3]);
let unsqueeze334_out1 = [gather108_out1 as i64];
let unsqueeze335_out1 = [gather109_out1 as i64];
let constant1755_out1: [i64; 1] = [512i64];
let concat147_out1: [i64; 3usize] = [
&unsqueeze334_out1[..],
&unsqueeze335_out1[..],
&constant1755_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape112_out1 = transpose51_out1.reshape(concat147_out1);
let linear67_out1 = self.linear67.forward(reshape112_out1);
let add113_out1 = add109_out1.add(linear67_out1);
add113_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule19 {
layernormalization35: LayerNorm,
linear68: Linear,
constant1756: burn::module::Param<Tensor<1>>,
constant1757: burn::module::Param<Tensor<1>>,
constant1758: burn::module::Param<Tensor<1>>,
linear69: Linear,
layernormalization36: LayerNorm,
linear70: Linear,
constant1826: burn::module::Param<Tensor<1>>,
constant1828: burn::module::Param<Tensor<1>>,
constant1827: burn::module::Param<Tensor<1>>,
constant1829: burn::module::Param<Tensor<1>>,
linear71: Linear,
#[module(skip)]
device: Device,
}
impl Submodule19 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization35 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear68 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant1756: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1757: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1758: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear69 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization36 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear70 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant1826: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1828: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1827: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1829: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear71 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization35,
linear68,
constant1756,
constant1757,
constant1758,
linear69,
layernormalization36,
linear70,
constant1826,
constant1828,
constant1827,
constant1829,
linear71,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add113_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization35_out1 = {
let dtype = add113_out1.clone().dtype();
self.layernormalization35
.forward(add113_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear68_out1 = self.linear68.forward(layernormalization35_out1);
let constant1756_out1 = self.constant1756.val();
let div70_out1 = linear68_out1
.clone()
.div((constant1756_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf17_out1 = div70_out1.erf();
let constant1757_out1 = self.constant1757.val();
let add114_out1 = erf17_out1
.add((constant1757_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul144_out1 = linear68_out1.mul(add114_out1);
let constant1758_out1 = self.constant1758.val();
let mul145_out1 = mul144_out1
.mul((constant1758_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear69_out1 = self.linear69.forward(mul145_out1);
let add115_out1 = add113_out1.add(linear69_out1);
let layernormalization36_out1 = {
let dtype = add115_out1.clone().dtype();
self.layernormalization36
.forward(add115_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape139_out1: [i64; 3] = {
let axes = &layernormalization36_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather114_out1 = shape139_out1[0] as i64;
let shape140_out1: [i64; 3] = {
let axes = &layernormalization36_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather115_out1 = shape140_out1[1] as i64;
let linear70_out1 = self.linear70.forward(layernormalization36_out1);
let unsqueeze336_out1 = [gather114_out1 as i64];
let unsqueeze337_out1 = [gather115_out1 as i64];
let constant1765_out1: [i64; 1] = [64i64];
let constant1763_out1: [i64; 1] = [3i64];
let constant1764_out1: [i64; 1] = [8i64];
let concat148_out1: [i64; 5usize] = [
&unsqueeze336_out1[..],
&unsqueeze337_out1[..],
&constant1763_out1[..],
&constant1764_out1[..],
&constant1765_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape113_out1 = linear70_out1.reshape(concat148_out1);
let transpose52_out1 = reshape113_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose52_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split18_out1, split18_out2, split18_out3] = split_tensors
.try_into()
.unwrap();
let squeeze52_out1 = split18_out1.squeeze_dims::<4>(&[0]);
let squeeze53_out1 = split18_out2.squeeze_dims::<4>(&[0]);
let squeeze54_out1 = split18_out3.squeeze_dims::<4>(&[0]);
let shape141_out1: [i64; 4] = {
let axes = &squeeze52_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather116_out1 = shape141_out1[2] as i64;
let shape142_out1: [i64; 4] = {
let axes = &squeeze53_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather117_out1 = shape142_out1[2] as i64;
let sub20_out1 = gather117_out1 - gather116_out1;
let unsqueeze338_out1 = [gather117_out1 as i64];
let slice158_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze338_out1[0], ..]);
let unsqueeze339_out1 = [gather117_out1 as i64];
let constant1779_out1: [i64; 1] = [64i64];
let constant1776_out1: [i64; 1] = [1i64];
let constant1777_out1: [i64; 1] = [1i64];
let concat149_out1: [i64; 4usize] = [
&constant1776_out1[..],
&constant1777_out1[..],
&unsqueeze339_out1[..],
&constant1779_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze340_out1 = [gather117_out1 as i64];
let constant1783_out1: [i64; 1] = [64i64];
let constant1780_out1: [i64; 1] = [1i64];
let constant1781_out1: [i64; 1] = [1i64];
let concat150_out1: [i64; 4usize] = [
&constant1780_out1[..],
&constant1781_out1[..],
&unsqueeze340_out1[..],
&constant1783_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape114_out1 = slice158_out1.reshape(concat149_out1);
let unsqueeze341_out1 = [gather117_out1 as i64];
let slice159_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze341_out1[0], ..]);
let reshape115_out1 = slice159_out1.reshape(concat150_out1);
let unsqueeze342_out1 = [sub20_out1 as i64];
let unsqueeze343_out1 = [gather117_out1 as i64];
let slice160_out1 = constant461_out1
.slice(s![unsqueeze342_out1[0]..unsqueeze343_out1[0], ..]);
let unsqueeze344_out1 = [gather116_out1 as i64];
let constant1795_out1: [i64; 1] = [64i64];
let constant1792_out1: [i64; 1] = [1i64];
let constant1793_out1: [i64; 1] = [1i64];
let concat151_out1: [i64; 4usize] = [
&constant1792_out1[..],
&constant1793_out1[..],
&unsqueeze344_out1[..],
&constant1795_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze345_out1 = [gather116_out1 as i64];
let constant1799_out1: [i64; 1] = [64i64];
let constant1796_out1: [i64; 1] = [1i64];
let constant1797_out1: [i64; 1] = [1i64];
let concat152_out1: [i64; 4usize] = [
&constant1796_out1[..],
&constant1797_out1[..],
&unsqueeze345_out1[..],
&constant1799_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape116_out1 = slice160_out1.reshape(concat151_out1);
let unsqueeze346_out1 = [sub20_out1 as i64];
let unsqueeze347_out1 = [gather117_out1 as i64];
let slice161_out1 = constant474_out1
.slice(s![unsqueeze346_out1[0]..unsqueeze347_out1[0], ..]);
let reshape117_out1 = slice161_out1.reshape(concat152_out1);
let cast184_out1 = reshape116_out1;
let cast185_out1 = reshape117_out1;
let mul146_out1 = squeeze52_out1.clone().mul(cast184_out1);
let shape143_out1: [i64; 4] = {
let axes = &squeeze52_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather118_out1 = shape143_out1[3] as i64;
let constant1805_out1 = 2i64;
let div71_out1 = gather118_out1 / constant1805_out1;
let cast186_out1 = div71_out1;
let cast187_out1 = cast186_out1;
let unsqueeze348_out1 = [cast187_out1 as i64];
let slice162_out1 = squeeze52_out1
.clone()
.slice(s![.., .., .., unsqueeze348_out1[0]..9223372036854775807]);
let neg35_out1 = slice162_out1.neg();
let unsqueeze349_out1 = [cast187_out1 as i64];
let slice163_out1 = squeeze52_out1
.slice(s![.., .., .., 0..unsqueeze349_out1[0]]);
let concat153_out1 = burn::tensor::Tensor::cat(
[neg35_out1, slice163_out1].into(),
3,
);
let mul147_out1 = concat153_out1.mul(cast185_out1);
let add116_out1 = mul146_out1.add(mul147_out1);
let cast188_out1 = reshape114_out1;
let cast189_out1 = reshape115_out1;
let mul148_out1 = squeeze53_out1.clone().mul(cast188_out1);
let shape144_out1: [i64; 4] = {
let axes = &squeeze53_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather119_out1 = shape144_out1[3] as i64;
let constant1815_out1 = 2i64;
let div72_out1 = gather119_out1 / constant1815_out1;
let cast190_out1 = div72_out1;
let cast191_out1 = cast190_out1;
let unsqueeze350_out1 = [cast191_out1 as i64];
let slice164_out1 = squeeze53_out1
.clone()
.slice(s![.., .., .., unsqueeze350_out1[0]..9223372036854775807]);
let neg36_out1 = slice164_out1.neg();
let unsqueeze351_out1 = [cast191_out1 as i64];
let slice165_out1 = squeeze53_out1
.slice(s![.., .., .., 0..unsqueeze351_out1[0]]);
let concat154_out1 = burn::tensor::Tensor::cat(
[neg36_out1, slice165_out1].into(),
3,
);
let mul149_out1 = concat154_out1.mul(cast189_out1);
let add117_out1 = mul148_out1.add(mul149_out1);
let shape145_out1: [i64; 4] = {
let axes = &add116_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice166_out1: [i64; 1] = shape145_out1[3..4].try_into().unwrap();
let cast192_out1 = {
let shape_array = slice166_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt52_out1 = cast192_out1.sqrt();
let constant1826_out1 = self.constant1826.val();
let div73_out1 = constant1826_out1.div(sqrt52_out1);
let cast193_out1 = div73_out1;
let transpose53_out1 = add117_out1.permute([0, 1, 3, 2]);
let sqrt53_out1 = cast193_out1.clone().sqrt();
let mul150_out1 = add116_out1
.mul((sqrt53_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt54_out1 = cast193_out1.sqrt();
let mul151_out1 = transpose53_out1
.mul((sqrt54_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul105_out1 = mul150_out1.matmul(mul151_out1);
let constant1828_out1 = self.constant1828.val();
let constant1827_out1 = self.constant1827.val();
let where41_out1 = constant1828_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant1827_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add118_out1 = matmul105_out1.add(where41_out1);
let softmax18_out1 = burn::tensor::activation::softmax(add118_out1, 3);
let isnan18_out1 = softmax18_out1.clone().is_nan();
let constant1829_out1 = self.constant1829.val();
let where42_out1 = softmax18_out1
.mask_where(
isnan18_out1,
constant1829_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul106_out1 = where42_out1.matmul(squeeze54_out1);
let transpose54_out1 = matmul106_out1.permute([0, 2, 1, 3]);
let unsqueeze352_out1 = [gather114_out1 as i64];
let unsqueeze353_out1 = [gather115_out1 as i64];
let constant1832_out1: [i64; 1] = [512i64];
let concat155_out1: [i64; 3usize] = [
&unsqueeze352_out1[..],
&unsqueeze353_out1[..],
&constant1832_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape118_out1 = transpose54_out1.reshape(concat155_out1);
let linear71_out1 = self.linear71.forward(reshape118_out1);
let add119_out1 = add115_out1.add(linear71_out1);
add119_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule20 {
layernormalization37: LayerNorm,
linear72: Linear,
constant1833: burn::module::Param<Tensor<1>>,
constant1834: burn::module::Param<Tensor<1>>,
constant1835: burn::module::Param<Tensor<1>>,
linear73: Linear,
layernormalization38: LayerNorm,
linear74: Linear,
constant1903: burn::module::Param<Tensor<1>>,
constant1905: burn::module::Param<Tensor<1>>,
constant1904: burn::module::Param<Tensor<1>>,
constant1906: burn::module::Param<Tensor<1>>,
linear75: Linear,
#[module(skip)]
device: Device,
}
impl Submodule20 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization37 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear72 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant1833: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1834: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1835: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear73 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization38 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear74 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant1903: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1905: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1904: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1906: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear75 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization37,
linear72,
constant1833,
constant1834,
constant1835,
linear73,
layernormalization38,
linear74,
constant1903,
constant1905,
constant1904,
constant1906,
linear75,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add119_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization37_out1 = {
let dtype = add119_out1.clone().dtype();
self.layernormalization37
.forward(add119_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear72_out1 = self.linear72.forward(layernormalization37_out1);
let constant1833_out1 = self.constant1833.val();
let div74_out1 = linear72_out1
.clone()
.div((constant1833_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf18_out1 = div74_out1.erf();
let constant1834_out1 = self.constant1834.val();
let add120_out1 = erf18_out1
.add((constant1834_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul152_out1 = linear72_out1.mul(add120_out1);
let constant1835_out1 = self.constant1835.val();
let mul153_out1 = mul152_out1
.mul((constant1835_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear73_out1 = self.linear73.forward(mul153_out1);
let add121_out1 = add119_out1.add(linear73_out1);
let layernormalization38_out1 = {
let dtype = add121_out1.clone().dtype();
self.layernormalization38
.forward(add121_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape146_out1: [i64; 3] = {
let axes = &layernormalization38_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather120_out1 = shape146_out1[0] as i64;
let shape147_out1: [i64; 3] = {
let axes = &layernormalization38_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather121_out1 = shape147_out1[1] as i64;
let linear74_out1 = self.linear74.forward(layernormalization38_out1);
let unsqueeze354_out1 = [gather120_out1 as i64];
let unsqueeze355_out1 = [gather121_out1 as i64];
let constant1842_out1: [i64; 1] = [64i64];
let constant1840_out1: [i64; 1] = [3i64];
let constant1841_out1: [i64; 1] = [8i64];
let concat156_out1: [i64; 5usize] = [
&unsqueeze354_out1[..],
&unsqueeze355_out1[..],
&constant1840_out1[..],
&constant1841_out1[..],
&constant1842_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape119_out1 = linear74_out1.reshape(concat156_out1);
let transpose55_out1 = reshape119_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose55_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split19_out1, split19_out2, split19_out3] = split_tensors
.try_into()
.unwrap();
let squeeze55_out1 = split19_out1.squeeze_dims::<4>(&[0]);
let squeeze56_out1 = split19_out2.squeeze_dims::<4>(&[0]);
let squeeze57_out1 = split19_out3.squeeze_dims::<4>(&[0]);
let shape148_out1: [i64; 4] = {
let axes = &squeeze55_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather122_out1 = shape148_out1[2] as i64;
let shape149_out1: [i64; 4] = {
let axes = &squeeze56_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather123_out1 = shape149_out1[2] as i64;
let sub21_out1 = gather123_out1 - gather122_out1;
let unsqueeze356_out1 = [gather123_out1 as i64];
let slice167_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze356_out1[0], ..]);
let unsqueeze357_out1 = [gather123_out1 as i64];
let constant1856_out1: [i64; 1] = [64i64];
let constant1853_out1: [i64; 1] = [1i64];
let constant1854_out1: [i64; 1] = [1i64];
let concat157_out1: [i64; 4usize] = [
&constant1853_out1[..],
&constant1854_out1[..],
&unsqueeze357_out1[..],
&constant1856_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze358_out1 = [gather123_out1 as i64];
let constant1860_out1: [i64; 1] = [64i64];
let constant1857_out1: [i64; 1] = [1i64];
let constant1858_out1: [i64; 1] = [1i64];
let concat158_out1: [i64; 4usize] = [
&constant1857_out1[..],
&constant1858_out1[..],
&unsqueeze358_out1[..],
&constant1860_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape120_out1 = slice167_out1.reshape(concat157_out1);
let unsqueeze359_out1 = [gather123_out1 as i64];
let slice168_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze359_out1[0], ..]);
let reshape121_out1 = slice168_out1.reshape(concat158_out1);
let unsqueeze360_out1 = [sub21_out1 as i64];
let unsqueeze361_out1 = [gather123_out1 as i64];
let slice169_out1 = constant461_out1
.slice(s![unsqueeze360_out1[0]..unsqueeze361_out1[0], ..]);
let unsqueeze362_out1 = [gather122_out1 as i64];
let constant1872_out1: [i64; 1] = [64i64];
let constant1869_out1: [i64; 1] = [1i64];
let constant1870_out1: [i64; 1] = [1i64];
let concat159_out1: [i64; 4usize] = [
&constant1869_out1[..],
&constant1870_out1[..],
&unsqueeze362_out1[..],
&constant1872_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze363_out1 = [gather122_out1 as i64];
let constant1876_out1: [i64; 1] = [64i64];
let constant1873_out1: [i64; 1] = [1i64];
let constant1874_out1: [i64; 1] = [1i64];
let concat160_out1: [i64; 4usize] = [
&constant1873_out1[..],
&constant1874_out1[..],
&unsqueeze363_out1[..],
&constant1876_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape122_out1 = slice169_out1.reshape(concat159_out1);
let unsqueeze364_out1 = [sub21_out1 as i64];
let unsqueeze365_out1 = [gather123_out1 as i64];
let slice170_out1 = constant474_out1
.slice(s![unsqueeze364_out1[0]..unsqueeze365_out1[0], ..]);
let reshape123_out1 = slice170_out1.reshape(concat160_out1);
let cast194_out1 = reshape122_out1;
let cast195_out1 = reshape123_out1;
let mul154_out1 = squeeze55_out1.clone().mul(cast194_out1);
let shape150_out1: [i64; 4] = {
let axes = &squeeze55_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather124_out1 = shape150_out1[3] as i64;
let constant1882_out1 = 2i64;
let div75_out1 = gather124_out1 / constant1882_out1;
let cast196_out1 = div75_out1;
let cast197_out1 = cast196_out1;
let unsqueeze366_out1 = [cast197_out1 as i64];
let slice171_out1 = squeeze55_out1
.clone()
.slice(s![.., .., .., unsqueeze366_out1[0]..9223372036854775807]);
let neg37_out1 = slice171_out1.neg();
let unsqueeze367_out1 = [cast197_out1 as i64];
let slice172_out1 = squeeze55_out1
.slice(s![.., .., .., 0..unsqueeze367_out1[0]]);
let concat161_out1 = burn::tensor::Tensor::cat(
[neg37_out1, slice172_out1].into(),
3,
);
let mul155_out1 = concat161_out1.mul(cast195_out1);
let add122_out1 = mul154_out1.add(mul155_out1);
let cast198_out1 = reshape120_out1;
let cast199_out1 = reshape121_out1;
let mul156_out1 = squeeze56_out1.clone().mul(cast198_out1);
let shape151_out1: [i64; 4] = {
let axes = &squeeze56_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather125_out1 = shape151_out1[3] as i64;
let constant1892_out1 = 2i64;
let div76_out1 = gather125_out1 / constant1892_out1;
let cast200_out1 = div76_out1;
let cast201_out1 = cast200_out1;
let unsqueeze368_out1 = [cast201_out1 as i64];
let slice173_out1 = squeeze56_out1
.clone()
.slice(s![.., .., .., unsqueeze368_out1[0]..9223372036854775807]);
let neg38_out1 = slice173_out1.neg();
let unsqueeze369_out1 = [cast201_out1 as i64];
let slice174_out1 = squeeze56_out1
.slice(s![.., .., .., 0..unsqueeze369_out1[0]]);
let concat162_out1 = burn::tensor::Tensor::cat(
[neg38_out1, slice174_out1].into(),
3,
);
let mul157_out1 = concat162_out1.mul(cast199_out1);
let add123_out1 = mul156_out1.add(mul157_out1);
let shape152_out1: [i64; 4] = {
let axes = &add122_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice175_out1: [i64; 1] = shape152_out1[3..4].try_into().unwrap();
let cast202_out1 = {
let shape_array = slice175_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt55_out1 = cast202_out1.sqrt();
let constant1903_out1 = self.constant1903.val();
let div77_out1 = constant1903_out1.div(sqrt55_out1);
let cast203_out1 = div77_out1;
let transpose56_out1 = add123_out1.permute([0, 1, 3, 2]);
let sqrt56_out1 = cast203_out1.clone().sqrt();
let mul158_out1 = add122_out1
.mul((sqrt56_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt57_out1 = cast203_out1.sqrt();
let mul159_out1 = transpose56_out1
.mul((sqrt57_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul111_out1 = mul158_out1.matmul(mul159_out1);
let constant1905_out1 = self.constant1905.val();
let constant1904_out1 = self.constant1904.val();
let where43_out1 = constant1905_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant1904_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add124_out1 = matmul111_out1.add(where43_out1);
let softmax19_out1 = burn::tensor::activation::softmax(add124_out1, 3);
let isnan19_out1 = softmax19_out1.clone().is_nan();
let constant1906_out1 = self.constant1906.val();
let where44_out1 = softmax19_out1
.mask_where(
isnan19_out1,
constant1906_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul112_out1 = where44_out1.matmul(squeeze57_out1);
let transpose57_out1 = matmul112_out1.permute([0, 2, 1, 3]);
let unsqueeze370_out1 = [gather120_out1 as i64];
let unsqueeze371_out1 = [gather121_out1 as i64];
let constant1909_out1: [i64; 1] = [512i64];
let concat163_out1: [i64; 3usize] = [
&unsqueeze370_out1[..],
&unsqueeze371_out1[..],
&constant1909_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape124_out1 = transpose57_out1.reshape(concat163_out1);
let linear75_out1 = self.linear75.forward(reshape124_out1);
let add125_out1 = add121_out1.add(linear75_out1);
add125_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule21 {
layernormalization39: LayerNorm,
linear76: Linear,
constant1910: burn::module::Param<Tensor<1>>,
constant1911: burn::module::Param<Tensor<1>>,
constant1912: burn::module::Param<Tensor<1>>,
linear77: Linear,
layernormalization40: LayerNorm,
linear78: Linear,
constant1980: burn::module::Param<Tensor<1>>,
constant1982: burn::module::Param<Tensor<1>>,
constant1981: burn::module::Param<Tensor<1>>,
constant1983: burn::module::Param<Tensor<1>>,
linear79: Linear,
#[module(skip)]
device: Device,
}
impl Submodule21 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization39 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear76 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant1910: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1911: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1912: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear77 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization40 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear78 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant1980: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1982: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1981: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant1983: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear79 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization39,
linear76,
constant1910,
constant1911,
constant1912,
linear77,
layernormalization40,
linear78,
constant1980,
constant1982,
constant1981,
constant1983,
linear79,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add125_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization39_out1 = {
let dtype = add125_out1.clone().dtype();
self.layernormalization39
.forward(add125_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear76_out1 = self.linear76.forward(layernormalization39_out1);
let constant1910_out1 = self.constant1910.val();
let div78_out1 = linear76_out1
.clone()
.div((constant1910_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf19_out1 = div78_out1.erf();
let constant1911_out1 = self.constant1911.val();
let add126_out1 = erf19_out1
.add((constant1911_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul160_out1 = linear76_out1.mul(add126_out1);
let constant1912_out1 = self.constant1912.val();
let mul161_out1 = mul160_out1
.mul((constant1912_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear77_out1 = self.linear77.forward(mul161_out1);
let add127_out1 = add125_out1.add(linear77_out1);
let layernormalization40_out1 = {
let dtype = add127_out1.clone().dtype();
self.layernormalization40
.forward(add127_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape153_out1: [i64; 3] = {
let axes = &layernormalization40_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather126_out1 = shape153_out1[0] as i64;
let shape154_out1: [i64; 3] = {
let axes = &layernormalization40_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather127_out1 = shape154_out1[1] as i64;
let linear78_out1 = self.linear78.forward(layernormalization40_out1);
let unsqueeze372_out1 = [gather126_out1 as i64];
let unsqueeze373_out1 = [gather127_out1 as i64];
let constant1919_out1: [i64; 1] = [64i64];
let constant1917_out1: [i64; 1] = [3i64];
let constant1918_out1: [i64; 1] = [8i64];
let concat164_out1: [i64; 5usize] = [
&unsqueeze372_out1[..],
&unsqueeze373_out1[..],
&constant1917_out1[..],
&constant1918_out1[..],
&constant1919_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape125_out1 = linear78_out1.reshape(concat164_out1);
let transpose58_out1 = reshape125_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose58_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split20_out1, split20_out2, split20_out3] = split_tensors
.try_into()
.unwrap();
let squeeze58_out1 = split20_out1.squeeze_dims::<4>(&[0]);
let squeeze59_out1 = split20_out2.squeeze_dims::<4>(&[0]);
let squeeze60_out1 = split20_out3.squeeze_dims::<4>(&[0]);
let shape155_out1: [i64; 4] = {
let axes = &squeeze58_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather128_out1 = shape155_out1[2] as i64;
let shape156_out1: [i64; 4] = {
let axes = &squeeze59_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather129_out1 = shape156_out1[2] as i64;
let sub22_out1 = gather129_out1 - gather128_out1;
let unsqueeze374_out1 = [gather129_out1 as i64];
let slice176_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze374_out1[0], ..]);
let unsqueeze375_out1 = [gather129_out1 as i64];
let constant1933_out1: [i64; 1] = [64i64];
let constant1930_out1: [i64; 1] = [1i64];
let constant1931_out1: [i64; 1] = [1i64];
let concat165_out1: [i64; 4usize] = [
&constant1930_out1[..],
&constant1931_out1[..],
&unsqueeze375_out1[..],
&constant1933_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze376_out1 = [gather129_out1 as i64];
let constant1937_out1: [i64; 1] = [64i64];
let constant1934_out1: [i64; 1] = [1i64];
let constant1935_out1: [i64; 1] = [1i64];
let concat166_out1: [i64; 4usize] = [
&constant1934_out1[..],
&constant1935_out1[..],
&unsqueeze376_out1[..],
&constant1937_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape126_out1 = slice176_out1.reshape(concat165_out1);
let unsqueeze377_out1 = [gather129_out1 as i64];
let slice177_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze377_out1[0], ..]);
let reshape127_out1 = slice177_out1.reshape(concat166_out1);
let unsqueeze378_out1 = [sub22_out1 as i64];
let unsqueeze379_out1 = [gather129_out1 as i64];
let slice178_out1 = constant461_out1
.slice(s![unsqueeze378_out1[0]..unsqueeze379_out1[0], ..]);
let unsqueeze380_out1 = [gather128_out1 as i64];
let constant1949_out1: [i64; 1] = [64i64];
let constant1946_out1: [i64; 1] = [1i64];
let constant1947_out1: [i64; 1] = [1i64];
let concat167_out1: [i64; 4usize] = [
&constant1946_out1[..],
&constant1947_out1[..],
&unsqueeze380_out1[..],
&constant1949_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze381_out1 = [gather128_out1 as i64];
let constant1953_out1: [i64; 1] = [64i64];
let constant1950_out1: [i64; 1] = [1i64];
let constant1951_out1: [i64; 1] = [1i64];
let concat168_out1: [i64; 4usize] = [
&constant1950_out1[..],
&constant1951_out1[..],
&unsqueeze381_out1[..],
&constant1953_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape128_out1 = slice178_out1.reshape(concat167_out1);
let unsqueeze382_out1 = [sub22_out1 as i64];
let unsqueeze383_out1 = [gather129_out1 as i64];
let slice179_out1 = constant474_out1
.slice(s![unsqueeze382_out1[0]..unsqueeze383_out1[0], ..]);
let reshape129_out1 = slice179_out1.reshape(concat168_out1);
let cast204_out1 = reshape128_out1;
let cast205_out1 = reshape129_out1;
let mul162_out1 = squeeze58_out1.clone().mul(cast204_out1);
let shape157_out1: [i64; 4] = {
let axes = &squeeze58_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather130_out1 = shape157_out1[3] as i64;
let constant1959_out1 = 2i64;
let div79_out1 = gather130_out1 / constant1959_out1;
let cast206_out1 = div79_out1;
let cast207_out1 = cast206_out1;
let unsqueeze384_out1 = [cast207_out1 as i64];
let slice180_out1 = squeeze58_out1
.clone()
.slice(s![.., .., .., unsqueeze384_out1[0]..9223372036854775807]);
let neg39_out1 = slice180_out1.neg();
let unsqueeze385_out1 = [cast207_out1 as i64];
let slice181_out1 = squeeze58_out1
.slice(s![.., .., .., 0..unsqueeze385_out1[0]]);
let concat169_out1 = burn::tensor::Tensor::cat(
[neg39_out1, slice181_out1].into(),
3,
);
let mul163_out1 = concat169_out1.mul(cast205_out1);
let add128_out1 = mul162_out1.add(mul163_out1);
let cast208_out1 = reshape126_out1;
let cast209_out1 = reshape127_out1;
let mul164_out1 = squeeze59_out1.clone().mul(cast208_out1);
let shape158_out1: [i64; 4] = {
let axes = &squeeze59_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather131_out1 = shape158_out1[3] as i64;
let constant1969_out1 = 2i64;
let div80_out1 = gather131_out1 / constant1969_out1;
let cast210_out1 = div80_out1;
let cast211_out1 = cast210_out1;
let unsqueeze386_out1 = [cast211_out1 as i64];
let slice182_out1 = squeeze59_out1
.clone()
.slice(s![.., .., .., unsqueeze386_out1[0]..9223372036854775807]);
let neg40_out1 = slice182_out1.neg();
let unsqueeze387_out1 = [cast211_out1 as i64];
let slice183_out1 = squeeze59_out1
.slice(s![.., .., .., 0..unsqueeze387_out1[0]]);
let concat170_out1 = burn::tensor::Tensor::cat(
[neg40_out1, slice183_out1].into(),
3,
);
let mul165_out1 = concat170_out1.mul(cast209_out1);
let add129_out1 = mul164_out1.add(mul165_out1);
let shape159_out1: [i64; 4] = {
let axes = &add128_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice184_out1: [i64; 1] = shape159_out1[3..4].try_into().unwrap();
let cast212_out1 = {
let shape_array = slice184_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt58_out1 = cast212_out1.sqrt();
let constant1980_out1 = self.constant1980.val();
let div81_out1 = constant1980_out1.div(sqrt58_out1);
let cast213_out1 = div81_out1;
let transpose59_out1 = add129_out1.permute([0, 1, 3, 2]);
let sqrt59_out1 = cast213_out1.clone().sqrt();
let mul166_out1 = add128_out1
.mul((sqrt59_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt60_out1 = cast213_out1.sqrt();
let mul167_out1 = transpose59_out1
.mul((sqrt60_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul117_out1 = mul166_out1.matmul(mul167_out1);
let constant1982_out1 = self.constant1982.val();
let constant1981_out1 = self.constant1981.val();
let where45_out1 = constant1982_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant1981_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add130_out1 = matmul117_out1.add(where45_out1);
let softmax20_out1 = burn::tensor::activation::softmax(add130_out1, 3);
let isnan20_out1 = softmax20_out1.clone().is_nan();
let constant1983_out1 = self.constant1983.val();
let where46_out1 = softmax20_out1
.mask_where(
isnan20_out1,
constant1983_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul118_out1 = where46_out1.matmul(squeeze60_out1);
let transpose60_out1 = matmul118_out1.permute([0, 2, 1, 3]);
let unsqueeze388_out1 = [gather126_out1 as i64];
let unsqueeze389_out1 = [gather127_out1 as i64];
let constant1986_out1: [i64; 1] = [512i64];
let concat171_out1: [i64; 3usize] = [
&unsqueeze388_out1[..],
&unsqueeze389_out1[..],
&constant1986_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape130_out1 = transpose60_out1.reshape(concat171_out1);
let linear79_out1 = self.linear79.forward(reshape130_out1);
let add131_out1 = add127_out1.add(linear79_out1);
add131_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule22 {
layernormalization41: LayerNorm,
linear80: Linear,
constant1987: burn::module::Param<Tensor<1>>,
constant1988: burn::module::Param<Tensor<1>>,
constant1989: burn::module::Param<Tensor<1>>,
linear81: Linear,
layernormalization42: LayerNorm,
linear82: Linear,
constant2057: burn::module::Param<Tensor<1>>,
constant2059: burn::module::Param<Tensor<1>>,
constant2058: burn::module::Param<Tensor<1>>,
constant2060: burn::module::Param<Tensor<1>>,
linear83: Linear,
#[module(skip)]
device: Device,
}
impl Submodule22 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization41 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear80 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant1987: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1988: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant1989: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear81 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization42 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear82 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant2057: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2059: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2058: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2060: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear83 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization41,
linear80,
constant1987,
constant1988,
constant1989,
linear81,
layernormalization42,
linear82,
constant2057,
constant2059,
constant2058,
constant2060,
linear83,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add131_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization41_out1 = {
let dtype = add131_out1.clone().dtype();
self.layernormalization41
.forward(add131_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear80_out1 = self.linear80.forward(layernormalization41_out1);
let constant1987_out1 = self.constant1987.val();
let div82_out1 = linear80_out1
.clone()
.div((constant1987_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf20_out1 = div82_out1.erf();
let constant1988_out1 = self.constant1988.val();
let add132_out1 = erf20_out1
.add((constant1988_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul168_out1 = linear80_out1.mul(add132_out1);
let constant1989_out1 = self.constant1989.val();
let mul169_out1 = mul168_out1
.mul((constant1989_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear81_out1 = self.linear81.forward(mul169_out1);
let add133_out1 = add131_out1.add(linear81_out1);
let layernormalization42_out1 = {
let dtype = add133_out1.clone().dtype();
self.layernormalization42
.forward(add133_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape160_out1: [i64; 3] = {
let axes = &layernormalization42_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather132_out1 = shape160_out1[0] as i64;
let shape161_out1: [i64; 3] = {
let axes = &layernormalization42_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather133_out1 = shape161_out1[1] as i64;
let linear82_out1 = self.linear82.forward(layernormalization42_out1);
let unsqueeze390_out1 = [gather132_out1 as i64];
let unsqueeze391_out1 = [gather133_out1 as i64];
let constant1996_out1: [i64; 1] = [64i64];
let constant1994_out1: [i64; 1] = [3i64];
let constant1995_out1: [i64; 1] = [8i64];
let concat172_out1: [i64; 5usize] = [
&unsqueeze390_out1[..],
&unsqueeze391_out1[..],
&constant1994_out1[..],
&constant1995_out1[..],
&constant1996_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape131_out1 = linear82_out1.reshape(concat172_out1);
let transpose61_out1 = reshape131_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose61_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split21_out1, split21_out2, split21_out3] = split_tensors
.try_into()
.unwrap();
let squeeze61_out1 = split21_out1.squeeze_dims::<4>(&[0]);
let squeeze62_out1 = split21_out2.squeeze_dims::<4>(&[0]);
let squeeze63_out1 = split21_out3.squeeze_dims::<4>(&[0]);
let shape162_out1: [i64; 4] = {
let axes = &squeeze61_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather134_out1 = shape162_out1[2] as i64;
let shape163_out1: [i64; 4] = {
let axes = &squeeze62_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather135_out1 = shape163_out1[2] as i64;
let sub23_out1 = gather135_out1 - gather134_out1;
let unsqueeze392_out1 = [gather135_out1 as i64];
let slice185_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze392_out1[0], ..]);
let unsqueeze393_out1 = [gather135_out1 as i64];
let constant2010_out1: [i64; 1] = [64i64];
let constant2007_out1: [i64; 1] = [1i64];
let constant2008_out1: [i64; 1] = [1i64];
let concat173_out1: [i64; 4usize] = [
&constant2007_out1[..],
&constant2008_out1[..],
&unsqueeze393_out1[..],
&constant2010_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze394_out1 = [gather135_out1 as i64];
let constant2014_out1: [i64; 1] = [64i64];
let constant2011_out1: [i64; 1] = [1i64];
let constant2012_out1: [i64; 1] = [1i64];
let concat174_out1: [i64; 4usize] = [
&constant2011_out1[..],
&constant2012_out1[..],
&unsqueeze394_out1[..],
&constant2014_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape132_out1 = slice185_out1.reshape(concat173_out1);
let unsqueeze395_out1 = [gather135_out1 as i64];
let slice186_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze395_out1[0], ..]);
let reshape133_out1 = slice186_out1.reshape(concat174_out1);
let unsqueeze396_out1 = [sub23_out1 as i64];
let unsqueeze397_out1 = [gather135_out1 as i64];
let slice187_out1 = constant461_out1
.slice(s![unsqueeze396_out1[0]..unsqueeze397_out1[0], ..]);
let unsqueeze398_out1 = [gather134_out1 as i64];
let constant2026_out1: [i64; 1] = [64i64];
let constant2023_out1: [i64; 1] = [1i64];
let constant2024_out1: [i64; 1] = [1i64];
let concat175_out1: [i64; 4usize] = [
&constant2023_out1[..],
&constant2024_out1[..],
&unsqueeze398_out1[..],
&constant2026_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze399_out1 = [gather134_out1 as i64];
let constant2030_out1: [i64; 1] = [64i64];
let constant2027_out1: [i64; 1] = [1i64];
let constant2028_out1: [i64; 1] = [1i64];
let concat176_out1: [i64; 4usize] = [
&constant2027_out1[..],
&constant2028_out1[..],
&unsqueeze399_out1[..],
&constant2030_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape134_out1 = slice187_out1.reshape(concat175_out1);
let unsqueeze400_out1 = [sub23_out1 as i64];
let unsqueeze401_out1 = [gather135_out1 as i64];
let slice188_out1 = constant474_out1
.slice(s![unsqueeze400_out1[0]..unsqueeze401_out1[0], ..]);
let reshape135_out1 = slice188_out1.reshape(concat176_out1);
let cast214_out1 = reshape134_out1;
let cast215_out1 = reshape135_out1;
let mul170_out1 = squeeze61_out1.clone().mul(cast214_out1);
let shape164_out1: [i64; 4] = {
let axes = &squeeze61_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather136_out1 = shape164_out1[3] as i64;
let constant2036_out1 = 2i64;
let div83_out1 = gather136_out1 / constant2036_out1;
let cast216_out1 = div83_out1;
let cast217_out1 = cast216_out1;
let unsqueeze402_out1 = [cast217_out1 as i64];
let slice189_out1 = squeeze61_out1
.clone()
.slice(s![.., .., .., unsqueeze402_out1[0]..9223372036854775807]);
let neg41_out1 = slice189_out1.neg();
let unsqueeze403_out1 = [cast217_out1 as i64];
let slice190_out1 = squeeze61_out1
.slice(s![.., .., .., 0..unsqueeze403_out1[0]]);
let concat177_out1 = burn::tensor::Tensor::cat(
[neg41_out1, slice190_out1].into(),
3,
);
let mul171_out1 = concat177_out1.mul(cast215_out1);
let add134_out1 = mul170_out1.add(mul171_out1);
let cast218_out1 = reshape132_out1;
let cast219_out1 = reshape133_out1;
let mul172_out1 = squeeze62_out1.clone().mul(cast218_out1);
let shape165_out1: [i64; 4] = {
let axes = &squeeze62_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather137_out1 = shape165_out1[3] as i64;
let constant2046_out1 = 2i64;
let div84_out1 = gather137_out1 / constant2046_out1;
let cast220_out1 = div84_out1;
let cast221_out1 = cast220_out1;
let unsqueeze404_out1 = [cast221_out1 as i64];
let slice191_out1 = squeeze62_out1
.clone()
.slice(s![.., .., .., unsqueeze404_out1[0]..9223372036854775807]);
let neg42_out1 = slice191_out1.neg();
let unsqueeze405_out1 = [cast221_out1 as i64];
let slice192_out1 = squeeze62_out1
.slice(s![.., .., .., 0..unsqueeze405_out1[0]]);
let concat178_out1 = burn::tensor::Tensor::cat(
[neg42_out1, slice192_out1].into(),
3,
);
let mul173_out1 = concat178_out1.mul(cast219_out1);
let add135_out1 = mul172_out1.add(mul173_out1);
let shape166_out1: [i64; 4] = {
let axes = &add134_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice193_out1: [i64; 1] = shape166_out1[3..4].try_into().unwrap();
let cast222_out1 = {
let shape_array = slice193_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt61_out1 = cast222_out1.sqrt();
let constant2057_out1 = self.constant2057.val();
let div85_out1 = constant2057_out1.div(sqrt61_out1);
let cast223_out1 = div85_out1;
let transpose62_out1 = add135_out1.permute([0, 1, 3, 2]);
let sqrt62_out1 = cast223_out1.clone().sqrt();
let mul174_out1 = add134_out1
.mul((sqrt62_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt63_out1 = cast223_out1.sqrt();
let mul175_out1 = transpose62_out1
.mul((sqrt63_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul123_out1 = mul174_out1.matmul(mul175_out1);
let constant2059_out1 = self.constant2059.val();
let constant2058_out1 = self.constant2058.val();
let where47_out1 = constant2059_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant2058_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add136_out1 = matmul123_out1.add(where47_out1);
let softmax21_out1 = burn::tensor::activation::softmax(add136_out1, 3);
let isnan21_out1 = softmax21_out1.clone().is_nan();
let constant2060_out1 = self.constant2060.val();
let where48_out1 = softmax21_out1
.mask_where(
isnan21_out1,
constant2060_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul124_out1 = where48_out1.matmul(squeeze63_out1);
let transpose63_out1 = matmul124_out1.permute([0, 2, 1, 3]);
let unsqueeze406_out1 = [gather132_out1 as i64];
let unsqueeze407_out1 = [gather133_out1 as i64];
let constant2063_out1: [i64; 1] = [512i64];
let concat179_out1: [i64; 3usize] = [
&unsqueeze406_out1[..],
&unsqueeze407_out1[..],
&constant2063_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape136_out1 = transpose63_out1.reshape(concat179_out1);
let linear83_out1 = self.linear83.forward(reshape136_out1);
let add137_out1 = add133_out1.add(linear83_out1);
add137_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule23 {
layernormalization43: LayerNorm,
linear84: Linear,
constant2064: burn::module::Param<Tensor<1>>,
constant2065: burn::module::Param<Tensor<1>>,
constant2066: burn::module::Param<Tensor<1>>,
linear85: Linear,
layernormalization44: LayerNorm,
linear86: Linear,
constant2134: burn::module::Param<Tensor<1>>,
constant2136: burn::module::Param<Tensor<1>>,
constant2135: burn::module::Param<Tensor<1>>,
constant2137: burn::module::Param<Tensor<1>>,
linear87: Linear,
#[module(skip)]
device: Device,
}
impl Submodule23 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization43 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear84 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant2064: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2065: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2066: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear85 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization44 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear86 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant2134: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2136: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2135: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2137: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear87 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization43,
linear84,
constant2064,
constant2065,
constant2066,
linear85,
layernormalization44,
linear86,
constant2134,
constant2136,
constant2135,
constant2137,
linear87,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add137_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization43_out1 = {
let dtype = add137_out1.clone().dtype();
self.layernormalization43
.forward(add137_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear84_out1 = self.linear84.forward(layernormalization43_out1);
let constant2064_out1 = self.constant2064.val();
let div86_out1 = linear84_out1
.clone()
.div((constant2064_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf21_out1 = div86_out1.erf();
let constant2065_out1 = self.constant2065.val();
let add138_out1 = erf21_out1
.add((constant2065_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul176_out1 = linear84_out1.mul(add138_out1);
let constant2066_out1 = self.constant2066.val();
let mul177_out1 = mul176_out1
.mul((constant2066_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear85_out1 = self.linear85.forward(mul177_out1);
let add139_out1 = add137_out1.add(linear85_out1);
let layernormalization44_out1 = {
let dtype = add139_out1.clone().dtype();
self.layernormalization44
.forward(add139_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape167_out1: [i64; 3] = {
let axes = &layernormalization44_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather138_out1 = shape167_out1[0] as i64;
let shape168_out1: [i64; 3] = {
let axes = &layernormalization44_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather139_out1 = shape168_out1[1] as i64;
let linear86_out1 = self.linear86.forward(layernormalization44_out1);
let unsqueeze408_out1 = [gather138_out1 as i64];
let unsqueeze409_out1 = [gather139_out1 as i64];
let constant2073_out1: [i64; 1] = [64i64];
let constant2071_out1: [i64; 1] = [3i64];
let constant2072_out1: [i64; 1] = [8i64];
let concat180_out1: [i64; 5usize] = [
&unsqueeze408_out1[..],
&unsqueeze409_out1[..],
&constant2071_out1[..],
&constant2072_out1[..],
&constant2073_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape137_out1 = linear86_out1.reshape(concat180_out1);
let transpose64_out1 = reshape137_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose64_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split22_out1, split22_out2, split22_out3] = split_tensors
.try_into()
.unwrap();
let squeeze64_out1 = split22_out1.squeeze_dims::<4>(&[0]);
let squeeze65_out1 = split22_out2.squeeze_dims::<4>(&[0]);
let squeeze66_out1 = split22_out3.squeeze_dims::<4>(&[0]);
let shape169_out1: [i64; 4] = {
let axes = &squeeze64_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather140_out1 = shape169_out1[2] as i64;
let shape170_out1: [i64; 4] = {
let axes = &squeeze65_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather141_out1 = shape170_out1[2] as i64;
let sub24_out1 = gather141_out1 - gather140_out1;
let unsqueeze410_out1 = [gather141_out1 as i64];
let slice194_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze410_out1[0], ..]);
let unsqueeze411_out1 = [gather141_out1 as i64];
let constant2087_out1: [i64; 1] = [64i64];
let constant2084_out1: [i64; 1] = [1i64];
let constant2085_out1: [i64; 1] = [1i64];
let concat181_out1: [i64; 4usize] = [
&constant2084_out1[..],
&constant2085_out1[..],
&unsqueeze411_out1[..],
&constant2087_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze412_out1 = [gather141_out1 as i64];
let constant2091_out1: [i64; 1] = [64i64];
let constant2088_out1: [i64; 1] = [1i64];
let constant2089_out1: [i64; 1] = [1i64];
let concat182_out1: [i64; 4usize] = [
&constant2088_out1[..],
&constant2089_out1[..],
&unsqueeze412_out1[..],
&constant2091_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape138_out1 = slice194_out1.reshape(concat181_out1);
let unsqueeze413_out1 = [gather141_out1 as i64];
let slice195_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze413_out1[0], ..]);
let reshape139_out1 = slice195_out1.reshape(concat182_out1);
let unsqueeze414_out1 = [sub24_out1 as i64];
let unsqueeze415_out1 = [gather141_out1 as i64];
let slice196_out1 = constant461_out1
.slice(s![unsqueeze414_out1[0]..unsqueeze415_out1[0], ..]);
let unsqueeze416_out1 = [gather140_out1 as i64];
let constant2103_out1: [i64; 1] = [64i64];
let constant2100_out1: [i64; 1] = [1i64];
let constant2101_out1: [i64; 1] = [1i64];
let concat183_out1: [i64; 4usize] = [
&constant2100_out1[..],
&constant2101_out1[..],
&unsqueeze416_out1[..],
&constant2103_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze417_out1 = [gather140_out1 as i64];
let constant2107_out1: [i64; 1] = [64i64];
let constant2104_out1: [i64; 1] = [1i64];
let constant2105_out1: [i64; 1] = [1i64];
let concat184_out1: [i64; 4usize] = [
&constant2104_out1[..],
&constant2105_out1[..],
&unsqueeze417_out1[..],
&constant2107_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape140_out1 = slice196_out1.reshape(concat183_out1);
let unsqueeze418_out1 = [sub24_out1 as i64];
let unsqueeze419_out1 = [gather141_out1 as i64];
let slice197_out1 = constant474_out1
.slice(s![unsqueeze418_out1[0]..unsqueeze419_out1[0], ..]);
let reshape141_out1 = slice197_out1.reshape(concat184_out1);
let cast224_out1 = reshape140_out1;
let cast225_out1 = reshape141_out1;
let mul178_out1 = squeeze64_out1.clone().mul(cast224_out1);
let shape171_out1: [i64; 4] = {
let axes = &squeeze64_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather142_out1 = shape171_out1[3] as i64;
let constant2113_out1 = 2i64;
let div87_out1 = gather142_out1 / constant2113_out1;
let cast226_out1 = div87_out1;
let cast227_out1 = cast226_out1;
let unsqueeze420_out1 = [cast227_out1 as i64];
let slice198_out1 = squeeze64_out1
.clone()
.slice(s![.., .., .., unsqueeze420_out1[0]..9223372036854775807]);
let neg43_out1 = slice198_out1.neg();
let unsqueeze421_out1 = [cast227_out1 as i64];
let slice199_out1 = squeeze64_out1
.slice(s![.., .., .., 0..unsqueeze421_out1[0]]);
let concat185_out1 = burn::tensor::Tensor::cat(
[neg43_out1, slice199_out1].into(),
3,
);
let mul179_out1 = concat185_out1.mul(cast225_out1);
let add140_out1 = mul178_out1.add(mul179_out1);
let cast228_out1 = reshape138_out1;
let cast229_out1 = reshape139_out1;
let mul180_out1 = squeeze65_out1.clone().mul(cast228_out1);
let shape172_out1: [i64; 4] = {
let axes = &squeeze65_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather143_out1 = shape172_out1[3] as i64;
let constant2123_out1 = 2i64;
let div88_out1 = gather143_out1 / constant2123_out1;
let cast230_out1 = div88_out1;
let cast231_out1 = cast230_out1;
let unsqueeze422_out1 = [cast231_out1 as i64];
let slice200_out1 = squeeze65_out1
.clone()
.slice(s![.., .., .., unsqueeze422_out1[0]..9223372036854775807]);
let neg44_out1 = slice200_out1.neg();
let unsqueeze423_out1 = [cast231_out1 as i64];
let slice201_out1 = squeeze65_out1
.slice(s![.., .., .., 0..unsqueeze423_out1[0]]);
let concat186_out1 = burn::tensor::Tensor::cat(
[neg44_out1, slice201_out1].into(),
3,
);
let mul181_out1 = concat186_out1.mul(cast229_out1);
let add141_out1 = mul180_out1.add(mul181_out1);
let shape173_out1: [i64; 4] = {
let axes = &add140_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice202_out1: [i64; 1] = shape173_out1[3..4].try_into().unwrap();
let cast232_out1 = {
let shape_array = slice202_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt64_out1 = cast232_out1.sqrt();
let constant2134_out1 = self.constant2134.val();
let div89_out1 = constant2134_out1.div(sqrt64_out1);
let cast233_out1 = div89_out1;
let transpose65_out1 = add141_out1.permute([0, 1, 3, 2]);
let sqrt65_out1 = cast233_out1.clone().sqrt();
let mul182_out1 = add140_out1
.mul((sqrt65_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt66_out1 = cast233_out1.sqrt();
let mul183_out1 = transpose65_out1
.mul((sqrt66_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul129_out1 = mul182_out1.matmul(mul183_out1);
let constant2136_out1 = self.constant2136.val();
let constant2135_out1 = self.constant2135.val();
let where49_out1 = constant2136_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant2135_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add142_out1 = matmul129_out1.add(where49_out1);
let softmax22_out1 = burn::tensor::activation::softmax(add142_out1, 3);
let isnan22_out1 = softmax22_out1.clone().is_nan();
let constant2137_out1 = self.constant2137.val();
let where50_out1 = softmax22_out1
.mask_where(
isnan22_out1,
constant2137_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul130_out1 = where50_out1.matmul(squeeze66_out1);
let transpose66_out1 = matmul130_out1.permute([0, 2, 1, 3]);
let unsqueeze424_out1 = [gather138_out1 as i64];
let unsqueeze425_out1 = [gather139_out1 as i64];
let constant2140_out1: [i64; 1] = [512i64];
let concat187_out1: [i64; 3usize] = [
&unsqueeze424_out1[..],
&unsqueeze425_out1[..],
&constant2140_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape142_out1 = transpose66_out1.reshape(concat187_out1);
let linear87_out1 = self.linear87.forward(reshape142_out1);
let add143_out1 = add139_out1.add(linear87_out1);
add143_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule24 {
layernormalization45: LayerNorm,
linear88: Linear,
constant2141: burn::module::Param<Tensor<1>>,
constant2142: burn::module::Param<Tensor<1>>,
constant2143: burn::module::Param<Tensor<1>>,
linear89: Linear,
layernormalization46: LayerNorm,
linear90: Linear,
constant2211: burn::module::Param<Tensor<1>>,
constant2213: burn::module::Param<Tensor<1>>,
constant2212: burn::module::Param<Tensor<1>>,
constant2214: burn::module::Param<Tensor<1>>,
linear91: Linear,
#[module(skip)]
device: Device,
}
impl Submodule24 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization45 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear88 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant2141: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2142: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2143: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear89 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization46 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear90 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant2211: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2213: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2212: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2214: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear91 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization45,
linear88,
constant2141,
constant2142,
constant2143,
linear89,
layernormalization46,
linear90,
constant2211,
constant2213,
constant2212,
constant2214,
linear91,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add143_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization45_out1 = {
let dtype = add143_out1.clone().dtype();
self.layernormalization45
.forward(add143_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear88_out1 = self.linear88.forward(layernormalization45_out1);
let constant2141_out1 = self.constant2141.val();
let div90_out1 = linear88_out1
.clone()
.div((constant2141_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf22_out1 = div90_out1.erf();
let constant2142_out1 = self.constant2142.val();
let add144_out1 = erf22_out1
.add((constant2142_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul184_out1 = linear88_out1.mul(add144_out1);
let constant2143_out1 = self.constant2143.val();
let mul185_out1 = mul184_out1
.mul((constant2143_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear89_out1 = self.linear89.forward(mul185_out1);
let add145_out1 = add143_out1.add(linear89_out1);
let layernormalization46_out1 = {
let dtype = add145_out1.clone().dtype();
self.layernormalization46
.forward(add145_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape174_out1: [i64; 3] = {
let axes = &layernormalization46_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather144_out1 = shape174_out1[0] as i64;
let shape175_out1: [i64; 3] = {
let axes = &layernormalization46_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather145_out1 = shape175_out1[1] as i64;
let linear90_out1 = self.linear90.forward(layernormalization46_out1);
let unsqueeze426_out1 = [gather144_out1 as i64];
let unsqueeze427_out1 = [gather145_out1 as i64];
let constant2150_out1: [i64; 1] = [64i64];
let constant2148_out1: [i64; 1] = [3i64];
let constant2149_out1: [i64; 1] = [8i64];
let concat188_out1: [i64; 5usize] = [
&unsqueeze426_out1[..],
&unsqueeze427_out1[..],
&constant2148_out1[..],
&constant2149_out1[..],
&constant2150_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape143_out1 = linear90_out1.reshape(concat188_out1);
let transpose67_out1 = reshape143_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose67_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split23_out1, split23_out2, split23_out3] = split_tensors
.try_into()
.unwrap();
let squeeze67_out1 = split23_out1.squeeze_dims::<4>(&[0]);
let squeeze68_out1 = split23_out2.squeeze_dims::<4>(&[0]);
let squeeze69_out1 = split23_out3.squeeze_dims::<4>(&[0]);
let shape176_out1: [i64; 4] = {
let axes = &squeeze67_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather146_out1 = shape176_out1[2] as i64;
let shape177_out1: [i64; 4] = {
let axes = &squeeze68_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather147_out1 = shape177_out1[2] as i64;
let sub25_out1 = gather147_out1 - gather146_out1;
let unsqueeze428_out1 = [gather147_out1 as i64];
let slice203_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze428_out1[0], ..]);
let unsqueeze429_out1 = [gather147_out1 as i64];
let constant2164_out1: [i64; 1] = [64i64];
let constant2161_out1: [i64; 1] = [1i64];
let constant2162_out1: [i64; 1] = [1i64];
let concat189_out1: [i64; 4usize] = [
&constant2161_out1[..],
&constant2162_out1[..],
&unsqueeze429_out1[..],
&constant2164_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze430_out1 = [gather147_out1 as i64];
let constant2168_out1: [i64; 1] = [64i64];
let constant2165_out1: [i64; 1] = [1i64];
let constant2166_out1: [i64; 1] = [1i64];
let concat190_out1: [i64; 4usize] = [
&constant2165_out1[..],
&constant2166_out1[..],
&unsqueeze430_out1[..],
&constant2168_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape144_out1 = slice203_out1.reshape(concat189_out1);
let unsqueeze431_out1 = [gather147_out1 as i64];
let slice204_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze431_out1[0], ..]);
let reshape145_out1 = slice204_out1.reshape(concat190_out1);
let unsqueeze432_out1 = [sub25_out1 as i64];
let unsqueeze433_out1 = [gather147_out1 as i64];
let slice205_out1 = constant461_out1
.slice(s![unsqueeze432_out1[0]..unsqueeze433_out1[0], ..]);
let unsqueeze434_out1 = [gather146_out1 as i64];
let constant2180_out1: [i64; 1] = [64i64];
let constant2177_out1: [i64; 1] = [1i64];
let constant2178_out1: [i64; 1] = [1i64];
let concat191_out1: [i64; 4usize] = [
&constant2177_out1[..],
&constant2178_out1[..],
&unsqueeze434_out1[..],
&constant2180_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze435_out1 = [gather146_out1 as i64];
let constant2184_out1: [i64; 1] = [64i64];
let constant2181_out1: [i64; 1] = [1i64];
let constant2182_out1: [i64; 1] = [1i64];
let concat192_out1: [i64; 4usize] = [
&constant2181_out1[..],
&constant2182_out1[..],
&unsqueeze435_out1[..],
&constant2184_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape146_out1 = slice205_out1.reshape(concat191_out1);
let unsqueeze436_out1 = [sub25_out1 as i64];
let unsqueeze437_out1 = [gather147_out1 as i64];
let slice206_out1 = constant474_out1
.slice(s![unsqueeze436_out1[0]..unsqueeze437_out1[0], ..]);
let reshape147_out1 = slice206_out1.reshape(concat192_out1);
let cast234_out1 = reshape146_out1;
let cast235_out1 = reshape147_out1;
let mul186_out1 = squeeze67_out1.clone().mul(cast234_out1);
let shape178_out1: [i64; 4] = {
let axes = &squeeze67_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather148_out1 = shape178_out1[3] as i64;
let constant2190_out1 = 2i64;
let div91_out1 = gather148_out1 / constant2190_out1;
let cast236_out1 = div91_out1;
let cast237_out1 = cast236_out1;
let unsqueeze438_out1 = [cast237_out1 as i64];
let slice207_out1 = squeeze67_out1
.clone()
.slice(s![.., .., .., unsqueeze438_out1[0]..9223372036854775807]);
let neg45_out1 = slice207_out1.neg();
let unsqueeze439_out1 = [cast237_out1 as i64];
let slice208_out1 = squeeze67_out1
.slice(s![.., .., .., 0..unsqueeze439_out1[0]]);
let concat193_out1 = burn::tensor::Tensor::cat(
[neg45_out1, slice208_out1].into(),
3,
);
let mul187_out1 = concat193_out1.mul(cast235_out1);
let add146_out1 = mul186_out1.add(mul187_out1);
let cast238_out1 = reshape144_out1;
let cast239_out1 = reshape145_out1;
let mul188_out1 = squeeze68_out1.clone().mul(cast238_out1);
let shape179_out1: [i64; 4] = {
let axes = &squeeze68_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather149_out1 = shape179_out1[3] as i64;
let constant2200_out1 = 2i64;
let div92_out1 = gather149_out1 / constant2200_out1;
let cast240_out1 = div92_out1;
let cast241_out1 = cast240_out1;
let unsqueeze440_out1 = [cast241_out1 as i64];
let slice209_out1 = squeeze68_out1
.clone()
.slice(s![.., .., .., unsqueeze440_out1[0]..9223372036854775807]);
let neg46_out1 = slice209_out1.neg();
let unsqueeze441_out1 = [cast241_out1 as i64];
let slice210_out1 = squeeze68_out1
.slice(s![.., .., .., 0..unsqueeze441_out1[0]]);
let concat194_out1 = burn::tensor::Tensor::cat(
[neg46_out1, slice210_out1].into(),
3,
);
let mul189_out1 = concat194_out1.mul(cast239_out1);
let add147_out1 = mul188_out1.add(mul189_out1);
let shape180_out1: [i64; 4] = {
let axes = &add146_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice211_out1: [i64; 1] = shape180_out1[3..4].try_into().unwrap();
let cast242_out1 = {
let shape_array = slice211_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt67_out1 = cast242_out1.sqrt();
let constant2211_out1 = self.constant2211.val();
let div93_out1 = constant2211_out1.div(sqrt67_out1);
let cast243_out1 = div93_out1;
let transpose68_out1 = add147_out1.permute([0, 1, 3, 2]);
let sqrt68_out1 = cast243_out1.clone().sqrt();
let mul190_out1 = add146_out1
.mul((sqrt68_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt69_out1 = cast243_out1.sqrt();
let mul191_out1 = transpose68_out1
.mul((sqrt69_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul135_out1 = mul190_out1.matmul(mul191_out1);
let constant2213_out1 = self.constant2213.val();
let constant2212_out1 = self.constant2212.val();
let where51_out1 = constant2213_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant2212_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add148_out1 = matmul135_out1.add(where51_out1);
let softmax23_out1 = burn::tensor::activation::softmax(add148_out1, 3);
let isnan23_out1 = softmax23_out1.clone().is_nan();
let constant2214_out1 = self.constant2214.val();
let where52_out1 = softmax23_out1
.mask_where(
isnan23_out1,
constant2214_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul136_out1 = where52_out1.matmul(squeeze69_out1);
let transpose69_out1 = matmul136_out1.permute([0, 2, 1, 3]);
let unsqueeze442_out1 = [gather144_out1 as i64];
let unsqueeze443_out1 = [gather145_out1 as i64];
let constant2217_out1: [i64; 1] = [512i64];
let concat195_out1: [i64; 3usize] = [
&unsqueeze442_out1[..],
&unsqueeze443_out1[..],
&constant2217_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape148_out1 = transpose69_out1.reshape(concat195_out1);
let linear91_out1 = self.linear91.forward(reshape148_out1);
let add149_out1 = add145_out1.add(linear91_out1);
add149_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule25 {
layernormalization47: LayerNorm,
linear92: Linear,
constant2218: burn::module::Param<Tensor<1>>,
constant2219: burn::module::Param<Tensor<1>>,
constant2220: burn::module::Param<Tensor<1>>,
linear93: Linear,
layernormalization48: LayerNorm,
linear94: Linear,
constant2288: burn::module::Param<Tensor<1>>,
constant2290: burn::module::Param<Tensor<1>>,
constant2289: burn::module::Param<Tensor<1>>,
constant2291: burn::module::Param<Tensor<1>>,
linear95: Linear,
#[module(skip)]
device: Device,
}
impl Submodule25 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization47 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear92 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant2218: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2219: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2220: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear93 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization48 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear94 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant2288: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2290: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2289: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2291: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear95 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization47,
linear92,
constant2218,
constant2219,
constant2220,
linear93,
layernormalization48,
linear94,
constant2288,
constant2290,
constant2289,
constant2291,
linear95,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add149_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization47_out1 = {
let dtype = add149_out1.clone().dtype();
self.layernormalization47
.forward(add149_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear92_out1 = self.linear92.forward(layernormalization47_out1);
let constant2218_out1 = self.constant2218.val();
let div94_out1 = linear92_out1
.clone()
.div((constant2218_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf23_out1 = div94_out1.erf();
let constant2219_out1 = self.constant2219.val();
let add150_out1 = erf23_out1
.add((constant2219_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul192_out1 = linear92_out1.mul(add150_out1);
let constant2220_out1 = self.constant2220.val();
let mul193_out1 = mul192_out1
.mul((constant2220_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear93_out1 = self.linear93.forward(mul193_out1);
let add151_out1 = add149_out1.add(linear93_out1);
let layernormalization48_out1 = {
let dtype = add151_out1.clone().dtype();
self.layernormalization48
.forward(add151_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape181_out1: [i64; 3] = {
let axes = &layernormalization48_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather150_out1 = shape181_out1[0] as i64;
let shape182_out1: [i64; 3] = {
let axes = &layernormalization48_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather151_out1 = shape182_out1[1] as i64;
let linear94_out1 = self.linear94.forward(layernormalization48_out1);
let unsqueeze444_out1 = [gather150_out1 as i64];
let unsqueeze445_out1 = [gather151_out1 as i64];
let constant2227_out1: [i64; 1] = [64i64];
let constant2225_out1: [i64; 1] = [3i64];
let constant2226_out1: [i64; 1] = [8i64];
let concat196_out1: [i64; 5usize] = [
&unsqueeze444_out1[..],
&unsqueeze445_out1[..],
&constant2225_out1[..],
&constant2226_out1[..],
&constant2227_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape149_out1 = linear94_out1.reshape(concat196_out1);
let transpose70_out1 = reshape149_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose70_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split24_out1, split24_out2, split24_out3] = split_tensors
.try_into()
.unwrap();
let squeeze70_out1 = split24_out1.squeeze_dims::<4>(&[0]);
let squeeze71_out1 = split24_out2.squeeze_dims::<4>(&[0]);
let squeeze72_out1 = split24_out3.squeeze_dims::<4>(&[0]);
let shape183_out1: [i64; 4] = {
let axes = &squeeze70_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather152_out1 = shape183_out1[2] as i64;
let shape184_out1: [i64; 4] = {
let axes = &squeeze71_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather153_out1 = shape184_out1[2] as i64;
let sub26_out1 = gather153_out1 - gather152_out1;
let unsqueeze446_out1 = [gather153_out1 as i64];
let slice212_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze446_out1[0], ..]);
let unsqueeze447_out1 = [gather153_out1 as i64];
let constant2241_out1: [i64; 1] = [64i64];
let constant2238_out1: [i64; 1] = [1i64];
let constant2239_out1: [i64; 1] = [1i64];
let concat197_out1: [i64; 4usize] = [
&constant2238_out1[..],
&constant2239_out1[..],
&unsqueeze447_out1[..],
&constant2241_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze448_out1 = [gather153_out1 as i64];
let constant2245_out1: [i64; 1] = [64i64];
let constant2242_out1: [i64; 1] = [1i64];
let constant2243_out1: [i64; 1] = [1i64];
let concat198_out1: [i64; 4usize] = [
&constant2242_out1[..],
&constant2243_out1[..],
&unsqueeze448_out1[..],
&constant2245_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape150_out1 = slice212_out1.reshape(concat197_out1);
let unsqueeze449_out1 = [gather153_out1 as i64];
let slice213_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze449_out1[0], ..]);
let reshape151_out1 = slice213_out1.reshape(concat198_out1);
let unsqueeze450_out1 = [sub26_out1 as i64];
let unsqueeze451_out1 = [gather153_out1 as i64];
let slice214_out1 = constant461_out1
.slice(s![unsqueeze450_out1[0]..unsqueeze451_out1[0], ..]);
let unsqueeze452_out1 = [gather152_out1 as i64];
let constant2257_out1: [i64; 1] = [64i64];
let constant2254_out1: [i64; 1] = [1i64];
let constant2255_out1: [i64; 1] = [1i64];
let concat199_out1: [i64; 4usize] = [
&constant2254_out1[..],
&constant2255_out1[..],
&unsqueeze452_out1[..],
&constant2257_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze453_out1 = [gather152_out1 as i64];
let constant2261_out1: [i64; 1] = [64i64];
let constant2258_out1: [i64; 1] = [1i64];
let constant2259_out1: [i64; 1] = [1i64];
let concat200_out1: [i64; 4usize] = [
&constant2258_out1[..],
&constant2259_out1[..],
&unsqueeze453_out1[..],
&constant2261_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape152_out1 = slice214_out1.reshape(concat199_out1);
let unsqueeze454_out1 = [sub26_out1 as i64];
let unsqueeze455_out1 = [gather153_out1 as i64];
let slice215_out1 = constant474_out1
.slice(s![unsqueeze454_out1[0]..unsqueeze455_out1[0], ..]);
let reshape153_out1 = slice215_out1.reshape(concat200_out1);
let cast244_out1 = reshape152_out1;
let cast245_out1 = reshape153_out1;
let mul194_out1 = squeeze70_out1.clone().mul(cast244_out1);
let shape185_out1: [i64; 4] = {
let axes = &squeeze70_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather154_out1 = shape185_out1[3] as i64;
let constant2267_out1 = 2i64;
let div95_out1 = gather154_out1 / constant2267_out1;
let cast246_out1 = div95_out1;
let cast247_out1 = cast246_out1;
let unsqueeze456_out1 = [cast247_out1 as i64];
let slice216_out1 = squeeze70_out1
.clone()
.slice(s![.., .., .., unsqueeze456_out1[0]..9223372036854775807]);
let neg47_out1 = slice216_out1.neg();
let unsqueeze457_out1 = [cast247_out1 as i64];
let slice217_out1 = squeeze70_out1
.slice(s![.., .., .., 0..unsqueeze457_out1[0]]);
let concat201_out1 = burn::tensor::Tensor::cat(
[neg47_out1, slice217_out1].into(),
3,
);
let mul195_out1 = concat201_out1.mul(cast245_out1);
let add152_out1 = mul194_out1.add(mul195_out1);
let cast248_out1 = reshape150_out1;
let cast249_out1 = reshape151_out1;
let mul196_out1 = squeeze71_out1.clone().mul(cast248_out1);
let shape186_out1: [i64; 4] = {
let axes = &squeeze71_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather155_out1 = shape186_out1[3] as i64;
let constant2277_out1 = 2i64;
let div96_out1 = gather155_out1 / constant2277_out1;
let cast250_out1 = div96_out1;
let cast251_out1 = cast250_out1;
let unsqueeze458_out1 = [cast251_out1 as i64];
let slice218_out1 = squeeze71_out1
.clone()
.slice(s![.., .., .., unsqueeze458_out1[0]..9223372036854775807]);
let neg48_out1 = slice218_out1.neg();
let unsqueeze459_out1 = [cast251_out1 as i64];
let slice219_out1 = squeeze71_out1
.slice(s![.., .., .., 0..unsqueeze459_out1[0]]);
let concat202_out1 = burn::tensor::Tensor::cat(
[neg48_out1, slice219_out1].into(),
3,
);
let mul197_out1 = concat202_out1.mul(cast249_out1);
let add153_out1 = mul196_out1.add(mul197_out1);
let shape187_out1: [i64; 4] = {
let axes = &add152_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice220_out1: [i64; 1] = shape187_out1[3..4].try_into().unwrap();
let cast252_out1 = {
let shape_array = slice220_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt70_out1 = cast252_out1.sqrt();
let constant2288_out1 = self.constant2288.val();
let div97_out1 = constant2288_out1.div(sqrt70_out1);
let cast253_out1 = div97_out1;
let transpose71_out1 = add153_out1.permute([0, 1, 3, 2]);
let sqrt71_out1 = cast253_out1.clone().sqrt();
let mul198_out1 = add152_out1
.mul((sqrt71_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt72_out1 = cast253_out1.sqrt();
let mul199_out1 = transpose71_out1
.mul((sqrt72_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul141_out1 = mul198_out1.matmul(mul199_out1);
let constant2290_out1 = self.constant2290.val();
let constant2289_out1 = self.constant2289.val();
let where53_out1 = constant2290_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant2289_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add154_out1 = matmul141_out1.add(where53_out1);
let softmax24_out1 = burn::tensor::activation::softmax(add154_out1, 3);
let isnan24_out1 = softmax24_out1.clone().is_nan();
let constant2291_out1 = self.constant2291.val();
let where54_out1 = softmax24_out1
.mask_where(
isnan24_out1,
constant2291_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul142_out1 = where54_out1.matmul(squeeze72_out1);
let transpose72_out1 = matmul142_out1.permute([0, 2, 1, 3]);
let unsqueeze460_out1 = [gather150_out1 as i64];
let unsqueeze461_out1 = [gather151_out1 as i64];
let constant2294_out1: [i64; 1] = [512i64];
let concat203_out1: [i64; 3usize] = [
&unsqueeze460_out1[..],
&unsqueeze461_out1[..],
&constant2294_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape154_out1 = transpose72_out1.reshape(concat203_out1);
let linear95_out1 = self.linear95.forward(reshape154_out1);
let add155_out1 = add151_out1.add(linear95_out1);
add155_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule26 {
layernormalization49: LayerNorm,
linear96: Linear,
constant2295: burn::module::Param<Tensor<1>>,
constant2296: burn::module::Param<Tensor<1>>,
constant2297: burn::module::Param<Tensor<1>>,
linear97: Linear,
layernormalization50: LayerNorm,
linear98: Linear,
constant2365: burn::module::Param<Tensor<1>>,
constant2367: burn::module::Param<Tensor<1>>,
constant2366: burn::module::Param<Tensor<1>>,
constant2368: burn::module::Param<Tensor<1>>,
linear99: Linear,
#[module(skip)]
device: Device,
}
impl Submodule26 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization49 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear96 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant2295: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2296: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2297: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear97 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization50 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear98 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant2365: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2367: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2366: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2368: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear99 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization49,
linear96,
constant2295,
constant2296,
constant2297,
linear97,
layernormalization50,
linear98,
constant2365,
constant2367,
constant2366,
constant2368,
linear99,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add155_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization49_out1 = {
let dtype = add155_out1.clone().dtype();
self.layernormalization49
.forward(add155_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear96_out1 = self.linear96.forward(layernormalization49_out1);
let constant2295_out1 = self.constant2295.val();
let div98_out1 = linear96_out1
.clone()
.div((constant2295_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf24_out1 = div98_out1.erf();
let constant2296_out1 = self.constant2296.val();
let add156_out1 = erf24_out1
.add((constant2296_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul200_out1 = linear96_out1.mul(add156_out1);
let constant2297_out1 = self.constant2297.val();
let mul201_out1 = mul200_out1
.mul((constant2297_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear97_out1 = self.linear97.forward(mul201_out1);
let add157_out1 = add155_out1.add(linear97_out1);
let layernormalization50_out1 = {
let dtype = add157_out1.clone().dtype();
self.layernormalization50
.forward(add157_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape188_out1: [i64; 3] = {
let axes = &layernormalization50_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather156_out1 = shape188_out1[0] as i64;
let shape189_out1: [i64; 3] = {
let axes = &layernormalization50_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather157_out1 = shape189_out1[1] as i64;
let linear98_out1 = self.linear98.forward(layernormalization50_out1);
let unsqueeze462_out1 = [gather156_out1 as i64];
let unsqueeze463_out1 = [gather157_out1 as i64];
let constant2304_out1: [i64; 1] = [64i64];
let constant2302_out1: [i64; 1] = [3i64];
let constant2303_out1: [i64; 1] = [8i64];
let concat204_out1: [i64; 5usize] = [
&unsqueeze462_out1[..],
&unsqueeze463_out1[..],
&constant2302_out1[..],
&constant2303_out1[..],
&constant2304_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape155_out1 = linear98_out1.reshape(concat204_out1);
let transpose73_out1 = reshape155_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose73_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split25_out1, split25_out2, split25_out3] = split_tensors
.try_into()
.unwrap();
let squeeze73_out1 = split25_out1.squeeze_dims::<4>(&[0]);
let squeeze74_out1 = split25_out2.squeeze_dims::<4>(&[0]);
let squeeze75_out1 = split25_out3.squeeze_dims::<4>(&[0]);
let shape190_out1: [i64; 4] = {
let axes = &squeeze73_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather158_out1 = shape190_out1[2] as i64;
let shape191_out1: [i64; 4] = {
let axes = &squeeze74_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather159_out1 = shape191_out1[2] as i64;
let sub27_out1 = gather159_out1 - gather158_out1;
let unsqueeze464_out1 = [gather159_out1 as i64];
let slice221_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze464_out1[0], ..]);
let unsqueeze465_out1 = [gather159_out1 as i64];
let constant2318_out1: [i64; 1] = [64i64];
let constant2315_out1: [i64; 1] = [1i64];
let constant2316_out1: [i64; 1] = [1i64];
let concat205_out1: [i64; 4usize] = [
&constant2315_out1[..],
&constant2316_out1[..],
&unsqueeze465_out1[..],
&constant2318_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze466_out1 = [gather159_out1 as i64];
let constant2322_out1: [i64; 1] = [64i64];
let constant2319_out1: [i64; 1] = [1i64];
let constant2320_out1: [i64; 1] = [1i64];
let concat206_out1: [i64; 4usize] = [
&constant2319_out1[..],
&constant2320_out1[..],
&unsqueeze466_out1[..],
&constant2322_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape156_out1 = slice221_out1.reshape(concat205_out1);
let unsqueeze467_out1 = [gather159_out1 as i64];
let slice222_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze467_out1[0], ..]);
let reshape157_out1 = slice222_out1.reshape(concat206_out1);
let unsqueeze468_out1 = [sub27_out1 as i64];
let unsqueeze469_out1 = [gather159_out1 as i64];
let slice223_out1 = constant461_out1
.slice(s![unsqueeze468_out1[0]..unsqueeze469_out1[0], ..]);
let unsqueeze470_out1 = [gather158_out1 as i64];
let constant2334_out1: [i64; 1] = [64i64];
let constant2331_out1: [i64; 1] = [1i64];
let constant2332_out1: [i64; 1] = [1i64];
let concat207_out1: [i64; 4usize] = [
&constant2331_out1[..],
&constant2332_out1[..],
&unsqueeze470_out1[..],
&constant2334_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze471_out1 = [gather158_out1 as i64];
let constant2338_out1: [i64; 1] = [64i64];
let constant2335_out1: [i64; 1] = [1i64];
let constant2336_out1: [i64; 1] = [1i64];
let concat208_out1: [i64; 4usize] = [
&constant2335_out1[..],
&constant2336_out1[..],
&unsqueeze471_out1[..],
&constant2338_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape158_out1 = slice223_out1.reshape(concat207_out1);
let unsqueeze472_out1 = [sub27_out1 as i64];
let unsqueeze473_out1 = [gather159_out1 as i64];
let slice224_out1 = constant474_out1
.slice(s![unsqueeze472_out1[0]..unsqueeze473_out1[0], ..]);
let reshape159_out1 = slice224_out1.reshape(concat208_out1);
let cast254_out1 = reshape158_out1;
let cast255_out1 = reshape159_out1;
let mul202_out1 = squeeze73_out1.clone().mul(cast254_out1);
let shape192_out1: [i64; 4] = {
let axes = &squeeze73_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather160_out1 = shape192_out1[3] as i64;
let constant2344_out1 = 2i64;
let div99_out1 = gather160_out1 / constant2344_out1;
let cast256_out1 = div99_out1;
let cast257_out1 = cast256_out1;
let unsqueeze474_out1 = [cast257_out1 as i64];
let slice225_out1 = squeeze73_out1
.clone()
.slice(s![.., .., .., unsqueeze474_out1[0]..9223372036854775807]);
let neg49_out1 = slice225_out1.neg();
let unsqueeze475_out1 = [cast257_out1 as i64];
let slice226_out1 = squeeze73_out1
.slice(s![.., .., .., 0..unsqueeze475_out1[0]]);
let concat209_out1 = burn::tensor::Tensor::cat(
[neg49_out1, slice226_out1].into(),
3,
);
let mul203_out1 = concat209_out1.mul(cast255_out1);
let add158_out1 = mul202_out1.add(mul203_out1);
let cast258_out1 = reshape156_out1;
let cast259_out1 = reshape157_out1;
let mul204_out1 = squeeze74_out1.clone().mul(cast258_out1);
let shape193_out1: [i64; 4] = {
let axes = &squeeze74_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather161_out1 = shape193_out1[3] as i64;
let constant2354_out1 = 2i64;
let div100_out1 = gather161_out1 / constant2354_out1;
let cast260_out1 = div100_out1;
let cast261_out1 = cast260_out1;
let unsqueeze476_out1 = [cast261_out1 as i64];
let slice227_out1 = squeeze74_out1
.clone()
.slice(s![.., .., .., unsqueeze476_out1[0]..9223372036854775807]);
let neg50_out1 = slice227_out1.neg();
let unsqueeze477_out1 = [cast261_out1 as i64];
let slice228_out1 = squeeze74_out1
.slice(s![.., .., .., 0..unsqueeze477_out1[0]]);
let concat210_out1 = burn::tensor::Tensor::cat(
[neg50_out1, slice228_out1].into(),
3,
);
let mul205_out1 = concat210_out1.mul(cast259_out1);
let add159_out1 = mul204_out1.add(mul205_out1);
let shape194_out1: [i64; 4] = {
let axes = &add158_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice229_out1: [i64; 1] = shape194_out1[3..4].try_into().unwrap();
let cast262_out1 = {
let shape_array = slice229_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt73_out1 = cast262_out1.sqrt();
let constant2365_out1 = self.constant2365.val();
let div101_out1 = constant2365_out1.div(sqrt73_out1);
let cast263_out1 = div101_out1;
let transpose74_out1 = add159_out1.permute([0, 1, 3, 2]);
let sqrt74_out1 = cast263_out1.clone().sqrt();
let mul206_out1 = add158_out1
.mul((sqrt74_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt75_out1 = cast263_out1.sqrt();
let mul207_out1 = transpose74_out1
.mul((sqrt75_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul147_out1 = mul206_out1.matmul(mul207_out1);
let constant2367_out1 = self.constant2367.val();
let constant2366_out1 = self.constant2366.val();
let where55_out1 = constant2367_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant2366_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add160_out1 = matmul147_out1.add(where55_out1);
let softmax25_out1 = burn::tensor::activation::softmax(add160_out1, 3);
let isnan25_out1 = softmax25_out1.clone().is_nan();
let constant2368_out1 = self.constant2368.val();
let where56_out1 = softmax25_out1
.mask_where(
isnan25_out1,
constant2368_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul148_out1 = where56_out1.matmul(squeeze75_out1);
let transpose75_out1 = matmul148_out1.permute([0, 2, 1, 3]);
let unsqueeze478_out1 = [gather156_out1 as i64];
let unsqueeze479_out1 = [gather157_out1 as i64];
let constant2371_out1: [i64; 1] = [512i64];
let concat211_out1: [i64; 3usize] = [
&unsqueeze478_out1[..],
&unsqueeze479_out1[..],
&constant2371_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape160_out1 = transpose75_out1.reshape(concat211_out1);
let linear99_out1 = self.linear99.forward(reshape160_out1);
let add161_out1 = add157_out1.add(linear99_out1);
add161_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule27 {
layernormalization51: LayerNorm,
linear100: Linear,
constant2372: burn::module::Param<Tensor<1>>,
constant2373: burn::module::Param<Tensor<1>>,
constant2374: burn::module::Param<Tensor<1>>,
linear101: Linear,
layernormalization52: LayerNorm,
linear102: Linear,
constant2442: burn::module::Param<Tensor<1>>,
constant2444: burn::module::Param<Tensor<1>>,
constant2443: burn::module::Param<Tensor<1>>,
constant2445: burn::module::Param<Tensor<1>>,
linear103: Linear,
#[module(skip)]
device: Device,
}
impl Submodule27 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization51 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear100 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant2372: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2373: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2374: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear101 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization52 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear102 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant2442: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2444: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2443: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2445: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear103 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization51,
linear100,
constant2372,
constant2373,
constant2374,
linear101,
layernormalization52,
linear102,
constant2442,
constant2444,
constant2443,
constant2445,
linear103,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add161_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization51_out1 = {
let dtype = add161_out1.clone().dtype();
self.layernormalization51
.forward(add161_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear100_out1 = self.linear100.forward(layernormalization51_out1);
let constant2372_out1 = self.constant2372.val();
let div102_out1 = linear100_out1
.clone()
.div((constant2372_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf25_out1 = div102_out1.erf();
let constant2373_out1 = self.constant2373.val();
let add162_out1 = erf25_out1
.add((constant2373_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul208_out1 = linear100_out1.mul(add162_out1);
let constant2374_out1 = self.constant2374.val();
let mul209_out1 = mul208_out1
.mul((constant2374_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear101_out1 = self.linear101.forward(mul209_out1);
let add163_out1 = add161_out1.add(linear101_out1);
let layernormalization52_out1 = {
let dtype = add163_out1.clone().dtype();
self.layernormalization52
.forward(add163_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape195_out1: [i64; 3] = {
let axes = &layernormalization52_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather162_out1 = shape195_out1[0] as i64;
let shape196_out1: [i64; 3] = {
let axes = &layernormalization52_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather163_out1 = shape196_out1[1] as i64;
let linear102_out1 = self.linear102.forward(layernormalization52_out1);
let unsqueeze480_out1 = [gather162_out1 as i64];
let unsqueeze481_out1 = [gather163_out1 as i64];
let constant2381_out1: [i64; 1] = [64i64];
let constant2379_out1: [i64; 1] = [3i64];
let constant2380_out1: [i64; 1] = [8i64];
let concat212_out1: [i64; 5usize] = [
&unsqueeze480_out1[..],
&unsqueeze481_out1[..],
&constant2379_out1[..],
&constant2380_out1[..],
&constant2381_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape161_out1 = linear102_out1.reshape(concat212_out1);
let transpose76_out1 = reshape161_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose76_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split26_out1, split26_out2, split26_out3] = split_tensors
.try_into()
.unwrap();
let squeeze76_out1 = split26_out1.squeeze_dims::<4>(&[0]);
let squeeze77_out1 = split26_out2.squeeze_dims::<4>(&[0]);
let squeeze78_out1 = split26_out3.squeeze_dims::<4>(&[0]);
let shape197_out1: [i64; 4] = {
let axes = &squeeze76_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather164_out1 = shape197_out1[2] as i64;
let shape198_out1: [i64; 4] = {
let axes = &squeeze77_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather165_out1 = shape198_out1[2] as i64;
let sub28_out1 = gather165_out1 - gather164_out1;
let unsqueeze482_out1 = [gather165_out1 as i64];
let slice230_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze482_out1[0], ..]);
let unsqueeze483_out1 = [gather165_out1 as i64];
let constant2395_out1: [i64; 1] = [64i64];
let constant2392_out1: [i64; 1] = [1i64];
let constant2393_out1: [i64; 1] = [1i64];
let concat213_out1: [i64; 4usize] = [
&constant2392_out1[..],
&constant2393_out1[..],
&unsqueeze483_out1[..],
&constant2395_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze484_out1 = [gather165_out1 as i64];
let constant2399_out1: [i64; 1] = [64i64];
let constant2396_out1: [i64; 1] = [1i64];
let constant2397_out1: [i64; 1] = [1i64];
let concat214_out1: [i64; 4usize] = [
&constant2396_out1[..],
&constant2397_out1[..],
&unsqueeze484_out1[..],
&constant2399_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape162_out1 = slice230_out1.reshape(concat213_out1);
let unsqueeze485_out1 = [gather165_out1 as i64];
let slice231_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze485_out1[0], ..]);
let reshape163_out1 = slice231_out1.reshape(concat214_out1);
let unsqueeze486_out1 = [sub28_out1 as i64];
let unsqueeze487_out1 = [gather165_out1 as i64];
let slice232_out1 = constant461_out1
.slice(s![unsqueeze486_out1[0]..unsqueeze487_out1[0], ..]);
let unsqueeze488_out1 = [gather164_out1 as i64];
let constant2411_out1: [i64; 1] = [64i64];
let constant2408_out1: [i64; 1] = [1i64];
let constant2409_out1: [i64; 1] = [1i64];
let concat215_out1: [i64; 4usize] = [
&constant2408_out1[..],
&constant2409_out1[..],
&unsqueeze488_out1[..],
&constant2411_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze489_out1 = [gather164_out1 as i64];
let constant2415_out1: [i64; 1] = [64i64];
let constant2412_out1: [i64; 1] = [1i64];
let constant2413_out1: [i64; 1] = [1i64];
let concat216_out1: [i64; 4usize] = [
&constant2412_out1[..],
&constant2413_out1[..],
&unsqueeze489_out1[..],
&constant2415_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape164_out1 = slice232_out1.reshape(concat215_out1);
let unsqueeze490_out1 = [sub28_out1 as i64];
let unsqueeze491_out1 = [gather165_out1 as i64];
let slice233_out1 = constant474_out1
.slice(s![unsqueeze490_out1[0]..unsqueeze491_out1[0], ..]);
let reshape165_out1 = slice233_out1.reshape(concat216_out1);
let cast264_out1 = reshape164_out1;
let cast265_out1 = reshape165_out1;
let mul210_out1 = squeeze76_out1.clone().mul(cast264_out1);
let shape199_out1: [i64; 4] = {
let axes = &squeeze76_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather166_out1 = shape199_out1[3] as i64;
let constant2421_out1 = 2i64;
let div103_out1 = gather166_out1 / constant2421_out1;
let cast266_out1 = div103_out1;
let cast267_out1 = cast266_out1;
let unsqueeze492_out1 = [cast267_out1 as i64];
let slice234_out1 = squeeze76_out1
.clone()
.slice(s![.., .., .., unsqueeze492_out1[0]..9223372036854775807]);
let neg51_out1 = slice234_out1.neg();
let unsqueeze493_out1 = [cast267_out1 as i64];
let slice235_out1 = squeeze76_out1
.slice(s![.., .., .., 0..unsqueeze493_out1[0]]);
let concat217_out1 = burn::tensor::Tensor::cat(
[neg51_out1, slice235_out1].into(),
3,
);
let mul211_out1 = concat217_out1.mul(cast265_out1);
let add164_out1 = mul210_out1.add(mul211_out1);
let cast268_out1 = reshape162_out1;
let cast269_out1 = reshape163_out1;
let mul212_out1 = squeeze77_out1.clone().mul(cast268_out1);
let shape200_out1: [i64; 4] = {
let axes = &squeeze77_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather167_out1 = shape200_out1[3] as i64;
let constant2431_out1 = 2i64;
let div104_out1 = gather167_out1 / constant2431_out1;
let cast270_out1 = div104_out1;
let cast271_out1 = cast270_out1;
let unsqueeze494_out1 = [cast271_out1 as i64];
let slice236_out1 = squeeze77_out1
.clone()
.slice(s![.., .., .., unsqueeze494_out1[0]..9223372036854775807]);
let neg52_out1 = slice236_out1.neg();
let unsqueeze495_out1 = [cast271_out1 as i64];
let slice237_out1 = squeeze77_out1
.slice(s![.., .., .., 0..unsqueeze495_out1[0]]);
let concat218_out1 = burn::tensor::Tensor::cat(
[neg52_out1, slice237_out1].into(),
3,
);
let mul213_out1 = concat218_out1.mul(cast269_out1);
let add165_out1 = mul212_out1.add(mul213_out1);
let shape201_out1: [i64; 4] = {
let axes = &add164_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice238_out1: [i64; 1] = shape201_out1[3..4].try_into().unwrap();
let cast272_out1 = {
let shape_array = slice238_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt76_out1 = cast272_out1.sqrt();
let constant2442_out1 = self.constant2442.val();
let div105_out1 = constant2442_out1.div(sqrt76_out1);
let cast273_out1 = div105_out1;
let transpose77_out1 = add165_out1.permute([0, 1, 3, 2]);
let sqrt77_out1 = cast273_out1.clone().sqrt();
let mul214_out1 = add164_out1
.mul((sqrt77_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt78_out1 = cast273_out1.sqrt();
let mul215_out1 = transpose77_out1
.mul((sqrt78_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul153_out1 = mul214_out1.matmul(mul215_out1);
let constant2444_out1 = self.constant2444.val();
let constant2443_out1 = self.constant2443.val();
let where57_out1 = constant2444_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant2443_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add166_out1 = matmul153_out1.add(where57_out1);
let softmax26_out1 = burn::tensor::activation::softmax(add166_out1, 3);
let isnan26_out1 = softmax26_out1.clone().is_nan();
let constant2445_out1 = self.constant2445.val();
let where58_out1 = softmax26_out1
.mask_where(
isnan26_out1,
constant2445_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul154_out1 = where58_out1.matmul(squeeze78_out1);
let transpose78_out1 = matmul154_out1.permute([0, 2, 1, 3]);
let unsqueeze496_out1 = [gather162_out1 as i64];
let unsqueeze497_out1 = [gather163_out1 as i64];
let constant2448_out1: [i64; 1] = [512i64];
let concat219_out1: [i64; 3usize] = [
&unsqueeze496_out1[..],
&unsqueeze497_out1[..],
&constant2448_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape166_out1 = transpose78_out1.reshape(concat219_out1);
let linear103_out1 = self.linear103.forward(reshape166_out1);
let add167_out1 = add163_out1.add(linear103_out1);
add167_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule28 {
layernormalization53: LayerNorm,
linear104: Linear,
constant2449: burn::module::Param<Tensor<1>>,
constant2450: burn::module::Param<Tensor<1>>,
constant2451: burn::module::Param<Tensor<1>>,
linear105: Linear,
layernormalization54: LayerNorm,
linear106: Linear,
constant2519: burn::module::Param<Tensor<1>>,
constant2521: burn::module::Param<Tensor<1>>,
constant2520: burn::module::Param<Tensor<1>>,
constant2522: burn::module::Param<Tensor<1>>,
linear107: Linear,
#[module(skip)]
device: Device,
}
impl Submodule28 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization53 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear104 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant2449: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2450: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2451: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear105 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization54 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear106 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant2519: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2521: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2520: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2522: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear107 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization53,
linear104,
constant2449,
constant2450,
constant2451,
linear105,
layernormalization54,
linear106,
constant2519,
constant2521,
constant2520,
constant2522,
linear107,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add167_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization53_out1 = {
let dtype = add167_out1.clone().dtype();
self.layernormalization53
.forward(add167_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear104_out1 = self.linear104.forward(layernormalization53_out1);
let constant2449_out1 = self.constant2449.val();
let div106_out1 = linear104_out1
.clone()
.div((constant2449_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf26_out1 = div106_out1.erf();
let constant2450_out1 = self.constant2450.val();
let add168_out1 = erf26_out1
.add((constant2450_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul216_out1 = linear104_out1.mul(add168_out1);
let constant2451_out1 = self.constant2451.val();
let mul217_out1 = mul216_out1
.mul((constant2451_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear105_out1 = self.linear105.forward(mul217_out1);
let add169_out1 = add167_out1.add(linear105_out1);
let layernormalization54_out1 = {
let dtype = add169_out1.clone().dtype();
self.layernormalization54
.forward(add169_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape202_out1: [i64; 3] = {
let axes = &layernormalization54_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather168_out1 = shape202_out1[0] as i64;
let shape203_out1: [i64; 3] = {
let axes = &layernormalization54_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather169_out1 = shape203_out1[1] as i64;
let linear106_out1 = self.linear106.forward(layernormalization54_out1);
let unsqueeze498_out1 = [gather168_out1 as i64];
let unsqueeze499_out1 = [gather169_out1 as i64];
let constant2458_out1: [i64; 1] = [64i64];
let constant2456_out1: [i64; 1] = [3i64];
let constant2457_out1: [i64; 1] = [8i64];
let concat220_out1: [i64; 5usize] = [
&unsqueeze498_out1[..],
&unsqueeze499_out1[..],
&constant2456_out1[..],
&constant2457_out1[..],
&constant2458_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape167_out1 = linear106_out1.reshape(concat220_out1);
let transpose79_out1 = reshape167_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose79_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split27_out1, split27_out2, split27_out3] = split_tensors
.try_into()
.unwrap();
let squeeze79_out1 = split27_out1.squeeze_dims::<4>(&[0]);
let squeeze80_out1 = split27_out2.squeeze_dims::<4>(&[0]);
let squeeze81_out1 = split27_out3.squeeze_dims::<4>(&[0]);
let shape204_out1: [i64; 4] = {
let axes = &squeeze79_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather170_out1 = shape204_out1[2] as i64;
let shape205_out1: [i64; 4] = {
let axes = &squeeze80_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather171_out1 = shape205_out1[2] as i64;
let sub29_out1 = gather171_out1 - gather170_out1;
let unsqueeze500_out1 = [gather171_out1 as i64];
let slice239_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze500_out1[0], ..]);
let unsqueeze501_out1 = [gather171_out1 as i64];
let constant2472_out1: [i64; 1] = [64i64];
let constant2469_out1: [i64; 1] = [1i64];
let constant2470_out1: [i64; 1] = [1i64];
let concat221_out1: [i64; 4usize] = [
&constant2469_out1[..],
&constant2470_out1[..],
&unsqueeze501_out1[..],
&constant2472_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze502_out1 = [gather171_out1 as i64];
let constant2476_out1: [i64; 1] = [64i64];
let constant2473_out1: [i64; 1] = [1i64];
let constant2474_out1: [i64; 1] = [1i64];
let concat222_out1: [i64; 4usize] = [
&constant2473_out1[..],
&constant2474_out1[..],
&unsqueeze502_out1[..],
&constant2476_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape168_out1 = slice239_out1.reshape(concat221_out1);
let unsqueeze503_out1 = [gather171_out1 as i64];
let slice240_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze503_out1[0], ..]);
let reshape169_out1 = slice240_out1.reshape(concat222_out1);
let unsqueeze504_out1 = [sub29_out1 as i64];
let unsqueeze505_out1 = [gather171_out1 as i64];
let slice241_out1 = constant461_out1
.slice(s![unsqueeze504_out1[0]..unsqueeze505_out1[0], ..]);
let unsqueeze506_out1 = [gather170_out1 as i64];
let constant2488_out1: [i64; 1] = [64i64];
let constant2485_out1: [i64; 1] = [1i64];
let constant2486_out1: [i64; 1] = [1i64];
let concat223_out1: [i64; 4usize] = [
&constant2485_out1[..],
&constant2486_out1[..],
&unsqueeze506_out1[..],
&constant2488_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze507_out1 = [gather170_out1 as i64];
let constant2492_out1: [i64; 1] = [64i64];
let constant2489_out1: [i64; 1] = [1i64];
let constant2490_out1: [i64; 1] = [1i64];
let concat224_out1: [i64; 4usize] = [
&constant2489_out1[..],
&constant2490_out1[..],
&unsqueeze507_out1[..],
&constant2492_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape170_out1 = slice241_out1.reshape(concat223_out1);
let unsqueeze508_out1 = [sub29_out1 as i64];
let unsqueeze509_out1 = [gather171_out1 as i64];
let slice242_out1 = constant474_out1
.slice(s![unsqueeze508_out1[0]..unsqueeze509_out1[0], ..]);
let reshape171_out1 = slice242_out1.reshape(concat224_out1);
let cast274_out1 = reshape170_out1;
let cast275_out1 = reshape171_out1;
let mul218_out1 = squeeze79_out1.clone().mul(cast274_out1);
let shape206_out1: [i64; 4] = {
let axes = &squeeze79_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather172_out1 = shape206_out1[3] as i64;
let constant2498_out1 = 2i64;
let div107_out1 = gather172_out1 / constant2498_out1;
let cast276_out1 = div107_out1;
let cast277_out1 = cast276_out1;
let unsqueeze510_out1 = [cast277_out1 as i64];
let slice243_out1 = squeeze79_out1
.clone()
.slice(s![.., .., .., unsqueeze510_out1[0]..9223372036854775807]);
let neg53_out1 = slice243_out1.neg();
let unsqueeze511_out1 = [cast277_out1 as i64];
let slice244_out1 = squeeze79_out1
.slice(s![.., .., .., 0..unsqueeze511_out1[0]]);
let concat225_out1 = burn::tensor::Tensor::cat(
[neg53_out1, slice244_out1].into(),
3,
);
let mul219_out1 = concat225_out1.mul(cast275_out1);
let add170_out1 = mul218_out1.add(mul219_out1);
let cast278_out1 = reshape168_out1;
let cast279_out1 = reshape169_out1;
let mul220_out1 = squeeze80_out1.clone().mul(cast278_out1);
let shape207_out1: [i64; 4] = {
let axes = &squeeze80_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather173_out1 = shape207_out1[3] as i64;
let constant2508_out1 = 2i64;
let div108_out1 = gather173_out1 / constant2508_out1;
let cast280_out1 = div108_out1;
let cast281_out1 = cast280_out1;
let unsqueeze512_out1 = [cast281_out1 as i64];
let slice245_out1 = squeeze80_out1
.clone()
.slice(s![.., .., .., unsqueeze512_out1[0]..9223372036854775807]);
let neg54_out1 = slice245_out1.neg();
let unsqueeze513_out1 = [cast281_out1 as i64];
let slice246_out1 = squeeze80_out1
.slice(s![.., .., .., 0..unsqueeze513_out1[0]]);
let concat226_out1 = burn::tensor::Tensor::cat(
[neg54_out1, slice246_out1].into(),
3,
);
let mul221_out1 = concat226_out1.mul(cast279_out1);
let add171_out1 = mul220_out1.add(mul221_out1);
let shape208_out1: [i64; 4] = {
let axes = &add170_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice247_out1: [i64; 1] = shape208_out1[3..4].try_into().unwrap();
let cast282_out1 = {
let shape_array = slice247_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt79_out1 = cast282_out1.sqrt();
let constant2519_out1 = self.constant2519.val();
let div109_out1 = constant2519_out1.div(sqrt79_out1);
let cast283_out1 = div109_out1;
let transpose80_out1 = add171_out1.permute([0, 1, 3, 2]);
let sqrt80_out1 = cast283_out1.clone().sqrt();
let mul222_out1 = add170_out1
.mul((sqrt80_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt81_out1 = cast283_out1.sqrt();
let mul223_out1 = transpose80_out1
.mul((sqrt81_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul159_out1 = mul222_out1.matmul(mul223_out1);
let constant2521_out1 = self.constant2521.val();
let constant2520_out1 = self.constant2520.val();
let where59_out1 = constant2521_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant2520_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add172_out1 = matmul159_out1.add(where59_out1);
let softmax27_out1 = burn::tensor::activation::softmax(add172_out1, 3);
let isnan27_out1 = softmax27_out1.clone().is_nan();
let constant2522_out1 = self.constant2522.val();
let where60_out1 = softmax27_out1
.mask_where(
isnan27_out1,
constant2522_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul160_out1 = where60_out1.matmul(squeeze81_out1);
let transpose81_out1 = matmul160_out1.permute([0, 2, 1, 3]);
let unsqueeze514_out1 = [gather168_out1 as i64];
let unsqueeze515_out1 = [gather169_out1 as i64];
let constant2525_out1: [i64; 1] = [512i64];
let concat227_out1: [i64; 3usize] = [
&unsqueeze514_out1[..],
&unsqueeze515_out1[..],
&constant2525_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape172_out1 = transpose81_out1.reshape(concat227_out1);
let linear107_out1 = self.linear107.forward(reshape172_out1);
let add173_out1 = add169_out1.add(linear107_out1);
add173_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule29 {
layernormalization55: LayerNorm,
linear108: Linear,
constant2526: burn::module::Param<Tensor<1>>,
constant2527: burn::module::Param<Tensor<1>>,
constant2528: burn::module::Param<Tensor<1>>,
linear109: Linear,
layernormalization56: LayerNorm,
linear110: Linear,
constant2596: burn::module::Param<Tensor<1>>,
constant2598: burn::module::Param<Tensor<1>>,
constant2597: burn::module::Param<Tensor<1>>,
constant2599: burn::module::Param<Tensor<1>>,
linear111: Linear,
#[module(skip)]
device: Device,
}
impl Submodule29 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization55 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear108 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant2526: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2527: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2528: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear109 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization56 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear110 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant2596: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2598: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2597: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2599: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear111 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization55,
linear108,
constant2526,
constant2527,
constant2528,
linear109,
layernormalization56,
linear110,
constant2596,
constant2598,
constant2597,
constant2599,
linear111,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add173_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization55_out1 = {
let dtype = add173_out1.clone().dtype();
self.layernormalization55
.forward(add173_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear108_out1 = self.linear108.forward(layernormalization55_out1);
let constant2526_out1 = self.constant2526.val();
let div110_out1 = linear108_out1
.clone()
.div((constant2526_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf27_out1 = div110_out1.erf();
let constant2527_out1 = self.constant2527.val();
let add174_out1 = erf27_out1
.add((constant2527_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul224_out1 = linear108_out1.mul(add174_out1);
let constant2528_out1 = self.constant2528.val();
let mul225_out1 = mul224_out1
.mul((constant2528_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear109_out1 = self.linear109.forward(mul225_out1);
let add175_out1 = add173_out1.add(linear109_out1);
let layernormalization56_out1 = {
let dtype = add175_out1.clone().dtype();
self.layernormalization56
.forward(add175_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape209_out1: [i64; 3] = {
let axes = &layernormalization56_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather174_out1 = shape209_out1[0] as i64;
let shape210_out1: [i64; 3] = {
let axes = &layernormalization56_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather175_out1 = shape210_out1[1] as i64;
let linear110_out1 = self.linear110.forward(layernormalization56_out1);
let unsqueeze516_out1 = [gather174_out1 as i64];
let unsqueeze517_out1 = [gather175_out1 as i64];
let constant2535_out1: [i64; 1] = [64i64];
let constant2533_out1: [i64; 1] = [3i64];
let constant2534_out1: [i64; 1] = [8i64];
let concat228_out1: [i64; 5usize] = [
&unsqueeze516_out1[..],
&unsqueeze517_out1[..],
&constant2533_out1[..],
&constant2534_out1[..],
&constant2535_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape173_out1 = linear110_out1.reshape(concat228_out1);
let transpose82_out1 = reshape173_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose82_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split28_out1, split28_out2, split28_out3] = split_tensors
.try_into()
.unwrap();
let squeeze82_out1 = split28_out1.squeeze_dims::<4>(&[0]);
let squeeze83_out1 = split28_out2.squeeze_dims::<4>(&[0]);
let squeeze84_out1 = split28_out3.squeeze_dims::<4>(&[0]);
let shape211_out1: [i64; 4] = {
let axes = &squeeze82_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather176_out1 = shape211_out1[2] as i64;
let shape212_out1: [i64; 4] = {
let axes = &squeeze83_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather177_out1 = shape212_out1[2] as i64;
let sub30_out1 = gather177_out1 - gather176_out1;
let unsqueeze518_out1 = [gather177_out1 as i64];
let slice248_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze518_out1[0], ..]);
let unsqueeze519_out1 = [gather177_out1 as i64];
let constant2549_out1: [i64; 1] = [64i64];
let constant2546_out1: [i64; 1] = [1i64];
let constant2547_out1: [i64; 1] = [1i64];
let concat229_out1: [i64; 4usize] = [
&constant2546_out1[..],
&constant2547_out1[..],
&unsqueeze519_out1[..],
&constant2549_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze520_out1 = [gather177_out1 as i64];
let constant2553_out1: [i64; 1] = [64i64];
let constant2550_out1: [i64; 1] = [1i64];
let constant2551_out1: [i64; 1] = [1i64];
let concat230_out1: [i64; 4usize] = [
&constant2550_out1[..],
&constant2551_out1[..],
&unsqueeze520_out1[..],
&constant2553_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape174_out1 = slice248_out1.reshape(concat229_out1);
let unsqueeze521_out1 = [gather177_out1 as i64];
let slice249_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze521_out1[0], ..]);
let reshape175_out1 = slice249_out1.reshape(concat230_out1);
let unsqueeze522_out1 = [sub30_out1 as i64];
let unsqueeze523_out1 = [gather177_out1 as i64];
let slice250_out1 = constant461_out1
.slice(s![unsqueeze522_out1[0]..unsqueeze523_out1[0], ..]);
let unsqueeze524_out1 = [gather176_out1 as i64];
let constant2565_out1: [i64; 1] = [64i64];
let constant2562_out1: [i64; 1] = [1i64];
let constant2563_out1: [i64; 1] = [1i64];
let concat231_out1: [i64; 4usize] = [
&constant2562_out1[..],
&constant2563_out1[..],
&unsqueeze524_out1[..],
&constant2565_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze525_out1 = [gather176_out1 as i64];
let constant2569_out1: [i64; 1] = [64i64];
let constant2566_out1: [i64; 1] = [1i64];
let constant2567_out1: [i64; 1] = [1i64];
let concat232_out1: [i64; 4usize] = [
&constant2566_out1[..],
&constant2567_out1[..],
&unsqueeze525_out1[..],
&constant2569_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape176_out1 = slice250_out1.reshape(concat231_out1);
let unsqueeze526_out1 = [sub30_out1 as i64];
let unsqueeze527_out1 = [gather177_out1 as i64];
let slice251_out1 = constant474_out1
.slice(s![unsqueeze526_out1[0]..unsqueeze527_out1[0], ..]);
let reshape177_out1 = slice251_out1.reshape(concat232_out1);
let cast284_out1 = reshape176_out1;
let cast285_out1 = reshape177_out1;
let mul226_out1 = squeeze82_out1.clone().mul(cast284_out1);
let shape213_out1: [i64; 4] = {
let axes = &squeeze82_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather178_out1 = shape213_out1[3] as i64;
let constant2575_out1 = 2i64;
let div111_out1 = gather178_out1 / constant2575_out1;
let cast286_out1 = div111_out1;
let cast287_out1 = cast286_out1;
let unsqueeze528_out1 = [cast287_out1 as i64];
let slice252_out1 = squeeze82_out1
.clone()
.slice(s![.., .., .., unsqueeze528_out1[0]..9223372036854775807]);
let neg55_out1 = slice252_out1.neg();
let unsqueeze529_out1 = [cast287_out1 as i64];
let slice253_out1 = squeeze82_out1
.slice(s![.., .., .., 0..unsqueeze529_out1[0]]);
let concat233_out1 = burn::tensor::Tensor::cat(
[neg55_out1, slice253_out1].into(),
3,
);
let mul227_out1 = concat233_out1.mul(cast285_out1);
let add176_out1 = mul226_out1.add(mul227_out1);
let cast288_out1 = reshape174_out1;
let cast289_out1 = reshape175_out1;
let mul228_out1 = squeeze83_out1.clone().mul(cast288_out1);
let shape214_out1: [i64; 4] = {
let axes = &squeeze83_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather179_out1 = shape214_out1[3] as i64;
let constant2585_out1 = 2i64;
let div112_out1 = gather179_out1 / constant2585_out1;
let cast290_out1 = div112_out1;
let cast291_out1 = cast290_out1;
let unsqueeze530_out1 = [cast291_out1 as i64];
let slice254_out1 = squeeze83_out1
.clone()
.slice(s![.., .., .., unsqueeze530_out1[0]..9223372036854775807]);
let neg56_out1 = slice254_out1.neg();
let unsqueeze531_out1 = [cast291_out1 as i64];
let slice255_out1 = squeeze83_out1
.slice(s![.., .., .., 0..unsqueeze531_out1[0]]);
let concat234_out1 = burn::tensor::Tensor::cat(
[neg56_out1, slice255_out1].into(),
3,
);
let mul229_out1 = concat234_out1.mul(cast289_out1);
let add177_out1 = mul228_out1.add(mul229_out1);
let shape215_out1: [i64; 4] = {
let axes = &add176_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice256_out1: [i64; 1] = shape215_out1[3..4].try_into().unwrap();
let cast292_out1 = {
let shape_array = slice256_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt82_out1 = cast292_out1.sqrt();
let constant2596_out1 = self.constant2596.val();
let div113_out1 = constant2596_out1.div(sqrt82_out1);
let cast293_out1 = div113_out1;
let transpose83_out1 = add177_out1.permute([0, 1, 3, 2]);
let sqrt83_out1 = cast293_out1.clone().sqrt();
let mul230_out1 = add176_out1
.mul((sqrt83_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt84_out1 = cast293_out1.sqrt();
let mul231_out1 = transpose83_out1
.mul((sqrt84_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul165_out1 = mul230_out1.matmul(mul231_out1);
let constant2598_out1 = self.constant2598.val();
let constant2597_out1 = self.constant2597.val();
let where61_out1 = constant2598_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant2597_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add178_out1 = matmul165_out1.add(where61_out1);
let softmax28_out1 = burn::tensor::activation::softmax(add178_out1, 3);
let isnan28_out1 = softmax28_out1.clone().is_nan();
let constant2599_out1 = self.constant2599.val();
let where62_out1 = softmax28_out1
.mask_where(
isnan28_out1,
constant2599_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul166_out1 = where62_out1.matmul(squeeze84_out1);
let transpose84_out1 = matmul166_out1.permute([0, 2, 1, 3]);
let unsqueeze532_out1 = [gather174_out1 as i64];
let unsqueeze533_out1 = [gather175_out1 as i64];
let constant2602_out1: [i64; 1] = [512i64];
let concat235_out1: [i64; 3usize] = [
&unsqueeze532_out1[..],
&unsqueeze533_out1[..],
&constant2602_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape178_out1 = transpose84_out1.reshape(concat235_out1);
let linear111_out1 = self.linear111.forward(reshape178_out1);
let add179_out1 = add175_out1.add(linear111_out1);
add179_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule30 {
layernormalization57: LayerNorm,
linear112: Linear,
constant2603: burn::module::Param<Tensor<1>>,
constant2604: burn::module::Param<Tensor<1>>,
constant2605: burn::module::Param<Tensor<1>>,
linear113: Linear,
layernormalization58: LayerNorm,
linear114: Linear,
constant2673: burn::module::Param<Tensor<1>>,
constant2675: burn::module::Param<Tensor<1>>,
constant2674: burn::module::Param<Tensor<1>>,
constant2676: burn::module::Param<Tensor<1>>,
linear115: Linear,
#[module(skip)]
device: Device,
}
impl Submodule30 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization57 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear112 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant2603: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2604: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2605: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear113 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization58 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear114 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant2673: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2675: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2674: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2676: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear115 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization57,
linear112,
constant2603,
constant2604,
constant2605,
linear113,
layernormalization58,
linear114,
constant2673,
constant2675,
constant2674,
constant2676,
linear115,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add179_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization57_out1 = {
let dtype = add179_out1.clone().dtype();
self.layernormalization57
.forward(add179_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear112_out1 = self.linear112.forward(layernormalization57_out1);
let constant2603_out1 = self.constant2603.val();
let div114_out1 = linear112_out1
.clone()
.div((constant2603_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf28_out1 = div114_out1.erf();
let constant2604_out1 = self.constant2604.val();
let add180_out1 = erf28_out1
.add((constant2604_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul232_out1 = linear112_out1.mul(add180_out1);
let constant2605_out1 = self.constant2605.val();
let mul233_out1 = mul232_out1
.mul((constant2605_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear113_out1 = self.linear113.forward(mul233_out1);
let add181_out1 = add179_out1.add(linear113_out1);
let layernormalization58_out1 = {
let dtype = add181_out1.clone().dtype();
self.layernormalization58
.forward(add181_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape216_out1: [i64; 3] = {
let axes = &layernormalization58_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather180_out1 = shape216_out1[0] as i64;
let shape217_out1: [i64; 3] = {
let axes = &layernormalization58_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather181_out1 = shape217_out1[1] as i64;
let linear114_out1 = self.linear114.forward(layernormalization58_out1);
let unsqueeze534_out1 = [gather180_out1 as i64];
let unsqueeze535_out1 = [gather181_out1 as i64];
let constant2612_out1: [i64; 1] = [64i64];
let constant2610_out1: [i64; 1] = [3i64];
let constant2611_out1: [i64; 1] = [8i64];
let concat236_out1: [i64; 5usize] = [
&unsqueeze534_out1[..],
&unsqueeze535_out1[..],
&constant2610_out1[..],
&constant2611_out1[..],
&constant2612_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape179_out1 = linear114_out1.reshape(concat236_out1);
let transpose85_out1 = reshape179_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose85_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split29_out1, split29_out2, split29_out3] = split_tensors
.try_into()
.unwrap();
let squeeze85_out1 = split29_out1.squeeze_dims::<4>(&[0]);
let squeeze86_out1 = split29_out2.squeeze_dims::<4>(&[0]);
let squeeze87_out1 = split29_out3.squeeze_dims::<4>(&[0]);
let shape218_out1: [i64; 4] = {
let axes = &squeeze85_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather182_out1 = shape218_out1[2] as i64;
let shape219_out1: [i64; 4] = {
let axes = &squeeze86_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather183_out1 = shape219_out1[2] as i64;
let sub31_out1 = gather183_out1 - gather182_out1;
let unsqueeze536_out1 = [gather183_out1 as i64];
let slice257_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze536_out1[0], ..]);
let unsqueeze537_out1 = [gather183_out1 as i64];
let constant2626_out1: [i64; 1] = [64i64];
let constant2623_out1: [i64; 1] = [1i64];
let constant2624_out1: [i64; 1] = [1i64];
let concat237_out1: [i64; 4usize] = [
&constant2623_out1[..],
&constant2624_out1[..],
&unsqueeze537_out1[..],
&constant2626_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze538_out1 = [gather183_out1 as i64];
let constant2630_out1: [i64; 1] = [64i64];
let constant2627_out1: [i64; 1] = [1i64];
let constant2628_out1: [i64; 1] = [1i64];
let concat238_out1: [i64; 4usize] = [
&constant2627_out1[..],
&constant2628_out1[..],
&unsqueeze538_out1[..],
&constant2630_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape180_out1 = slice257_out1.reshape(concat237_out1);
let unsqueeze539_out1 = [gather183_out1 as i64];
let slice258_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze539_out1[0], ..]);
let reshape181_out1 = slice258_out1.reshape(concat238_out1);
let unsqueeze540_out1 = [sub31_out1 as i64];
let unsqueeze541_out1 = [gather183_out1 as i64];
let slice259_out1 = constant461_out1
.slice(s![unsqueeze540_out1[0]..unsqueeze541_out1[0], ..]);
let unsqueeze542_out1 = [gather182_out1 as i64];
let constant2642_out1: [i64; 1] = [64i64];
let constant2639_out1: [i64; 1] = [1i64];
let constant2640_out1: [i64; 1] = [1i64];
let concat239_out1: [i64; 4usize] = [
&constant2639_out1[..],
&constant2640_out1[..],
&unsqueeze542_out1[..],
&constant2642_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze543_out1 = [gather182_out1 as i64];
let constant2646_out1: [i64; 1] = [64i64];
let constant2643_out1: [i64; 1] = [1i64];
let constant2644_out1: [i64; 1] = [1i64];
let concat240_out1: [i64; 4usize] = [
&constant2643_out1[..],
&constant2644_out1[..],
&unsqueeze543_out1[..],
&constant2646_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape182_out1 = slice259_out1.reshape(concat239_out1);
let unsqueeze544_out1 = [sub31_out1 as i64];
let unsqueeze545_out1 = [gather183_out1 as i64];
let slice260_out1 = constant474_out1
.slice(s![unsqueeze544_out1[0]..unsqueeze545_out1[0], ..]);
let reshape183_out1 = slice260_out1.reshape(concat240_out1);
let cast294_out1 = reshape182_out1;
let cast295_out1 = reshape183_out1;
let mul234_out1 = squeeze85_out1.clone().mul(cast294_out1);
let shape220_out1: [i64; 4] = {
let axes = &squeeze85_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather184_out1 = shape220_out1[3] as i64;
let constant2652_out1 = 2i64;
let div115_out1 = gather184_out1 / constant2652_out1;
let cast296_out1 = div115_out1;
let cast297_out1 = cast296_out1;
let unsqueeze546_out1 = [cast297_out1 as i64];
let slice261_out1 = squeeze85_out1
.clone()
.slice(s![.., .., .., unsqueeze546_out1[0]..9223372036854775807]);
let neg57_out1 = slice261_out1.neg();
let unsqueeze547_out1 = [cast297_out1 as i64];
let slice262_out1 = squeeze85_out1
.slice(s![.., .., .., 0..unsqueeze547_out1[0]]);
let concat241_out1 = burn::tensor::Tensor::cat(
[neg57_out1, slice262_out1].into(),
3,
);
let mul235_out1 = concat241_out1.mul(cast295_out1);
let add182_out1 = mul234_out1.add(mul235_out1);
let cast298_out1 = reshape180_out1;
let cast299_out1 = reshape181_out1;
let mul236_out1 = squeeze86_out1.clone().mul(cast298_out1);
let shape221_out1: [i64; 4] = {
let axes = &squeeze86_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather185_out1 = shape221_out1[3] as i64;
let constant2662_out1 = 2i64;
let div116_out1 = gather185_out1 / constant2662_out1;
let cast300_out1 = div116_out1;
let cast301_out1 = cast300_out1;
let unsqueeze548_out1 = [cast301_out1 as i64];
let slice263_out1 = squeeze86_out1
.clone()
.slice(s![.., .., .., unsqueeze548_out1[0]..9223372036854775807]);
let neg58_out1 = slice263_out1.neg();
let unsqueeze549_out1 = [cast301_out1 as i64];
let slice264_out1 = squeeze86_out1
.slice(s![.., .., .., 0..unsqueeze549_out1[0]]);
let concat242_out1 = burn::tensor::Tensor::cat(
[neg58_out1, slice264_out1].into(),
3,
);
let mul237_out1 = concat242_out1.mul(cast299_out1);
let add183_out1 = mul236_out1.add(mul237_out1);
let shape222_out1: [i64; 4] = {
let axes = &add182_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice265_out1: [i64; 1] = shape222_out1[3..4].try_into().unwrap();
let cast302_out1 = {
let shape_array = slice265_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt85_out1 = cast302_out1.sqrt();
let constant2673_out1 = self.constant2673.val();
let div117_out1 = constant2673_out1.div(sqrt85_out1);
let cast303_out1 = div117_out1;
let transpose86_out1 = add183_out1.permute([0, 1, 3, 2]);
let sqrt86_out1 = cast303_out1.clone().sqrt();
let mul238_out1 = add182_out1
.mul((sqrt86_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt87_out1 = cast303_out1.sqrt();
let mul239_out1 = transpose86_out1
.mul((sqrt87_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul171_out1 = mul238_out1.matmul(mul239_out1);
let constant2675_out1 = self.constant2675.val();
let constant2674_out1 = self.constant2674.val();
let where63_out1 = constant2675_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant2674_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add184_out1 = matmul171_out1.add(where63_out1);
let softmax29_out1 = burn::tensor::activation::softmax(add184_out1, 3);
let isnan29_out1 = softmax29_out1.clone().is_nan();
let constant2676_out1 = self.constant2676.val();
let where64_out1 = softmax29_out1
.mask_where(
isnan29_out1,
constant2676_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul172_out1 = where64_out1.matmul(squeeze87_out1);
let transpose87_out1 = matmul172_out1.permute([0, 2, 1, 3]);
let unsqueeze550_out1 = [gather180_out1 as i64];
let unsqueeze551_out1 = [gather181_out1 as i64];
let constant2679_out1: [i64; 1] = [512i64];
let concat243_out1: [i64; 3usize] = [
&unsqueeze550_out1[..],
&unsqueeze551_out1[..],
&constant2679_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape184_out1 = transpose87_out1.reshape(concat243_out1);
let linear115_out1 = self.linear115.forward(reshape184_out1);
let add185_out1 = add181_out1.add(linear115_out1);
add185_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule31 {
layernormalization59: LayerNorm,
linear116: Linear,
constant2680: burn::module::Param<Tensor<1>>,
constant2681: burn::module::Param<Tensor<1>>,
constant2682: burn::module::Param<Tensor<1>>,
linear117: Linear,
layernormalization60: LayerNorm,
linear118: Linear,
constant2750: burn::module::Param<Tensor<1>>,
constant2752: burn::module::Param<Tensor<1>>,
constant2751: burn::module::Param<Tensor<1>>,
constant2753: burn::module::Param<Tensor<1>>,
linear119: Linear,
#[module(skip)]
device: Device,
}
impl Submodule31 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization59 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear116 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant2680: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2681: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2682: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear117 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization60 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear118 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant2750: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2752: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2751: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2753: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear119 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization59,
linear116,
constant2680,
constant2681,
constant2682,
linear117,
layernormalization60,
linear118,
constant2750,
constant2752,
constant2751,
constant2753,
linear119,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add185_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization59_out1 = {
let dtype = add185_out1.clone().dtype();
self.layernormalization59
.forward(add185_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear116_out1 = self.linear116.forward(layernormalization59_out1);
let constant2680_out1 = self.constant2680.val();
let div118_out1 = linear116_out1
.clone()
.div((constant2680_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf29_out1 = div118_out1.erf();
let constant2681_out1 = self.constant2681.val();
let add186_out1 = erf29_out1
.add((constant2681_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul240_out1 = linear116_out1.mul(add186_out1);
let constant2682_out1 = self.constant2682.val();
let mul241_out1 = mul240_out1
.mul((constant2682_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear117_out1 = self.linear117.forward(mul241_out1);
let add187_out1 = add185_out1.add(linear117_out1);
let layernormalization60_out1 = {
let dtype = add187_out1.clone().dtype();
self.layernormalization60
.forward(add187_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape223_out1: [i64; 3] = {
let axes = &layernormalization60_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather186_out1 = shape223_out1[0] as i64;
let shape224_out1: [i64; 3] = {
let axes = &layernormalization60_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather187_out1 = shape224_out1[1] as i64;
let linear118_out1 = self.linear118.forward(layernormalization60_out1);
let unsqueeze552_out1 = [gather186_out1 as i64];
let unsqueeze553_out1 = [gather187_out1 as i64];
let constant2689_out1: [i64; 1] = [64i64];
let constant2687_out1: [i64; 1] = [3i64];
let constant2688_out1: [i64; 1] = [8i64];
let concat244_out1: [i64; 5usize] = [
&unsqueeze552_out1[..],
&unsqueeze553_out1[..],
&constant2687_out1[..],
&constant2688_out1[..],
&constant2689_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape185_out1 = linear118_out1.reshape(concat244_out1);
let transpose88_out1 = reshape185_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose88_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split30_out1, split30_out2, split30_out3] = split_tensors
.try_into()
.unwrap();
let squeeze88_out1 = split30_out1.squeeze_dims::<4>(&[0]);
let squeeze89_out1 = split30_out2.squeeze_dims::<4>(&[0]);
let squeeze90_out1 = split30_out3.squeeze_dims::<4>(&[0]);
let shape225_out1: [i64; 4] = {
let axes = &squeeze88_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather188_out1 = shape225_out1[2] as i64;
let shape226_out1: [i64; 4] = {
let axes = &squeeze89_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather189_out1 = shape226_out1[2] as i64;
let sub32_out1 = gather189_out1 - gather188_out1;
let unsqueeze554_out1 = [gather189_out1 as i64];
let slice266_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze554_out1[0], ..]);
let unsqueeze555_out1 = [gather189_out1 as i64];
let constant2703_out1: [i64; 1] = [64i64];
let constant2700_out1: [i64; 1] = [1i64];
let constant2701_out1: [i64; 1] = [1i64];
let concat245_out1: [i64; 4usize] = [
&constant2700_out1[..],
&constant2701_out1[..],
&unsqueeze555_out1[..],
&constant2703_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze556_out1 = [gather189_out1 as i64];
let constant2707_out1: [i64; 1] = [64i64];
let constant2704_out1: [i64; 1] = [1i64];
let constant2705_out1: [i64; 1] = [1i64];
let concat246_out1: [i64; 4usize] = [
&constant2704_out1[..],
&constant2705_out1[..],
&unsqueeze556_out1[..],
&constant2707_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape186_out1 = slice266_out1.reshape(concat245_out1);
let unsqueeze557_out1 = [gather189_out1 as i64];
let slice267_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze557_out1[0], ..]);
let reshape187_out1 = slice267_out1.reshape(concat246_out1);
let unsqueeze558_out1 = [sub32_out1 as i64];
let unsqueeze559_out1 = [gather189_out1 as i64];
let slice268_out1 = constant461_out1
.slice(s![unsqueeze558_out1[0]..unsqueeze559_out1[0], ..]);
let unsqueeze560_out1 = [gather188_out1 as i64];
let constant2719_out1: [i64; 1] = [64i64];
let constant2716_out1: [i64; 1] = [1i64];
let constant2717_out1: [i64; 1] = [1i64];
let concat247_out1: [i64; 4usize] = [
&constant2716_out1[..],
&constant2717_out1[..],
&unsqueeze560_out1[..],
&constant2719_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze561_out1 = [gather188_out1 as i64];
let constant2723_out1: [i64; 1] = [64i64];
let constant2720_out1: [i64; 1] = [1i64];
let constant2721_out1: [i64; 1] = [1i64];
let concat248_out1: [i64; 4usize] = [
&constant2720_out1[..],
&constant2721_out1[..],
&unsqueeze561_out1[..],
&constant2723_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape188_out1 = slice268_out1.reshape(concat247_out1);
let unsqueeze562_out1 = [sub32_out1 as i64];
let unsqueeze563_out1 = [gather189_out1 as i64];
let slice269_out1 = constant474_out1
.slice(s![unsqueeze562_out1[0]..unsqueeze563_out1[0], ..]);
let reshape189_out1 = slice269_out1.reshape(concat248_out1);
let cast304_out1 = reshape188_out1;
let cast305_out1 = reshape189_out1;
let mul242_out1 = squeeze88_out1.clone().mul(cast304_out1);
let shape227_out1: [i64; 4] = {
let axes = &squeeze88_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather190_out1 = shape227_out1[3] as i64;
let constant2729_out1 = 2i64;
let div119_out1 = gather190_out1 / constant2729_out1;
let cast306_out1 = div119_out1;
let cast307_out1 = cast306_out1;
let unsqueeze564_out1 = [cast307_out1 as i64];
let slice270_out1 = squeeze88_out1
.clone()
.slice(s![.., .., .., unsqueeze564_out1[0]..9223372036854775807]);
let neg59_out1 = slice270_out1.neg();
let unsqueeze565_out1 = [cast307_out1 as i64];
let slice271_out1 = squeeze88_out1
.slice(s![.., .., .., 0..unsqueeze565_out1[0]]);
let concat249_out1 = burn::tensor::Tensor::cat(
[neg59_out1, slice271_out1].into(),
3,
);
let mul243_out1 = concat249_out1.mul(cast305_out1);
let add188_out1 = mul242_out1.add(mul243_out1);
let cast308_out1 = reshape186_out1;
let cast309_out1 = reshape187_out1;
let mul244_out1 = squeeze89_out1.clone().mul(cast308_out1);
let shape228_out1: [i64; 4] = {
let axes = &squeeze89_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather191_out1 = shape228_out1[3] as i64;
let constant2739_out1 = 2i64;
let div120_out1 = gather191_out1 / constant2739_out1;
let cast310_out1 = div120_out1;
let cast311_out1 = cast310_out1;
let unsqueeze566_out1 = [cast311_out1 as i64];
let slice272_out1 = squeeze89_out1
.clone()
.slice(s![.., .., .., unsqueeze566_out1[0]..9223372036854775807]);
let neg60_out1 = slice272_out1.neg();
let unsqueeze567_out1 = [cast311_out1 as i64];
let slice273_out1 = squeeze89_out1
.slice(s![.., .., .., 0..unsqueeze567_out1[0]]);
let concat250_out1 = burn::tensor::Tensor::cat(
[neg60_out1, slice273_out1].into(),
3,
);
let mul245_out1 = concat250_out1.mul(cast309_out1);
let add189_out1 = mul244_out1.add(mul245_out1);
let shape229_out1: [i64; 4] = {
let axes = &add188_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice274_out1: [i64; 1] = shape229_out1[3..4].try_into().unwrap();
let cast312_out1 = {
let shape_array = slice274_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt88_out1 = cast312_out1.sqrt();
let constant2750_out1 = self.constant2750.val();
let div121_out1 = constant2750_out1.div(sqrt88_out1);
let cast313_out1 = div121_out1;
let transpose89_out1 = add189_out1.permute([0, 1, 3, 2]);
let sqrt89_out1 = cast313_out1.clone().sqrt();
let mul246_out1 = add188_out1
.mul((sqrt89_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt90_out1 = cast313_out1.sqrt();
let mul247_out1 = transpose89_out1
.mul((sqrt90_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul177_out1 = mul246_out1.matmul(mul247_out1);
let constant2752_out1 = self.constant2752.val();
let constant2751_out1 = self.constant2751.val();
let where65_out1 = constant2752_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant2751_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add190_out1 = matmul177_out1.add(where65_out1);
let softmax30_out1 = burn::tensor::activation::softmax(add190_out1, 3);
let isnan30_out1 = softmax30_out1.clone().is_nan();
let constant2753_out1 = self.constant2753.val();
let where66_out1 = softmax30_out1
.mask_where(
isnan30_out1,
constant2753_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul178_out1 = where66_out1.matmul(squeeze90_out1);
let transpose90_out1 = matmul178_out1.permute([0, 2, 1, 3]);
let unsqueeze568_out1 = [gather186_out1 as i64];
let unsqueeze569_out1 = [gather187_out1 as i64];
let constant2756_out1: [i64; 1] = [512i64];
let concat251_out1: [i64; 3usize] = [
&unsqueeze568_out1[..],
&unsqueeze569_out1[..],
&constant2756_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape190_out1 = transpose90_out1.reshape(concat251_out1);
let linear119_out1 = self.linear119.forward(reshape190_out1);
let add191_out1 = add187_out1.add(linear119_out1);
add191_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule32 {
layernormalization61: LayerNorm,
linear120: Linear,
constant2757: burn::module::Param<Tensor<1>>,
constant2758: burn::module::Param<Tensor<1>>,
constant2759: burn::module::Param<Tensor<1>>,
linear121: Linear,
layernormalization62: LayerNorm,
linear122: Linear,
constant2827: burn::module::Param<Tensor<1>>,
constant2829: burn::module::Param<Tensor<1>>,
constant2828: burn::module::Param<Tensor<1>>,
constant2830: burn::module::Param<Tensor<1>>,
linear123: Linear,
#[module(skip)]
device: Device,
}
impl Submodule32 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization61 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear120 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant2757: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2758: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2759: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear121 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization62 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear122 = LinearConfig::new(512, 1536).with_bias(false).init(device);
let constant2827: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2829: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2828: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let constant2830: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::zeros([1], (device, burn::tensor::DType::F32)),
device.clone(),
false,
[1].into(),
);
let linear123 = LinearConfig::new(512, 512).with_bias(true).init(device);
Self {
layernormalization61,
linear120,
constant2757,
constant2758,
constant2759,
linear121,
layernormalization62,
linear122,
constant2827,
constant2829,
constant2828,
constant2830,
linear123,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add191_out1: Tensor<3>,
constant461_out1: Tensor<2>,
constant474_out1: Tensor<2>,
less4_out1: Tensor<4, Bool>,
) -> Tensor<3> {
let layernormalization61_out1 = {
let dtype = add191_out1.clone().dtype();
self.layernormalization61
.forward(add191_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear120_out1 = self.linear120.forward(layernormalization61_out1);
let constant2757_out1 = self.constant2757.val();
let div122_out1 = linear120_out1
.clone()
.div((constant2757_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf30_out1 = div122_out1.erf();
let constant2758_out1 = self.constant2758.val();
let add192_out1 = erf30_out1
.add((constant2758_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul248_out1 = linear120_out1.mul(add192_out1);
let constant2759_out1 = self.constant2759.val();
let mul249_out1 = mul248_out1
.mul((constant2759_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear121_out1 = self.linear121.forward(mul249_out1);
let add193_out1 = add191_out1.add(linear121_out1);
let layernormalization62_out1 = {
let dtype = add193_out1.clone().dtype();
self.layernormalization62
.forward(add193_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let shape230_out1: [i64; 3] = {
let axes = &layernormalization62_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather192_out1 = shape230_out1[0] as i64;
let shape231_out1: [i64; 3] = {
let axes = &layernormalization62_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather193_out1 = shape231_out1[1] as i64;
let linear122_out1 = self.linear122.forward(layernormalization62_out1);
let unsqueeze570_out1 = [gather192_out1 as i64];
let unsqueeze571_out1 = [gather193_out1 as i64];
let constant2766_out1: [i64; 1] = [64i64];
let constant2764_out1: [i64; 1] = [3i64];
let constant2765_out1: [i64; 1] = [8i64];
let concat252_out1: [i64; 5usize] = [
&unsqueeze570_out1[..],
&unsqueeze571_out1[..],
&constant2764_out1[..],
&constant2765_out1[..],
&constant2766_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape191_out1 = linear122_out1.reshape(concat252_out1);
let transpose91_out1 = reshape191_out1.permute([2, 0, 3, 1, 4]);
let split_tensors = transpose91_out1.split_with_sizes([1, 1, 1].into(), 0);
let [split31_out1, split31_out2, split31_out3] = split_tensors
.try_into()
.unwrap();
let squeeze91_out1 = split31_out1.squeeze_dims::<4>(&[0]);
let squeeze92_out1 = split31_out2.squeeze_dims::<4>(&[0]);
let squeeze93_out1 = split31_out3.squeeze_dims::<4>(&[0]);
let shape232_out1: [i64; 4] = {
let axes = &squeeze91_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather194_out1 = shape232_out1[2] as i64;
let shape233_out1: [i64; 4] = {
let axes = &squeeze92_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather195_out1 = shape233_out1[2] as i64;
let sub33_out1 = gather195_out1 - gather194_out1;
let unsqueeze572_out1 = [gather195_out1 as i64];
let slice275_out1 = constant461_out1
.clone()
.slice(s![0..unsqueeze572_out1[0], ..]);
let unsqueeze573_out1 = [gather195_out1 as i64];
let constant2780_out1: [i64; 1] = [64i64];
let constant2777_out1: [i64; 1] = [1i64];
let constant2778_out1: [i64; 1] = [1i64];
let concat253_out1: [i64; 4usize] = [
&constant2777_out1[..],
&constant2778_out1[..],
&unsqueeze573_out1[..],
&constant2780_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze574_out1 = [gather195_out1 as i64];
let constant2784_out1: [i64; 1] = [64i64];
let constant2781_out1: [i64; 1] = [1i64];
let constant2782_out1: [i64; 1] = [1i64];
let concat254_out1: [i64; 4usize] = [
&constant2781_out1[..],
&constant2782_out1[..],
&unsqueeze574_out1[..],
&constant2784_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape192_out1 = slice275_out1.reshape(concat253_out1);
let unsqueeze575_out1 = [gather195_out1 as i64];
let slice276_out1 = constant474_out1
.clone()
.slice(s![0..unsqueeze575_out1[0], ..]);
let reshape193_out1 = slice276_out1.reshape(concat254_out1);
let unsqueeze576_out1 = [sub33_out1 as i64];
let unsqueeze577_out1 = [gather195_out1 as i64];
let slice277_out1 = constant461_out1
.slice(s![unsqueeze576_out1[0]..unsqueeze577_out1[0], ..]);
let unsqueeze578_out1 = [gather194_out1 as i64];
let constant2796_out1: [i64; 1] = [64i64];
let constant2793_out1: [i64; 1] = [1i64];
let constant2794_out1: [i64; 1] = [1i64];
let concat255_out1: [i64; 4usize] = [
&constant2793_out1[..],
&constant2794_out1[..],
&unsqueeze578_out1[..],
&constant2796_out1[..],
]
.concat()
.try_into()
.unwrap();
let unsqueeze579_out1 = [gather194_out1 as i64];
let constant2800_out1: [i64; 1] = [64i64];
let constant2797_out1: [i64; 1] = [1i64];
let constant2798_out1: [i64; 1] = [1i64];
let concat256_out1: [i64; 4usize] = [
&constant2797_out1[..],
&constant2798_out1[..],
&unsqueeze579_out1[..],
&constant2800_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape194_out1 = slice277_out1.reshape(concat255_out1);
let unsqueeze580_out1 = [sub33_out1 as i64];
let unsqueeze581_out1 = [gather195_out1 as i64];
let slice278_out1 = constant474_out1
.slice(s![unsqueeze580_out1[0]..unsqueeze581_out1[0], ..]);
let reshape195_out1 = slice278_out1.reshape(concat256_out1);
let cast314_out1 = reshape194_out1;
let cast315_out1 = reshape195_out1;
let mul250_out1 = squeeze91_out1.clone().mul(cast314_out1);
let shape234_out1: [i64; 4] = {
let axes = &squeeze91_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather196_out1 = shape234_out1[3] as i64;
let constant2806_out1 = 2i64;
let div123_out1 = gather196_out1 / constant2806_out1;
let cast316_out1 = div123_out1;
let cast317_out1 = cast316_out1;
let unsqueeze582_out1 = [cast317_out1 as i64];
let slice279_out1 = squeeze91_out1
.clone()
.slice(s![.., .., .., unsqueeze582_out1[0]..9223372036854775807]);
let neg61_out1 = slice279_out1.neg();
let unsqueeze583_out1 = [cast317_out1 as i64];
let slice280_out1 = squeeze91_out1
.slice(s![.., .., .., 0..unsqueeze583_out1[0]]);
let concat257_out1 = burn::tensor::Tensor::cat(
[neg61_out1, slice280_out1].into(),
3,
);
let mul251_out1 = concat257_out1.mul(cast315_out1);
let add194_out1 = mul250_out1.add(mul251_out1);
let cast318_out1 = reshape192_out1;
let cast319_out1 = reshape193_out1;
let mul252_out1 = squeeze92_out1.clone().mul(cast318_out1);
let shape235_out1: [i64; 4] = {
let axes = &squeeze92_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let gather197_out1 = shape235_out1[3] as i64;
let constant2816_out1 = 2i64;
let div124_out1 = gather197_out1 / constant2816_out1;
let cast320_out1 = div124_out1;
let cast321_out1 = cast320_out1;
let unsqueeze584_out1 = [cast321_out1 as i64];
let slice281_out1 = squeeze92_out1
.clone()
.slice(s![.., .., .., unsqueeze584_out1[0]..9223372036854775807]);
let neg62_out1 = slice281_out1.neg();
let unsqueeze585_out1 = [cast321_out1 as i64];
let slice282_out1 = squeeze92_out1
.slice(s![.., .., .., 0..unsqueeze585_out1[0]]);
let concat258_out1 = burn::tensor::Tensor::cat(
[neg62_out1, slice282_out1].into(),
3,
);
let mul253_out1 = concat258_out1.mul(cast319_out1);
let add195_out1 = mul252_out1.add(mul253_out1);
let shape236_out1: [i64; 4] = {
let axes = &add194_out1.clone().dims()[0..4];
let mut output = [0i64; 4];
for i in 0..4 {
output[i] = axes[i] as i64;
}
output
};
let slice283_out1: [i64; 1] = shape236_out1[3..4].try_into().unwrap();
let cast322_out1 = {
let shape_array = slice283_out1 as [i64; 1usize];
let float_array: [f64; 1usize] = shape_array.map(|x| x as f64);
Tensor::<
1,
>::from_data(
TensorData::from(float_array),
(&self.device, burn::tensor::DType::F32),
)
};
let sqrt91_out1 = cast322_out1.sqrt();
let constant2827_out1 = self.constant2827.val();
let div125_out1 = constant2827_out1.div(sqrt91_out1);
let cast323_out1 = div125_out1;
let transpose92_out1 = add195_out1.permute([0, 1, 3, 2]);
let sqrt92_out1 = cast323_out1.clone().sqrt();
let mul254_out1 = add194_out1
.mul((sqrt92_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let sqrt93_out1 = cast323_out1.sqrt();
let mul255_out1 = transpose92_out1
.mul((sqrt93_out1).unsqueeze_dims(&[0isize, 1isize, 2isize]));
let matmul183_out1 = mul254_out1.matmul(mul255_out1);
let constant2829_out1 = self.constant2829.val();
let constant2828_out1 = self.constant2828.val();
let where67_out1 = constant2829_out1
.unsqueeze_dims(&[0isize, 1isize, 2isize])
.mask_where(
less4_out1,
constant2828_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let add196_out1 = matmul183_out1.add(where67_out1);
let softmax31_out1 = burn::tensor::activation::softmax(add196_out1, 3);
let isnan31_out1 = softmax31_out1.clone().is_nan();
let constant2830_out1 = self.constant2830.val();
let where68_out1 = softmax31_out1
.mask_where(
isnan31_out1,
constant2830_out1.unsqueeze_dims(&[0isize, 1isize, 2isize]),
);
let matmul184_out1 = where68_out1.matmul(squeeze93_out1);
let transpose93_out1 = matmul184_out1.permute([0, 2, 1, 3]);
let unsqueeze586_out1 = [gather192_out1 as i64];
let unsqueeze587_out1 = [gather193_out1 as i64];
let constant2833_out1: [i64; 1] = [512i64];
let concat259_out1: [i64; 3usize] = [
&unsqueeze586_out1[..],
&unsqueeze587_out1[..],
&constant2833_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape196_out1 = transpose93_out1.reshape(concat259_out1);
let linear123_out1 = self.linear123.forward(reshape196_out1);
let add197_out1 = add193_out1.add(linear123_out1);
add197_out1
}
}
#[derive(Module, Debug)]
pub struct Submodule33 {
layernormalization63: LayerNorm,
linear124: Linear,
constant2834: burn::module::Param<Tensor<1>>,
constant2835: burn::module::Param<Tensor<1>>,
constant2836: burn::module::Param<Tensor<1>>,
linear125: Linear,
layernormalization64: LayerNorm,
linear126: Linear,
constant2843: burn::module::Param<Tensor<1, Int>>,
conv1d1: Conv1d,
linear127: Linear,
linear128: Linear,
averagepool1d1: AvgPool1d,
#[module(skip)]
device: Device,
}
impl Submodule33 {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let layernormalization63 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear124 = LinearConfig::new(512, 2048).with_bias(true).init(device);
let constant2834: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1.4142135381698608f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2835: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([1f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let constant2836: burn::module::Param<Tensor<1>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
>::from_data(
burn::tensor::TensorData::from([0.5f64]),
(device, burn::tensor::DType::F32),
),
device.clone(),
false,
[1].into(),
);
let linear125 = LinearConfig::new(2048, 512).with_bias(true).init(device);
let layernormalization64 = LayerNormConfig::new(512)
.with_epsilon(0.000009999999747378752f64)
.with_bias(true)
.init(device);
let linear126 = LinearConfig::new(512, 192).with_bias(true).init(device);
let constant2843: burn::module::Param<Tensor<1, Int>> = burn::module::Param::uninitialized(
burn::module::ParamId::new(),
move |device, _require_grad| Tensor::<
1,
Int,
>::from_data(
burn::tensor::TensorData::from([-1i64]),
(device, burn::tensor::DType::I64),
),
device.clone(),
false,
[1].into(),
);
let conv1d1 = Conv1dConfig::new(192, 1536, 3)
.with_stride(1)
.with_padding(PaddingConfig1d::Explicit(1, 1))
.with_dilation(1)
.with_groups(1)
.with_bias(true)
.init(device);
let linear127 = LinearConfig::new(192, 192).with_bias(true).init(device);
let linear128 = LinearConfig::new(192, 8).with_bias(true).init(device);
let averagepool1d1 = AvgPool1dConfig::new(8)
.with_stride(8)
.with_padding(PaddingConfig1d::Valid)
.with_count_include_pad(false)
.with_ceil_mode(true)
.init();
Self {
layernormalization63,
linear124,
constant2834,
constant2835,
constant2836,
linear125,
layernormalization64,
linear126,
constant2843,
conv1d1,
linear127,
linear128,
averagepool1d1,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
add197_out1: Tensor<3>,
cast11_out1: Tensor<1, Int>,
) -> (Tensor<3>, Tensor<3>) {
let layernormalization63_out1 = {
let dtype = add197_out1.clone().dtype();
self.layernormalization63
.forward(add197_out1.clone().cast(burn::tensor::DType::F32))
.cast(dtype)
};
let linear124_out1 = self.linear124.forward(layernormalization63_out1);
let constant2834_out1 = self.constant2834.val();
let div126_out1 = linear124_out1
.clone()
.div((constant2834_out1).unsqueeze_dims(&[0isize, 1isize]));
let erf31_out1 = div126_out1.erf();
let constant2835_out1 = self.constant2835.val();
let add198_out1 = erf31_out1
.add((constant2835_out1).unsqueeze_dims(&[0isize, 1isize]));
let mul256_out1 = linear124_out1.mul(add198_out1);
let constant2836_out1 = self.constant2836.val();
let mul257_out1 = mul256_out1
.mul((constant2836_out1).unsqueeze_dims(&[0isize, 1isize]));
let linear125_out1 = self.linear125.forward(mul257_out1);
let add199_out1 = add197_out1.add(linear125_out1);
let layernormalization64_out1 = {
let dtype = add199_out1.dtype();
self.layernormalization64
.forward(add199_out1.cast(burn::tensor::DType::F32))
.cast(dtype)
};
let cast324_out1 = cast11_out1;
let linear126_out1 = self.linear126.forward(layernormalization64_out1);
let shape237_out1: [i64; 3] = {
let axes = &linear126_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather198_out1 = shape237_out1[1] as i64;
let cast325_out1 = gather198_out1;
let range7_out1 = {
let start = 0i64;
let delta = 1i64;
assert!(delta != 0);
let n = (((cast325_out1 as i128 - start as i128) as f64) / delta as f64)
.ceil()
.max(0.0) as i64;
Tensor::arange(0..n, &self.device)
.cast(burn::tensor::DType::I64)
.mul_scalar(delta)
.add_scalar(start)
};
let unsqueeze588_out1 = [gather198_out1 as i64];
let constant2840_out1: [i64; 1] = [1i64];
let concat260_out1: [i64; 2usize] = [
&constant2840_out1[..],
&unsqueeze588_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape197_out1 = concat260_out1;
let shape238_out1: [i64; 1] = [2i64];
let constantofshape6_out1 = Tensor::<
1,
Int,
>::from_data(
burn::tensor::TensorData::from([1i64 as i64]),
(&self.device, burn::tensor::DType::I64),
)
.reshape([1])
.expand(shape238_out1);
let constant2843_out1 = self.constant2843.val();
let mul258_out1 = constantofshape6_out1.clone().mul(constant2843_out1);
let equal4_out1 = Tensor::<
1,
burn::tensor::Int,
>::from_data(
burn::tensor::TensorData::from(&reshape197_out1 as &[i64]),
(&self.device, burn::tensor::DType::I64),
)
.equal(mul258_out1);
let where69_out1 = Tensor::<
1,
burn::tensor::Int,
>::from_data(
burn::tensor::TensorData::from(&reshape197_out1 as &[i64]),
(&self.device, burn::tensor::DType::I64),
)
.mask_where(equal4_out1, constantofshape6_out1);
let constant2844_out1 = -1i64;
let mul259_out1 = {
let mut result = reshape197_out1;
let scalar = constant2844_out1;
for result_item in result.iter_mut() {
*result_item = result_item.saturating_mul(scalar);
}
result
};
let max4_out1 = {
let __lhs = reshape197_out1;
let __rhs = mul259_out1;
core::array::from_fn::<i64, 2usize, _>(|__i| (__lhs[__i]).max(__rhs[__i]))
};
let expand4_out1 = {
let onnx_shape: [i64; 2usize] = max4_out1;
let input_dims = range7_out1.dims();
let mut shape = onnx_shape;
#[allow(clippy::needless_range_loop)]
for i in 0..1usize {
let dim_offset = 1usize + i;
if shape[dim_offset] == 1 && input_dims[i] > 1 {
shape[dim_offset] = input_dims[i] as i64;
}
}
range7_out1.expand(shape)
};
let unsqueeze589_out1: Tensor<2, Int> = cast324_out1.unsqueeze_dims::<2>(&[1]);
let less5_out1 = expand4_out1.lower(unsqueeze589_out1);
let shape239_out1: [i64; 3] = {
let axes = &linear126_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather199_out1 = shape239_out1[0] as i64;
let shape240_out1: [i64; 3] = {
let axes = &linear126_out1.clone().dims()[0..3];
let mut output = [0i64; 3];
for i in 0..3 {
output[i] = axes[i] as i64;
}
output
};
let gather200_out1 = shape240_out1[2] as i64;
let transpose94_out1 = linear126_out1.permute([0, 2, 1]);
let conv1d1_out1 = self.conv1d1.forward(transpose94_out1);
let transpose95_out1 = conv1d1_out1.permute([0, 2, 1]);
let unsqueeze590_out1 = [gather199_out1 as i64];
let unsqueeze591_out1 = [gather198_out1 as i64];
let unsqueeze592_out1 = [gather200_out1 as i64];
let constant2850_out1: [i64; 1] = [8i64];
let concat261_out1: [i64; 4usize] = [
&unsqueeze590_out1[..],
&unsqueeze591_out1[..],
&constant2850_out1[..],
&unsqueeze592_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape198_out1 = transpose95_out1.reshape(concat261_out1);
let constant2852_out1 = 8i64;
let mul260_out1 = gather198_out1 * constant2852_out1;
let unsqueeze593_out1 = [gather199_out1 as i64];
let unsqueeze594_out1 = [mul260_out1 as i64];
let unsqueeze595_out1 = [gather200_out1 as i64];
let concat262_out1: [i64; 3usize] = [
&unsqueeze593_out1[..],
&unsqueeze594_out1[..],
&unsqueeze595_out1[..],
]
.concat()
.try_into()
.unwrap();
let reshape199_out1 = reshape198_out1.reshape(concat262_out1);
let unsqueeze596_out1: Tensor<3, Bool> = less5_out1.unsqueeze_dims::<3>(&[2]);
let tile1_out1 = unsqueeze596_out1.repeat(&[1, 1, 8]);
let flatten1_out1 = {
let leading_dim = tile1_out1.shape()[..1].iter().product::<usize>() as i32;
tile1_out1.reshape::<2, _>([leading_dim, -1])
};
let relu1_out1 = burn::tensor::activation::relu(reshape199_out1);
let linear127_out1 = self.linear127.forward(relu1_out1);
let relu2_out1 = burn::tensor::activation::relu(linear127_out1);
let linear128_out1 = self.linear128.forward(relu2_out1);
let sigmoid1_out1 = burn::tensor::activation::sigmoid(linear128_out1);
let unsqueeze597_out1: Tensor<3, Bool> = flatten1_out1
.unsqueeze_dims::<3>(&[-1]);
let cast326_out1 = unsqueeze597_out1.float().cast(burn::tensor::DType::F32);
let mul261_out1 = sigmoid1_out1.mul(cast326_out1);
let transpose96_out1 = mul261_out1.clone().permute([0, 2, 1]);
let averagepool1d1_out1 = self.averagepool1d1.forward(transpose96_out1);
let transpose97_out1 = averagepool1d1_out1.permute([0, 2, 1]);
(transpose97_out1, mul261_out1)
}
}
#[derive(Module, Debug)]
pub struct Model {
submodule1: Submodule1,
submodule2: Submodule2,
submodule3: Submodule3,
submodule4: Submodule4,
submodule5: Submodule5,
submodule6: Submodule6,
submodule7: Submodule7,
submodule8: Submodule8,
submodule9: Submodule9,
submodule10: Submodule10,
submodule11: Submodule11,
submodule12: Submodule12,
submodule13: Submodule13,
submodule14: Submodule14,
submodule15: Submodule15,
submodule16: Submodule16,
submodule17: Submodule17,
submodule18: Submodule18,
submodule19: Submodule19,
submodule20: Submodule20,
submodule21: Submodule21,
submodule22: Submodule22,
submodule23: Submodule23,
submodule24: Submodule24,
submodule25: Submodule25,
submodule26: Submodule26,
submodule27: Submodule27,
submodule28: Submodule28,
submodule29: Submodule29,
submodule30: Submodule30,
submodule31: Submodule31,
submodule32: Submodule32,
submodule33: Submodule33,
#[module(skip)]
device: Device,
}
impl Model {
#[allow(unused_variables)]
pub fn new(device: &Device) -> Self {
let submodule1 = Submodule1::new(device);
let submodule2 = Submodule2::new(device);
let submodule3 = Submodule3::new(device);
let submodule4 = Submodule4::new(device);
let submodule5 = Submodule5::new(device);
let submodule6 = Submodule6::new(device);
let submodule7 = Submodule7::new(device);
let submodule8 = Submodule8::new(device);
let submodule9 = Submodule9::new(device);
let submodule10 = Submodule10::new(device);
let submodule11 = Submodule11::new(device);
let submodule12 = Submodule12::new(device);
let submodule13 = Submodule13::new(device);
let submodule14 = Submodule14::new(device);
let submodule15 = Submodule15::new(device);
let submodule16 = Submodule16::new(device);
let submodule17 = Submodule17::new(device);
let submodule18 = Submodule18::new(device);
let submodule19 = Submodule19::new(device);
let submodule20 = Submodule20::new(device);
let submodule21 = Submodule21::new(device);
let submodule22 = Submodule22::new(device);
let submodule23 = Submodule23::new(device);
let submodule24 = Submodule24::new(device);
let submodule25 = Submodule25::new(device);
let submodule26 = Submodule26::new(device);
let submodule27 = Submodule27::new(device);
let submodule28 = Submodule28::new(device);
let submodule29 = Submodule29::new(device);
let submodule30 = Submodule30::new(device);
let submodule31 = Submodule31::new(device);
let submodule32 = Submodule32::new(device);
let submodule33 = Submodule33::new(device);
Self {
submodule1,
submodule2,
submodule3,
submodule4,
submodule5,
submodule6,
submodule7,
submodule8,
submodule9,
submodule10,
submodule11,
submodule12,
submodule13,
submodule14,
submodule15,
submodule16,
submodule17,
submodule18,
submodule19,
submodule20,
submodule21,
submodule22,
submodule23,
submodule24,
submodule25,
submodule26,
submodule27,
submodule28,
submodule29,
submodule30,
submodule31,
submodule32,
submodule33,
device: device.clone(),
}
}
#[allow(clippy::let_and_return, clippy::approx_constant)]
pub fn forward(
&self,
chunk: Tensor<3>,
chunk_lengths: Tensor<1, Int>,
spkcache: Tensor<3>,
spkcache_lengths: Tensor<1, Int>,
fifo: Tensor<3>,
fifo_lengths: Tensor<1, Int>,
) -> (Tensor<3>, Tensor<3>, Tensor<3>, Tensor<1, Int>) {
let (reducesum1_out1, reshape8_out1, linear1_out1, cast5_out1) = self
.submodule1
.forward(
chunk,
chunk_lengths,
spkcache,
fifo,
spkcache_lengths,
fifo_lengths,
);
let (add17_out1, constant461_out1, constant474_out1, less4_out1, cast11_out1) = self
.submodule2
.forward(reducesum1_out1, reshape8_out1);
let add23_out1 = self
.submodule3
.forward(
add17_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add29_out1 = self
.submodule4
.forward(
add23_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add35_out1 = self
.submodule5
.forward(
add29_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add41_out1 = self
.submodule6
.forward(
add35_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add47_out1 = self
.submodule7
.forward(
add41_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add53_out1 = self
.submodule8
.forward(
add47_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add59_out1 = self
.submodule9
.forward(
add53_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add65_out1 = self
.submodule10
.forward(
add59_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add71_out1 = self
.submodule11
.forward(
add65_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add77_out1 = self
.submodule12
.forward(
add71_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add83_out1 = self
.submodule13
.forward(
add77_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add89_out1 = self
.submodule14
.forward(
add83_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add95_out1 = self
.submodule15
.forward(
add89_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add101_out1 = self
.submodule16
.forward(
add95_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add107_out1 = self
.submodule17
.forward(
add101_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add113_out1 = self
.submodule18
.forward(
add107_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add119_out1 = self
.submodule19
.forward(
add113_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add125_out1 = self
.submodule20
.forward(
add119_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add131_out1 = self
.submodule21
.forward(
add125_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add137_out1 = self
.submodule22
.forward(
add131_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add143_out1 = self
.submodule23
.forward(
add137_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add149_out1 = self
.submodule24
.forward(
add143_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add155_out1 = self
.submodule25
.forward(
add149_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add161_out1 = self
.submodule26
.forward(
add155_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add167_out1 = self
.submodule27
.forward(
add161_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add173_out1 = self
.submodule28
.forward(
add167_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add179_out1 = self
.submodule29
.forward(
add173_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add185_out1 = self
.submodule30
.forward(
add179_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add191_out1 = self
.submodule31
.forward(
add185_out1,
constant461_out1.clone(),
constant474_out1.clone(),
less4_out1.clone(),
);
let add197_out1 = self
.submodule32
.forward(add191_out1, constant461_out1, constant474_out1, less4_out1);
let (transpose97_out1, mul261_out1) = self
.submodule33
.forward(add197_out1, cast11_out1);
(transpose97_out1, mul261_out1, linear1_out1, cast5_out1)
}
}