shellsim 0.1.18__tar.gz → 0.1.20__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. {shellsim-0.1.18 → shellsim-0.1.20}/Cargo.lock +1 -1
  2. {shellsim-0.1.18 → shellsim-0.1.20}/Cargo.toml +1 -1
  3. {shellsim-0.1.18 → shellsim-0.1.20}/PKG-INFO +1 -1
  4. {shellsim-0.1.18 → shellsim-0.1.20}/python/native/Cargo.lock +2 -2
  5. {shellsim-0.1.18 → shellsim-0.1.20}/python/native/Cargo.toml +1 -1
  6. {shellsim-0.1.18 → shellsim-0.1.20}/src/interp.rs +12 -1
  7. shellsim-0.1.20/src/python/complex.rs +971 -0
  8. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/heap.rs +10 -0
  9. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/mod.rs +1 -0
  10. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/native.rs +50 -1
  11. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/number.rs +110 -15
  12. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/object_model.rs +98 -23
  13. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/parser.rs +20 -0
  14. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/protocol.rs +42 -4
  15. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/argparse.rs +1 -0
  16. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/core.rs +43 -0
  17. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/frozen.rs +0 -1
  18. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/math.rs +43 -0
  19. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/mod.rs +0 -1
  20. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/numpy.rs +465 -73
  21. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/os.rs +1 -0
  22. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/pytest.rs +1 -0
  23. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/re.rs +2 -0
  24. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/random.py +17 -0
  25. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/sys.rs +19 -2
  26. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/unittest.rs +1 -0
  27. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/vm/calls.rs +1 -0
  28. shellsim-0.1.20/src/python/vm/format.rs +352 -0
  29. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/vm/namespace.rs +6 -0
  30. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/vm/native_runtime.rs +14 -1
  31. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/vm/objects.rs +87 -61
  32. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/vm/operations.rs +34 -41
  33. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/vm.rs +18 -242
  34. shellsim-0.1.18/src/python/stdlib/source/complex.py +0 -112
  35. {shellsim-0.1.18 → shellsim-0.1.20}/LICENSE +0 -0
  36. {shellsim-0.1.18 → shellsim-0.1.20}/README.md +0 -0
  37. {shellsim-0.1.18 → shellsim-0.1.20}/pyproject.toml +0 -0
  38. {shellsim-0.1.18 → shellsim-0.1.20}/python/native/src/lib.rs +0 -0
  39. {shellsim-0.1.18 → shellsim-0.1.20}/python/shellsim/__init__.py +0 -0
  40. {shellsim-0.1.18 → shellsim-0.1.20}/python/shellsim/__main__.py +0 -0
  41. {shellsim-0.1.18 → shellsim-0.1.20}/python/shellsim/_api.py +0 -0
  42. {shellsim-0.1.18 → shellsim-0.1.20}/python/shellsim/_cli.py +0 -0
  43. {shellsim-0.1.18 → shellsim-0.1.20}/python/shellsim/py.typed +0 -0
  44. {shellsim-0.1.18 → shellsim-0.1.20}/python/shellsim/python.py +0 -0
  45. {shellsim-0.1.18 → shellsim-0.1.20}/rust-toolchain.toml +0 -0
  46. {shellsim-0.1.18 → shellsim-0.1.20}/src/arith.rs +0 -0
  47. {shellsim-0.1.18 → shellsim-0.1.20}/src/bin/shellsim-python.rs +0 -0
  48. {shellsim-0.1.18 → shellsim-0.1.20}/src/clock.rs +0 -0
  49. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/archives.rs +0 -0
  50. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/arcmd.rs +0 -0
  51. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/awk/ast.rs +0 -0
  52. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/awk/eval.rs +0 -0
  53. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/awk/lexer.rs +0 -0
  54. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/awk/parser.rs +0 -0
  55. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/awk.rs +0 -0
  56. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/bc.rs +0 -0
  57. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/builtins.rs +0 -0
  58. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/dd.rs +0 -0
  59. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/diff.rs +0 -0
  60. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/echo.rs +0 -0
  61. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/expr.rs +0 -0
  62. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/find.rs +0 -0
  63. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/format.rs +0 -0
  64. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/fs.rs +0 -0
  65. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/apply.rs +0 -0
  66. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/commit.rs +0 -0
  67. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/compare.rs +0 -0
  68. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/config.rs +0 -0
  69. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/conflict.rs +0 -0
  70. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/diff.rs +0 -0
  71. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/ignore.rs +0 -0
  72. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/import.rs +0 -0
  73. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/log.rs +0 -0
  74. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/merge.rs +0 -0
  75. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/mod.rs +0 -0
  76. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/plumbing.rs +0 -0
  77. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/rebase.rs +0 -0
  78. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/refs.rs +0 -0
  79. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/repo.rs +0 -0
  80. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/stash.rs +0 -0
  81. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/switch.rs +0 -0
  82. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/git/worktree.rs +0 -0
  83. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/grep.rs +0 -0
  84. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/hashing.rs +0 -0
  85. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/makecmd.rs +0 -0
  86. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/mod.rs +0 -0
  87. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/net.rs +0 -0
  88. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/options.rs +0 -0
  89. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/patch.rs +0 -0
  90. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/pkg.rs +0 -0
  91. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/printf.rs +0 -0
  92. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/proc.rs +0 -0
  93. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/regex_compat.rs +0 -0
  94. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/rgcmd.rs +0 -0
  95. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/sed.rs +0 -0
  96. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/sort.rs +0 -0
  97. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/streams.rs +0 -0
  98. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/system.rs +0 -0
  99. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/tarcmd.rs +0 -0
  100. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/text.rs +0 -0
  101. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/unavailable.rs +0 -0
  102. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/util.rs +0 -0
  103. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/wasm.rs +0 -0
  104. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/xargs.rs +0 -0
  105. {shellsim-0.1.18 → shellsim-0.1.20}/src/commands/zipcmd.rs +0 -0
  106. {shellsim-0.1.18 → shellsim-0.1.20}/src/corpus.rs +0 -0
  107. {shellsim-0.1.18 → shellsim-0.1.20}/src/descriptors.rs +0 -0
  108. {shellsim-0.1.18 → shellsim-0.1.20}/src/display.rs +0 -0
  109. {shellsim-0.1.18 → shellsim-0.1.20}/src/exec.rs +0 -0
  110. {shellsim-0.1.18 → shellsim-0.1.20}/src/expand.rs +0 -0
  111. {shellsim-0.1.18 → shellsim-0.1.20}/src/harness.rs +0 -0
  112. {shellsim-0.1.18 → shellsim-0.1.20}/src/harness_manager.rs +0 -0
  113. {shellsim-0.1.18 → shellsim-0.1.20}/src/hashes.rs +0 -0
  114. {shellsim-0.1.18 → shellsim-0.1.20}/src/host_ingest.rs +0 -0
  115. {shellsim-0.1.18 → shellsim-0.1.20}/src/jqcmd.rs +0 -0
  116. {shellsim-0.1.18 → shellsim-0.1.20}/src/lib.rs +0 -0
  117. {shellsim-0.1.18 → shellsim-0.1.20}/src/main.rs +0 -0
  118. {shellsim-0.1.18 → shellsim-0.1.20}/src/mcp.rs +0 -0
  119. {shellsim-0.1.18 → shellsim-0.1.20}/src/net.rs +0 -0
  120. {shellsim-0.1.18 → shellsim-0.1.20}/src/netcmd.rs +0 -0
  121. {shellsim-0.1.18 → shellsim-0.1.20}/src/process.rs +0 -0
  122. {shellsim-0.1.18 → shellsim-0.1.20}/src/profile.rs +0 -0
  123. {shellsim-0.1.18 → shellsim-0.1.20}/src/program/cat.rs +0 -0
  124. {shellsim-0.1.18 → shellsim-0.1.20}/src/program/env.rs +0 -0
  125. {shellsim-0.1.18 → shellsim-0.1.20}/src/program/find.rs +0 -0
  126. {shellsim-0.1.18 → shellsim-0.1.20}/src/program/head.rs +0 -0
  127. {shellsim-0.1.18 → shellsim-0.1.20}/src/program/make.rs +0 -0
  128. {shellsim-0.1.18 → shellsim-0.1.20}/src/program/nice.rs +0 -0
  129. {shellsim-0.1.18 → shellsim-0.1.20}/src/program/nohup.rs +0 -0
  130. {shellsim-0.1.18 → shellsim-0.1.20}/src/program/sleep.rs +0 -0
  131. {shellsim-0.1.18 → shellsim-0.1.20}/src/program/tee.rs +0 -0
  132. {shellsim-0.1.18 → shellsim-0.1.20}/src/program/timeout.rs +0 -0
  133. {shellsim-0.1.18 → shellsim-0.1.20}/src/program/xargs.rs +0 -0
  134. {shellsim-0.1.18 → shellsim-0.1.20}/src/program.rs +0 -0
  135. {shellsim-0.1.18 → shellsim-0.1.20}/src/pseudo_fs.rs +0 -0
  136. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/ast.rs +0 -0
  137. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/bytecode.rs +0 -0
  138. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/compiler.rs +0 -0
  139. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/filesystem.rs +0 -0
  140. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/http.rs +0 -0
  141. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/lexer.rs +0 -0
  142. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/mapping.rs +0 -0
  143. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/process.rs +0 -0
  144. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/slice.rs +0 -0
  145. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/source.rs +0 -0
  146. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/asyncio.rs +0 -0
  147. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/base64.rs +0 -0
  148. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/bisect.rs +0 -0
  149. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/collections.rs +0 -0
  150. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/dataclasses.rs +0 -0
  151. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/enum.rs +0 -0
  152. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/functools.rs +0 -0
  153. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/hashlib.rs +0 -0
  154. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/heapq.rs +0 -0
  155. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/http.rs +0 -0
  156. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/importlib.rs +0 -0
  157. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/itertools.rs +0 -0
  158. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/json.rs +0 -0
  159. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/abc.py +0 -0
  160. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/asyncio.py +0 -0
  161. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/base64.py +0 -0
  162. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/cmath.py +0 -0
  163. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/codecs.py +0 -0
  164. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/collections.py +0 -0
  165. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/copy.py +0 -0
  166. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/csv.py +0 -0
  167. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/datetime.py +0 -0
  168. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/functools.py +0 -0
  169. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/glob.py +0 -0
  170. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/hashlib.py +0 -0
  171. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/http.py +0 -0
  172. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/http_client.py +0 -0
  173. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/importlib.py +0 -0
  174. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/io.py +0 -0
  175. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/json.py +0 -0
  176. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/logging.py +0 -0
  177. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/numpy_random.py +0 -0
  178. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/os.py +0 -0
  179. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/pathlib.py +0 -0
  180. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/pytest.py +0 -0
  181. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/shutil.py +0 -0
  182. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/signal.py +0 -0
  183. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/statistics.py +0 -0
  184. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/struct.py +0 -0
  185. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/subprocess.py +0 -0
  186. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/tempfile.py +0 -0
  187. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/textwrap.py +0 -0
  188. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/urllib.py +0 -0
  189. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/urllib_error.py +0 -0
  190. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/urllib_request.py +0 -0
  191. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/uuid.py +0 -0
  192. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/zipfile.py +0 -0
  193. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/source/zlib.py +0 -0
  194. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/string.rs +0 -0
  195. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/struct.rs +0 -0
  196. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/subprocess.rs +0 -0
  197. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/time.rs +0 -0
  198. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/typing.rs +0 -0
  199. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/vfs.rs +0 -0
  200. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/stdlib/zlib.rs +0 -0
  201. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/string.rs +0 -0
  202. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/token.rs +0 -0
  203. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/vm/dispatch.rs +0 -0
  204. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/vm/host.rs +0 -0
  205. {shellsim-0.1.18 → shellsim-0.1.20}/src/python/vm/iteration.rs +0 -0
  206. {shellsim-0.1.18 → shellsim-0.1.20}/src/realtime.rs +0 -0
  207. {shellsim-0.1.18 → shellsim-0.1.20}/src/resources.rs +0 -0
  208. {shellsim-0.1.18 → shellsim-0.1.20}/src/sandbox.rs +0 -0
  209. {shellsim-0.1.18 → shellsim-0.1.20}/src/scenario.rs +0 -0
  210. {shellsim-0.1.18 → shellsim-0.1.20}/src/scheduler.rs +0 -0
  211. {shellsim-0.1.18 → shellsim-0.1.20}/src/shell.rs +0 -0
  212. {shellsim-0.1.18 → shellsim-0.1.20}/src/syscalls.rs +0 -0
  213. {shellsim-0.1.18 → shellsim-0.1.20}/src/telemetry.rs +0 -0
  214. {shellsim-0.1.18 → shellsim-0.1.20}/src/vfs.rs +0 -0
