mod async_vec;
mod sync_vec;
mod wrapper;
pub use async_vec::AsyncVectorEnv;
pub use sync_vec::SyncVectorEnv;
pub use wrapper::VecRecordEpisodeStatistics;
use crate::env::{Info, RenderFrame};
use crate::error::Result;
#[derive(Debug, Clone)]
pub struct VecStepResult<O> {
pub obs: Vec<O>,
pub rewards: Vec<f64>,
pub terminated: Vec<bool>,
pub truncated: Vec<bool>,
pub infos: Vec<Info>,
}
#[derive(Debug, Clone)]
pub struct VecResetResult<O> {
pub obs: Vec<O>,
pub infos: Vec<Info>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum AutoresetMode {
#[default]
NextStep,
SameStep,
Disabled,
}
pub trait VectorEnv {
type Obs;
type Act;
fn num_envs(&self) -> usize;
fn reset(&mut self, seed: Option<u64>) -> Result<VecResetResult<Self::Obs>>;
fn step(&mut self, actions: &[Self::Act]) -> Result<VecStepResult<Self::Obs>>;
fn render(&mut self) -> Result<Vec<RenderFrame>>;
fn close(&mut self);
}