1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
//! Core environment trait and associated types.
//!
//! The [`Env`] trait is the central abstraction in gmgn, defining how an
//! agent interacts with a reinforcement learning environment through
//! [`step`](Env::step) and [`reset`](Env::reset).
//!
//! Mirrors [Gymnasium `Env`](https://gymnasium.farama.org/api/env/) adapted to
//! idiomatic Rust with associated types.
use HashMap;
use crateResult;
use crateSpace;
/// A single value in the auxiliary [`Info`] dictionary.
///
/// Covers the most common payload types that Gymnasium environments return
/// while remaining `Debug + Clone + Send` without requiring `serde` or `Any`.
/// Auxiliary diagnostic information returned alongside observations.
///
/// Mirrors the `info` dict in Gymnasium. Used for debugging, logging, and
/// passing environment-specific metadata such as episode statistics.
pub type Info = ;
/// The result of a single environment [`step`](Env::step).
/// The result of an environment [`reset`](Env::reset).
/// How the environment should be rendered.
/// A rendered frame produced by [`Env::render`].
/// A reinforcement learning environment.
///
/// This is the core trait that all environments must implement. It mirrors
/// the Gymnasium `Env` API adapted to idiomatic Rust with associated types.
///
/// # Associated Types
///
/// - `Obs` — The observation type returned by `step` and `reset`.
/// - `Act` — The action type accepted by `step`.
/// - `ObsSpace` — The space that describes valid observations.
/// - `ActSpace` — The space that describes valid actions.
///
/// # Lifecycle
///
/// 1. Create the environment via its constructor (or [`make`](crate::registry::make)).
/// 2. Call [`reset`](Env::reset) to obtain the first observation.
/// 3. Repeatedly call [`step`](Env::step) with actions.
/// 4. Call [`close`](Env::close) when done.