@@ -861,7 +861,7 @@ dependencies = [
861
861
 
862
862
  [[package]]
863
863
  name = "shellsim"
864
- version = "0.1.18"
864
+ version = "0.1.20"
865
865
  dependencies = [
866
866
  "base64",
867
867
  "crc32fast",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "shellsim"
3
- version = "0.1.18"
3
+ version = "0.1.20"
4
4
  edition = "2021"
5
5
  description = "In-process BusyBox-like environment for RL rollouts and agent tests"
6
6
  license = "Apache-2.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shellsim
3
- Version: 0.1.18
3
+ Version: 0.1.20
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: License :: OSI Approved :: Apache Software License
6
6
  Classifier: Operating System :: MacOS :: MacOS X
@@ -925,7 +925,7 @@ dependencies = [
925
925
 
926
926
  [[package]]
927
927
  name = "shellsim"
928
- version = "0.1.18"
928
+ version = "0.1.20"
929
929
  dependencies = [
930
930
  "base64",
931
931
  "crc32fast",
@@ -947,7 +947,7 @@ dependencies = [
947
947
 
948
948
  [[package]]
949
949
  name = "shellsim-python-bindings"
950
- version = "0.1.18"
950
+ version = "0.1.20"
951
951
  dependencies = [
952
952
  "pyo3",
953
953
  "serde",
@@ -2,7 +2,7 @@
2
2
 
3
3
  [package]
4
4
  name = "shellsim-python-bindings"
5
- version = "0.1.18"
5
+ version = "0.1.20"
6
6
  edition = "2021"
7
7
  description = "Python bindings for shellsim"
8
8
  license = "Apache-2.0"
@@ -162,7 +162,7 @@ pub struct ProcessState {
162
162
  pub session_id: ProcessId,
163
163
  /// Process group inherited across ordinary forks or established by a group leader.
164
164
  pub process_group: ProcessId,
165
- /// PID expanded by `$$`; preserved across Bash subshells.
165
+ /// PID expanded by `$$`; preserved across Bash subshells and reset when a shell image loads.
166
166
  pub shell_pid: ProcessId,
167
167
  /// shell + environment variables (we don't distinguish exported vs not for simplicity,
168
168
  /// except that `env`/child python only sees exported ones, tracked in `exported`)
@@ -1102,6 +1102,17 @@ impl Environment {
1102
1102
  state.command_hash.clear();
1103
1103
  state.directory_stack.clear();
1104
1104
  state.local_scopes.clear();
1105
+ // The new image is a fresh shell: `$$` names it, and loop, job, and getopts state from
1106
+ // the forked parent shell do not carry over.
1107
+ state.shell_pid = pid;
1108
+ state.jobs.clear();
1109
+ state.next_job_id = 1;
1110
+ state.loop_depth = 0;
1111
+ state.cond_depth = 0;
1112
+ state.getopts = GetoptsState {
1113
+ optind: 1,
1114
+ offset: 1,
1115
+ };
1105
1116
  state.arg0 = image.arg0;
1106
1117
  state.positional = image.positional;
1107
1118
  state.opt_errexit = image.errexit;