Execute a program to completion. Args: program: The program to execute input_data: Optional input data keyed by slot number step_limit: Maximum steps before raising RuntimeError (0 = unlimited) Returns: Output data keyed by s
(
self,
program: Program,
input_data: dict[int, Any] | None = None,
step_limit: int = 0,
)
| 219 | } |
| 220 | |
| 221 | def execute( |
| 222 | self, |
| 223 | program: Program, |
| 224 | input_data: dict[int, Any] | None = None, |
| 225 | step_limit: int = 0, |
| 226 | ) -> dict[int, Any]: |
| 227 | """ |
| 228 | Execute a program to completion. |
| 229 | |
| 230 | Args: |
| 231 | program: The program to execute |
| 232 | input_data: Optional input data keyed by slot number |
| 233 | step_limit: Maximum steps before raising RuntimeError (0 = unlimited) |
| 234 | |
| 235 | Returns: |
| 236 | Output data keyed by slot number |
| 237 | |
| 238 | Raises: |
| 239 | XQVMError: On execution errors |
| 240 | """ |
| 241 | self.state.reset() |
| 242 | self.program = program |
| 243 | |
| 244 | if input_data: |
| 245 | for slot, value in input_data.items(): |
| 246 | self.state.set_input(slot, value) |
| 247 | |
| 248 | for target_id, pc in program.jump_targets.items(): |
| 249 | self.state.jc.define_target(target_id, pc) |
| 250 | |
| 251 | while not self.state.halted and self.state.pc < len(program): |
| 252 | if step_limit > 0 and self.state.steps >= step_limit: |
| 253 | raise RuntimeError(f"StepLimitExceeded: execution exceeded {step_limit} steps") |
| 254 | self.state.steps += 1 |
| 255 | self.step() |
| 256 | |
| 257 | return dict(self.state.output) |
| 258 | |
| 259 | @property |
| 260 | def steps(self) -> int: |