r2l_core/utils/
actor_wrapper.rs1use std::marker::PhantomData;
2
3use crate::{error::Result, models::Actor, tensor::R2lTensor};
4
5#[derive(Debug, Clone)]
6pub struct ActorWrapper<A: Actor + Clone, T: R2lTensor> {
7 actor: A,
8 env: PhantomData<T>,
9}
10
11impl<D: Actor + Clone, T: R2lTensor> ActorWrapper<D, T> {
12 pub fn new(actor: D) -> Self {
13 Self {
14 actor,
15 env: PhantomData,
16 }
17 }
18}
19
20impl<D: Actor + Clone, T: R2lTensor> Actor for ActorWrapper<D, T> {
21 type Tensor = T;
22
23 fn action(&self, observation: Self::Tensor) -> Result<Self::Tensor> {
24 let action = self.actor.action(D::Tensor::convert(&observation)?)?;
25 Ok(T::convert(&action)?)
26 }
27
28 fn mode_action(&self, observation: Self::Tensor) -> Result<Self::Tensor> {
29 let action = self.actor.mode_action(D::Tensor::convert(&observation)?)?;
30 Ok(T::convert(&action)?)
31 }
32}