Organisationsahrefsocannl166b2f ()freebsd-14.2-5.3_opam-2.3

freebsd-14.2-5.3_opam-2.3

Link Copied
Code Copied

Logs

2025-07-12 12:51.58: New job: test ahrefs/ocannl https://github.com/ahrefs/ocannl.git#refs/heads/master (166b2f63b9fa9e2b6f88b16530142b364ba817b4) (freebsd-x86_64:freebsd-14.2-5.3_opam-2.3)
Base: freebsd-14.2-ocaml-5.3
Opam project build


To reproduce locally:


git clone --recursive "https://github.com/ahrefs/ocannl.git" -b "master" && cd "ocannl" && git reset --hard 166b2f63
cat > Dockerfile <<'END-OF-DOCKERFILE'
FROM freebsd-14.2-ocaml-5.3
# freebsd-14.2-5.3_opam-2.3
USER 1000:1000
ENV CLICOLOR_FORCE="1"
ENV OPAMCOLOR="always"
WORKDIR /src
RUN sudo ln -f /usr/local/bin/opam-2.3 /usr/local/bin/opam
RUN opam init --reinit -ni
RUN uname -rs && opam exec -- ocaml -version && opam --version
WORKDIR /src
RUN sudo chown opam /src
RUN cd ~/opam-repository && (git cat-file -e 64169c3d1d6774ef4ce0fcc471269bb09cd215f5 || git fetch origin master) && git reset -q --hard 64169c3d1d6774ef4ce0fcc471269bb09cd215f5 && git log --no-decorate -n1 --oneline && opam update -u
COPY --chown=1000:1000 neural_nets_lib.opam arrayjit.opam ./
RUN opam pin add -yn neural_nets_lib.dev './' && \
opam pin add -yn arrayjit.dev './'
RUN echo '(lang dune 3.0)' > './dune-project'
ENV DEPS="angstrom.0.16.1 astring.0.8.5 backoff.0.1.1 base.v0.17.3 base-bigarray.base base-bytes.base base-domains.base base-effects.base base-nnp.base base-threads.base base-unix.base bigarray-compat.1.1.0 bigstringaf.0.10.0 camlp-streams.5.0.1 camlzip.1.13 cmdliner.1.3.0 conf-libcurl.2 conf-libffi.2.0.0 conf-pkg-config.4 conf-zlib.1 cppo.1.8.0 csexp.1.5.2 csv.2.4 ctypes.0.23.0 ctypes-foreign.0.23.0 curl.0.10.0 dune.3.19.1 dune-configurator.3.19.1 fieldslib.v0.17.0 fmt.0.10.0 integers.0.7.0 jane-street-headers.v0.17.0 jst-config.v0.17.0 logs.0.9.0 mdx.2.5.0 mtime.2.1.0 multicore-magic.2.3.1 num.1.6 ocaml.5.3.0 ocaml-base-compiler.5.3.0 ocaml-compiler.5.3.0 ocaml-compiler-libs.v0.17.0 ocaml-config.3 ocaml-options-vanilla.1 ocaml-syntax-shims.1.0.0 ocaml-version.4.0.1 ocaml_intrinsics_kernel.v0.17.1 ocamlbuild.0.16.1 ocamlfind.1.9.8 parsexp.v0.17.0 pprint.20230830 ppx_assert.v0.17.0 ppx_base.v0.17.0 ppx_cold.v0.17.0 ppx_compare.v0.17.0 ppx_derivers.1.2.1 ppx_deriving.6.1.0 ppx_enumerate.v0.17.0 ppx_expect.v0.17.3 ppx_fields_conv.v0.17.0 ppx_globalize.v0.17.2 ppx_hash.v0.17.0 ppx_here.v0.17.0 ppx_inline_test.v0.17.1 ppx_minidebug.2.3.0 ppx_optcomp.v0.17.1 ppx_sexp_conv.v0.17.1 ppx_string.v0.17.0 ppx_variants_conv.v0.17.1 ppxlib.0.36.0 ppxlib_jane.v0.17.4 printbox.0.12 printbox-ext-plot.0.12 printbox-html.0.12 printbox-md.0.12 printbox-text.0.12 ptime.1.2.0 re.1.13.2 result.1.5 saturn_lockfree.0.5.0 seq.base sexplib.v0.17.0 sexplib0.v0.17.0 stdio.v0.17.0 stdlib-shims.0.3.0 thread-local-storage.0.2 time_now.v0.17.0 topkg.1.0.8 tyxml.4.6.0 uucp.16.0.0 uutf.1.0.4 variantslib.v0.17.0"
ENV CI="true"
ENV OCAMLCI="true"
RUN opam update --depexts && opam install --cli=2.3 --depext-only -y neural_nets_lib.dev arrayjit.dev $DEPS
RUN opam install $DEPS
COPY --chown=1000:1000 . /src
RUN opam exec -- dune build @install @check @runtest && rm -rf _build


END-OF-DOCKERFILE
docker build .
END-REPRO-BLOCK


2025-07-12 12:51.58: Using cache hint "ahrefs/ocannl-freebsd-14.2-ocaml-5.3-freebsd-14.2-5.3_opam-2.3-ee06dfbb3e21290708c2c8a6224283e3"
2025-07-12 12:51.58: Using OBuilder spec:
((from freebsd-14.2-ocaml-5.3)
(comment freebsd-14.2-5.3_opam-2.3)
(user (uid 1000) (gid 1000))
(env CLICOLOR_FORCE 1)
(env OPAMCOLOR always)
(workdir /src)
(run (shell "sudo ln -f /usr/local/bin/opam-2.3 /usr/local/bin/opam"))
(run (shell "opam init --reinit -ni"))
(run (shell "uname -rs && opam exec -- ocaml -version && opam --version"))
(workdir /src)
(run (shell "sudo chown opam /src"))
(run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "cd ~/opam-repository && (git cat-file -e 64169c3d1d6774ef4ce0fcc471269bb09cd215f5 || git fetch origin master) && git reset -q --hard 64169c3d1d6774ef4ce0fcc471269bb09cd215f5 && git log --no-decorate -n1 --oneline && opam update -u"))
(copy (src neural_nets_lib.opam arrayjit.opam) (dst ./))
(run (network host)
(shell  "opam pin add -yn neural_nets_lib.dev './' && \
\nopam pin add -yn arrayjit.dev './'"))
(run (network host)
(shell "echo '(lang dune 3.0)' > './dune-project'"))
(env DEPS "angstrom.0.16.1 astring.0.8.5 backoff.0.1.1 base.v0.17.3 base-bigarray.base base-bytes.base base-domains.base base-effects.base base-nnp.base base-threads.base base-unix.base bigarray-compat.1.1.0 bigstringaf.0.10.0 camlp-streams.5.0.1 camlzip.1.13 cmdliner.1.3.0 conf-libcurl.2 conf-libffi.2.0.0 conf-pkg-config.4 conf-zlib.1 cppo.1.8.0 csexp.1.5.2 csv.2.4 ctypes.0.23.0 ctypes-foreign.0.23.0 curl.0.10.0 dune.3.19.1 dune-configurator.3.19.1 fieldslib.v0.17.0 fmt.0.10.0 integers.0.7.0 jane-street-headers.v0.17.0 jst-config.v0.17.0 logs.0.9.0 mdx.2.5.0 mtime.2.1.0 multicore-magic.2.3.1 num.1.6 ocaml.5.3.0 ocaml-base-compiler.5.3.0 ocaml-compiler.5.3.0 ocaml-compiler-libs.v0.17.0 ocaml-config.3 ocaml-options-vanilla.1 ocaml-syntax-shims.1.0.0 ocaml-version.4.0.1 ocaml_intrinsics_kernel.v0.17.1 ocamlbuild.0.16.1 ocamlfind.1.9.8 parsexp.v0.17.0 pprint.20230830 ppx_assert.v0.17.0 ppx_base.v0.17.0 ppx_cold.v0.17.0 ppx_compare.v0.17.0 ppx_derivers.1.2.1 ppx_deriving.6.1.0 ppx_enumerate.v0.17.0 ppx_expect.v0.17.3 ppx_fields_conv.v0.17.0 ppx_globalize.v0.17.2 ppx_hash.v0.17.0 ppx_here.v0.17.0 ppx_inline_test.v0.17.1 ppx_minidebug.2.3.0 ppx_optcomp.v0.17.1 ppx_sexp_conv.v0.17.1 ppx_string.v0.17.0 ppx_variants_conv.v0.17.1 ppxlib.0.36.0 ppxlib_jane.v0.17.4 printbox.0.12 printbox-ext-plot.0.12 printbox-html.0.12 printbox-md.0.12 printbox-text.0.12 ptime.1.2.0 re.1.13.2 result.1.5 saturn_lockfree.0.5.0 seq.base sexplib.v0.17.0 sexplib0.v0.17.0 stdio.v0.17.0 stdlib-shims.0.3.0 thread-local-storage.0.2 time_now.v0.17.0 topkg.1.0.8 tyxml.4.6.0 uucp.16.0.0 uutf.1.0.4 variantslib.v0.17.0")
(env CI true)
(env OCAMLCI true)
(run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "opam update --depexts && opam install --cli=2.3 --depext-only -y neural_nets_lib.dev arrayjit.dev $DEPS"))
(run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "opam install $DEPS"))
(copy (src .) (dst /src))
(run (shell "opam exec -- dune build @install @check @runtest && rm -rf _build"))
)


2025-07-12 12:51.58: Waiting for resource in pool OCluster
2025-07-12 12:51.59: Waiting for worker…
2025-07-12 12:51.59: Got resource from pool OCluster
Building on rosemary
Updating files: 100% (134/134), done.
HEAD is now at dbff017f Fix missing reshape in Tnode.create_with_reshape
HEAD is now at 166b2f63 Better naming Ndarray.apply


(from freebsd-14.2-ocaml-5.3)
2025-07-12 12:52.06 ---> using "47c9a03b962be450225081ed69acde1f5c6dadb6d1106d9b1a8b4fd61c2defa6" from cache


/: (comment freebsd-14.2-5.3_opam-2.3)


/: (user (uid 1000) (gid 1000))


/: (env CLICOLOR_FORCE 1)


/: (env OPAMCOLOR always)


/: (workdir /src)


/src: (run (shell "sudo ln -f /usr/local/bin/opam-2.3 /usr/local/bin/opam"))
2025-07-12 12:52.07 ---> using "6c919feff42b8acbece064f547886f17e62a0f8c652c95803d5cc1a0edc05bf0" from cache


/src: (run (shell "opam init --reinit -ni"))
No configuration file found, using built-in defaults.
Checking for available remotes: rsync and local, git.
- you won't be able to use mercurial repositories unless you install the hg command on your system.
- you won't be able to use darcs repositories unless you install the darcs command on your system.


This version of opam requires an update to the layout of /home/opam/.opam from version 2.1 to version 2.2, which can't be reverted.
You may want to back it up before going further.


Continue? [y/n] y
[NOTE] The 'jobs' option was reset, its value was 1 and its new value will vary according to the current number of cores on your machine. You can restore the fixed value using:
opam option jobs=1 --global
Format upgrade done.


<><> Updating repositories ><><><><><><><><><><><><><><><><><><><><><><><><><><>
[default] no changes from git+file:///home/opam/opam-repository
2025-07-12 12:52.08 ---> using "ef1aecc2d79e0d6d7a69975e03fbee48aae321cc5ded967c4b85817abcd33408" from cache


/src: (run (shell "uname -rs && opam exec -- ocaml -version && opam --version"))
FreeBSD 14.2-RELEASE-p1
The OCaml toplevel, version 5.3.0
2.3.0
2025-07-12 12:52.08 ---> using "b81c61e28dd398a2621aef3fc778c808fda4399fe66dbfb28a40b55bd44ce32a" from cache


/src: (workdir /src)


/src: (run (shell "sudo chown opam /src"))
2025-07-12 12:52.09 ---> using "46859cd3f1ed5f6081f98d282b27cc9fcab2b0b04b4be45ac52d723eb6d8a59e" from cache


/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "cd ~/opam-repository && (git cat-file -e 64169c3d1d6774ef4ce0fcc471269bb09cd215f5 || git fetch origin master) && git reset -q --hard 64169c3d1d6774ef4ce0fcc471269bb09cd215f5 && git log --no-decorate -n1 --oneline && opam update -u"))
From https://github.com/ocaml/opam-repository
* branch                  master     -> FETCH_HEAD
0d013e603b..64169c3d1d  master     -> origin/master
64169c3d1d Merge pull request #28149 from dbuenzli/b0-publish-logs.0.9.0


<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>
[default] synchronised from git+file:///home/opam/opam-repository


Everything as up-to-date as possible (run with --verbose to show unavailable upgrades).


The following packages are not being upgraded because the new versions conflict with other installed packages:
- ocaml.5.5.0
- ocaml-compiler.5.5
 ocaml-base-compiler.5.4.0~alpha1 is installed and requires ocaml-compiler = 5.4.0~alpha1
However, you may "opam upgrade" these packages explicitly, which will ask permission to downgrade or uninstall the conflicting packages.
Nothing to do.
2025-07-12 12:52.10 ---> using "ce147729ecceb3d9906718fbb52fb5e226d413d99dd3ea744c8b087f17bc4312" from cache


/src: (copy (src neural_nets_lib.opam arrayjit.opam) (dst ./))
2025-07-12 12:52.10 ---> using "af5059fbf619e98d4070ca57243f7485610cdf00ad4cd04d5604ca976b684355" from cache


/src: (run (network host)
(shell  "opam pin add -yn neural_nets_lib.dev './' && \
\nopam pin add -yn arrayjit.dev './'"))
[neural_nets_lib.dev] synchronised (file:///src)
neural_nets_lib is now pinned to file:///src (version dev)
[arrayjit.dev] synchronised (file:///src)
arrayjit is now pinned to file:///src (version dev)
2025-07-12 12:52.12 ---> using "33856674654ed4d154e7702290a3b900bc97c8e97200401cf5e33d3565c97868" from cache


/src: (run (network host)
(shell "echo '(lang dune 3.0)' > './dune-project'"))
2025-07-12 12:52.12 ---> using "23fc9b8b00cba3cd86e4123d8497eaf9da1a7a5c9e9cebf2e828fc71404d50f0" from cache


/src: (env DEPS "angstrom.0.16.1 astring.0.8.5 backoff.0.1.1 base.v0.17.3 base-bigarray.base base-bytes.base base-domains.base base-effects.base base-nnp.base base-threads.base base-unix.base bigarray-compat.1.1.0 bigstringaf.0.10.0 camlp-streams.5.0.1 camlzip.1.13 cmdliner.1.3.0 conf-libcurl.2 conf-libffi.2.0.0 conf-pkg-config.4 conf-zlib.1 cppo.1.8.0 csexp.1.5.2 csv.2.4 ctypes.0.23.0 ctypes-foreign.0.23.0 curl.0.10.0 dune.3.19.1 dune-configurator.3.19.1 fieldslib.v0.17.0 fmt.0.10.0 integers.0.7.0 jane-street-headers.v0.17.0 jst-config.v0.17.0 logs.0.9.0 mdx.2.5.0 mtime.2.1.0 multicore-magic.2.3.1 num.1.6 ocaml.5.3.0 ocaml-base-compiler.5.3.0 ocaml-compiler.5.3.0 ocaml-compiler-libs.v0.17.0 ocaml-config.3 ocaml-options-vanilla.1 ocaml-syntax-shims.1.0.0 ocaml-version.4.0.1 ocaml_intrinsics_kernel.v0.17.1 ocamlbuild.0.16.1 ocamlfind.1.9.8 parsexp.v0.17.0 pprint.20230830 ppx_assert.v0.17.0 ppx_base.v0.17.0 ppx_cold.v0.17.0 ppx_compare.v0.17.0 ppx_derivers.1.2.1 ppx_deriving.6.1.0 ppx_enumerate.v0.17.0 ppx_expect.v0.17.3 ppx_fields_conv.v0.17.0 ppx_globalize.v0.17.2 ppx_hash.v0.17.0 ppx_here.v0.17.0 ppx_inline_test.v0.17.1 ppx_minidebug.2.3.0 ppx_optcomp.v0.17.1 ppx_sexp_conv.v0.17.1 ppx_string.v0.17.0 ppx_variants_conv.v0.17.1 ppxlib.0.36.0 ppxlib_jane.v0.17.4 printbox.0.12 printbox-ext-plot.0.12 printbox-html.0.12 printbox-md.0.12 printbox-text.0.12 ptime.1.2.0 re.1.13.2 result.1.5 saturn_lockfree.0.5.0 seq.base sexplib.v0.17.0 sexplib0.v0.17.0 stdio.v0.17.0 stdlib-shims.0.3.0 thread-local-storage.0.2 time_now.v0.17.0 topkg.1.0.8 tyxml.4.6.0 uucp.16.0.0 uutf.1.0.4 variantslib.v0.17.0")


/src: (env CI true)


/src: (env OCAMLCI true)


/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "opam update --depexts && opam install --cli=2.3 --depext-only -y neural_nets_lib.dev arrayjit.dev $DEPS"))
[WARNING] Unknown update command for bsd, skipping system update


<><> Synchronising pinned packages ><><><><><><><><><><><><><><><><><><><><><><>
[neural_nets_lib.dev] synchronised (file:///src)
[arrayjit.dev] synchronised (file:///src)


[NOTE] Package ocaml-options-vanilla is already installed (current version is 1).
[NOTE] Package ocaml-config is already installed (current version is 3).
[NOTE] Package ocaml-compiler is already installed (current version is 5.3.0).
[NOTE] Package ocaml-base-compiler is already installed (current version is 5.3.0).
[NOTE] Package ocaml is already installed (current version is 5.3.0).
[NOTE] Package base-unix is already installed (current version is base).
[NOTE] Package base-threads is already installed (current version is base).
[NOTE] Package base-nnp is already installed (current version is base).
[NOTE] Package base-effects is already installed (current version is base).
[NOTE] Package base-domains is already installed (current version is base).
[NOTE] Package base-bigarray is already installed (current version is base).
2025-07-12 12:52.13 ---> using "6862bd6a1c3795bdc9c0a3983080e523a5ad6f0d705946aa71af4afa05c4c801" from cache


/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "opam install $DEPS"))
[NOTE] Package ocaml-options-vanilla is already installed (current version is 1).
[NOTE] Package ocaml-config is already installed (current version is 3).
[NOTE] Package ocaml-compiler is already installed (current version is 5.3.0).
[NOTE] Package ocaml-base-compiler is already installed (current version is 5.3.0).
[NOTE] Package ocaml is already installed (current version is 5.3.0).
[NOTE] Package base-unix is already installed (current version is base).
[NOTE] Package base-threads is already installed (current version is base).
[NOTE] Package base-nnp is already installed (current version is base).
[NOTE] Package base-effects is already installed (current version is base).
[NOTE] Package base-domains is already installed (current version is base).
[NOTE] Package base-bigarray is already installed (current version is base).
The following actions will be performed:
=== install 81 packages
 angstrom                0.16.1
 astring                 0.8.5
 backoff                 0.1.1
 base                    v0.17.3
 base-bytes              base
 bigarray-compat         1.1.0
 bigstringaf             0.10.0
 camlp-streams           5.0.1
 camlzip                 1.13
 cmdliner                1.3.0
 conf-libcurl            2
 conf-libffi             2.0.0
 conf-pkg-config         4
 conf-zlib               1
 cppo                    1.8.0
 csexp                   1.5.2
 csv                     2.4
 ctypes                  0.23.0
 ctypes-foreign          0.23.0
 curl                    0.10.0
 dune                    3.19.1
 dune-configurator       3.19.1
 fieldslib               v0.17.0
 fmt                     0.10.0
 integers                0.7.0
 jane-street-headers     v0.17.0
 jst-config              v0.17.0
 logs                    0.9.0
 mdx                     2.5.0
 mtime                   2.1.0
 multicore-magic         2.3.1
 num                     1.6
 ocaml-compiler-libs     v0.17.0
 ocaml-syntax-shims      1.0.0
 ocaml-version           4.0.1
 ocaml_intrinsics_kernel v0.17.1
 ocamlbuild              0.16.1
 ocamlfind               1.9.8
 parsexp                 v0.17.0
 pprint                  20230830
 ppx_assert              v0.17.0
 ppx_base                v0.17.0
 ppx_cold                v0.17.0
 ppx_compare             v0.17.0
 ppx_derivers            1.2.1
 ppx_deriving            6.1.0
 ppx_enumerate           v0.17.0
 ppx_expect              v0.17.3
 ppx_fields_conv         v0.17.0
 ppx_globalize           v0.17.2
 ppx_hash                v0.17.0
 ppx_here                v0.17.0
 ppx_inline_test         v0.17.1
 ppx_minidebug           2.3.0
 ppx_optcomp             v0.17.1
 ppx_sexp_conv           v0.17.1
 ppx_string              v0.17.0
 ppx_variants_conv       v0.17.1
 ppxlib                  0.36.0
 ppxlib_jane             v0.17.4
 printbox                0.12
 printbox-ext-plot       0.12
 printbox-html           0.12
 printbox-md             0.12
 printbox-text           0.12
 ptime                   1.2.0
 re                      1.13.2
 result                  1.5
 saturn_lockfree         0.5.0
 seq                     base
 sexplib                 v0.17.0
 sexplib0                v0.17.0
 stdio                   v0.17.0
 stdlib-shims            0.3.0
 thread-local-storage    0.2
 time_now                v0.17.0
 topkg                   1.0.8
 tyxml                   4.6.0
 uucp                    16.0.0
 uutf                    1.0.4
 variantslib             v0.17.0


<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
 retrieved astring.0.8.5  (cached)
 retrieved backoff.0.1.1  (cached)
 retrieved angstrom.0.16.1  (cached)
 retrieved bigarray-compat.1.1.0  (cached)
 retrieved bigstringaf.0.10.0  (cached)
 retrieved camlp-streams.5.0.1  (cached)
 retrieved camlzip.1.13  (cached)
 installed conf-pkg-config.4
 installed conf-libcurl.2
 retrieved cppo.1.8.0  (cached)
 installed conf-zlib.1
 installed conf-libffi.2.0.0
 retrieved cmdliner.1.3.0  (cached)
 retrieved csv.2.4  (cached)
 retrieved csexp.1.5.2  (cached)
 retrieved ctypes.0.23.0, ctypes-foreign.0.23.0  (cached)
 retrieved curl.0.10.0  (cached)
 retrieved base.v0.17.3  (cached)
 retrieved fieldslib.v0.17.0  (cached)
 retrieved fmt.0.10.0  (cached)
 retrieved integers.0.7.0  (cached)
 retrieved jane-street-headers.v0.17.0  (cached)
 retrieved jst-config.v0.17.0  (cached)
 retrieved logs.0.9.0  (cached)
 retrieved mtime.2.1.0  (cached)
 retrieved mdx.2.5.0  (cached)
 retrieved multicore-magic.2.3.1  (cached)
 retrieved num.1.6  (cached)
 retrieved ocaml-syntax-shims.1.0.0  (cached)
 retrieved ocaml-compiler-libs.v0.17.0  (cached)
 retrieved ocaml-version.4.0.1  (cached)
 retrieved ocaml_intrinsics_kernel.v0.17.1  (cached)
 retrieved ocamlbuild.0.16.1  (cached)
 retrieved parsexp.v0.17.0  (cached)
 retrieved ocamlfind.1.9.8  (cached)
 retrieved ppx_assert.v0.17.0  (cached)
 retrieved pprint.20230830  (cached)
 retrieved ppx_base.v0.17.0  (cached)
 retrieved ppx_cold.v0.17.0  (cached)
 retrieved ppx_compare.v0.17.0  (cached)
 retrieved ppx_derivers.1.2.1  (cached)
 retrieved ppx_deriving.6.1.0  (cached)
 retrieved ppx_enumerate.v0.17.0  (cached)
 retrieved ppx_expect.v0.17.3  (cached)
 retrieved ppx_fields_conv.v0.17.0  (cached)
 retrieved ppx_globalize.v0.17.2  (cached)
 retrieved ppx_hash.v0.17.0  (cached)
 retrieved ppx_here.v0.17.0  (cached)
 retrieved ppx_inline_test.v0.17.1  (cached)
 retrieved dune.3.19.1, dune-configurator.3.19.1  (cached)
 retrieved ppx_sexp_conv.v0.17.1  (cached)
 retrieved ppx_string.v0.17.0  (cached)
 retrieved ppx_optcomp.v0.17.1  (cached)
 retrieved ppx_variants_conv.v0.17.1  (cached)
 retrieved ppx_minidebug.2.3.0  (cached)
 retrieved ppxlib_jane.v0.17.4  (cached)
 retrieved ppxlib.0.36.0  (cached)
 retrieved ptime.1.2.0  (cached)
 retrieved re.1.13.2  (cached)
 retrieved result.1.5  (cached)
 retrieved seq.base  (cached)
 installed seq.base
 retrieved sexplib.v0.17.0  (cached)
 retrieved saturn_lockfree.0.5.0  (cached)
 retrieved sexplib0.v0.17.0  (cached)
 retrieved stdio.v0.17.0  (cached)
 retrieved stdlib-shims.0.3.0  (cached)
 retrieved thread-local-storage.0.2  (cached)
 retrieved printbox.0.12, printbox-ext-plot.0.12, printbox-html.0.12, printbox-md.0.12, printbox-text.0.12  (cached)
 retrieved topkg.1.0.8  (cached)
 retrieved tyxml.4.6.0  (cached)
 retrieved time_now.v0.17.0  (cached)
 retrieved uutf.1.0.4  (cached)
 retrieved variantslib.v0.17.0  (cached)
 retrieved uucp.16.0.0  (cached)
 installed ocamlfind.1.9.8
 installed base-bytes.base
 installed cmdliner.1.3.0
 installed num.1.6
 installed ocamlbuild.0.16.1
 installed camlzip.1.13
 installed topkg.1.0.8
 installed ptime.1.2.0
 installed mtime.2.1.0
 installed fmt.0.10.0
 installed astring.0.8.5
 installed uutf.1.0.4
 installed logs.0.9.0
 installed uucp.16.0.0
 installed dune.3.19.1
 installed printbox.0.12
 installed result.1.5
 installed stdlib-shims.0.3.0
 installed ppx_derivers.1.2.1
 installed pprint.20230830
 installed ocaml_intrinsics_kernel.v0.17.1
 installed ocaml-version.4.0.1
 installed ocaml-syntax-shims.1.0.0
 installed ocaml-compiler-libs.v0.17.0
 installed multicore-magic.2.3.1
 installed thread-local-storage.0.2
 installed jane-street-headers.v0.17.0
 installed csv.2.4
 installed csexp.1.5.2
 installed integers.0.7.0
 installed printbox-text.0.12
 installed sexplib0.v0.17.0
 installed re.1.13.2
 installed printbox-md.0.12
 installed cppo.1.8.0
 installed camlp-streams.5.0.1
 installed dune-configurator.3.19.1
 installed parsexp.v0.17.0
 installed tyxml.4.6.0
 installed bigstringaf.0.10.0
 installed printbox-html.0.12
 installed sexplib.v0.17.0
 installed mdx.2.5.0
 installed bigarray-compat.1.1.0
 installed printbox-ext-plot.0.12
 installed angstrom.0.16.1
 installed curl.0.10.0
 installed backoff.0.1.1
 installed saturn_lockfree.0.5.0
 installed base.v0.17.3
 installed fieldslib.v0.17.0
 installed variantslib.v0.17.0
 installed stdio.v0.17.0
 installed ctypes.0.23.0
 installed ppxlib.0.36.0
 installed ppx_cold.v0.17.0
 installed ppx_here.v0.17.0
 installed ppx_optcomp.v0.17.1
 installed ppx_variants_conv.v0.17.1
 installed ctypes-foreign.0.23.0
 installed ppxlib_jane.v0.17.4
 installed ppx_fields_conv.v0.17.0
 installed ppx_deriving.6.1.0
 installed ppx_enumerate.v0.17.0
 installed ppx_globalize.v0.17.2
 installed ppx_compare.v0.17.0
 installed ppx_sexp_conv.v0.17.1
 installed ppx_hash.v0.17.0
 installed ppx_assert.v0.17.0
 installed ppx_base.v0.17.0
 installed jst-config.v0.17.0
 installed ppx_minidebug.2.3.0
 installed ppx_string.v0.17.0
 installed time_now.v0.17.0
 installed ppx_inline_test.v0.17.1
 installed ppx_expect.v0.17.3
Done.
2025-07-12 12:52.13 ---> using "70bb8e4117d7b52c6872d84b605a793e6e927c8c7502ec9c55b225a4b738f45b" from cache


/src: (copy (src .) (dst /src))
2025-07-12 12:52.24 ---> saved as "9d044283fab366c71f764becfea157b5993c737f6ce8c397138758d40c1e876b"


/src: (run (shell "opam exec -- dune build @install @check @runtest && rm -rf _build"))
File "arrayjit/test/dune", line 6, characters 7-15:
6 |   (pps ppx_jane)))
^^^^^^^^
Error: Library "ppx_jane" not found.
-> required by
_build/default/arrayjit/test/.merlin-conf/exe-test_numerical_types
-> required by alias arrayjit/test/check
(cd _build/default/test/config && ../../arrayjit/bin/read_config.exe --read=backend)


Welcome to OCANNL! Reading configuration defaults from /src/_build/default/test/config/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
Wrote value of 'backend' to ocannl_backend.txt
File "test_ppx/test_ppx_op_expected.ml", line 1, characters 0-0:
/usr/local/bin/git --no-pager diff --no-index --color=always -u _build/default/test_ppx/test_ppx_op_expected.ml _build/default/test_ppx/test_ppx_op_actual.ml
diff --git a/_build/default/test_ppx/test_ppx_op_expected.ml b/_build/default/test_ppx/test_ppx_op_actual.ml
index a6aa4ae..c971ef0 100644
--- a/_build/default/test_ppx/test_ppx_op_expected.ml
+++ b/_build/default/test_ppx/test_ppx_op_actual.ml
@@ -2,20 +2,20 @@ open Base
open Ocannl
module TDSL = Operation.TDSL
let y0 =
-  let hey1 = TDSL.param ?values:None "hey1" in
+  let hey1 = TDSL.param ?value:None "hey1" in
let open! TDSL.O in
((+) ?label:(Some ["y0"]))
((( *. ) ?label:None) (TDSL.number (Float.of_int 2)) hey1)
(TDSL.number (Float.of_int 3))
let y1 =
-  let hey2 = TDSL.param ?values:None "hey2" in
+  let hey2 = TDSL.param ?value:None "hey2" in
let open! TDSL.O in
fun x ->
((+) ?label:(Some
(List.concat [["y1"]; (x.Tensor.value).Ir.Tnode.label])))
((( * ) ?label:None) hey2 (TDSL.number (Float.of_int 2))) x
let y2 =
-  let hey3 = TDSL.param ?values:None "hey3" in
+  let hey3 = TDSL.param ?value:None "hey3" in
let open! TDSL.O in
fun x1 x2 ->
((+) ?label:(Some
@@ -36,14 +36,14 @@ let b =
~output_dims:[2]
[|(Float.of_int 7);(Float.of_int 8);(Float.of_int 9);(Float.of_int 10)|]
let y =
-  let hey4 = TDSL.param ?values:None "hey4" in
+  let hey4 = TDSL.param ?value:None "hey4" in
let open! TDSL.O in
((+) ?label:(Some ["y"]))
((( * ) ?label:None) hey4 (TDSL.number ?label:None ~axis_label:"q" 2.0))
(TDSL.number ?label:None ~axis_label:"p" 1.0)
let z =
-  let hey5 = TDSL.param ?values:None "hey5"
-  and hey6 = TDSL.param ?values:None "hey6" in
+  let hey5 = TDSL.param ?value:None "hey5"
+  and hey6 = TDSL.param ?value:None "hey6" in
let open! TDSL.O in
((+) ?label:(Some ["z"]))
((( * ) ?label:None) (TDSL.number ?label:None ~axis_label:"q" 2.0) hey5)
@@ -51,8 +51,8 @@ let z =
let stride = 2
and dilation = 3
let z2 =
-  let hey7 = TDSL.param ?values:None "hey7"
-  and hey8 = TDSL.param ?values:None "hey8" in
+  let hey7 = TDSL.param ?value:None "hey7"
+  and hey8 = TDSL.param ?value:None "hey8" in
let open! TDSL.O in
TDSL.einsum ?label:(Some ["z2"])
(String.concat ~sep:""
@@ -61,8 +61,8 @@ let z2 =
let z3 =
let s = 2
and d = 3 in
-  let hey10 = TDSL.param ?values:None "hey10"
-  and hey9 = TDSL.param ?values:None "hey9" in
+  let hey10 = TDSL.param ?value:None "hey10"
+  and hey9 = TDSL.param ?value:None "hey9" in
let open! TDSL.O in
TDSL.einsum ?label:(Some [])
(String.concat ~sep:""
@@ -78,7 +78,7 @@ let mlp_layer =
let b =
(TDSL.param ~more_label:(config.label)) ~output_dims:[config.hid_dim]
"b"
-      and w = (TDSL.param ~more_label:(config.label)) ?values:None "w" in
+      and w = (TDSL.param ~more_label:(config.label)) ?value:None "w" in
fun x ->
(relu
?label:(Some
File "test/test_print_style.expected", line 1, characters 0-0:
/usr/local/bin/git --no-pager diff --no-index --color=always -u _build/default/test/test_print_style.expected _build/default/test/test_print_style.exe.output
diff --git a/_build/default/test/test_print_style.expected b/_build/default/test/test_print_style.exe.output
index e51ab37..c55c8ad 100644
--- a/_build/default/test/test_print_style.expected
+++ b/_build/default/test/test_print_style.exe.output
@@ -1,5 +1,5 @@


-Welcome to OCANNL! Reading configuration defaults from /Users/lukstafi/ocannl/_build/default/test/ocannl_config.
+Welcome to OCANNL! Reading configuration defaults from /src/_build/default/test/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
Testing print_style functionality:
File "test/einsum/test_conv_syntax.expected", line 1, characters 0-0:
/usr/local/bin/git --no-pager diff --no-index --color=always -u _build/default/test/einsum/test_conv_syntax.expected _build/default/test/einsum/test_conv_syntax.exe.output
diff --git a/_build/default/test/einsum/test_conv_syntax.expected b/_build/default/test/einsum/test_conv_syntax.exe.output
index 7098c49..02f1b08 100644
--- a/_build/default/test/einsum/test_conv_syntax.expected
+++ b/_build/default/test/einsum/test_conv_syntax.exe.output
@@ -1,5 +1,5 @@


-Welcome to OCANNL! Reading configuration defaults from /Users/lukstafi/ocannl/_build/default/test/einsum/ocannl_config.
+Welcome to OCANNL! Reading configuration defaults from /src/_build/default/test/einsum/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
Testing conv syntax parsing...
(cd _build/default/test_ppx && ./test_ppx_op.exe)


Welcome to OCANNL! Reading configuration defaults from /src/_build/default/test_ppx/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
(cd _build/default/test_ppx && ./test_ppx_op_expected.exe)


Welcome to OCANNL! Reading configuration defaults from /src/_build/default/test_ppx/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
File "test/dune", lines 30-40, characters 0-281:
30 | (rule
31 |  (alias runtest)
32 |  (target
33 |   (dir log_files))
34 |  (action
35 |   (run
36 |    %{dep:micrograd_demo_logging.exe}
37 |    "--ocannl_debug_backend=text"
38 |    "--ocannl_log_file_stem=micrograd_demo_logging"
39 |    "--ocannl_log_main_domain_to_stdout=false"
40 |    "--ocannl_debug_log_to_stream_files=true")))
(cd _build/default/test && ./micrograd_demo_logging.exe --ocannl_debug_backend=text --ocannl_log_file_stem=micrograd_demo_logging --ocannl_log_main_domain_to_stdout=false --ocannl_debug_log_to_stream_files=true)


Welcome to OCANNL! Reading configuration defaults from /src/_build/default/test/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
Retrieving commandline, environment, or config file variable ocannl_backend
Found multicore_cc, in the config file
Retrieving commandline, environment, or config file variable ocannl_limit_constant_fill_size
Not found, using default 256
Retrieving commandline, environment, or config file variable ocannl_cd_ident_style
Not found, using default heuristic
Retrieving commandline, environment, or config file variable ocannl_ll_ident_style
Not found, using default heuristic
Retrieving commandline, environment, or config file variable ocannl_prefer_backend_uniformity
Found true, in the config file
Retrieving commandline, environment, or config file variable ocannl_debug_log_to_stream_files
Found true, commandline --ocannl_debug_log_to_stream_files=true
Retrieving commandline, environment, or config file variable ocannl_cc_backend_optimization_level
Not found, using default 3
Retrieving commandline, environment, or config file variable ocannl_cc_backend_compiler_command
Not found, using default cc
Fatal error: exception Sys_error("build_files/init_params_for_g_run_id_1.log: No such file or directory")
Raised by primitive operation at Stdlib.open_in_gen in file "stdlib.ml", line 405, characters 28-54
Called from Stdio__In_channel.with_file in file "src/in_channel.ml", line 18, characters 45-66
Called from Stdio__In_channel.read_all in file "src/in_channel.ml" (inlined), line 86, characters 21-49
Called from Backends__Cc_backend.c_compile_and_load in file "arrayjit/lib/cc_backend.ml", line 79, characters 8-43
Re-raised at Backends__Cc_backend.c_compile_and_load in file "arrayjit/lib/cc_backend.ml", lines 76-82, characters 18-23
Re-raised at Backends__Cc_backend.c_compile_and_load in file "arrayjit/lib/cc_backend.ml", lines 57-107, characters 35-8
Called from Backends__Cc_backend.compile in file "arrayjit/lib/cc_backend.ml", line 144, characters 23-67
Called from Backends.Add_device.compile in file "arrayjit/lib/backends.ml", line 326, characters 15-45
Called from Backends.Raise_backend.compile in file "arrayjit/lib/backends.ml", line 443, characters 29-59
Re-raised at Backends.Raise_backend.compile in file "arrayjit/lib/backends.ml", line 443, characters 4-59
Re-raised at Backends.Raise_backend.compile in file "arrayjit/lib/backends.ml", lines 439-447, characters 26-99
Called from Ocannl__Train.to_routine in file "lib/train.ml", line 354, characters 26-82
Called from Dune__exe__Micrograd_demo_logging in file "test/micrograd_demo_logging.ml", line 35, characters 13-72
(cd _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test && .tutorials.inline-tests/inline-test-runner.exe inline-test-runner tutorials -partition 'Retrieving commandline, environment, or config file variable ocannl_log_level' -source-tree-root .. -diff-cmd -)


Welcome to OCANNL! Reading configuration defaults from /src/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
(cd _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test && .tutorials.inline-tests/inline-test-runner.exe inline-test-runner tutorials -partition '' -source-tree-root .. -diff-cmd -)


Welcome to OCANNL! Reading configuration defaults from /src/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
(cd _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test && .tutorials.inline-tests/inline-test-runner.exe inline-test-runner tutorials -partition 'Found 0, in the config file' -source-tree-root .. -diff-cmd -)


Welcome to OCANNL! Reading configuration defaults from /src/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
(cd _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test && .tutorials.inline-tests/inline-test-runner.exe inline-test-runner tutorials -partition 'Welcome to OCANNL! Reading configuration defaults from /src/_build/.sandbox/a0176cd9a6f33edf984cee77bd53829f/default/test/ocannl_config.' -source-tree-root .. -diff-cmd -)


Welcome to OCANNL! Reading configuration defaults from /src/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
File "test/einsum/einsum_trivia_exec.expected", line 1, characters 0-0:
/usr/local/bin/git --no-pager diff --no-index --color=always -u _build/default/test/einsum/einsum_trivia_exec.expected _build/default/test/einsum/einsum_trivia_exec.exe.output
diff --git a/_build/default/test/einsum/einsum_trivia_exec.expected b/_build/default/test/einsum/einsum_trivia_exec.exe.output
index ab456b5..3b2a222 100644
--- a/_build/default/test/einsum/einsum_trivia_exec.expected
+++ b/_build/default/test/einsum/einsum_trivia_exec.exe.output
@@ -1,5 +1,5 @@


-Welcome to OCANNL! Reading configuration defaults from /Users/lukstafi/ocannl/_build/default/test/einsum/ocannl_config.
+Welcome to OCANNL! Reading configuration defaults from /src/_build/default/test/einsum/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
HERE: test/einsum/einsum_trivia_exec.ml:31:21
@@ -735,173 +735,173 @@ HERE: test/einsum/einsum_trivia_exec.ml:269:21


HERE: test/einsum/einsum_trivia_exec.ml:298:21
-┌────────────────────────────────┐
-│[9]: ;=>+ shape 0:4,1:5,2:6,3:3 │
-│┌──────┬──────────────────┐     │
-││0 @ 0 │axis 3            │     │
-│├──────┼──────────────────┤     │
-││0 @ 1 │ 0.00  0.00  0.00 │     │
-││axis 2│ 0.00  0.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 0.00  0.00  4.00 │     │
-││      │ 0.00  0.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││1 @ 1 │ 0.00  1.00  0.00 │     │
-││axis 2│ 0.00  1.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 0.00  1.00  4.00 │     │
-││      │ 0.00  1.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││2 @ 1 │ 0.00  2.00  0.00 │     │
-││axis 2│ 0.00  2.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 0.00  2.00  4.00 │     │
-││      │ 0.00  2.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││3 @ 1 │ 0.00  3.00  0.00 │     │
-││axis 2│ 0.00  3.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 0.00  3.00  4.00 │     │
-││      │ 0.00  3.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││4 @ 1 │ 0.00  4.00  0.00 │     │
-││axis 2│ 0.00  4.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 0.00  4.00  4.00 │     │
-││      │ 0.00  4.00  5.00 │     │
-│└──────┴──────────────────┘     │
-├────────────────────────────────┤
-│┌──────┬──────────────────┐     │
-││1 @ 0 │axis 3            │     │
-│├──────┼──────────────────┤     │
-││0 @ 1 │ 1.00  0.00  0.00 │     │
-││axis 2│ 1.00  0.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 1.00  0.00  4.00 │     │
-││      │ 1.00  0.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││1 @ 1 │ 1.00  1.00  0.00 │     │
-││axis 2│ 1.00  1.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 1.00  1.00  4.00 │     │
-││      │ 1.00  1.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││2 @ 1 │ 1.00  2.00  0.00 │     │
-││axis 2│ 1.00  2.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 1.00  2.00  4.00 │     │
-││      │ 1.00  2.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││3 @ 1 │ 1.00  3.00  0.00 │     │
-││axis 2│ 1.00  3.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 1.00  3.00  4.00 │     │
-││      │ 1.00  3.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││4 @ 1 │ 1.00  4.00  0.00 │     │
-││axis 2│ 1.00  4.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 1.00  4.00  4.00 │     │
-││      │ 1.00  4.00  5.00 │     │
-│└──────┴──────────────────┘     │
-├────────────────────────────────┤
-│┌──────┬──────────────────┐     │
-││2 @ 0 │axis 3            │     │
-│├──────┼──────────────────┤     │
-││0 @ 1 │ 2.00  0.00  0.00 │     │
-││axis 2│ 2.00  0.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 2.00  0.00  4.00 │     │
-││      │ 2.00  0.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││1 @ 1 │ 2.00  1.00  0.00 │     │
-││axis 2│ 2.00  1.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 2.00  1.00  4.00 │     │
-││      │ 2.00  1.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││2 @ 1 │ 2.00  2.00  0.00 │     │
-││axis 2│ 2.00  2.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 2.00  2.00  4.00 │     │
-││      │ 2.00  2.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││3 @ 1 │ 2.00  3.00  0.00 │     │
-││axis 2│ 2.00  3.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 2.00  3.00  4.00 │     │
-││      │ 2.00  3.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││4 @ 1 │ 2.00  4.00  0.00 │     │
-││axis 2│ 2.00  4.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 2.00  4.00  4.00 │     │
-││      │ 2.00  4.00  5.00 │     │
-│└──────┴──────────────────┘     │
-├────────────────────────────────┤
-│┌──────┬──────────────────┐     │
-││3 @ 0 │axis 3            │     │
-│├──────┼──────────────────┤     │
-││0 @ 1 │ 3.00  0.00  0.00 │     │
-││axis 2│ 3.00  0.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 3.00  0.00  4.00 │     │
-││      │ 3.00  0.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││1 @ 1 │ 3.00  1.00  0.00 │     │
-││axis 2│ 3.00  1.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 3.00  1.00  4.00 │     │
-││      │ 3.00  1.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││2 @ 1 │ 3.00  2.00  0.00 │     │
-││axis 2│ 3.00  2.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 3.00  2.00  4.00 │     │
-││      │ 3.00  2.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││3 @ 1 │ 3.00  3.00  0.00 │     │
-││axis 2│ 3.00  3.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 3.00  3.00  4.00 │     │
-││      │ 3.00  3.00  5.00 │     │
-│├──────┼──────────────────┤     │
-││4 @ 1 │ 3.00  4.00  0.00 │     │
-││axis 2│ 3.00  4.00  1.00 │     │
-││      │ ...   ...   ...  │     │
-││      │ 3.00  4.00  4.00 │     │
-││      │ 3.00  4.00  5.00 │     │
-│└──────┴──────────────────┘     │
-└────────────────────────────────┘
+┌─────────────────────────────────────┐
+│[9]: ;=>+ shape 0:4,1:5,2:6,3:3      │
+│┌──────┬───────────────────────────┐ │
+││0 @ 0 │axis 3                     │ │
+│├──────┼───────────────────────────┤ │
+││0 @ 1 │ 2.64e+8  1.73e+2  2.37e+3 │ │
+││axis 2│ 1.99e+3  2.63e+8  2.37e+3 │ │
+││      │ ...      ...      ...     │ │
+││      │ 1.99e+3  1.73e+2  2.37e+3 │ │
+││      │ 1.99e+3  1.73e+2  2.37e+3 │ │
+│├──────┼───────────────────────────┤ │
+││1 @ 1 │ 2.64e+8  1.74e+2  3.17e+3 │ │
+││axis 2│ 2.66e+3  2.63e+8  3.17e+3 │ │
+││      │ ...      ...      ...     │ │
+││      │ 2.66e+3  1.74e+2  3.17e+3 │ │
+││      │ 2.66e+3  1.74e+2  3.17e+3 │ │
+│├──────┼───────────────────────────┤ │
+││2 @ 1 │ 2.64e+8  1.75e+2  3.97e+3 │ │
+││axis 2│ 3.33e+3  2.63e+8  3.97e+3 │ │
+││      │ ...      ...      ...     │ │
+││      │ 3.33e+3  1.75e+2  3.97e+3 │ │
+││      │ 3.33e+3  1.75e+2  3.97e+3 │ │
+│├──────┼───────────────────────────┤ │
+││3 @ 1 │ 2.64e+8  1.76e+2  4.77e+3 │ │
+││axis 2│ 4.00e+3  2.63e+8  4.77e+3 │ │
+││      │ ...      ...      ...     │ │
+││      │ 4.00e+3  1.76e+2  4.77e+3 │ │
+││      │ 4.00e+3  1.76e+2  4.77e+3 │ │
+│├──────┼───────────────────────────┤ │
+││4 @ 1 │ 2.64e+8  1.77e+2  5.57e+3 │ │
+││axis 2│ 4.68e+3  2.63e+8  5.57e+3 │ │
+││      │ ...      ...      ...     │ │
+││      │ 4.68e+3  1.77e+2  5.57e+3 │ │
+││      │ 4.68e+3  1.77e+2  5.57e+3 │ │
+│└──────┴───────────────────────────┘ │
+├─────────────────────────────────────┤
+│┌──────┬────────────────────────────┐│
+││1 @ 0 │axis 3                      ││
+│├──────┼────────────────────────────┤│
+││0 @ 1 │ 2.64e+8  3.42e+3  3.48e+15 ││
+││axis 2│ 1.99e+3  2.63e+8  3.48e+15 ││
+││      │ ...      ...      ...      ││
+││      │ 1.99e+3  3.42e+3  3.48e+15 ││
+││      │ 1.99e+3  3.42e+3  3.48e+15 ││
+│├──────┼────────────────────────────┤│
+││1 @ 1 │ 2.64e+8  3.43e+3  3.48e+15 ││
+││axis 2│ 2.66e+3  2.63e+8  3.48e+15 ││
+││      │ ...      ...      ...      ││
+││      │ 2.66e+3  3.43e+3  3.48e+15 ││
+││      │ 2.66e+3  3.43e+3  3.48e+15 ││
+│├──────┼────────────────────────────┤│
+││2 @ 1 │ 2.64e+8  3.43e+3  3.48e+15 ││
+││axis 2│ 3.33e+3  2.63e+8  3.48e+15 ││
+││      │ ...      ...      ...      ││
+││      │ 3.33e+3  3.43e+3  3.48e+15 ││
+││      │ 3.33e+3  3.43e+3  3.48e+15 ││
+│├──────┼────────────────────────────┤│
+││3 @ 1 │ 2.64e+8  3.43e+3  3.48e+15 ││
+││axis 2│ 4.00e+3  2.63e+8  3.48e+15 ││
+││      │ ...      ...      ...      ││
+││      │ 4.00e+3  3.43e+3  3.48e+15 ││
+││      │ 4.00e+3  3.43e+3  3.48e+15 ││
+│├──────┼────────────────────────────┤│
+││4 @ 1 │ 2.64e+8  3.43e+3  3.48e+15 ││
+││axis 2│ 4.68e+3  2.63e+8  3.48e+15 ││
+││      │ ...      ...      ...      ││
+││      │ 4.68e+3  3.43e+3  3.48e+15 ││
+││      │ 4.68e+3  3.43e+3  3.48e+15 ││
+│└──────┴────────────────────────────┘│
+├─────────────────────────────────────┤
+│┌──────┬───────────────────────────┐ │
+││2 @ 0 │axis 3                     │ │
+│├──────┼───────────────────────────┤ │
+││0 @ 1 │ 2.64e+8  5.15e+4  3.35e+7 │ │
+││axis 2│ 1.99e+3  2.63e+8  3.35e+7 │ │
+││      │ ...      ...      ...     │ │
+││      │ 1.99e+3  5.15e+4  3.35e+7 │ │
+││      │ 1.99e+3  5.15e+4  3.35e+7 │ │
+│├──────┼───────────────────────────┤ │
+││1 @ 1 │ 2.64e+8  5.15e+4  3.35e+7 │ │
+││axis 2│ 2.66e+3  2.63e+8  3.35e+7 │ │
+││      │ ...      ...      ...     │ │
+││      │ 2.66e+3  5.15e+4  3.35e+7 │ │
+││      │ 2.66e+3  5.15e+4  3.35e+7 │ │
+│├──────┼───────────────────────────┤ │
+││2 @ 1 │ 2.64e+8  5.15e+4  3.35e+7 │ │
+││axis 2│ 3.33e+3  2.63e+8  3.35e+7 │ │
+││      │ ...      ...      ...     │ │
+││      │ 3.33e+3  5.15e+4  3.35e+7 │ │
+││      │ 3.33e+3  5.15e+4  3.35e+7 │ │
+│├──────┼───────────────────────────┤ │
+││3 @ 1 │ 2.64e+8  5.15e+4  3.35e+7 │ │
+││axis 2│ 4.01e+3  2.63e+8  3.35e+7 │ │
+││      │ ...      ...      ...     │ │
+││      │ 4.01e+3  5.15e+4  3.35e+7 │ │
+││      │ 4.01e+3  5.15e+4  3.35e+7 │ │
+│├──────┼───────────────────────────┤ │
+││4 @ 1 │ 2.64e+8  5.15e+4  3.35e+7 │ │
+││axis 2│ 4.68e+3  2.63e+8  3.35e+7 │ │
+││      │ ...      ...      ...     │ │
+││      │ 4.68e+3  5.15e+4  3.35e+7 │ │
+││      │ 4.68e+3  5.15e+4  3.35e+7 │ │
+│└──────┴───────────────────────────┘ │
+├─────────────────────────────────────┤
+│┌──────┬───────────────────────────┐ │
+││3 @ 0 │axis 3                     │ │
+│├──────┼───────────────────────────┤ │
+││0 @ 1 │ 2.64e+8  2.20e+2  2.61e+3 │ │
+││axis 2│ 1.99e+3  2.63e+8  2.61e+3 │ │
+││      │ ...      ...      ...     │ │
+││      │ 1.99e+3  2.20e+2  2.61e+3 │ │
+││      │ 1.99e+3  2.20e+2  2.61e+3 │ │
+│├──────┼───────────────────────────┤ │
+││1 @ 1 │ 2.64e+8  2.21e+2  3.41e+3 │ │
+││axis 2│ 2.66e+3  2.63e+8  3.41e+3 │ │
+││      │ ...      ...      ...     │ │
+││      │ 2.66e+3  2.21e+2  3.41e+3 │ │
+││      │ 2.66e+3  2.21e+2  3.41e+3 │ │
+│├──────┼───────────────────────────┤ │
+││2 @ 1 │ 2.64e+8  2.22e+2  4.21e+3 │ │
+││axis 2│ 3.33e+3  2.63e+8  4.21e+3 │ │
+││      │ ...      ...      ...     │ │
+││      │ 3.33e+3  2.22e+2  4.21e+3 │ │
+││      │ 3.33e+3  2.22e+2  4.21e+3 │ │
+│├──────┼───────────────────────────┤ │
+││3 @ 1 │ 2.64e+8  2.23e+2  5.01e+3 │ │
+││axis 2│ 4.01e+3  2.63e+8  5.01e+3 │ │
+││      │ ...      ...      ...     │ │
+││      │ 4.01e+3  2.23e+2  5.01e+3 │ │
+││      │ 4.01e+3  2.23e+2  5.01e+3 │ │
+│├──────┼───────────────────────────┤ │
+││4 @ 1 │ 2.64e+8  2.24e+2  5.81e+3 │ │
+││axis 2│ 4.68e+3  2.63e+8  5.81e+3 │ │
+││      │ ...      ...      ...     │ │
+││      │ 4.68e+3  2.24e+2  5.81e+3 │ │
+││      │ 4.68e+3  2.24e+2  5.81e+3 │ │
+│└──────┴───────────────────────────┘ │
+└─────────────────────────────────────┘


HERE: test/einsum/einsum_trivia_exec.ml:299:21
-┌───────────────────────────┐
-│[1]: =>_ti shape 0:4,1:3   │
-│┌──────┬──────────────────┐│
-││      │axis 1            ││
-│├──────┼──────────────────┤│
-││axis 0│ 0.00  0.00  0.00 ││
-││      │ 1.00  0.00  0.00 ││
-││      │ 2.00  0.00  0.00 ││
-││      │ 3.00  0.00  0.00 ││
-│└──────┴──────────────────┘│
-└───────────────────────────┘
+┌──────────────────────────────────┐
+│[1]: =>_ti shape 0:4,1:3          │
+│┌──────┬─────────────────────────┐│
+││      │axis 1                   ││
+│├──────┼─────────────────────────┤│
+││axis 0│ 0.00  1.73e+2  1.21e+1  ││
+││      │ 1.00  3.42e+3  3.48e+15 ││
+││      │ 2.00  5.15e+4  3.35e+7  ││
+││      │ 3.00  2.20e+2  2.53e+2  ││
+│└──────┴─────────────────────────┘│
+└──────────────────────────────────┘


HERE: test/einsum/einsum_trivia_exec.ml:300:21
-┌───────────────────────────┐
-│[7]: =>_tk shape 0:6,1:3   │
-│┌──────┬──────────────────┐│
-││      │axis 1            ││
-│├──────┼──────────────────┤│
-││axis 0│ 0.00  0.00  0.00 ││
-││      │ 0.00  0.00  1.00 ││
-││      │ ...   ...   ...  ││
-││      │ 0.00  0.00  4.00 ││
-││      │ 0.00  0.00  5.00 ││
-│└──────┴──────────────────┘│
-└───────────────────────────┘
+┌───────────────────────────────────┐
+│[7]: =>_tk shape 0:6,1:3           │
+│┌──────┬──────────────────────────┐│
+││      │axis 1                    ││
+│├──────┼──────────────────────────┤│
+││axis 0│ 2.64e+8   1.31e-41  0.00 ││
+││      │ 1.31e-41  2.63e+8   1.00 ││
+││      │ ...       ...       ...  ││
+││      │ 1.40e-45  0.00      4.00 ││
+││      │ 1.31e-41  1.40e-45  5.00 ││
+│└──────┴──────────────────────────┘│
+└───────────────────────────────────┘


HERE: test/einsum/einsum_trivia_exec.ml:323:21
(cd _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test && .tutorials.inline-tests/inline-test-runner.exe inline-test-runner tutorials -partition zero2hero_1of7.ml -source-tree-root .. -diff-cmd -)


Welcome to OCANNL! Reading configuration defaults from /src/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
(cd _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test && .tutorials.inline-tests/inline-test-runner.exe inline-test-runner tutorials -partition micrograd_demo.ml -source-tree-root .. -diff-cmd -)


Welcome to OCANNL! Reading configuration defaults from /src/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
File "test/einsum/moons_demo_variant.expected", line 1, characters 0-0:
/usr/local/bin/git --no-pager diff --no-index --color=always -u _build/default/test/einsum/moons_demo_variant.expected _build/default/test/einsum/moons_demo_variant.exe.output
diff --git a/_build/default/test/einsum/moons_demo_variant.expected b/_build/default/test/einsum/moons_demo_variant.exe.output
index 68171df..99aa031 100644
--- a/_build/default/test/einsum/moons_demo_variant.expected
+++ b/_build/default/test/einsum/moons_demo_variant.exe.output
@@ -1,121 +1,124 @@


-Welcome to OCANNL! Reading configuration defaults from /Users/lukstafi/ocannl/_build/default/test/einsum/ocannl_config.
+Welcome to OCANNL! Reading configuration defaults from /src/_build/default/test/einsum/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
Half-moons scatterplot and decision boundary:
┌────────────────────────────────────────────────────────────────────────────────────────────────────┐
-│****************************#***********************************************************************│
-│****************************###***###***#***********************************************************│
-│***************************#********#***#**********************************************************.│
-│********************#*********************##*#*#************************************************....│
-│******************#***#*****##*#*#*#****#*#*#*##**********************************************......│
-│**************#*#**###**#*##**##********#**#****###**#*************************************.........│
-│***********#***##***#**##*****************#*#*##*###*************************************...........│
-│***************#**###******************************##*#********************************.............│
-│*************#*****#******************************#*#***#*#*************************................│
-│*********#***#************************************##*###**#***********************..................│
-│******#***#*#*#******************************************#*#*******************.....................│
-│*****###****#*******************************************#********************.......................│
-│*******#*###***********************************************#*#************..........................│
-│**********##**********************%%*********************#**##**********............................│
-│*****#***#**********************%**%%********************************.............................%.│
-│**####*************************%**%**************************##*#**............................%...%│
-│****#**************************%%**%*************************#*#*..............................%....│
-│*#****##************************%*...%*********************##*..#...........................%...%%..│
-│****#*#***********************.%..%.%........................#..#.............................%.%...│
-│##*##*********************.......%.............................#.##.........................%.%.%%%.│
-│**#####*****************.......%...%%.......................................................%..%.%..│
-│**********************...........%.%.%%.....................#.#.#.#.............................%%..│
-│***##****************............%..%..%........................#.#.........................%...%...│
-│##**#**************................%...%.....................#..###......................%.%%.......│
-│###***************...............%.%.%...........................##............................%....│
-│**##************.................................................#......................%%.%..%.....│
-│**#************....................%%...........................##......................%%.%........│
-│**************........................%......................#..#...........................%.......│
-│************........................%%.%.......................##.....................%..%..........│
-│***********............................%%..............................................%%.%%........│
-│**********.............................%...%............................................%%%.........│
-│********...................................%..%....................................%.....%..........│
-│*******.................................%%..%.%................................%.%.%.%%.............│
-│******.....................................%%.%...%%.%.......................%%%....%.%.%...........│
-│*****....................................%.....%.%..%....................%.....%%.%.%...............│
-│***.........................................%%...%.%%%%..%.......%.........%%.%%....................│
-│**................................................%..%.......%..%%%%...%.%..%.%.....................│
-│*..................................................%.%.%............%..%...%........................│
-│..................................................%....%.%......%%...%.%............................│
-│..........................................................%..%......%%%.............................│
+│...................................#................................................................│
+│..........................##..#..###....##..........................................................│
+│.........................#....#.....#...............................................................│
+│.......................#.##.#.......#####...#.#.....................................................│
+│..................#.#.#...#..#.##....#.#.##..#....#.................................................│
+│.............#.#......##.#..#..........###..#....#..................................................│
+│.............##..##.....#....................#.##.###...#...........................................│
+│.............#.##.#.#.#.......................#...##..#.............................................│
+│.........#.#....##..................................##..#...........................................│
+│...........#.#....................................#..##...#.#.......................................│
+│..........##..........................................#...#.#.......................................│
+│.......#...###............................................#.........................................│
+│....#....##..........................%..................#....##.....................................│
+│.........##................................................#..#..............................%......│
+│.....#..#........................%..%......................##.#...................................%.│
+│...##.#..................................................#....................................%...%.│
+│..###...........................%..%%......................###................................%.%...│
+│..#...#.#.......................%%.%%.......................#.##.#............................%.....│
+│..#...#.............................%.........................##..............................%...%.│
+│..##..#............................%%.........................#..##.........................%%..%.%%│
+│#...#..#.........................%.%%%.......................##...#............................%.%..│
+│##...#.............................%%.........................#.#..#................................│
+│...................................%%%%.......................##.#.#........................%%..%.%.│
+│###................................%%..............................#.......................%....%...│
+│..##................................%%%.%....................................................%%..%..│
+│.#.....................................%.......................#.###......................%.%%.%....│
+│.....#................................%...%................................................%...%....│
+│...................................%.....%%......................#..................................│
+│.....................................%%%..%...........................................%..%%..%......│
+│.......................................%%.....%......................................%..%.%.%.......│
+│.........................................%%............................................%..%%.%......│
+│..........................................%.%.....%...............................%.%.%%..%.........│
+│.........................................%%%..%%......................................%.............│
+│...........................................%.%..%..............................%%.%.%.%%.%..........│
+│..............................................%%%%..%.%.......................%%..%.%.%.............│
+│..............................................%..%%%.%%...................%..%%...%.................│
+│...............................................%...%.%.%..%...%.%%..%%.%%...%.......................│
+│......................................................%%.%%%..%.%..%%.%.%.%%........................│
+│.....................................................%...........%%%%......%%.......................│
+│.......................................................%.%%%%.%.......%...%.........................│
└────────────────────────────────────────────────────────────────────────────────────────────────────┘Loss:
-┌────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐
-│ 3.79e+1│-                                                                                                   │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│l       │                                                                                                    │
-│o       │                                                                                                    │
-│s       │                                                                                                    │
-│s       │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │ -                                                                                                  │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │                                                                                                    │
-│        │  -       -    -                          -                                                         │
-│ 0.00   │   - ----  ---  --- ---- ---- ---- ---- -- - ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- │
-├────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
-│        │0.00                                                                                         7.90e+1│
-│        │                                                step                                                │
-└────────┴────────────────────────────────────────────────────────────────────────────────────────────────────┘Log-loss, for better visibility:
+┌─────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ 2.18│                         -                                                                          │
+│     │                                                  -                                                 │
+│     │                                                                           -                        │
+│     │                                                                                                    │
+│     │                          -                        -                        -                       │
+│     │                                                                                                    │
+│     │                                                    -                        -                      │
+│     │                           -                                                                        │
+│     │                                                                                                    │
+│     │                                                     -                        -                     │
+│     │                            -                                                                       │
+│     │                                                                                -                   │
+│     │                                                       -                                            │
+│     │                              -                                                  -                  │
+│     │                                                        -                                           │
+│     │                                                                                  -                 │
+│     │                               -                                                                    │
+│     │                                                         -                         -                │
+│l    │                                                                                                    │
+│o    │                                -                         -                          -              │
+│s    │                                                                                                    │
+│s    │                                                                                      -             │
+│     │-                                -                          -                                       │
+│     │                                                                                       -            │
+│     │                                                             -                                      │
+│     │ -                                 -                                                    -           │
+│     │                                                                                                    │
+│     │                                                              -                           -         │
+│     │                                    -                                                               │
+│     │  -                                                            -                           -        │
+│     │                                                                                                    │
+│     │                                     -                                                      -       │
+│     │   -                                                             -                                  │
+│     │                                                                                             -      │
+│     │                                      -                           -                                 │
+│     │                                                                                               -    │
+│     │     -                                                             -                                │
+│     │                                        -                                                       -   │
+│     │                                                                                                    │
+│ 0.00│      --- ---- ---- ----                 --- ----                   - ----                       -- │
+├─────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
+│     │0.00                                                                                         7.90e+1│
+│     │                                                step                                                │
+└─────┴────────────────────────────────────────────────────────────────────────────────────────────────────┘Log-loss, for better visibility:
┌─────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐
-│ 3.63    │-                                                                                                   │
+│ 7.79e-1 │                         -                                                                          │
+│         │                          ---                     ----                     ----                     │
+│         │                              --                       ---                      ---                 │
+│         │-                               --                        - -                      - --             │
+│         │ -                                 -                         -                         --           │
+│         │  -                                 -                         --                          --        │
+│         │                                     -                           -                          -       │
+│         │   -                                  -                                                      -      │
+│         │                                                                  -                            -    │
+│         │     -                                                                                              │
+│         │                                        -                          -                            -   │
│         │                                                                                                    │
│         │                                                                                                    │
│         │                                                                                                    │
-│         │ -                                                                                                  │
│         │                                                                                                    │
+│         │                                                                    -                            -  │
+│l        │                                                                                                    │
+│o        │                                                                                                    │
+│g        │                                                                                                    │
+│         │      -                                                                                             │
+│l        │                                                                                                    │
+│o        │                                                                                                    │
+│s        │                                                                                                    │
+│s        │                                                                                                    │
+│         │                                         -                                                          │
│         │                                                                                                    │
│         │                                                                                                    │
│         │                                                                                                    │
-│         │  -                                                                                                 │
-│         │                                          -                                                         │
-│         │          -    -                                                                            -       │
-│         │   - -           -                                                 -                                │
-│         │       --  -      - - -   -   - -            --           -  -   -  -       -                  --   │
-│         │      -     -   -      -   -   -    -             --        -         - --   -  - -   -             │
-│         │                                 -                  -                            -                  │
-│l        │             -       -               -  --                                         -                │
-│o        │                                                         -                             -            │
-│g        │                                      -                                              -     -     -  │
-│         │                                   -           -                              -                     │
-│l        │                         -                                    --                                    │
-│o        │                                           -                      -        -                        │
-│s        │                                                     -                                              │
-│s        │                                                       -                                            │
-│         │                                                                       -                            │
│         │                                                                                                    │
│         │                                                                                                    │
│         │                                                                                                    │
@@ -127,10 +130,7 @@ Half-moons scatterplot and decision boundary:
│         │                                                                                                    │
│         │                                                                                                    │
│         │                                                                                                    │
-│         │                                                                                                    │
-│         │                                                                                                    │
-│         │                                                                                                    │
-│ -1.00e+1│                            -                   -       -                               - -  -    - │
+│ -1.00e+1│       -- ---- ---- ----                  -- ----                     ----                        - │
├─────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│         │0.00                                                                                         7.90e+1│
│         │                                                step                                                │
(cd _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test && .tutorials.inline-tests/inline-test-runner.exe inline-test-runner tutorials -partition primitive_ops.ml -source-tree-root .. -diff-cmd -)


Welcome to OCANNL! Reading configuration defaults from /src/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
(cd _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test && .tutorials.inline-tests/inline-test-runner.exe inline-test-runner tutorials -partition hello_world_op.ml -source-tree-root .. -diff-cmd -)


Welcome to OCANNL! Reading configuration defaults from /src/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
(cd _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test && .tutorials.inline-tests/inline-test-runner.exe inline-test-runner tutorials -partition einsum_trivia.ml -source-tree-root .. -diff-cmd -)


Welcome to OCANNL! Reading configuration defaults from /src/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
(cd _build/default/test && ./moons_demo_parallel_run.exe)


Welcome to OCANNL! Reading configuration defaults from /src/_build/default/test/ocannl_config

Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
("Set log_level to" 1)
└─{orphaned from #50}
Retrieving commandline, environment, or config file variable ocannl_backend
Found multicore_cc, in the config file
Properties of devices:
(multicore_devices
(device ((device_name CPU) (device_ordinal 0) (num_domains 40))))
@!Retrieving commandline, environment, or config file variable ocannl_prefer_backend_uniformity
Found true, in the config file
Retrieving commandline, environment, or config file variable ocannl_debug_log_to_stream_files
Not found, using default false
Retrieving commandline, environment, or config file variable ocannl_ll_ident_style
Not found, using default heuristic
Retrieving commandline, environment, or config file variable ocannl_cc_backend_optimization_level
Not found, using default 3
Retrieving commandline, environment, or config file variable ocannl_cc_backend_compiler_command
Not found, using default cc
Retrieving commandline, environment, or config file variable ocannl_cc_backend_verify_codesign
Not found, using default false
Retrieving commandline, environment, or config file variable ocannl_never_capture_stdout
Not found, using default false
Batch=379, step=380, lr=0.197862, batch loss=0.000000, epoch loss=0.000000
Batch=759, step=760, lr=0.195487, batch loss=0.000000, epoch loss=1698052423443490254991986526682907606683325307645604367155991688195923571508248576.000000
Batch=799, step=800, lr=0.195012, batch loss=0.000000, epoch loss=1698052423443490254991986526682907606683325307645604367155991688195923571508248576.000000
Epoch=0, step=800, lr=0.195012, epoch loss=1698052423443490254991986526682907606683325307645604367155991688195923571508248576.000000
Batch=379, step=1180, lr=0.192862, batch loss=3155801702.400000, epoch loss=51564254169470180130716723341065738169614992854990433748338980529207508992.000000
Batch=759, step=1560, lr=0.190487, batch loss=7434141696.000000, epoch loss=51564254169470180130716723341065738169614992854990433748338980529207508992.000000
Batch=799, step=1600, lr=0.190012, batch loss=6387555532.800000, epoch loss=51564254169470180130716723341065738169614992854990433748338980529207508992.000000
Epoch=1, step=1600, lr=0.190012, epoch loss=51564254169470180130716723341065738169614992854990433748338980529207508992.000000
Batch=379, step=1980, lr=0.187863, batch loss=2810484736.000000, epoch loss=51446563584.000000
Batch=759, step=2360, lr=0.185487, batch loss=7861818982.400000, epoch loss=142934247372.799988
Batch=799, step=2400, lr=0.185012, batch loss=6842688972.800000, epoch loss=157128854425.599976
Epoch=2, step=2400, lr=0.185012, epoch loss=157128854425.599976
Batch=379, step=2780, lr=0.182862, batch loss=2475748556.800000, epoch loss=47480184012.800003
Batch=759, step=3160, lr=0.180487, batch loss=8278925721.600000, epoch loss=141906453913.600006
Batch=799, step=3200, lr=0.180012, batch loss=7287254476.800000, epoch loss=156976463104.000000
Epoch=3, step=3200, lr=0.180012, epoch loss=156976463104.000000
Batch=379, step=3580, lr=0.177862, batch loss=2151567360.000000, epoch loss=43619412428.800003
Batch=759, step=3960, lr=0.175487, batch loss=8685489152.000000, epoch loss=140899887360.000000
Batch=799, step=4000, lr=0.175012, batch loss=7721278976.000000, epoch loss=156824215500.799988
Epoch=4, step=4000, lr=0.175012, epoch loss=156824215500.799988
Batch=379, step=4380, lr=0.172862, batch loss=1837916979.200000, epoch loss=39863991142.399994
Batch=759, step=4760, lr=0.170487, batch loss=9081532211.200001, epoch loss=139914482124.799988
Batch=799, step=4800, lr=0.170012, batch loss=8144785612.800000, epoch loss=156672092211.199982
Epoch=5, step=4800, lr=0.170012, epoch loss=156672092211.199982
Batch=379, step=5180, lr=0.167862, batch loss=1534772428.800000, epoch loss=36213680844.800003
Batch=759, step=5560, lr=0.165487, batch loss=9467079270.400000, epoch loss=138950190387.200012
Batch=799, step=5600, lr=0.165012, batch loss=8557798400.000000, epoch loss=156520093593.600006
Epoch=6, step=5600, lr=0.165012, epoch loss=156520093593.600006
Batch=379, step=5980, lr=0.162862, batch loss=1242110361.600000, epoch loss=32668244889.599998
Batch=759, step=6360, lr=0.160488, batch loss=9842153062.400000, epoch loss=138006959411.200012
Batch=799, step=6400, lr=0.160012, batch loss=8960340172.799999, epoch loss=156368212684.799988
Epoch=7, step=6400, lr=0.160012, epoch loss=156368212684.799988
Batch=379, step=6780, lr=0.157862, batch loss=959909068.800000, epoch loss=29227459174.399998
Batch=759, step=7160, lr=0.155487, batch loss=10206775705.600000, epoch loss=137084742656.000000
Batch=799, step=7200, lr=0.155013, batch loss=9352433049.600000, epoch loss=156216446976.000000
Epoch=8, step=7200, lr=0.155013, epoch loss=156216446976.000000
Batch=379, step=7580, lr=0.152862, batch loss=688146022.400000, epoch loss=25891103129.599998
Batch=759, step=7960, lr=0.150487, batch loss=10560970342.400000, epoch loss=136183500390.399963
Batch=799, step=8000, lr=0.150012, batch loss=9734099968.000000, epoch loss=156064802815.999969
Epoch=9, step=8000, lr=0.150012, epoch loss=156064802815.999969
Batch=379, step=8380, lr=0.147862, batch loss=426799104.000000, epoch loss=22658949939.200001
Batch=759, step=8760, lr=0.145488, batch loss=10904756633.600000, epoch loss=135303174553.600006
Batch=799, step=8800, lr=0.145012, batch loss=10105360384.000000, epoch loss=155913261056.000000
Epoch=10, step=8800, lr=0.145012, epoch loss=155913261056.000000
Batch=379, step=9180, lr=0.142862, batch loss=175849062.400000, epoch loss=19530805862.400002
Batch=759, step=9560, lr=0.140487, batch loss=10846198579.200001, epoch loss=131132380979.199997
Batch=799, step=9600, lr=0.140013, batch loss=10074301030.400000, epoch loss=151666599936.000000
Epoch=11, step=9600, lr=0.140013, epoch loss=151666599936.000000
Batch=379, step=9980, lr=0.137863, batch loss=327100416.000000, epoch loss=20425207193.600002
Batch=759, step=10360, lr=0.135487, batch loss=10791247872.000000, epoch loss=131037160038.399994
Batch=799, step=10400, lr=0.135012, batch loss=10046848409.600000, epoch loss=151502725120.000000
Epoch=12, step=10400, lr=0.135012, epoch loss=151502725120.000000
Batch=379, step=10780, lr=0.132862, batch loss=474747289.600000, epoch loss=21283548774.399998
Batch=759, step=11160, lr=0.130488, batch loss=11104378880.000000, epoch loss=134328673484.799973
Batch=799, step=11200, lr=0.130012, batch loss=10387458048.000000, epoch loss=155461718835.199982
Epoch=13, step=11200, lr=0.130012, epoch loss=155461718835.199982
Batch=379, step=11580, lr=0.127862, batch loss=254427955.200000, epoch loss=18461796761.600002
Batch=759, step=11960, lr=0.125487, batch loss=11056420454.400000, epoch loss=130470526976.000000
Batch=799, step=12000, lr=0.125013, batch loss=10366997299.200001, epoch loss=151548902195.200012
Epoch=14, step=12000, lr=0.125013, epoch loss=151548902195.200012
Batch=379, step=12380, lr=0.122862, batch loss=395085004.800000, epoch loss=19250228224.000000
Batch=759, step=12760, lr=0.120487, batch loss=11349062041.600000, epoch loss=133455494963.200027
Batch=799, step=12800, lr=0.120012, batch loss=10687120179.200001, epoch loss=155160375910.400024
Epoch=15, step=12800, lr=0.120012, epoch loss=155160375910.400024
Batch=379, step=13180, lr=0.117863, batch loss=195239936.000000, epoch loss=16633267814.399998
Batch=759, step=13560, lr=0.115487, batch loss=11308116787.200001, epoch loss=129917451059.200012
Batch=799, step=13600, lr=0.115012, batch loss=10673673011.200001, epoch loss=151581688627.200012
Epoch=16, step=13600, lr=0.115012, epoch loss=151581688627.200012
Batch=379, step=13980, lr=0.112862, batch loss=328882995.200000, epoch loss=17351556300.799999
Batch=759, step=14360, lr=0.110487, batch loss=11580290662.400000, epoch loss=132609306214.399994
Batch=799, step=14400, lr=0.110012, batch loss=10973331046.400000, epoch loss=154859118182.399994
Epoch=17, step=14400, lr=0.110012, epoch loss=154859118182.399994
Batch=379, step=14780, lr=0.107862, batch loss=149490892.800000, epoch loss=14939181056.000000
Batch=759, step=15160, lr=0.105487, batch loss=11546380288.000000, epoch loss=129377893171.199997
Batch=799, step=15200, lr=0.105012, batch loss=10966918758.400000, epoch loss=151601131929.600006
Epoch=18, step=15200, lr=0.105012, epoch loss=151601131929.600006
Batch=379, step=15580, lr=0.102862, batch loss=276099481.600000, epoch loss=15587118284.799999
Batch=759, step=15960, lr=0.100488, batch loss=11516061286.400000, epoch loss=129257918873.599991
Batch=799, step=16000, lr=0.100012, batch loss=10964097433.600000, epoch loss=151461766348.799988
Epoch=19, step=16000, lr=0.100012, epoch loss=151461766348.799988


Half-moons scatterplot and decision boundary:
┌────────────────────────────────────────────────────────────────────────────────────────────────────┐
│***********************************#****************************************************************│
│***********************#*#################*#********************************************************│
│**********************##########################****************************************************│
│*****************#################################**************************************************│
│**************######################################************************************************│
│*************#########################################**********************************************│
│***********################*************#################*******************************************│
│**********##############*******************###############******************************************│
│********##############**************************###########*****************************************│
│*******#############****************************##*##########***************************************│
│******###########**********************************############*************************************│
│*****###########************************************###########*************************************│
│****##########*********************%*****************###########************************************│
│***#########*#*******************%%%%*****************#########******************************%%%*%%*│
│***##########******************%%%*%%*******************########*#***************************%%*%%%*│
│**#######**********************%%%%%%%******************##########***************************%%%%%%%│
│*#########********************%%%%%%%%********************########***************************%%%%%%*│
│*########**********************%%%%%%%*********************########**************************%%%%%%*│
│#########*********************%%*%%%%%**********************########************************%%%%%%%*│
│*#######***********************%%%%%%%%********************#########************************%%%%%%%*│
│########***********************%%%%%%%%*********************########***********************%%%%%%%%*│
│#######*************************%%%%%%%**********************#######***********************%%%%%%%%*│
│#######*************************%%%%%%%%**********************#######*********************%%%%%%%%**│
│#######*************************%%%%%%%%*********************#######*********************%%%%%%%%%**│
│######****************************%%%%%%%%*******************#######********************%%%%%%%%%***│
│######***************************%%%%%%%%********************########******************%%%%%%%%%%***│
│######****************************%%%%%%%%%******************#######******************%*%%%%%%%%****│
│###*#*****************************%*%%%%%%%%%*****************#*#*##******************%%*%%%%%%%****│
│************************************%%%%%%%%%***************************************%%%%%%%%%%%*****│
│**************************************%%%%%%%*%*************************************%%%%%%%%%%%*****│
│*************************************%%%%%%%%%%%*********************************%%%%%%%%%%%%*******│
│**************************************%%*%%%%%%%%*******************************%%%%%%%%%%%*********│
│****************************************%%%%%%%%%%%%************************%**%%%%%%%%%%%%*********│
│****************************************%%%%%%%%%%%%%%*%********************%%%%%%%%%%%%%***********│
│******************************************%%%%%%%%%%%%%%%%%**************%%%%%%%%%%%%%%%************│
│********************************************%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%***************│
│************************************************%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*%**%**************│
│************************************************%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*%******************│
│**************************************************%%%%%%%%%%%%%%%%%%%%%%%%%%%%*%********************│
│*****************************************************%%*%**%%%%%%%%%%%%%%%**************************│
└────────────────────────────────────────────────────────────────────────────────────────────────────┘
(cd _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test && .tutorials.inline-tests/inline-test-runner.exe inline-test-runner tutorials -partition moons_demo_parallel.ml -source-tree-root .. -diff-cmd -)


Welcome to OCANNL! Reading configuration defaults from /src/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/ocannl_config.
Retrieving commandline, environment, or config file variable ocannl_log_level
Found 0, in the config file
File "test/zero2hero_1of7.ml", line 1, characters 0-0:
/usr/local/bin/git --no-pager diff --no-index --color=always -u _build/default/test/zero2hero_1of7.ml _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/zero2hero_1of7.ml.corrected
diff --git a/_build/default/test/zero2hero_1of7.ml b/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/zero2hero_1of7.ml.corrected
index 3b7cc00..394b619 100644
--- a/_build/default/test/zero2hero_1of7.ml
+++ b/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/zero2hero_1of7.ml.corrected
@@ -30,24 +30,24 @@ let%expect_test "Graph drawing recompile" =
Tensor.print_tree ~with_grad:true ~depth:9 f_nd;
[%expect
{|
-                                 #15 +_f_nd
-                                  6.00e+1
-                                 #16 grad_+_f_nd Virt/30
-                                 <void>
-                            #13 - Virt/152                             │#2 5. Virt/40
-                            <void>                                     │<void>
-                            #14 grad_- Virt/30                         │
-                            <void>                                     │
-           #11 *. Virt/152            │       #4 *. Virt/152           │
-           <void>                     │       <void>                   │
-           #12 grad_*. Virt/30        │       #5 grad_*. Virt/30       │
-           <void>                     │       <void>                   │
-    #10 3. Virt/40│#7 **. Virt/152    │#3 4. Virt/40│#0 x              │
-    <void>        │<void>             │<void>       │ 5.00             │
-                  │#8 grad_**. Virt/30│             │#1 grad_x Local/30│
-                  │<void>             │             │<void>            │
-                  │[0]│ #6 2. Virt/40 │             │                  │
-                  │   │ <void>        │             │                  │
+                          #15 +_f_nd
+                           5.00
+                          #16 grad_+_f_nd Virt/30
+                          <void>
+                     #13 - Virt/152                      │#2 5. Virt/40
+                     <void>                              │<void>
+                     #14 grad_- Virt/30                  │
+                     <void>                              │
+           #11 *. Virt/152            │#4 *. Virt/152    │
+           <void>                     │<void>            │
+           #12 grad_*. Virt/30        │#5 grad_*. Virt/30│
+           <void>                     │<void>            │
+    #10 3. Virt/40│#7 **. Virt/152    │#3 4. Virt/40│[0] │
+    <void>        │<void>             │<void>       │    │
+                  │#8 grad_**. Virt/30│             │    │
+                  │<void>             │             │    │
+                  │[0]│ #6 2. Virt/40 │             │    │
+                  │   │ <void>        │             │    │
|}];
let%op f = (3 *. ("x" [ 5 ] **. 2)) - (4 *. x) + 5 in
Train.every_non_literal_on_host f;
@@ -55,27 +55,7 @@ let%expect_test "Graph drawing recompile" =
let f_bprop = Train.to_routine (module Backend) ctx IDX.empty f_upd in
Train.run f_bprop;
Tensor.print_tree ~with_grad:true ~depth:9 f;
-  [%expect
-    {|
-                                   #32 +_f
-                                    6.00e+1
-                                   #33 grad_+_f
-                                    1.00
-                             #30 -                              │#19 5. Virt/40
-                              5.50e+1                           │<void>
-                             #31 grad_-                         │
-                              1.00                              │
-               #28 *.                 │       #21 *.            │
-                7.50e+1               │        2.00e+1          │
-               #29 grad_*.            │       #22 grad_*.       │
-                1.00                  │        -1.00            │
-    #27 3. Virt/40│   #24 **.         │#20 4. Virt/40│#17 x     │
-    <void>        │    2.50e+1        │<void>        │ 5.00     │
-                  │   #25 grad_**.    │              │#18 grad_x│
-                  │    3.00           │              │ 2.60e+1  │
-                  │[17]│#23 2. Virt/40│              │          │
-                  │    │<void>        │              │          │
-    |}];
+  [%expect.unreachable];
let xs = Array.init 10 ~f:Float.(fun i -> of_int i - 5.) in
let ys =
Array.map xs ~f:(fun v ->
@@ -94,54 +74,21 @@ let%expect_test "Graph drawing recompile" =
[ Scatterplot { points = Array.zip_exn xs ys; content = PrintBox.line "#" } ]
in
PrintBox_text.output Stdio.stdout plot_box;
-  [%expect
-    {|
-    ┌────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐
-    │ 1.00e+2│#                                                                                                   │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │           #                                                                                        │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │f       │                                                                                                    │
-    │(       │                                                                                                    │
-    │x       │                                                                                                    │
-    │)       │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                      #                                                                             │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                   #│
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                 #                                                                  │
-    │        │                                                                                                    │
-    │        │                                                                                        #           │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                            #                                                       │
-    │        │                                                                             #                      │
-    │        │                                                                                                    │
-    │ 4.00   │                                                       #          #                                 │
-    ├────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
-    │        │-5.00                                                                                           4.00│
-    │        │                                                 x                                                  │
-    └────────┴────────────────────────────────────────────────────────────────────────────────────────────────────┘
-    |}]
+  [%expect.unreachable]
+[@@expect.uncaught_exn {|
+  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+     This is strongly discouraged as backtraces are fragile.
+     Please change this test to not include a backtrace. *)
+  ("Utils.User_error(\"The linked context lacks node x\")")
+  Raised at Backends.verify_prior_context.(fun) in file "arrayjit/lib/backends.ml", line 285, characters 11-93
+  Called from Base__Set.Accessors.iter in file "src/set.ml" (inlined), line 1193, characters 18-38
+  Called from Backends.verify_prior_context in file "arrayjit/lib/backends.ml", lines 281-285, characters 2-94
+  Re-raised at Backends.verify_prior_context in file "arrayjit/lib/backends.ml", lines 280-285, characters 37-94
+  Called from Backends.Raise_backend.link in file "arrayjit/lib/backends.ml", lines 527-528, characters 4-49
+  Re-raised at Backends.Raise_backend.link in file "arrayjit/lib/backends.ml", lines 526-540, characters 23-92
+  Called from Tutorials__Zero2hero_1of7.(fun) in file "test/zero2hero_1of7.ml", line 55, characters 16-69
+  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+  |}]


let%expect_test "Graph drawing fetch" =
Tensor.unsafe_reinitialize ();
@@ -271,96 +218,39 @@ let%expect_test "Simple gradients hosted" =
let sgd_routine = Train.to_routine (module Backend) grad_routine.context IDX.empty sgd in
(* Check out the initial state without running a forward pass. *)
Tensor.print_tree ~spy:true ~with_grad:true ~depth:9 l;
-  [%expect
-    {|
-                                        #12 *._l Host&stream/41
-                                        <not-in-yet>
-                                        #13 grad_*._l Host&stream/41
-                                        <not-in-yet>
-                            #8 +_d Host&stream/41                             │#10 f Host&shared/39
-                            <not-in-yet>                                      │<not-in-yet>
-                            #9 grad_+_d Host&stream/41                        │#11 grad_f Host&stream/41
-                            <not-in-yet>                                      │<not-in-yet>
-               #4 *._e Host&stream/41                │#6 c Host&shared/39     │
-               <not-in-yet>                          │<not-in-yet>            │
-               #5 grad_*._e Host&stream/41           │#7 grad_c Host&stream/41│
-               <not-in-yet>                          │<not-in-yet>            │
-    #0 a Host&shared/39     │#2 b Host&shared/39     │                        │
-    <not-in-yet>            │<not-in-yet>            │                        │
-    #1 grad_a Host&stream/41│#3 grad_b Host&stream/41│                        │
-    <not-in-yet>            │<not-in-yet>            │                        │
-    |}];
+  [%expect.unreachable];
(* Do not update the params: all values and gradients will be at initial points, which are
specified in the tensor in the brackets. *)
Train.run grad_routine;
Tensor.print_tree ~with_grad:true ~depth:9 l;
-  [%expect
-    {|
-                 #12 *._l
-                  -8.00
-                 #13 grad_*._l
-                  1.00
-             #8 +_d              │#10 f
-              4.00               │ -2.00
-             #9 grad_+_d         │#11 grad_f
-              -2.00              │ 4.00
-       #4 *._e         │#6 c     │
-        -6.00          │ 1.00e+1 │
-       #5 grad_*._e    │#7 grad_c│
-        -2.00          │ -2.00   │
-    #0 a     │#2 b     │         │
-     2.00    │ -3.00   │         │
-    #1 grad_a│#3 grad_b│         │
-     6.00    │ -4.00   │         │
-    |}];
+  [%expect.unreachable];
(* Now we update the params, but we are not doing the forward and backward passes: only params
values will change, compared to the above. The update is in the opposite direction of the
gradient. *)
Train.run sgd_routine;
Tensor.print_tree ~with_grad:true ~depth:9 l;
-  [%expect
-    {|
-                 #12 *._l
-                  -8.00
-                 #13 grad_*._l
-                  1.00
-             #8 +_d              │#10 f
-              4.00               │ -2.40
-             #9 grad_+_d         │#11 grad_f
-              -2.00              │ 4.00
-       #4 *._e         │#6 c     │
-        -6.00          │ 1.02e+1 │
-       #5 grad_*._e    │#7 grad_c│
-        -2.00          │ -2.00   │
-    #0 a     │#2 b     │         │
-     1.40    │ -2.60   │         │
-    #1 grad_a│#3 grad_b│         │
-     6.00    │ -4.00   │         │
-    |}];
+  [%expect.unreachable];


(* Now the params will remain as above, but both param gradients and the values and gradients of
other nodes will change thanks to the forward and backward passes. *)
Train.run grad_routine;
Tensor.print_tree ~with_grad:true ~depth:9 l;
-  [%expect
-    {|
-                 #12 *._l
-                  -1.57e+1
-                 #13 grad_*._l
-                  1.00
-             #8 +_d              │#10 f
-              6.56               │ -2.40
-             #9 grad_+_d         │#11 grad_f
-              -2.40              │ 6.56
-       #4 *._e         │#6 c     │
-        -3.64          │ 1.02e+1 │
-       #5 grad_*._e    │#7 grad_c│
-        -2.40          │ -2.40   │
-    #0 a     │#2 b     │         │
-     1.40    │ -2.60   │         │
-    #1 grad_a│#3 grad_b│         │
-     6.24    │ -3.36   │         │
-    |}]
+  [%expect.unreachable]
+[@@expect.uncaught_exn {|
+  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+     This is strongly discouraged as backtraces are fragile.
+     Please change this test to not include a backtrace. *)
+  ("Utils.User_error(\"The linked context lacks node a\")")
+  Raised at Backends.verify_prior_context.(fun) in file "arrayjit/lib/backends.ml", line 285, characters 11-93
+  Called from Base__Set.Tree0.iter.iter in file "src/set.ml", line 860, characters 8-14
+  Called from Base__Set.Accessors.iter in file "src/set.ml" (inlined), line 1193, characters 18-38
+  Called from Backends.verify_prior_context in file "arrayjit/lib/backends.ml", lines 281-285, characters 2-94
+  Re-raised at Backends.verify_prior_context in file "arrayjit/lib/backends.ml", lines 280-285, characters 37-94
+  Called from Backends.Raise_backend.link in file "arrayjit/lib/backends.ml", lines 527-528, characters 4-49
+  Re-raised at Backends.Raise_backend.link in file "arrayjit/lib/backends.ml", lines 526-540, characters 23-92
+  Called from Tutorials__Zero2hero_1of7.(fun) in file "test/zero2hero_1of7.ml", line 270, characters 21-73
+  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+  |}]


let%expect_test "Simple gradients virtual" =
Tensor.unsafe_reinitialize ();
@@ -381,68 +271,29 @@ let%expect_test "Simple gradients virtual" =
Tensor.print_tree ~spy:true ~with_grad:true ~depth:9 l;
[%expect
{|
-                                       #12 *._l Host&dev/41
-                                       <not-in-yet>
-                                       #13 grad_*._l unknown
-                                       <not-in-yet>
-                            #8 +_d unknown                              │#10 f Host-non-const/24
-                            <not-in-yet>                                │<not-in-yet>
-                            #9 grad_+_d unknown                         │#11 grad_f Material/28
-                            <not-in-yet>                                │<not-in-yet>
-                #4 *._e unknown                  │#6 c Host-non-const/24│
-                <not-in-yet>                     │<not-in-yet>          │
-                #5 grad_*._e unknown             │#7 grad_c Material/28 │
-                <not-in-yet>                     │<not-in-yet>          │
-    #0 a Host-non-const/24│#2 b Host-non-const/24│                      │
-    <not-in-yet>          │<not-in-yet>          │                      │
-    #1 grad_a Material/28 │#3 grad_b Material/28 │                      │
-    <not-in-yet>          │<not-in-yet>          │                      │
+        #12 *._l Host&dev/412
+        <not-in-yet>
+        #13 grad_*._l unknown
+        <not-in-yet>
+      #8 +_d unknown        │[10]
+      <not-in-yet>          │
+      #9 grad_+_d unknown   │
+      <not-in-yet>          │
+    #4 *._e unknown     │[6]│
+    <not-in-yet>        │   │
+    #5 grad_*._e unknown│   │
+    <not-in-yet>        │   │
+    [0]│[2]             │   │
|}];
let grad_routine = Train.to_routine (module Backend) ctx IDX.empty grad in
(* Check out the state without running a forward pass or compiling the SGD update. *)
Tensor.print_tree ~spy:true ~with_grad:true ~depth:9 l;
-  [%expect
-    {|
-                                        #12 *._l Host&stream/41
-                                        <not-in-yet>
-                                        #13 grad_*._l Virt/40
-                                        <not-in-yet>
-                              #8 +_d Local/46                              │#10 f Host&shared/39
-                              <not-in-yet>                                 │<not-in-yet>
-                              #9 grad_+_d Virt/40                          │#11 grad_f Dev-stream/41
-                              <not-in-yet>                                 │<not-in-yet>
-                 #4 *._e Virt/152                  │#6 c Host&shared/39    │
-                 <not-in-yet>                      │<not-in-yet>           │
-                 #5 grad_*._e Virt/40              │#7 grad_c Dev-stream/41│
-                 <not-in-yet>                      │<not-in-yet>           │
-    #0 a Host&shared/39    │#2 b Host&shared/39    │                       │
-    <not-in-yet>           │<not-in-yet>           │                       │
-    #1 grad_a Dev-stream/41│#3 grad_b Dev-stream/41│                       │
-    <not-in-yet>           │<not-in-yet>           │                       │
-    |}];
+  [%expect.unreachable];
(* Do not update the params: all values and gradients will be at initial points, which are
specified in the tensor in the brackets. *)
Train.run grad_routine;
Tensor.print_tree ~with_grad:true ~depth:9 l;
-  [%expect
-    {|
-                                         #12 *._l
-                                          -8.00
-                                         #13 grad_*._l Virt/40
-                                         <void>
-                              #8 +_d Local/46                              │#10 f
-                              <void>                                       │ -2.00
-                              #9 grad_+_d Virt/40                          │#11 grad_f Dev-stream/41
-                              <void>                                       │<void>
-                 #4 *._e Virt/152                  │#6 c                   │
-                 <void>                            │ 1.00e+1               │
-                 #5 grad_*._e Virt/40              │#7 grad_c Dev-stream/41│
-                 <void>                            │<void>                 │
-    #0 a                   │#2 b                   │                       │
-     2.00                  │ -3.00                 │                       │
-    #1 grad_a Dev-stream/41│#3 grad_b Dev-stream/41│                       │
-    <void>                 │<void>                 │                       │
-    |}];
+  [%expect.unreachable];
(* Only now compile the SGD update. *)
let sgd_routine = Train.to_routine (module Backend) grad_routine.context IDX.empty sgd in
(* Now we update the params, but are not doing the forward and backward passes: only params values
@@ -450,48 +301,28 @@ let%expect_test "Simple gradients virtual" =
always be recomputed using the latest parameter state. *)
Train.run sgd_routine;
Tensor.print_tree ~with_grad:true ~depth:9 l;
-  [%expect
-    {|
-                                         #12 *._l
-                                          -8.00
-                                         #13 grad_*._l Virt/40
-                                         <void>
-                              #8 +_d Local/46                              │#10 f
-                              <void>                                       │ -2.40
-                              #9 grad_+_d Virt/40                          │#11 grad_f Dev-stream/41
-                              <void>                                       │<void>
-                 #4 *._e Virt/152                  │#6 c                   │
-                 <void>                            │ 1.02e+1               │
-                 #5 grad_*._e Virt/40              │#7 grad_c Dev-stream/41│
-                 <void>                            │<void>                 │
-    #0 a                   │#2 b                   │                       │
-     1.40                  │ -2.60                 │                       │
-    #1 grad_a Dev-stream/41│#3 grad_b Dev-stream/41│                       │
-    <void>                 │<void>                 │                       │
-    |}];
+  [%expect.unreachable];
(* Now the params will remain as above, but both param gradients and the values and gradients of
other nodes will change thanks to the forward and backward passes. *)
Train.run grad_routine;
Tensor.print_tree ~with_grad:true ~depth:9 l;
-  [%expect
-    {|
-                                         #12 *._l
-                                          -1.57e+1
-                                         #13 grad_*._l Virt/40
-                                         <void>
-                              #8 +_d Local/46                              │#10 f
-                              <void>                                       │ -2.40
-                              #9 grad_+_d Virt/40                          │#11 grad_f Dev-stream/41
-                              <void>                                       │<void>
-                 #4 *._e Virt/152                  │#6 c                   │
-                 <void>                            │ 1.02e+1               │
-                 #5 grad_*._e Virt/40              │#7 grad_c Dev-stream/41│
-                 <void>                            │<void>                 │
-    #0 a                   │#2 b                   │                       │
-     1.40                  │ -2.60                 │                       │
-    #1 grad_a Dev-stream/41│#3 grad_b Dev-stream/41│                       │
-    <void>                 │<void>                 │                       │
-    |}]
+  [%expect.unreachable]
+[@@expect.uncaught_exn {|
+  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+     This is strongly discouraged as backtraces are fragile.
+     Please change this test to not include a backtrace. *)
+  ("Utils.User_error(\"The linked context lacks node a\")")
+  Raised at Backends.verify_prior_context.(fun) in file "arrayjit/lib/backends.ml", line 285, characters 11-93
+  Called from Base__Set.Tree0.iter.iter in file "src/set.ml", line 860, characters 8-14
+  Called from Base__Set.Tree0.iter.iter in file "src/set.ml", line 860, characters 8-14
+  Called from Base__Set.Accessors.iter in file "src/set.ml" (inlined), line 1193, characters 18-38
+  Called from Backends.verify_prior_context in file "arrayjit/lib/backends.ml", lines 281-285, characters 2-94
+  Re-raised at Backends.verify_prior_context in file "arrayjit/lib/backends.ml", lines 280-285, characters 37-94
+  Called from Backends.Raise_backend.link in file "arrayjit/lib/backends.ml", lines 527-528, characters 4-49
+  Re-raised at Backends.Raise_backend.link in file "arrayjit/lib/backends.ml", lines 526-540, characters 23-92
+  Called from Tutorials__Zero2hero_1of7.(fun) in file "test/zero2hero_1of7.ml", line 401, characters 21-73
+  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+  |}]


let%expect_test "tanh plot" =
Tensor.unsafe_reinitialize ();
@@ -510,21 +341,22 @@ let%expect_test "2D neuron hosted" =
let routine = Train.to_routine (module Backend) ctx IDX.empty update in
Train.run routine;
Tensor.print_tree ~with_grad:true ~depth:9 v;
-  [%expect
-    {|
-                 #8 +_v
-                  7.00e-1
-                 #9 grad_+_v
-                  1.00
-             #6 *              │#0 b
-              -6.00            │ 6.70
-             #7 grad_*         │#1 grad_b
-              1.00             │ 1.00
-    #2 w         │#4 x         │
-     -3.00  1.00 │ 2.00  0.00  │
-    #3 grad_w    │#5 grad_x    │
-     2.00  0.00  │ -3.00  1.00 │
-    |}]
+  [%expect.unreachable]
+[@@expect.uncaught_exn {|
+  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+     This is strongly discouraged as backtraces are fragile.
+     Please change this test to not include a backtrace. *)
+  ("Utils.User_error(\"The linked context lacks node b\")")
+  Raised at Backends.verify_prior_context.(fun) in file "arrayjit/lib/backends.ml", line 285, characters 11-93
+  Called from Base__Set.Tree0.iter.iter in file "src/set.ml", line 861, characters 8-11
+  Called from Base__Set.Accessors.iter in file "src/set.ml" (inlined), line 1193, characters 18-38
+  Called from Backends.verify_prior_context in file "arrayjit/lib/backends.ml", lines 281-285, characters 2-94
+  Re-raised at Backends.verify_prior_context in file "arrayjit/lib/backends.ml", lines 280-285, characters 37-94
+  Called from Backends.Raise_backend.link in file "arrayjit/lib/backends.ml", lines 527-528, characters 4-49
+  Re-raised at Backends.Raise_backend.link in file "arrayjit/lib/backends.ml", lines 526-540, characters 23-92
+  Called from Tutorials__Zero2hero_1of7.(fun) in file "test/zero2hero_1of7.ml", line 510, characters 16-70
+  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+  |}]


let%expect_test "2D neuron virtual" =
Tensor.unsafe_reinitialize ();
@@ -537,18 +369,19 @@ let%expect_test "2D neuron virtual" =
let routine = Train.to_routine (module Backend) ctx IDX.empty update in
Train.run routine;
Tensor.print_tree ~with_grad:true ~depth:9 v;
-  [%expect
-    {|
-                      #8 +_v
-                       7.00e-1
-                      #9 grad_+_v Virt/40
-                      <void>
-              #6 * Local/46              │#0 b
-              <void>                     │ 6.70
-              #7 grad_* Virt/40          │#1 grad_b Local/46
-              <void>                     │<void>
-    #2 w              │#4 x              │
-     -3.00  1.00      │ 2.00  0.00       │
-    #3 grad_w Local/46│#5 grad_x Local/46│
-    <void>            │<void>            │
-    |}]
+  [%expect.unreachable]
+[@@expect.uncaught_exn {|
+  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+     This is strongly discouraged as backtraces are fragile.
+     Please change this test to not include a backtrace. *)
+  ("Utils.User_error(\"The linked context lacks node b\")")
+  Raised at Backends.verify_prior_context.(fun) in file "arrayjit/lib/backends.ml", line 285, characters 11-93
+  Called from Base__Set.Tree0.iter.iter in file "src/set.ml", line 860, characters 8-14
+  Called from Base__Set.Accessors.iter in file "src/set.ml" (inlined), line 1193, characters 18-38
+  Called from Backends.verify_prior_context in file "arrayjit/lib/backends.ml", lines 281-285, characters 2-94
+  Re-raised at Backends.verify_prior_context in file "arrayjit/lib/backends.ml", lines 280-285, characters 37-94
+  Called from Backends.Raise_backend.link in file "arrayjit/lib/backends.ml", lines 527-528, characters 4-49
+  Re-raised at Backends.Raise_backend.link in file "arrayjit/lib/backends.ml", lines 526-540, characters 23-92
+  Called from Tutorials__Zero2hero_1of7.(fun) in file "test/zero2hero_1of7.ml", line 537, characters 16-70
+  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+  |}]
File "test/moons_demo_parallel.ml", line 1, characters 0-0:
/usr/local/bin/git --no-pager diff --no-index --color=always -u _build/default/test/moons_demo_parallel.ml _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/moons_demo_parallel.ml.corrected
diff --git a/_build/default/test/moons_demo_parallel.ml b/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/moons_demo_parallel.ml.corrected
index e0e4f52..c4ff383 100644
--- a/_build/default/test/moons_demo_parallel.ml
+++ b/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/moons_demo_parallel.ml.corrected
@@ -97,4 +97,140 @@ let%expect_test "Half-moons data parallel" =
]
in
PrintBox_text.output Stdio.stdout plot_loss);
-  [%expect "Success"]
+  [%expect " 
+ Half-moons scatterplot and decision boundary:
+ \226\148\140\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\144
+ \226\148\130***********************************#****************************************************************\226\148\130
+ \226\148\130***********************#*#################*#********************************************************\226\148\130
+ \226\148\130**********************##########################****************************************************\226\148\130
+ \226\148\130*****************#################################**************************************************\226\148\130
+ \226\148\130**************######################################************************************************\226\148\130
+ \226\148\130*************#########################################**********************************************\226\148\130
+ \226\148\130***********################*************#################*******************************************\226\148\130
+ \226\148\130**********##############*******************###############******************************************\226\148\130
+ \226\148\130********##############**************************###########*****************************************\226\148\130
+ \226\148\130*******#############****************************##*##########***************************************\226\148\130
+ \226\148\130******###########**********************************############*************************************\226\148\130
+ \226\148\130*****###########************************************###########*************************************\226\148\130
+ \226\148\130****##########*********************%*****************###########************************************\226\148\130
+ \226\148\130***#########*#*******************%%%%*****************#########******************************%%%*%%*\226\148\130
+ \226\148\130***##########******************%%%*%%*******************########*#***************************%%*%%%*\226\148\130
+ \226\148\130**#######**********************%%%%%%%******************##########***************************%%%%%%%\226\148\130
+ \226\148\130*#########********************%%%%%%%%********************########***************************%%%%%%*\226\148\130
+ \226\148\130*########**********************%%%%%%%*********************########**************************%%%%%%*\226\148\130
+ \226\148\130#########*********************%%*%%%%%**********************########************************%%%%%%%*\226\148\130
+ \226\148\130*#######***********************%%%%%%%%********************#########************************%%%%%%%*\226\148\130
+ \226\148\130########***********************%%%%%%%%*********************########***********************%%%%%%%%*\226\148\130
+ \226\148\130#######*************************%%%%%%%**********************#######***********************%%%%%%%%*\226\148\130
+ \226\148\130#######*************************%%%%%%%%**********************#######*********************%%%%%%%%**\226\148\130
+ \226\148\130#######*************************%%%%%%%%*********************#######*********************%%%%%%%%%**\226\148\130
+ \226\148\130######****************************%%%%%%%%*******************#######********************%%%%%%%%%***\226\148\130
+ \226\148\130######***************************%%%%%%%%********************########******************%%%%%%%%%%***\226\148\130
+ \226\148\130######****************************%%%%%%%%%******************#######******************%*%%%%%%%%****\226\148\130
+ \226\148\130###*#*****************************%*%%%%%%%%%*****************#*#*##******************%%*%%%%%%%****\226\148\130
+ \226\148\130************************************%%%%%%%%%***************************************%%%%%%%%%%%*****\226\148\130
+ \226\148\130**************************************%%%%%%%*%*************************************%%%%%%%%%%%*****\226\148\130
+ \226\148\130*************************************%%%%%%%%%%%*********************************%%%%%%%%%%%%*******\226\148\130
+ \226\148\130**************************************%%*%%%%%%%%*******************************%%%%%%%%%%%*********\226\148\130
+ \226\148\130****************************************%%%%%%%%%%%%************************%**%%%%%%%%%%%%*********\226\148\130
+ \226\148\130****************************************%%%%%%%%%%%%%%*%********************%%%%%%%%%%%%%***********\226\148\130
+ \226\148\130******************************************%%%%%%%%%%%%%%%%%**************%%%%%%%%%%%%%%%************\226\148\130
+ \226\148\130********************************************%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%***************\226\148\130
+ \226\148\130************************************************%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*%**%**************\226\148\130
+ \226\148\130************************************************%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*%******************\226\148\130
+ \226\148\130**************************************************%%%%%%%%%%%%%%%%%%%%%%%%%%%%*%********************\226\148\130
+ \226\148\130*****************************************************%%*%**%%%%%%%%%%%%%%%**************************\226\148\130
+ \226\148\148\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\152
+ Batch Log-loss:
+ \226\148\140\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\172\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\144
+ \226\148\130 1.50e+2 \226\148\130     -                                                                                              \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130  -                                                                                                 \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130b        \226\148\130                                                                                                    \226\148\130
+ \226\148\130a        \226\148\130                                                                                                    \226\148\130
+ \226\148\130t        \226\148\130                                                                                                    \226\148\130
+ \226\148\130c        \226\148\130                                                                                                    \226\148\130
+ \226\148\130h        \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130l        \226\148\130                                                                                                    \226\148\130
+ \226\148\130o        \226\148\130                                                                                                    \226\148\130
+ \226\148\130g        \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130l        \226\148\130                                                                                                    \226\148\130
+ \226\148\130o        \226\148\130                                                                                                    \226\148\130
+ \226\148\130s        \226\148\130                                                                                                    \226\148\130
+ \226\148\130s        \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130     - ---- ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---\226\148\130
+ \226\148\130         \226\148\130  -  --- ---- ----  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  ---  \226\148\130
+ \226\148\130         \226\148\130                                                    -              -         -         -            \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130         \226\148\130                                                                                                    \226\148\130
+ \226\148\130 -1.04e+1\226\148\130-----                                                    -    -         -         -         -    -  \226\148\130
+ \226\148\156\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\188\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\164
+ \226\148\130         \226\148\1300.00                                                                                         4.39e+2\226\148\130
+ \226\148\130         \226\148\130                                                step                                                \226\148\130
+ \226\148\148\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\180\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\152
+ Epoch Log-loss:
+ \226\148\140\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\172\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\144
+ \226\148\130 1.50e+2\226\148\130     -                                                                                              \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130-                                                                                                   \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130e       \226\148\130                                                                                                    \226\148\130
+ \226\148\130p       \226\148\130                                                                                                    \226\148\130
+ \226\148\130o       \226\148\130                                                                                                    \226\148\130
+ \226\148\130c       \226\148\130                                                                                                    \226\148\130
+ \226\148\130h       \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130l       \226\148\130                                                                                                    \226\148\130
+ \226\148\130o       \226\148\130                                                                                                    \226\148\130
+ \226\148\130g       \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130l       \226\148\130                                                                                                    \226\148\130
+ \226\148\130o       \226\148\130                                                                                                    \226\148\130
+ \226\148\130s       \226\148\130                                                                                                    \226\148\130
+ \226\148\130s       \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130        \226\148\130                                                                                                    \226\148\130
+ \226\148\130 2.57e+1\226\148\130          -    -    -    -    -    -    -    -    -    -    -    -    -    -    -    -    -    -    \226\148\130
+ \226\148\156\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\188\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\164
+ \226\148\130        \226\148\1300.00                                                                                         1.90e+1\226\148\130
+ \226\148\130        \226\148\130                                                step                                                \226\148\130
+ \226\148\148\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\180\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\128\226\148\152
+ "]
File "test/primitive_ops.ml", line 1, characters 0-0:
/usr/local/bin/git --no-pager diff --no-index --color=always -u _build/default/test/primitive_ops.ml _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/primitive_ops.ml.corrected
diff --git a/_build/default/test/primitive_ops.ml b/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/primitive_ops.ml.corrected
index c0aa497..44c6652 100644
--- a/_build/default/test/primitive_ops.ml
+++ b/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/primitive_ops.ml.corrected
@@ -318,54 +318,129 @@ let%expect_test "sin(x)" =
let%op f x = sin x in
let plot_box = plot_unop ~f () in
PrintBox_text.output Stdio.stdout plot_box;
-  [%expect
-    {|
-    ┌─────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐
-    │ 9.99e-1 │                                                                 #                                  │
-    │         │#### ##                                        *** **         ### ###                               │
-    │         │      #                                      **      **      #       #                              │
-    │         │       #                                    *          *    #         #                             │
-    │         │         #                                                 #           #                            │
-    │         │          #                                *            * #             #                           │
-    │         │                                          *              *               #                          │
-    │         │           #                            *                #*                                         │
-    │         │           #                                            #                 #                         │
-    │         │                                        *                  *                                        │
-    │         │             #                         *               #    *              #                        │
-    │         │                                                      #                     #                       │
-    │         │              #                       *                      *                                      │
-    │         │               #                                     #                       #                      │
-    │         │*                                    *                        *                                    *│
-    │         │               #                                    #                         #                     │
-    │         │ *                                  *                          *                                  * │
-    │         │                 #                                 #                           #                    │
-    │f        │  *                                *                            *                                *  │
-    │(        │                  #                              #                              #                   │
-    │x        │- *  -    -    -    -    -    -   *-    -    -    -    -    -    *    -    -    -    -    -    -*   │
-    │)        │                   #                             #                               #                  │
-    │         │   *                             *                                *                           *     │
-    │         │                    #                           #                                #                  │
-    │         │     *                          *                                  *                          *     │
-    │         │                     #                         #                                   #                │
-    │         │      *                        *                                    *                        *      │
-    │         │                      #                       #                                     #               │
-    │         │      *                       *                                      *               #      *       │
-    │         │                       #     *               #                        *                             │
-    │         │       *                #                   #                                         #    *        │
-    │         │         *                  *                                          *                  *         │
-    │         │                        #                  #                                          #             │
-    │         │          *                *              #                             *               #*          │
-    │         │           *              *                                              *              *           │
-    │         │                        *  #            #                                 *              #          │
-    │         │           *            *   #           #                                  *          *   #         │
-    │         │             *         *     #         #                                    *         *    #        │
-    │         │              **      *       #       #                                      *      **      #       │
-    │ -9.99e-1│               * *****         #######                                        **** *         ## ####│
-    ├─────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
-    │         │-5.00                                                                                           5.00│
-    │         │                                                 x                                                  │
-    └─────────┴────────────────────────────────────────────────────────────────────────────────────────────────────┘
-    |}]
+  [%expect.unreachable]
+[@@expect.uncaught_exn {|
+  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+     This is strongly discouraged as backtraces are fragile.
+     Please change this test to not include a backtrace. *)
+  "Assert_failure arrayjit/lib/c_syntax.ml:453:4"
+  Raised at Ir__C_syntax.C_syntax.pp_array_offset in file "arrayjit/lib/c_syntax.ml", line 453, characters 4-39
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 509, characters 25-53
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 479, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir_C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.pp_ll in file "arrayjit/lib/c_syntax.ml", line 480, characters 17-25
+  Called from Ir__C_syntax.C_syntax.compile_main in file "arrayjit/lib/c_syntax.ml" (inlined), line 732, characters 43-52
+  Called from Ir__C_syntax.C_syntax.compile_proc in file "arrayjit/lib/c_syntax.ml", line 855, characters 63-79
+  Called from Backends__Cc_backend.compile in file "arrayjit/lib/cc_backend.ml", line 137, characters 25-69
+  Called from Backends.Add_device.compile in file "arrayjit/lib/backends.ml", line 326, characters 15-45
+  Called from Backends.Raise_backend.compile in file "arrayjit/lib/backends.ml", line 443, characters 29-59
+  Re-raised at Backends.Raise_backend.compile in file "arrayjit/lib/backends.ml", line 443, characters 4-59
+  Re-raised at Backends.Raise_backend.compile in file "arrayjit/lib/backends.ml", lines 439-447, characters 26-99
+  Called from Ocannl__Train.to_routine in file "lib/train.ml", line 354, characters 26-82
+  Called from Tutorials__Primitive_ops.plot_unop in file "test/primitive_ops.ml", line 35, characters 19-72
+  Called from Tutorials__Primitive_ops.(fun) in file "test/primitive_ops.ml", line 319, characters 17-32
+  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+  |}]


let%expect_test "cos(x)" =
let%op f x = cos x in
File "test/micrograd_demo.ml", line 1, characters 0-0:
/usr/local/bin/git --no-pager diff --no-index --color=always -u _build/default/test/micrograd_demo.ml _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/micrograd_demo.ml.corrected
diff --git a/_build/default/test/micrograd_demo.ml b/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/micrograd_demo.ml.corrected
index b394efe..4062941 100644
--- a/_build/default/test/micrograd_demo.ml
+++ b/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/micrograd_demo.ml.corrected
@@ -31,57 +31,26 @@ let%expect_test "Micrograd README basic example" =
let step = Train.to_routine (module Backend) ctx IDX.empty update in
Train.run step;
Tensor.print ~with_code:false ~with_grad:false `Default g;
-  [%expect
-    {|
-    ┌────────────────────┐
-    │[75]: +_g shape 0:1 │
-    │┌┬─────────┐        │
-    │││axis 0   │        │
-    │├┼─────────┤        │
-    │││ 2.47e+1 │        │
-    │└┴─────────┘        │
-    └────────────────────┘
-    |}];
+  [%expect.unreachable];
Tensor.print ~with_code:false ~with_grad:true `Default a;
-  [%expect
-    {|
-    ┌─────────────────┐
-    │[0]: a shape 0:1 │
-    │┌┬───────┐       │
-    │││axis 0 │       │
-    │├┼───────┤       │
-    │││ -4.00 │       │
-    │└┴───────┘       │
-    └─────────────────┘
-    ┌────────────────────────┐
-    │[0]: a shape 0:1  grad_a│
-    │┌┬─────────┐            │
-    │││axis 0   │            │
-    │├┼─────────┤            │
-    │││ 1.38e+2 │            │
-    │└┴─────────┘            │
-    └────────────────────────┘
-    |}];
+  [%expect.unreachable];
Tensor.print ~with_code:false ~with_grad:true `Default b;
-  [%expect
-    {|
-    ┌─────────────────┐
-    │[2]: b shape 0:1 │
-    │┌┬──────┐        │
-    │││axis 0│        │
-    │├┼──────┤        │
-    │││ 2.00 │        │
-    │└┴──────┘        │
-    └─────────────────┘
-    ┌────────────────────────┐
-    │[2]: b shape 0:1  grad_b│
-    │┌┬─────────┐            │
-    │││axis 0   │            │
-    │├┼─────────┤            │
-    │││ 6.45e+2 │            │
-    │└┴─────────┘            │
-    └────────────────────────┘
-    |}]
+  [%expect.unreachable]
+[@@expect.uncaught_exn {|
+  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+     This is strongly discouraged as backtraces are fragile.
+     Please change this test to not include a backtrace. *)
+  ("Utils.User_error(\"The linked context lacks node a\")")
+  Raised at Backends.verify_prior_context.(fun) in file "arrayjit/lib/backends.ml", line 285, characters 11-93
+  Called from Base__Set.Tree0.iter.iter in file "src/set.ml", line 860, characters 8-14
+  Called from Base__Set.Accessors.iter in file "src/set.ml" (inlined), line 1193, characters 18-38
+  Called from Backends.verify_prior_context in file "arrayjit/lib/backends.ml", lines 281-285, characters 2-94
+  Re-raised at Backends.verify_prior_context in file "arrayjit/lib/backends.ml", lines 280-285, characters 37-94
+  Called from Backends.Raise_backend.link in file "arrayjit/lib/backends.ml", lines 527-528, characters 4-49
+  Re-raised at Backends.Raise_backend.link in file "arrayjit/lib/backends.ml", lines 526-540, characters 23-92
+  Called from Tutorials__Micrograd_demo.(fun) in file "test/micrograd_demo.ml", line 31, characters 13-67
+  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+  |}]


let%expect_test "Micrograd half-moons example" =
Tensor.unsafe_reinitialize ();
@@ -168,223 +137,34 @@ let%expect_test "Micrograd half-moons example" =
in
Stdio.printf "Half-moons scatterplot and decision boundary:\n%!";
PrintBox_text.output Stdio.stdout plot_moons;
-  [%expect
-    {|
-    Half-moons scatterplot and decision boundary:
-    ┌────────────────────────────────────────────────────────────────────────────────────────────────────┐
-    │****************************#***********************************************************************│
-    │****************************###***###***#***********************************************************│
-    │***************************#********#***#***********************************************************│
-    │********************#*********************##*#*#****************************************************│
-    │******************#***#*****##*#*#*#****#*#*#*##****************************************************│
-    │**************#*#**###**#*##**##********#**#****###**#**********************************************│
-    │***********#***##***#**##*****************#*#*##*###**********************************************..│
-    │***************#**###******************************##*#******************************************...│
-    │*************#*****#******************************#*#***#*#*************************************....│
-    │*********#***#******************......************##*###**#************************************.....│
-    │******#***#*#*#****************........******************#*#*********************************.......│
-    │*****###****#****************...........****************#***********************************........│
-    │*******#*###****************.............******************#*#*****************************.........│
-    │**********##***************.......%%......***************#**##****************************..........│
-    │*****#***#****************......%..%%......*********************************************..........%.│
-    │**####*******************......%..%..........****************##*#**********************........%...%│
-    │****#*******************.......%%..%..........***************#*#**********************.........%....│
-    │*#****##***************.........%....%.........************##***#********************.......%...%%..│
-    │****#*#***************.........%..%.%...........*************#**#*******************..........%.%...│
-    │##*##****************............%...............**************#*##****************.........%.%.%%%.│
-    │**#####************............%...%%.............*******************************...........%..%.%..│
-    │******************...............%.%.%%............*********#*#*#*#*************................%%..│
-    │***##************................%..%..%............************#*#************.............%...%...│
-    │##**#***********...................%...%.............********#**###***********...........%.%%.......│
-    │###************..................%.%.%................***********##**********..................%....│
-    │**##**********.........................................**********#*********.............%%.%..%.....│
-    │**#**********......................%%...................********##********..............%%.%........│
-    │************..........................%..................****#**#********...................%.......│
-    │***********.........................%%.%..................*****##******...............%..%..........│
-    │**********.............................%%..................***********.................%%.%%........│
-    │*********..............................%...%................*******.....................%%%.........│
-    │********...................................%..%....................................%.....%..........│
-    │*******.................................%%..%.%................................%.%.%.%%.............│
-    │******.....................................%%.%...%%.%.......................%%%....%.%.%...........│
-    │*****....................................%.....%.%..%....................%.....%%.%.%...............│
-    │****........................................%%...%.%%%%..%.......%.........%%.%%....................│
-    │***...............................................%..%.......%..%%%%...%.%..%.%.....................│
-    │**.................................................%.%.%............%..%...%........................│
-    │*.................................................%....%.%......%%...%.%............................│
-    │..........................................................%..%......%%%.............................│
-    └────────────────────────────────────────────────────────────────────────────────────────────────────┘
-    |}];
+  [%expect.unreachable];
Stdio.printf "Loss:\n%!";
let plot_loss =
PrintBox_utils.plot ~x_label:"step" ~y_label:"loss"
[ Line_plot { points = Array.of_list_rev !losses; content = PrintBox.line "-" } ]
in
PrintBox_text.output Stdio.stdout plot_loss;
-  [%expect
-    {|
-    Loss:
-    ┌────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐
-    │ 3.79e+1│-                                                                                                   │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │l       │                                                                                                    │
-    │o       │                                                                                                    │
-    │s       │                                                                                                    │
-    │s       │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │-                                                                                                   │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │                                                                                                    │
-    │        │-       -         -                                                                                 │
-    │ 0.00   │----------------------------------------------------------------------------------------------------│
-    ├────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
-    │        │0.00                                                                                         3.99e+2│
-    │        │                                                step                                                │
-    └────────┴────────────────────────────────────────────────────────────────────────────────────────────────────┘
-    |}];
+  [%expect.unreachable];
Stdio.printf "Log-loss, for better visibility:\n%!";
let plot_loss =
PrintBox_utils.plot ~x_label:"step" ~y_label:"log loss"
[ Line_plot { points = Array.of_list_rev !log_losses; content = PrintBox.line "-" } ]
in
PrintBox_text.output Stdio.stdout plot_loss;
-  [%expect
-    {|
-    Log-loss, for better visibility:
-    ┌─────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐
-    │ 3.63    │-                                                                                                   │
-    │         │                                                                                                    │
-    │         │                                                                                                    │
-    │         │                                                                                                    │
-    │         │-                                                                                                   │
-    │         │                                                                                                    │
-    │         │                                                                                                    │
-    │         │                                                                                                    │
-    │         │                                                                                                    │
-    │         │-                                                                                                   │
-    │         │        -         -                                                                                 │
-    │         │ -  -                        -                                                                      │
-    │         │------       -                                                                                      │
-    │         │ ---- -  - --- -   - - -    -                                                                       │
-    │         │   --  -  - - ---     --  -  --            -                                                        │
-    │         │  -  -- - -    ---  - - ---  -----       - --                                                       │
-    │l        │       --  -      - -      -     ---  -    -         -                                              │
-    │o        │       - -  -   --            -  --  - -  -     -                        -                          │
-    │g        │               -     -   -      -  --     - -    -  -     -                   -          -          │
-    │         │     - -     -   --      -                  -      -  --       - -         -                        │
-    │l        │            -             -            --    --            -  -         -  -                       -│
-    │o        │        -        -                           -       -  -       -   -           - -          -    - │
-    │s        │                               -     -        -      -                             --   -           │
-    │s        │                      -                                                   -                         │
-    │         │                       -   -                          -    -           -        -       -    -    - │
-    │         │                   -               - -  -                               -                           │
-    │         │                                                                             -   -                  │
-    │         │                                                  -    -              -                             │
-    │         │                                      -                                        -                    │
-    │         │                                                                                                    │
-    │         │                            -                                                                       │
-    │         │                                                                -                                   │
-    │         │                                                                                                    │
-    │         │                                                                                                    │
-    │         │                                                                                                    │
-    │         │                                                                                                    │
-    │         │          -                                                                                         │
-    │         │                                                                                                    │
-    │         │                                                                                                    │
-    │ -1.00e+1│     -   - -  -   ----- -- --------------- ---------------------------------------------------------│
-    ├─────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
-    │         │0.00                                                                                         3.99e+2│
-    │         │                                                step                                                │
-    └─────────┴────────────────────────────────────────────────────────────────────────────────────────────────────┘
-    |}];
+  [%expect.unreachable];
Stdio.printf "\nLearning rate:\n%!";
let plot_lr =
PrintBox_utils.plot ~x_label:"step" ~y_label:"learning rate"
[ Line_plot { points = Array.of_list_rev !learning_rates; content = PrintBox.line "-" } ]
in
PrintBox_text.output Stdio.stdout plot_lr;
-  [%expect
-    {|
-    Learning rate:
-    ┌─────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐
-    │ -1.00e-1│                                                                                                   -│
-    │         │                                                                                                 ---│
-    │         │                                                                                              ----  │
-    │         │                                                                                            ---     │
-    │         │                                                                                         ----       │
-    │         │                                                                                       ---          │
-    │         │                                                                                    ---             │
-    │         │                                                                                  ---               │
-    │         │                                                                               ---                  │
-    │         │                                                                            ----                    │
-    │         │                                                                          ---                       │
-    │         │                                                                       ----                         │
-    │         │                                                                     ---                            │
-    │l        │                                                                  ----                              │
-    │e        │                                                                ---                                 │
-    │a        │                                                             ---                                    │
-    │r        │                                                           ---                                      │
-    │n        │                                                        ---                                         │
-    │i        │                                                     ----                                           │
-    │n        │                                                   ---                                              │
-    │g        │                                                ----                                                │
-    │         │                                              ---                                                   │
-    │r        │                                           ----                                                     │
-    │a        │                                         ---                                                        │
-    │t        │                                      ---                                                           │
-    │e        │                                    ---                                                             │
-    │         │                                 ---                                                                │
-    │         │                              ----                                                                  │
-    │         │                            ---                                                                     │
-    │         │                         ----                                                                       │
-    │         │                       ---                                                                          │
-    │         │                    ----                                                                            │
-    │         │                  ---                                                                               │
-    │         │               ---                                                                                  │
-    │         │             ---                                                                                    │
-    │         │          ---                                                                                       │
-    │         │       ----                                                                                         │
-    │         │     ---                                                                                            │
-    │         │  ----                                                                                              │
-    │ -2.00e-1│---                                                                                                 │
-    ├─────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
-    │         │0.00                                                                                         3.99e+2│
-    │         │                                                step                                                │
-    └─────────┴────────────────────────────────────────────────────────────────────────────────────────────────────┘
-    |}];
+  [%expect.unreachable];


(* Testing how the syntax extension %op creates labels for the resulting tensors: *)
Stdio.printf "mlp_result's name: %s\n%!" @@ Tensor.debug_name mlp_result;
(* Note: mlp_result is not included in the resulting tensor's label, because the identifier label
does not propagate across function calls. *)
-  [%expect {| mlp_result's name: mlp_point |}];
+  [%expect.unreachable];
(Stdio.printf "(mlp moons_input) name: %s\n%!"
@@ Tensor.debug_name
@@
@@ -398,4 +178,20 @@ let%expect_test "Micrograd half-moons example" =
] ->
subtensor
| _ -> assert false);
-  [%expect {| (mlp moons_input) name: mlp_moons_input |}]
+  [%expect.unreachable]
+[@@expect.uncaught_exn {|
+  (* CR expect_test_collector: This test expectation appears to contain a backtrace.
+     This is strongly discouraged as backtraces are fragile.
+     Please change this test to not include a backtrace. *)
+  ("Utils.User_error(\"The linked context lacks node b1\")")
+  Raised at Backends.verify_prior_context.(fun) in file "arrayjit/lib/backends.ml", line 285, characters 11-93
+  Called from Base__Set.Tree0.iter.iter in file "src/set.ml", line 861, characters 8-11
+  Called from Base__Set.Tree0.iter.iter in file "src/set.ml", line 860, characters 8-14
+  Called from Base__Set.Accessors.iter in file "src/set.ml" (inlined), line 1193, characters 18-38
+  Called from Backends.verify_prior_context in file "arrayjit/lib/backends.ml", lines 281-285, characters 2-94
+  Re-raised at Backends.verify_prior_context in file "arrayjit/lib/backends.ml", lines 280-285, characters 37-94
+  Called from Backends.Raise_backend.link in file "arrayjit/lib/backends.ml", lines 527-528, characters 4-49
+  Re-raised at Backends.Raise_backend.link in file "arrayjit/lib/backends.ml", lines 526-540, characters 23-92
+  Called from Tutorials__Micrograd_demo.(fun) in file "test/micrograd_demo.ml", line 125, characters 4-83
+  Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28
+  |}]
File "test/hello_world_op.ml", line 1, characters 0-0:
/usr/local/bin/git --no-pager diff --no-index --color=always -u _build/default/test/hello_world_op.ml _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/hello_world_op.ml.corrected
diff --git a/_build/default/test/hello_world_op.ml b/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/hello_world_op.ml.corrected
index 6407bb4..36b8f3e 100644
--- a/_build/default/test/hello_world_op.ml
+++ b/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/hello_world_op.ml.corrected
@@ -36,11 +36,11 @@ let%expect_test "Pointwise multiplication dims 1" =
{|
┌────────────────────┐
│[3]: *._y shape 0:1 │
-    │┌┬─────────┐        │
-    │││axis 0   │        │
-    │├┼─────────┤        │
-    │││ 1.40e+1 │        │
-    │└┴─────────┘        │
+    │┌┬──────────┐       │
+    │││axis 0    │       │
+    │├┼──────────┤       │
+    │││ 1.84e-38 │       │
+    │└┴──────────┘       │
└────────────────────┘
|}]


@@ -67,11 +67,11 @@ let%expect_test "Matrix multiplication dims 1x1" =
{|
┌────────────────────────┐
│[0]: hey shape 1:1->0:1 │
-    │┌──────┬──────┐         │
-    ││      │axis 1│         │
-    │├──────┼──────┤         │
-    ││axis 0│ 7.00 │         │
-    │└──────┴──────┘         │
+    │┌──────┬──────────┐     │
+    ││      │axis 1    │     │
+    │├──────┼──────────┤     │
+    ││axis 0│ 2.80e-45 │     │
+    │└──────┴──────────┘     │
└────────────────────────┘
|}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ y;
@@ -79,11 +79,11 @@ let%expect_test "Matrix multiplication dims 1x1" =
{|
┌───────────────────┐
│[6]: +_y shape 0:1 │
-    │┌┬─────────┐       │
-    │││axis 0   │       │
-    │├┼─────────┤       │
-    │││ 1.50e+1 │       │
-    │└┴─────────┘       │
+    │┌┬──────┐          │
+    │││axis 0│          │
+    │├┼──────┤          │
+    │││ 1.00 │          │
+    │└┴──────┘          │
└───────────────────┘
|}]


@@ -108,7 +108,7 @@ let%expect_test "Print constant tensor" =
Tensor.print ~with_code:false ~with_grad:false `Inline @@ hey;
[%expect
{|
-    [0]: [  1.00 , 2.00 , 3.00  ;  4.00 , 5.00 , 6.00  ]_hey shape 1:3->0:2  [
+    [0]: c2x3_hey shape 1:3->0:2  [
1.00 , 2.00 , 3.00
;  4.00 , 5.00 , 6.00
]
@@ -116,22 +116,22 @@ let%expect_test "Print constant tensor" =
Tensor.print ~with_code:false ~with_grad:false `Default @@ hey;
[%expect
{|
-    ┌────────────────────────────────────────────────────────────────────────┐
-    │[0]: [  1.00 , 2.00 , 3.00  ;  4.00 , 5.00 , 6.00  ]_hey shape 1:3->0:2 │
-    │┌──────┬──────────────────┐                                             │
-    ││      │axis 1            │                                             │
-    │├──────┼──────────────────┤                                             │
-    ││axis 0│ 1.00  2.00  3.00 │                                             │
-    ││      │ 4.00  5.00  6.00 │                                             │
-    │└──────┴──────────────────┘                                             │
-    └────────────────────────────────────────────────────────────────────────┘
+    ┌─────────────────────────────┐
+    │[0]: c2x3_hey shape 1:3->0:2 │
+    │┌──────┬──────────────────┐  │
+    ││      │axis 1            │  │
+    │├──────┼──────────────────┤  │
+    ││axis 0│ 1.00  2.00  3.00 │  │
+    ││      │ 4.00  5.00  6.00 │  │
+    │└──────┴──────────────────┘  │
+    └─────────────────────────────┘
|}];
let%op hoo = [| [ 1; 2; 3 ]; [ 4; 5; 6 ] |] in
Train.forward_and_forget backend ctx hoo;
Tensor.print ~with_code:false ~with_grad:false `Inline @@ hoo;
[%expect
{|
-    [1]: [| [ 1.00 ; 2.00 ; 3.00 ] ; [ 4.00 ; 5.00 ; 6.00 ] |]_hoo shape 0:2|1:3  [|
+    [1]: c2x3_hoo shape 0:2|1:3  [|
[ 1.00 ; 2.00 ; 3.00 ]
; [ 4.00 ; 5.00 ; 6.00 ]
|]
@@ -139,15 +139,15 @@ let%expect_test "Print constant tensor" =
Tensor.print ~with_code:false ~with_grad:false `Default @@ hoo;
[%expect
{|
-    ┌─────────────────────────────────────────────────────────────────────────────┐
-    │[1]: [| [ 1.00 ; 2.00 ; 3.00 ] ; [ 4.00 ; 5.00 ; 6.00 ] |]_hoo shape 0:2|1:3 │
-    │┌──────┬──────────────────┐                                                  │
-    ││      │axis 1            │                                                  │
-    │├──────┼──────────────────┤                                                  │
-    ││axis 0│ 1.00  2.00  3.00 │                                                  │
-    ││      │ 4.00  5.00  6.00 │                                                  │
-    │└──────┴──────────────────┘                                                  │
-    └─────────────────────────────────────────────────────────────────────────────┘
+    ┌────────────────────────────┐
+    │[1]: c2x3_hoo shape 0:2|1:3 │
+    │┌──────┬──────────────────┐ │
+    ││      │axis 1            │ │
+    │├──────┼──────────────────┤ │
+    ││axis 0│ 1.00  2.00  3.00 │ │
+    ││      │ 4.00  5.00  6.00 │ │
+    │└──────┴──────────────────┘ │
+    └────────────────────────────┘
|}];
let%op hey2 =
[
@@ -471,28 +471,28 @@ let%expect_test "Matrix multiplication dims 2x3" =
Tensor.print ~with_code:false ~with_grad:false `Default @@ hey;
[%expect
{|
-    ┌────────────────────────┐
-    │[0]: hey shape 1:2->0:3 │
-    │┌──────┬────────────┐   │
-    ││      │axis 1      │   │
-    │├──────┼────────────┤   │
-    ││axis 0│ 7.00  7.00 │   │
-    ││      │ 7.00  7.00 │   │
-    ││      │ 7.00  7.00 │   │
-    │└──────┴────────────┘   │
-    └────────────────────────┘
+    ┌──────────────────────────────┐
+    │[0]: hey shape 1:2->0:3       │
+    │┌──────┬─────────────────────┐│
+    ││      │axis 1               ││
+    │├──────┼─────────────────────┤│
+    ││axis 0│ 2.80e-45   5.60e-45 ││
+    ││      │ -8.17e-28  1.85e-42 ││
+    ││      │ 7.74e-18   1.12e-44 ││
+    │└──────┴─────────────────────┘│
+    └──────────────────────────────┘
|}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ y;
[%expect
{|
-    ┌──────────────────────────────┐
-    │[6]: +_y shape 0:3            │
-    │┌┬───────────────────────────┐│
-    │││axis 0                     ││
-    │├┼───────────────────────────┤│
-    │││ 3.90e+1  4.00e+1  4.10e+1 ││
-    │└┴───────────────────────────┘│
-    └──────────────────────────────┘
+    ┌─────────────────────┐
+    │[6]: +_y shape 0:3   │
+    │┌┬──────────────────┐│
+    │││axis 0            ││
+    │├┼──────────────────┤│
+    │││ 4.00  5.00  6.00 ││
+    │└┴──────────────────┘│
+    └─────────────────────┘
|}]


let%expect_test "Big matrix" =
@@ -515,71 +515,38 @@ let%expect_test "Big matrix" =
let y = TDSL.O.((hey * zero_to_twenty) + zero_to_twenty) in
Train.forward_and_forget backend ctx y;
Tensor.print ~with_code:false ~with_grad:false `Inline zero_to_twenty;
+  [%expect
+    {| [2]: 0...20 shape 0:21  <virtual> |}];
+  Tensor.print ~with_code:false ~with_grad:false `Default zero_to_twenty;
+  [%expect
+    {| [2]: 0...20 shape 0:21  <virtual> |}];
+  Tensor.print ~with_code:false ~with_grad:false `Default hey;
[%expect
{|
-    [2]: 0...20 shape 0:21  [
-      0.00
-      ; 1.00
-      ; 2.00
-      ; 3.00
-      ; 4.00
-      ; 5.00
-      ; 6.00
-      ; 7.00
-      ; 8.00
-      ; 9.00
-      ; 10.00
-      ; 11.00
-      ; 12.00
-      ; 13.00
-      ; 14.00
-      ; 15.00
-      ; 16.00
-      ; 17.00
-      ; 18.00
-      ; 19.00
-      ; 20.00
-    ]
+    ┌──────────────────────────────────────┐
+    │[0]: hey shape 1:21->0:21             │
+    │┌──────┬─────────────────────────────┐│
+    ││      │axis 1                       ││
+    │├──────┼─────────────────────────────┤│
+    ││axis 0│ 0.00  0.00  ...  0.00  0.00 ││
+    ││      │ 0.00  0.00  ...  0.00  0.00 ││
+    ││      │ ...   ...   ...  ...   ...  ││
+    ││      │ 0.00  0.00  ...  0.00  0.00 ││
+    ││      │ 0.00  0.00  ...  0.00  0.00 ││
+    │└──────┴─────────────────────────────┘│
+    └──────────────────────────────────────┘
|}];
-  Tensor.print ~with_code:false ~with_grad:false `Default zero_to_twenty;
+  Tensor.print ~with_code:false ~with_grad:false `Default y;
[%expect
{|
┌──────────────────────────────────────┐
-    │[2]: 0...20 shape 0:21                │
+    │[5]: + shape 0:21                     │
│┌┬───────────────────────────────────┐│
│││axis 0                             ││
│├┼───────────────────────────────────┤│
│││ 0.00  1.00  ...  1.90e+1  2.00e+1 ││
│└┴───────────────────────────────────┘│
└──────────────────────────────────────┘
-    |}];
-  Tensor.print ~with_code:false ~with_grad:false `Default hey;
-  [%expect
-    {|
-    ┌──────────────────────────────────────────────────┐
-    │[0]: hey shape 1:21->0:21                         │
-    │┌──────┬─────────────────────────────────────────┐│
-    ││      │axis 1                                   ││
-    │├──────┼─────────────────────────────────────────┤│
-    ││axis 0│ 5.00e-1  5.00e-1  ...  5.00e-1  5.00e-1 ││
-    ││      │ 5.00e-1  5.00e-1  ...  5.00e-1  5.00e-1 ││
-    ││      │ ...      ...      ...  ...      ...     ││
-    ││      │ 5.00e-1  5.00e-1  ...  5.00e-1  5.00e-1 ││
-    ││      │ 5.00e-1  5.00e-1  ...  5.00e-1  5.00e-1 ││
-    │└──────┴─────────────────────────────────────────┘│
-    └──────────────────────────────────────────────────┘
-    |}];
-  Tensor.print ~with_code:false ~with_grad:false `Default y;
-  [%expect
-    {|
-    ┌────────────────────────────────────────────┐
-    │[5]: + shape 0:21                           │
-    │┌┬─────────────────────────────────────────┐│
-    │││axis 0                                   ││
-    │├┼─────────────────────────────────────────┤│
-    │││ 1.05e+2  1.06e+2  ...  1.24e+2  1.25e+2 ││
-    │└┴─────────────────────────────────────────┘│
-    └────────────────────────────────────────────┘
|}]


let%expect_test "Very big tensor" =
@@ -603,140 +570,7 @@ let%expect_test "Very big tensor" =
Train.forward_and_forget backend ctx hoo;
Tensor.print ~with_code:false ~with_grad:false `Default hey;
[%expect
-    {|
-    ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-    │[0]: r6x10x11x7x8x9 shape 0:6|3:7,4:8,5:9->1:10,2:11                                                                                                                                   │
-    │┌──────┬─────────────────────────────────────────┬─────────────────────────────────────────┬──────┬─────────────────────────────────────────┬─────────────────────────────────────────┐│
-    ││0 @ 0 │0 @ 4                                    │1 @ 4                                    │~~~~~ │6 @ 4                                    │7 @ 4                                    ││
-    ││      │axis 5                                   │axis 5                                   │axis 5│axis 5                                   │axis 5                                   ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││0 @ 1 │ 0.00     1.00     ...  7.00     8.00    │ 9.00     1.00e+1  ...  1.60e+1  1.70e+1 │ ...  │ 5.40e+1  5.50e+1  ...  6.10e+1  6.20e+1 │ 6.30e+1  6.40e+1  ...  7.00e+1  7.10e+1 ││
-    ││axis 2│ 5.04e+2  5.05e+2  ...  5.11e+2  5.12e+2 │ 5.13e+2  5.14e+2  ...  5.20e+2  5.21e+2 │      │ 5.58e+2  5.59e+2  ...  5.65e+2  5.66e+2 │ 5.67e+2  5.68e+2  ...  5.74e+2  5.75e+2 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 4.53e+3  4.53e+3  ...  4.54e+3  4.54e+3 │ 4.54e+3  4.54e+3  ...  4.55e+3  4.55e+3 │      │ 4.59e+3  4.59e+3  ...  4.59e+3  4.59e+3 │ 4.59e+3  4.60e+3  ...  4.60e+3  4.60e+3 ││
-    ││      │ 5.04e+3  5.04e+3  ...  5.04e+3  5.04e+3 │ 5.04e+3  5.05e+3  ...  5.05e+3  5.05e+3 │      │ 5.09e+3  5.09e+3  ...  5.10e+3  5.10e+3 │ 5.10e+3  5.10e+3  ...  5.11e+3  5.11e+3 ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││1 @ 1 │ 5.54e+3  5.54e+3  ...  5.55e+3  5.55e+3 │ 5.55e+3  5.55e+3  ...  5.56e+3  5.56e+3 │ ...  │ 5.59e+3  5.59e+3  ...  5.60e+3  5.60e+3 │ 5.60e+3  5.60e+3  ...  5.61e+3  5.61e+3 ││
-    ││axis 2│ 6.04e+3  6.04e+3  ...  6.05e+3  6.05e+3 │ 6.05e+3  6.05e+3  ...  6.06e+3  6.06e+3 │      │ 6.10e+3  6.10e+3  ...  6.10e+3  6.11e+3 │ 6.11e+3  6.11e+3  ...  6.11e+3  6.11e+3 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 1.00e+4  1.00e+4  ...  1.00e+4  1.00e+4 │ 1.00e+4  1.00e+4  ...  1.00e+4  1.00e+4 │      │ 1.01e+4  1.01e+4  ...  1.01e+4  1.01e+4 │ 1.01e+4  1.01e+4  ...  1.01e+4  1.01e+4 ││
-    ││      │ 1.05e+4  1.05e+4  ...  1.05e+4  1.05e+4 │ 1.05e+4  1.05e+4  ...  1.06e+4  1.06e+4 │      │ 1.06e+4  1.06e+4  ...  1.06e+4  1.06e+4 │ 1.06e+4  1.06e+4  ...  1.06e+4  1.06e+4 ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││~~~~~ │ ...                                     │ ...                                     │ ...  │ ...                                     │ ...                                     ││
-    ││axis 2│                                         │                                         │      │                                         │                                         ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││8 @ 1 │ 4.43e+4  4.43e+4  ...  4.43e+4  4.43e+4 │ 4.43e+4  4.43e+4  ...  4.43e+4  4.43e+4 │ ...  │ 4.44e+4  4.44e+4  ...  4.44e+4  4.44e+4 │ 4.44e+4  4.44e+4  ...  4.44e+4  4.44e+4 ││
-    ││axis 2│ 4.48e+4  4.48e+4  ...  4.48e+4  4.48e+4 │ 4.48e+4  4.48e+4  ...  4.48e+4  4.48e+4 │      │ 4.49e+4  4.49e+4  ...  4.49e+4  4.49e+4 │ 4.49e+4  4.49e+4  ...  4.49e+4  4.49e+4 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 4.88e+4  4.88e+4  ...  4.88e+4  4.88e+4 │ 4.88e+4  4.88e+4  ...  4.89e+4  4.89e+4 │      │ 4.89e+4  4.89e+4  ...  4.89e+4  4.89e+4 │ 4.89e+4  4.89e+4  ...  4.89e+4  4.89e+4 ││
-    ││      │ 4.93e+4  4.93e+4  ...  4.93e+4  4.94e+4 │ 4.94e+4  4.94e+4  ...  4.94e+4  4.94e+4 │      │ 4.94e+4  4.94e+4  ...  4.94e+4  4.94e+4 │ 4.94e+4  4.94e+4  ...  4.94e+4  4.94e+4 ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││9 @ 1 │ 4.98e+4  4.98e+4  ...  4.99e+4  4.99e+4 │ 4.99e+4  4.99e+4  ...  4.99e+4  4.99e+4 │ ...  │ 4.99e+4  4.99e+4  ...  4.99e+4  4.99e+4 │ 4.99e+4  4.99e+4  ...  4.99e+4  4.99e+4 ││
-    ││axis 2│ 5.04e+4  5.04e+4  ...  5.04e+4  5.04e+4 │ 5.04e+4  5.04e+4  ...  5.04e+4  5.04e+4 │      │ 5.04e+4  5.04e+4  ...  5.04e+4  5.04e+4 │ 5.04e+4  5.04e+4  ...  5.04e+4  5.04e+4 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 5.44e+4  5.44e+4  ...  5.44e+4  5.44e+4 │ 5.44e+4  5.44e+4  ...  5.44e+4  5.44e+4 │      │ 5.44e+4  5.44e+4  ...  5.44e+4  5.44e+4 │ 5.44e+4  5.44e+4  ...  5.45e+4  5.45e+4 ││
-    ││      │ 5.49e+4  5.49e+4  ...  5.49e+4  5.49e+4 │ 5.49e+4  5.49e+4  ...  5.49e+4  5.49e+4 │      │ 5.49e+4  5.49e+4  ...  5.49e+4  5.49e+4 │ 5.49e+4  5.50e+4  ...  5.50e+4  5.50e+4 ││
-    │└──────┴─────────────────────────────────────────┴─────────────────────────────────────────┴──────┴─────────────────────────────────────────┴─────────────────────────────────────────┘│
-    ├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
-    │┌──────┬─────────────────────────────────────────┬─────────────────────────────────────────┬──────┬─────────────────────────────────────────┬─────────────────────────────────────────┐│
-    ││1 @ 0 │0 @ 4                                    │1 @ 4                                    │~~~~~ │6 @ 4                                    │7 @ 4                                    ││
-    ││      │axis 5                                   │axis 5                                   │axis 5│axis 5                                   │axis 5                                   ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││0 @ 1 │ 5.54e+4  5.54e+4  ...  5.54e+4  5.54e+4 │ 5.54e+4  5.54e+4  ...  5.54e+4  5.54e+4 │ ...  │ 5.54e+4  5.54e+4  ...  5.55e+4  5.55e+4 │ 5.55e+4  5.55e+4  ...  5.55e+4  5.55e+4 ││
-    ││axis 2│ 5.59e+4  5.59e+4  ...  5.59e+4  5.59e+4 │ 5.59e+4  5.59e+4  ...  5.59e+4  5.59e+4 │      │ 5.59e+4  5.59e+4  ...  5.60e+4  5.60e+4 │ 5.60e+4  5.60e+4  ...  5.60e+4  5.60e+4 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 5.99e+4  5.99e+4  ...  5.99e+4  5.99e+4 │ 5.99e+4  5.99e+4  ...  5.99e+4  5.99e+4 │      │ 6.00e+4  6.00e+4  ...  6.00e+4  6.00e+4 │ 6.00e+4  6.00e+4  ...  6.00e+4  6.00e+4 ││
-    ││      │ 6.04e+4  6.04e+4  ...  6.04e+4  6.04e+4 │ 6.04e+4  6.04e+4  ...  6.04e+4  6.04e+4 │      │ 6.05e+4  6.05e+4  ...  6.05e+4  6.05e+4 │ 6.05e+4  6.05e+4  ...  6.05e+4  6.05e+4 ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││1 @ 1 │ 6.09e+4  6.09e+4  ...  6.09e+4  6.09e+4 │ 6.09e+4  6.09e+4  ...  6.10e+4  6.10e+4 │ ...  │ 6.10e+4  6.10e+4  ...  6.10e+4  6.10e+4 │ 6.10e+4  6.10e+4  ...  6.10e+4  6.10e+4 ││
-    ││axis 2│ 6.14e+4  6.14e+4  ...  6.14e+4  6.14e+4 │ 6.14e+4  6.14e+4  ...  6.15e+4  6.15e+4 │      │ 6.15e+4  6.15e+4  ...  6.15e+4  6.15e+4 │ 6.15e+4  6.15e+4  ...  6.15e+4  6.15e+4 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 6.55e+4  6.55e+4  ...  6.55e+4  6.55e+4 │ 6.55e+4  6.55e+4  ...  6.55e+4  6.55e+4 │      │ 6.55e+4  6.55e+4  ...  6.55e+4  6.55e+4 │ 6.55e+4  6.55e+4  ...  6.55e+4  6.55e+4 ││
-    ││      │ 6.60e+4  6.60e+4  ...  6.60e+4  6.60e+4 │ 6.60e+4  6.60e+4  ...  6.60e+4  6.60e+4 │      │ 6.60e+4  6.60e+4  ...  6.60e+4  6.60e+4 │ 6.60e+4  6.60e+4  ...  6.60e+4  6.60e+4 ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││~~~~~ │ ...                                     │ ...                                     │ ...  │ ...                                     │ ...                                     ││
-    ││axis 2│                                         │                                         │      │                                         │                                         ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││8 @ 1 │ 9.97e+4  9.97e+4  ...  9.97e+4  9.98e+4 │ 9.98e+4  9.98e+4  ...  9.98e+4  9.98e+4 │ ...  │ 9.98e+4  9.98e+4  ...  9.98e+4  9.98e+4 │ 9.98e+4  9.98e+4  ...  9.98e+4  9.98e+4 ││
-    ││axis 2│ 1.00e+5  1.00e+5  ...  1.00e+5  1.00e+5 │ 1.00e+5  1.00e+5  ...  1.00e+5  1.00e+5 │      │ 1.00e+5  1.00e+5  ...  1.00e+5  1.00e+5 │ 1.00e+5  1.00e+5  ...  1.00e+5  1.00e+5 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 1.04e+5  1.04e+5  ...  1.04e+5  1.04e+5 │ 1.04e+5  1.04e+5  ...  1.04e+5  1.04e+5 │      │ 1.04e+5  1.04e+5  ...  1.04e+5  1.04e+5 │ 1.04e+5  1.04e+5  ...  1.04e+5  1.04e+5 ││
-    ││      │ 1.04e+5  1.04e+5  ...  1.04e+5  1.04e+5 │ 1.04e+5  1.04e+5  ...  1.04e+5  1.04e+5 │      │ 1.04e+5  1.04e+5  ...  1.04e+5  1.04e+5 │ 1.04e+5  1.04e+5  ...  1.04e+5  1.04e+5 ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││9 @ 1 │ 1.05e+5  1.05e+5  ...  1.05e+5  1.05e+5 │ 1.05e+5  1.05e+5  ...  1.05e+5  1.05e+5 │ ...  │ 1.05e+5  1.05e+5  ...  1.05e+5  1.05e+5 │ 1.05e+5  1.05e+5  ...  1.05e+5  1.05e+5 ││
-    ││axis 2│ 1.05e+5  1.05e+5  ...  1.05e+5  1.05e+5 │ 1.05e+5  1.05e+5  ...  1.05e+5  1.05e+5 │      │ 1.05e+5  1.05e+5  ...  1.05e+5  1.05e+5 │ 1.05e+5  1.05e+5  ...  1.05e+5  1.05e+5 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 1.09e+5  1.09e+5  ...  1.09e+5  1.09e+5 │ 1.09e+5  1.09e+5  ...  1.09e+5  1.09e+5 │      │ 1.09e+5  1.09e+5  ...  1.09e+5  1.09e+5 │ 1.09e+5  1.09e+5  ...  1.09e+5  1.09e+5 ││
-    ││      │ 1.10e+5  1.10e+5  ...  1.10e+5  1.10e+5 │ 1.10e+5  1.10e+5  ...  1.10e+5  1.10e+5 │      │ 1.10e+5  1.10e+5  ...  1.10e+5  1.10e+5 │ 1.10e+5  1.10e+5  ...  1.10e+5  1.10e+5 ││
-    │└──────┴─────────────────────────────────────────┴─────────────────────────────────────────┴──────┴─────────────────────────────────────────┴─────────────────────────────────────────┘│
-    ├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
-    │ ...                                                                                                                                                                                   │
-    ├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
-    │┌──────┬─────────────────────────────────────────┬─────────────────────────────────────────┬──────┬─────────────────────────────────────────┬─────────────────────────────────────────┐│
-    ││4 @ 0 │0 @ 4                                    │1 @ 4                                    │~~~~~ │6 @ 4                                    │7 @ 4                                    ││
-    ││      │axis 5                                   │axis 5                                   │axis 5│axis 5                                   │axis 5                                   ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││0 @ 1 │ 2.21e+5  2.21e+5  ...  2.21e+5  2.21e+5 │ 2.21e+5  2.21e+5  ...  2.21e+5  2.21e+5 │ ...  │ 2.21e+5  2.21e+5  ...  2.21e+5  2.21e+5 │ 2.21e+5  2.21e+5  ...  2.21e+5  2.21e+5 ││
-    ││axis 2│ 2.22e+5  2.22e+5  ...  2.22e+5  2.22e+5 │ 2.22e+5  2.22e+5  ...  2.22e+5  2.22e+5 │      │ 2.22e+5  2.22e+5  ...  2.22e+5  2.22e+5 │ 2.22e+5  2.22e+5  ...  2.22e+5  2.22e+5 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 2.26e+5  2.26e+5  ...  2.26e+5  2.26e+5 │ 2.26e+5  2.26e+5  ...  2.26e+5  2.26e+5 │      │ 2.26e+5  2.26e+5  ...  2.26e+5  2.26e+5 │ 2.26e+5  2.26e+5  ...  2.26e+5  2.26e+5 ││
-    ││      │ 2.26e+5  2.26e+5  ...  2.26e+5  2.26e+5 │ 2.26e+5  2.26e+5  ...  2.26e+5  2.26e+5 │      │ 2.26e+5  2.26e+5  ...  2.26e+5  2.26e+5 │ 2.26e+5  2.26e+5  ...  2.26e+5  2.26e+5 ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││1 @ 1 │ 2.27e+5  2.27e+5  ...  2.27e+5  2.27e+5 │ 2.27e+5  2.27e+5  ...  2.27e+5  2.27e+5 │ ...  │ 2.27e+5  2.27e+5  ...  2.27e+5  2.27e+5 │ 2.27e+5  2.27e+5  ...  2.27e+5  2.27e+5 ││
-    ││axis 2│ 2.27e+5  2.27e+5  ...  2.27e+5  2.27e+5 │ 2.27e+5  2.27e+5  ...  2.27e+5  2.27e+5 │      │ 2.27e+5  2.27e+5  ...  2.27e+5  2.27e+5 │ 2.27e+5  2.27e+5  ...  2.27e+5  2.27e+5 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 2.31e+5  2.31e+5  ...  2.31e+5  2.31e+5 │ 2.31e+5  2.31e+5  ...  2.31e+5  2.31e+5 │      │ 2.31e+5  2.31e+5  ...  2.31e+5  2.31e+5 │ 2.31e+5  2.31e+5  ...  2.31e+5  2.31e+5 ││
-    ││      │ 2.32e+5  2.32e+5  ...  2.32e+5  2.32e+5 │ 2.32e+5  2.32e+5  ...  2.32e+5  2.32e+5 │      │ 2.32e+5  2.32e+5  ...  2.32e+5  2.32e+5 │ 2.32e+5  2.32e+5  ...  2.32e+5  2.32e+5 ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││~~~~~ │ ...                                     │ ...                                     │ ...  │ ...                                     │ ...                                     ││
-    ││axis 2│                                         │                                         │      │                                         │                                         ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││8 @ 1 │ 2.66e+5  2.66e+5  ...  2.66e+5  2.66e+5 │ 2.66e+5  2.66e+5  ...  2.66e+5  2.66e+5 │ ...  │ 2.66e+5  2.66e+5  ...  2.66e+5  2.66e+5 │ 2.66e+5  2.66e+5  ...  2.66e+5  2.66e+5 ││
-    ││axis 2│ 2.66e+5  2.66e+5  ...  2.66e+5  2.66e+5 │ 2.66e+5  2.66e+5  ...  2.66e+5  2.66e+5 │      │ 2.66e+5  2.66e+5  ...  2.66e+5  2.66e+5 │ 2.66e+5  2.66e+5  ...  2.66e+5  2.66e+5 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 2.70e+5  2.70e+5  ...  2.70e+5  2.70e+5 │ 2.70e+5  2.70e+5  ...  2.70e+5  2.70e+5 │      │ 2.70e+5  2.70e+5  ...  2.70e+5  2.70e+5 │ 2.70e+5  2.70e+5  ...  2.70e+5  2.70e+5 ││
-    ││      │ 2.71e+5  2.71e+5  ...  2.71e+5  2.71e+5 │ 2.71e+5  2.71e+5  ...  2.71e+5  2.71e+5 │      │ 2.71e+5  2.71e+5  ...  2.71e+5  2.71e+5 │ 2.71e+5  2.71e+5  ...  2.71e+5  2.71e+5 ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││9 @ 1 │ 2.71e+5  2.71e+5  ...  2.71e+5  2.71e+5 │ 2.71e+5  2.71e+5  ...  2.71e+5  2.71e+5 │ ...  │ 2.71e+5  2.71e+5  ...  2.71e+5  2.71e+5 │ 2.71e+5  2.71e+5  ...  2.71e+5  2.71e+5 ││
-    ││axis 2│ 2.72e+5  2.72e+5  ...  2.72e+5  2.72e+5 │ 2.72e+5  2.72e+5  ...  2.72e+5  2.72e+5 │      │ 2.72e+5  2.72e+5  ...  2.72e+5  2.72e+5 │ 2.72e+5  2.72e+5  ...  2.72e+5  2.72e+5 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 2.76e+5  2.76e+5  ...  2.76e+5  2.76e+5 │ 2.76e+5  2.76e+5  ...  2.76e+5  2.76e+5 │      │ 2.76e+5  2.76e+5  ...  2.76e+5  2.76e+5 │ 2.76e+5  2.76e+5  ...  2.76e+5  2.76e+5 ││
-    ││      │ 2.76e+5  2.76e+5  ...  2.76e+5  2.76e+5 │ 2.76e+5  2.76e+5  ...  2.76e+5  2.76e+5 │      │ 2.76e+5  2.76e+5  ...  2.76e+5  2.76e+5 │ 2.76e+5  2.76e+5  ...  2.76e+5  2.76e+5 ││
-    │└──────┴─────────────────────────────────────────┴─────────────────────────────────────────┴──────┴─────────────────────────────────────────┴─────────────────────────────────────────┘│
-    ├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
-    │┌──────┬─────────────────────────────────────────┬─────────────────────────────────────────┬──────┬─────────────────────────────────────────┬─────────────────────────────────────────┐│
-    ││5 @ 0 │0 @ 4                                    │1 @ 4                                    │~~~~~ │6 @ 4                                    │7 @ 4                                    ││
-    ││      │axis 5                                   │axis 5                                   │axis 5│axis 5                                   │axis 5                                   ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││0 @ 1 │ 2.77e+5  2.77e+5  ...  2.77e+5  2.77e+5 │ 2.77e+5  2.77e+5  ...  2.77e+5  2.77e+5 │ ...  │ 2.77e+5  2.77e+5  ...  2.77e+5  2.77e+5 │ 2.77e+5  2.77e+5  ...  2.77e+5  2.77e+5 ││
-    ││axis 2│ 2.77e+5  2.77e+5  ...  2.77e+5  2.77e+5 │ 2.77e+5  2.77e+5  ...  2.77e+5  2.77e+5 │      │ 2.77e+5  2.77e+5  ...  2.77e+5  2.77e+5 │ 2.77e+5  2.77e+5  ...  2.77e+5  2.77e+5 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 2.81e+5  2.81e+5  ...  2.81e+5  2.81e+5 │ 2.81e+5  2.81e+5  ...  2.81e+5  2.81e+5 │      │ 2.81e+5  2.81e+5  ...  2.81e+5  2.81e+5 │ 2.81e+5  2.81e+5  ...  2.81e+5  2.81e+5 ││
-    ││      │ 2.82e+5  2.82e+5  ...  2.82e+5  2.82e+5 │ 2.82e+5  2.82e+5  ...  2.82e+5  2.82e+5 │      │ 2.82e+5  2.82e+5  ...  2.82e+5  2.82e+5 │ 2.82e+5  2.82e+5  ...  2.82e+5  2.82e+5 ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││1 @ 1 │ 2.82e+5  2.82e+5  ...  2.82e+5  2.82e+5 │ 2.82e+5  2.82e+5  ...  2.82e+5  2.82e+5 │ ...  │ 2.82e+5  2.82e+5  ...  2.82e+5  2.82e+5 │ 2.82e+5  2.82e+5  ...  2.82e+5  2.82e+5 ││
-    ││axis 2│ 2.83e+5  2.83e+5  ...  2.83e+5  2.83e+5 │ 2.83e+5  2.83e+5  ...  2.83e+5  2.83e+5 │      │ 2.83e+5  2.83e+5  ...  2.83e+5  2.83e+5 │ 2.83e+5  2.83e+5  ...  2.83e+5  2.83e+5 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 2.87e+5  2.87e+5  ...  2.87e+5  2.87e+5 │ 2.87e+5  2.87e+5  ...  2.87e+5  2.87e+5 │      │ 2.87e+5  2.87e+5  ...  2.87e+5  2.87e+5 │ 2.87e+5  2.87e+5  ...  2.87e+5  2.87e+5 ││
-    ││      │ 2.87e+5  2.87e+5  ...  2.87e+5  2.87e+5 │ 2.87e+5  2.87e+5  ...  2.87e+5  2.87e+5 │      │ 2.87e+5  2.87e+5  ...  2.87e+5  2.87e+5 │ 2.87e+5  2.87e+5  ...  2.87e+5  2.87e+5 ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││~~~~~ │ ...                                     │ ...                                     │ ...  │ ...                                     │ ...                                     ││
-    ││axis 2│                                         │                                         │      │                                         │                                         ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││8 @ 1 │ 3.21e+5  3.21e+5  ...  3.21e+5  3.21e+5 │ 3.21e+5  3.21e+5  ...  3.21e+5  3.21e+5 │ ...  │ 3.21e+5  3.21e+5  ...  3.21e+5  3.21e+5 │ 3.21e+5  3.21e+5  ...  3.21e+5  3.21e+5 ││
-    ││axis 2│ 3.22e+5  3.22e+5  ...  3.22e+5  3.22e+5 │ 3.22e+5  3.22e+5  ...  3.22e+5  3.22e+5 │      │ 3.22e+5  3.22e+5  ...  3.22e+5  3.22e+5 │ 3.22e+5  3.22e+5  ...  3.22e+5  3.22e+5 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 3.26e+5  3.26e+5  ...  3.26e+5  3.26e+5 │ 3.26e+5  3.26e+5  ...  3.26e+5  3.26e+5 │      │ 3.26e+5  3.26e+5  ...  3.26e+5  3.26e+5 │ 3.26e+5  3.26e+5  ...  3.26e+5  3.26e+5 ││
-    ││      │ 3.26e+5  3.26e+5  ...  3.26e+5  3.26e+5 │ 3.26e+5  3.26e+5  ...  3.26e+5  3.26e+5 │      │ 3.26e+5  3.26e+5  ...  3.26e+5  3.26e+5 │ 3.26e+5  3.26e+5  ...  3.26e+5  3.26e+5 ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││9 @ 1 │ 3.27e+5  3.27e+5  ...  3.27e+5  3.27e+5 │ 3.27e+5  3.27e+5  ...  3.27e+5  3.27e+5 │ ...  │ 3.27e+5  3.27e+5  ...  3.27e+5  3.27e+5 │ 3.27e+5  3.27e+5  ...  3.27e+5  3.27e+5 ││
-    ││axis 2│ 3.27e+5  3.27e+5  ...  3.27e+5  3.27e+5 │ 3.27e+5  3.27e+5  ...  3.27e+5  3.27e+5 │      │ 3.27e+5  3.27e+5  ...  3.27e+5  3.27e+5 │ 3.27e+5  3.27e+5  ...  3.27e+5  3.27e+5 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 3.31e+5  3.31e+5  ...  3.31e+5  3.31e+5 │ 3.31e+5  3.31e+5  ...  3.31e+5  3.31e+5 │      │ 3.31e+5  3.31e+5  ...  3.31e+5  3.31e+5 │ 3.31e+5  3.31e+5  ...  3.31e+5  3.31e+5 ││
-    ││      │ 3.32e+5  3.32e+5  ...  3.32e+5  3.32e+5 │ 3.32e+5  3.32e+5  ...  3.32e+5  3.32e+5 │      │ 3.32e+5  3.32e+5  ...  3.32e+5  3.32e+5 │ 3.32e+5  3.32e+5  ...  3.32e+5  3.32e+5 ││
-    │└──────┴─────────────────────────────────────────┴─────────────────────────────────────────┴──────┴─────────────────────────────────────────┴─────────────────────────────────────────┘│
-    └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-    |}];
+    {| [0]: r6x10x11x7x8x9 shape 0:6|3:7,4:8,5:9->1:10,2:11  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default hoo;
(* Disable line wrapping for viewing the output. In VSCode: `View: Toggle Word Wrap`. *)
[%expect
File "test/einsum_trivia.ml", line 1, characters 0-0:
/usr/local/bin/git --no-pager diff --no-index --color=always -u _build/default/test/einsum_trivia.ml _build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/einsum_trivia.ml.corrected
diff --git a/_build/default/test/einsum_trivia.ml b/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/einsum_trivia.ml.corrected
index 35a36fa..af74f09 100644
--- a/_build/default/test/einsum_trivia.ml
+++ b/_build/.sandbox/572283976ed1cfc1f3db143e97ca08bf/default/test/einsum_trivia.ml.corrected
@@ -28,20 +28,7 @@ let%expect_test "einsum1 permute axes" =
Train.forward_and_forget backend ctx ho;
Tensor.print ~with_code:false ~with_grad:false `Default @@ hey;
[%expect
-    {|
-    ┌─────────────────────────────────────────────────────────────┐
-    │[0]: r2x4x3 shape 0:2|2:3->1:4                               │
-    │┌──────┬────────────────────────┬───────────────────────────┐│
-    ││      │0 @ 0                   │1 @ 0                      ││
-    ││      │axis 2                  │axis 2                     ││
-    │├──────┼────────────────────────┼───────────────────────────┤│
-    ││axis 1│ 0.00  1.00     2.00    │ 1.20e+1  1.30e+1  1.40e+1 ││
-    ││      │ 3.00  4.00     5.00    │ 1.50e+1  1.60e+1  1.70e+1 ││
-    ││      │ 6.00  7.00     8.00    │ 1.80e+1  1.90e+1  2.00e+1 ││
-    ││      │ 9.00  1.00e+1  1.10e+1 │ 2.10e+1  2.20e+1  2.30e+1 ││
-    │└──────┴────────────────────────┴───────────────────────────┘│
-    └─────────────────────────────────────────────────────────────┘
-    |}];
+    {| [0]: r2x4x3 shape 0:2|2:3->1:4  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ ho;
[%expect
{|
@@ -64,106 +51,7 @@ let%expect_test "einsum1 permute axes" =
Train.forward_and_forget backend ctx ho2;
Tensor.print ~with_code:false ~with_grad:false `Default @@ hey2;
[%expect
-    {|
-    ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-    │[2]: r2x3x6x7x4x5 shape 0:2,1:3|4:4,5:5->2:6,3:7                                                                                                                                                │
-    │┌──────┬─────────────────────────────────────────────┬─────────────────────────────────────────────┬─────────────────────────────────────────────┬─────────────────────────────────────────────┐│
-    ││0 @ 1 │0 @ 4                                        │1 @ 4                                        │2 @ 4                                        │3 @ 4                                        ││
-    ││      │axis 5                                       │axis 5                                       │axis 5                                       │axis 5                                       ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││0 @ 2 │ 0.00     1.00     2.00     3.00     4.00    │ 5.00     6.00     7.00     8.00     9.00    │ 1.00e+1  1.10e+1  1.20e+1  1.30e+1  1.40e+1 │ 1.50e+1  1.60e+1  1.70e+1  1.80e+1  1.90e+1 ││
-    ││axis 3│ 2.00e+1  2.10e+1  2.20e+1  2.30e+1  2.40e+1 │ 2.50e+1  2.60e+1  2.70e+1  2.80e+1  2.90e+1 │ 3.00e+1  3.10e+1  3.20e+1  3.30e+1  3.40e+1 │ 3.50e+1  3.60e+1  3.70+1  3.80e+1  3.90e+1 ││
-    ││      │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     ││
-    ││      │ 1.00e+2  1.01e+2  1.02e+2  1.03e+2  1.04e+2 │ 1.05e+2  1.06e+2  1.07e+2  1.08e+2  1.09e+2 │ 1.10e+2  1.11e+2  1.12e+2  1.13e+2  1.14e+2 │ 1.15e+2  1.16e+2  1.17e+2  1.18e+2  1.19e+2 ││
-    ││      │ 1.20e+2  1.21e+2  1.22e+2  1.23e+2  1.24e+2 │ 1.25e+2  1.26e+2  1.27e+2  1.28e+2  1.29e+2 │ 1.30e+2  1.31e+2  1.32e+2  1.33e+2  1.34e+2 │ 1.35e+2  1.36e+2  1.37e+2  1.38e+2  1.39e+2 ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││1 @ 2 │ 1.40e+2  1.41e+2  1.42e+2  1.43e+2  1.44e+2 │ 1.45e+2  1.46e+2  1.47e+2  1.48e+2  1.49e+2 │ 1.50e+2  1.51e+2  1.52e+2  1.53e+2  1.54e+2 │ 1.55e+2  1.56e+2  1.57e+2  1.58e+2  1.59e+2 ││
-    ││axis 3│ 1.60e+2  1.61e+2  1.62e+2  1.63e+2  1.64e+2 │ 1.65e+2  1.66e+2  1.67e+2  1.68e+2  1.69e+2 │ 1.70e+2  1.71e+2  1.72e+2  1.73e+2  1.74e+2 │ 1.75e+2  1.76e+2  1.77e+2  1.78e+2  1.79e+2 ││
-    ││      │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     ││
-    ││      │ 2.40e+2  2.41e+2  2.42e+2  2.43e+2  2.44e+2 │ 2.45e+2  2.46e+2  2.47e+2  2.48e+2  2.49e+2 │ 2.50e+2  2.51e+2  2.52e+2  2.53e+2  2.54e+2 │ 2.55e+2  2.56e+2  2.57e+2  2.58e+2  2.59e+2 ││
-    ││      │ 2.60e+2  2.61e+2  2.62e+2  2.63e+2  2.64e+2 │ 2.65e+2  2.66e+2  2.67e+2  2.68e+2  2.69e+2 │ 2.70e+2  2.71e+2  2.72e+2  2.73e+2  2.74e+2 │ 2.75e+2  2.76e+2  2.77e+2  2.78e+2  2.79e+2 ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││~~~~~ │ ...                                         │ ...                                         │ ...                                         │ ...                                         ││
-    ││axis 3│                                             │                                             │                                             │                                             ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││4 @ 2 │ 5.60e+2  5.61e+2  5.62e+2  5.63e+2  5.64e+2 │ 5.65e+2  5.66e+2  5.67e+2  5.68e+2  5.69e+2 │ 5.70e+2  5.71e+2  5.72e+2  5.73e+2  5.74e+2 │ 5.75e+2  5.76e+2  5.77e+2  5.78e+2  5.79e+2 ││
-    ││axis 3│ 5.80e+2  5.81e+2  5.82e+2  5.83e+2  5.84e+2 │ 5.85e+2  5.86e+2  5.87e+2  5.88e+2  5.89e+2 │ 5.90e+2  5.91e+2  5.92e+2  5.93e+2  5.94e+2 │ 5.95e+2  5.96e+2  5.97e+2  5.98e+2  5.99e+2 ││
-    ││      │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     ││
-    ││      │ 6.60e+2  6.61e+2  6.62e+2  6.63e+2  6.64e+2 │ 6.65e+2  6.66e+2  6.67e+2  6.68e+2  6.69e+2 │ 6.70e+2  6.71e+2  6.72e+2  6.73e+2  6.74e+2 │ 6.75e+2  6.76e+2  6.77e+2  6.78e+2  6.79e+2 ││
-    ││      │ 6.80e+2  6.81e+2  6.82e+2  6.83e+2  6.84e+2 │ 6.85e+2  6.86e+2  6.87e+2  6.88e+2  6.89e+2 │ 6.90e+2  6.91e+2  6.92e+2  6.93e+2  6.94e+2 │ 6.95e+2  6.96e+2  6.97e+2  6.98e+2  6.99e+2 ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││5 @ 2 │ 7.00e+2  7.01e+2  7.02e+2  7.03e+2  7.04e+2 │ 7.05e+2  7.06e+2  7.07e+2  7.08e+2  7.09e+2 │ 7.10e+2  7.11e+2  7.12e+2  7.13e+2  7.14e+2 │ 7.15e+2  7.16e+2  7.17e+2  7.18e+2  7.19e+2 ││
-    ││axis 3│ 7.20e+2  7.21e+2  7.22e+2  7.23e+2  7.24e+2 │ 7.25e+2  7.26e+2  7.27e+2  7.28e+2  7.29e+2 │ 7.30e+2  7.31e+2  7.32e+2  7.33e+2  7.34e+2 │ 7.35e+2  7.36e+2  7.37e+2  7.38e+2  7.39e+2 ││
-    ││      │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     ││
-    ││      │ 8.00e+2  8.01e+2  8.02e+2  8.03e+2  8.04e+2 │ 8.05e+2  8.06e+2  8.07e+2  8.08e+2  8.09e+2 │ 8.10e+2  8.11e+2  8.12e+2  8.13e+2  8.14e+2 │ 8.15e+2  8.16e+2  8.17e+2  8.18e+2  8.19e+2 ││
-    ││      │ 8.20e+2  8.21e+2  8.22e+2  8.23e+2  8.24e+2 │ 8.25e+2  8.26e+2  8.27e+2  8.28e+2  8.29e+2 │ 8.30e+2  8.31e+2  8.32e+2  8.33e+2  8.34e+2 │ 8.35e+2  8.36e+2  8.37e+2  8.38e+2  8.39e+2 ││
-    │└──────┴─────────────────────────────────────────────┴─────────────────────────────────────────────┴─────────────────────────────────────────────┴─────────────────────────────────────────────┘│
-    ├────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
-    │┌──────┬─────────────────────────────────────────────┬─────────────────────────────────────────────┬─────────────────────────────────────────────┬─────────────────────────────────────────────┐│
-    ││1 @ 1 │0 @ 4                                        │1 @ 4                                        │2 @ 4                                        │3 @ 4                                        ││
-    ││      │axis 5                                       │axis 5                                       │axis 5                                       │axis 5                                       ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││0 @ 2 │ 8.40e+2  8.41e+2  8.42e+2  8.43e+2  8.44e+2 │ 8.45e+2  8.46e+2  8.47e+2  8.48e+2  8.49e+2 │ 8.50e+2  8.51e+2  8.52e+2  8.53e+2  8.54e+2 │ 8.55e+2  8.56e+2  8.57e+2  8.58e+2  8.59e+2 ││
-    ││axis 3│ 8.60e+2  8.61e+2  8.62e+2  8.63e+2  8.64e+2 │ 8.65e+2  8.66e+2  8.67e+2  8.68e+2  8.69e+2 │ 8.70e+2  8.71e+2  8.72e+2  8.73e+2  8.74e+2 │ 8.75e+2  8.76e+2  8.77e+2  8.78e+2  8.79e+2 ││
-    ││      │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     ││
-    ││      │ 9.40e+2  9.41e+2  9.42e+2  9.43e+2  9.44e+2 │ 9.45e+2  9.46e+2  9.47e+2  9.48e+2  9.49e+2 │ 9.50e+2  9.51e+2  9.52e+2  9.53e+2  9.54e+2 │ 9.55e+2  9.56e+2  9.57e+2  9.58e+2  9.59e+2 ││
-    ││      │ 9.60e+2  9.61e+2  9.62e+2  9.63e+2  9.64e+2 │ 9.65e+2  9.66e+2  9.67e+2  9.68e+2  9.69e+2 │ 9.70e+2  9.71e+2  9.72e+2  9.73e+2  9.74e+2 │ 9.75e+2  9.76e+2  9.77e+2  9.78e+2  9.79e+2 ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││1 @ 2 │ 9.80e+2  9.81e+2  9.82e+2  9.83e+2  9.84e+2 │ 9.85e+2  9.86e+2  9.87e+2  9.88e+2  9.89e+2 │ 9.90e+2  9.91e+2  9.92e+2  9.93e+2  9.94e+2 │ 9.95e+2  9.96e+2  9.97e+2  9.98e+2  9.99e+2 ││
-    ││axis 3│ 1.00e+3  1.00e+3  1.00e+3  1.00e+3  1.00e+3 │ 1.00e+3  1.00e+3  1.00e+3  1.00e+3  1.00e+3 │ 1.01e+3  1.01e+3  1.01e+3  1.01e+3  1.01e+3 │ 1.01e+3  1.01e+3  1.01e+3  1.01e+3  1.01e+3 ││
-    ││      │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     ││
-    ││      │ 1.08e+3  1.08e+3  1.08e+3  1.08e+3  1.08e+3 │ 1.08e+3  1.08e+3  1.08e+3  1.08e+3  1.08e+3 │ 1.09e+3  1.09e+3  1.09e+3  1.09e+3  1.09e+3 │ 1.09e+3  1.09e+3  1.09e+3  1.09e+3  1.09e+3 ││
-    ││      │ 1.10e+3  1.10e+3  1.10e+3  1.10e+3  1.10e+3 │ 1.10e+3  1.10e+3  1.10e+3  1.10e+3  1.10e+3 │ 1.11e+3  1.11e+3  1.11e+3  1.11e+3  1.11e+3 │ 1.11e+3  1.11e+3  1.11e+3  1.11e+3  1.11e+3 ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││~~~~~ │ ...                                         │ ...                                         │ ...                                         │ ...                                         ││
-    ││axis 3│                                             │                                             │                                             │                                             ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││4 @ 2 │ 1.40e+3  1.40e+3  1.40e+3  1.40e+3  1.40e+3 │ 1.40e+3  1.40e+3  1.40e+3  1.40e+3  1.40e+3 │ 1.41e+3  1.41e+3  1.41e+3  1.41e+3  1.41e+3 │ 1.41e+3  1.41e+3  1.41e+3  1.41e+3  1.41e+3 ││
-    ││axis 3│ 1.42e+3  1.42e+3  1.42e+3  1.42e+3  1.42e+3 │ 1.42e+3  1.42e+3  1.42e+3  1.42e+3  1.42e+3 │ 1.43e+3  1.43e+3  1.43e+3  1.43e+3  1.43e+3 │ 1.43e+3  1.43e+3  1.43e+3  1.43e+3  1.43e+3 ││
-    ││      │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     ││
-    ││      │ 1.50e+3  1.50e+3  1.50e+3  1.50e+3  1.50e+3 │ 1.50e+3  1.50e+3  1.50e+3  1.50e+3  1.50e+3 │ 1.51e+3  1.51e+3  1.51e+3  1.51e+3  1.51e+3 │ 1.51e+3  1.51e+3  1.51e+3  1.51e+3  1.51e+3 ││
-    ││      │ 1.52e+3  1.52e+3  1.52e+3  1.52e+3  1.52e+3 │ 1.52e+3  1.52e+3  1.52e+3  1.52e+3  1.52e+3 │ 1.53e+3  1.53e+3  1.53e+3  1.53e+3  1.53e+3 │ 1.53e+3  1.53e+3  1.53e+3  1.53e+3  1.53e+3 ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││5 @ 2 │ 1.54e+3  1.54e+3  1.54e+3  1.54e+3  1.54e+3 │ 1.54e+3  1.54e+3  1.54e+3  1.54e+3  1.54e+3 │ 1.55e+3  1.55e+3  1.55e+3  1.55e+3  1.55e+3 │ 1.55e+3  1.55e+3  1.55e+3  1.55e+3  1.55e+3 ││
-    ││axis 3│ 1.56e+3  1.56e+3  1.56e+3  1.56e+3  1.56e+3 │ 1.56e+3  1.56e+3  1.56e+3  1.56e+3  1.56e+3 │ 1.57e+3  1.57e+3  1.57e+3  1.57e+3  1.57e+3 │ 1.57e+3  1.57e+3  1.57e+3  1.57e+3  1.57e+3 ││
-    ││      │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     ││
-    ││      │ 1.64e+3  1.64e+3  1.64e+3  1.64e+3  1.64e+3 │ 1.64e+3  1.64e+3  1.64e+3  1.64e+3  1.64e+3 │ 1.65e+3  1.65e+3  1.65e+3  1.65e+3  1.65e+3 │ 1.65e+3  1.65e+3  1.65e+3  1.65e+3  1.65e+3 ││
-    ││      │ 1.66e+3  1.66e+3  1.66e+3  1.66e+3  1.66e+3 │ 1.66e+3  1.66e+3  1.66e+3  1.66e+3  1.66e+3 │ 1.67e+3  1.67e+3  1.67e+3  1.67e+3  1.67e+3 │ 1.67e+3  1.67e+3  1.67e+3  1.67e+3  1.67e+3 ││
-    │└──────┴─────────────────────────────────────────────┴─────────────────────────────────────────────┴─────────────────────────────────────────────┴─────────────────────────────────────────────┘│
-    ├────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
-    │┌──────┬─────────────────────────────────────────────┬─────────────────────────────────────────────┬─────────────────────────────────────────────┬─────────────────────────────────────────────┐│
-    ││2 @ 1 │0 @ 4                                        │1 @ 4                                        │2 @ 4                                        │3 @ 4                                        ││
-    ││      │axis 5                                       │axis 5                                       │axis 5                                       │axis 5                                       ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││0 @ 2 │ 1.68e+3  1.68e+3  1.68e+3  1.68e+3  1.68e+3 │ 1.68e+3  1.68e+3  1.68e+3  1.68e+3  1.68e+3 │ 1.69e+3  1.69e+3  1.69e+3  1.69e+3  1.69e+3 │ 1.69e+3  1.69e+3  1.69e+3  1.69e+3  1.69e+3 ││
-    ││axis 3│ 1.70e+3  1.70e+3  1.70e+3  1.70e+3  1.70e+3 │ 1.70e+3  1.70e+3  1.70e+3  1.70e+3  1.70e+3 │ 1.71e+3  1.71e+3  1.71e+3  1.71e+3  1.71e+3 │ 1.71e+3  1.71e+3  1.71e+3  1.71e+3  1.71e+3 ││
-    ││      │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     ││
-    ││      │ 1.78e+3  1.78e+3  1.78e+3  1.78e+3  1.78e+3 │ 1.78e+3  1.78e+3  1.78e+3  1.78e+3  1.78e+3 │ 1.79e+3  1.79e+3  1.79e+3  1.79e+3  1.79e+3 │ 1.79e+3  1.79e+3  1.79e+3  1.79e+3  1.79e+3 ││
-    ││      │ 1.80e+3  1.80e+3  1.80e+3  1.80e+3  1.80e+3 │ 1.80e+3  1.80e+3  1.80e+3  1.80e+3  1.80e+3 │ 1.81e+3  1.81e+3  1.81e+3  1.81e+3  1.81e+3 │ 1.81e+3  1.81e+3  1.81e+3  1.81e+3  1.81e+3 ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││1 @ 2 │ 1.82e+3  1.82e+3  1.82e+3  1.82e+3  1.82e+3 │ 1.82e+3  1.82e+3  1.82e+3  1.82e+3  1.82e+3 │ 1.83e+3  1.83e+3  1.83e+3  1.83e+3  1.83e+3 │ 1.83e+3  1.83e+3  1.83e+3  1.83e+3  1.83e+3 ││
-    ││axis 3│ 1.84e+3  1.84e+3  1.84e+3  1.84e+3  1.84e+3 │ 1.84e+3  1.84e+3  1.84e+3  1.84e+3  1.84e+3 │ 1.85e+3  1.85e+3  1.85e+3  1.85e+3  1.85e+3 │ 1.85e+3  1.85e+3  1.85e+3  1.85e+3  1.85e+3 ││
-    ││      │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     ││
-    ││      │ 1.92e+3  1.92e+3  1.92e+3  1.92e+3  1.92e+3 │ 1.92e+3  1.92e+3  1.92e+3  1.92e+3  1.92e+3 │ 1.93e+3  1.93e+3  1.93e+3  1.93e+3  1.93e+3 │ 1.93e+3  1.93e+3  1.93e+3  1.93e+3  1.93e+3 ││
-    ││      │ 1.94e+3  1.94e+3  1.94e+3  1.94e+3  1.94e+3 │ 1.94e+3  1.94e+3  1.94e+3  1.94e+3  1.94e+3 │ 1.95e+3  1.95e+3  1.95e+3  1.95e+3  1.95e+3 │ 1.95e+3  1.95e+3  1.95e+3  1.95e+3  1.95e+3 ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││~~~~~ │ ...                                         │ ...                                         │ ...                                         │ ...                                         ││
-    ││axis 3│                                             │                                             │                                             │                                             ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││4 @ 2 │ 2.24e+3  2.24e+3  2.24e+3  2.24e+3  2.24e+3 │ 2.24e+3  2.24e+3  2.24e+3  2.24e+3  2.24e+3 │ 2.25e+3  2.25e+3  2.25e+3  2.25e+3  2.25e+3 │ 2.25e+3  2.25e+3  2.25e+3  2.25e+3  2.25e+3 ││
-    ││axis 3│ 2.26e+3  2.26e+3  2.26e+3  2.26e+3  2.26e+3 │ 2.26e+3  2.26e+3  2.26e+3  2.26e+3  2.26e+3 │ 2.27e+3  2.27e+3  2.27e+3  2.27e+3  2.27e+3 │ 2.27e+3  2.27e+3  2.27e+3  2.27e+3  2.27e+3 ││
-    ││      │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     ││
-    ││      │ 2.34e+3  2.34e+3  2.34e+3  2.34e+3  2.34e+3 │ 2.34e+3  2.34e+3  2.34e+3  2.34e+3  2.34e+3 │ 2.35e+3  2.35e+3  2.35e+3  2.35e+3  2.35e+3 │ 2.35e+3  2.35e+3  2.35e+3  2.35e+3  2.35e+3 ││
-    ││      │ 2.36e+3  2.36e+3  2.36e+3  2.36e+3  2.36e+3 │ 2.36e+3  2.36e+3  2.36e+3  2.36e+3  2.36e+3 │ 2.37e+3  2.37e+3  2.37e+3  2.37e+3  2.37e+3 │ 2.37e+3  2.37e+3  2.37e+3  2.37e+3  2.37e+3 ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
-    ││5 @ 2 │ 2.38e+3  2.38e+3  2.38e+3  2.38e+3  2.38e+3 │ 2.38e+3  2.38e+3  2.38e+3  2.38e+3  2.38e+3 │ 2.39e+3  2.39e+3  2.39e+3  2.39e+3  2.39e+3 │ 2.39e+3  2.39e+3  2.39e+3  2.39e+3  2.39e+3 ││
-    ││axis 3│ 2.40e+3  2.40e+3  2.40e+3  2.40e+3  2.40e+3 │ 2.40e+3  2.40e+3  2.40e+3  2.40e+3  2.40e+3 │ 2.41e+3  2.41e+3  2.41e+3  2.41e+3  2.41e+3 │ 2.41e+3  2.41e+3  2.41e+3  2.41e+3  2.41e+3 ││
-    ││      │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     │ ...      ...      ...      ...      ...     ││
-    ││      │ 2.48e+3  2.48e+3  2.48e+3  2.48e+3  2.48e+3 │ 2.48e+3  2.48e+3  2.48e+3  2.48e+3  2.48e+3 │ 2.49e+3  2.49e+3  2.49e+3  2.49e+3  2.49e+3 │ 2.49e+3  2.49e+3  2.49e+3  2.49e+3  2.49e+3 ││
-    ││      │ 2.50e+3  2.50e+3  2.50e+3  2.50e+3  2.50e+3 │ 2.50e+3  2.50e+3  2.50e+3  2.50e+3  2.50e+3 │ 2.51e+3  2.51e+3  2.51e+3  2.51e+3  2.51e+3 │ 2.51e+3  2.51e+3  2.51e+3  2.51e+3  2.51e+3 ││
-    │└──────┴─────────────────────────────────────────────┴─────────────────────────────────────────────┴─────────────────────────────────────────────┴─────────────────────────────────────────────┘│
-    └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-    |}];
+    {| [2]: r2x3x6x7x4x5 shape 0:2,1:3|4:4,5:5->2:6,3:7  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ ho2;
[%expect
{|
@@ -292,20 +180,7 @@ let%expect_test "einsum1 sum out axes" =
Train.forward_and_forget backend ctx ho;
Tensor.print ~with_code:false ~with_grad:false `Default @@ hey;
[%expect
-    {|
-    ┌─────────────────────────────────────────────────────────────┐
-    │[0]: r2x4x3 shape 0:2|2:3->1:4                               │
-    │┌──────┬────────────────────────┬───────────────────────────┐│
-    ││      │0 @ 0                   │1 @ 0                      ││
-    ││      │axis 2                  │axis 2                     ││
-    │├──────┼────────────────────────┼───────────────────────────┤│
-    ││axis 1│ 0.00  1.00     2.00    │ 1.20e+1  1.30e+1  1.40e+1 ││
-    ││      │ 3.00  4.00     5.00    │ 1.50e+1  1.60e+1  1.70e+1 ││
-    ││      │ 6.00  7.00     8.00    │ 1.80e+1  1.90e+1  2.00e+1 ││
-    ││      │ 9.00  1.00e+1  1.10e+1 │ 2.10e+1  2.20e+1  2.30e+1 ││
-    │└──────┴────────────────────────┴───────────────────────────┘│
-    └─────────────────────────────────────────────────────────────┘
-    |}];
+    {| [0]: r2x4x3 shape 0:2|2:3->1:4  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ ho;
[%expect
{|
@@ -364,28 +239,10 @@ let%expect_test "einsum outer product" =
Train.forward_and_forget backend ctx c;
Tensor.print ~with_code:false ~with_grad:false `Default @@ a;
[%expect
-    {|
-    ┌──────────────────┐
-    │[0]: r2 shape 0:2 │
-    │┌┬────────────┐   │
-    │││axis 0      │   │
-    │├┼────────────┤   │
-    │││ 0.00  1.00 │   │
-    │└┴────────────┘   │
-    └──────────────────┘
-    |}];
+    {| [0]: r2 shape 0:2  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ b;
[%expect
-    {|
-    ┌─────────────────────┐
-    │[1]: r3 shape 0:3    │
-    │┌┬──────────────────┐│
-    │││axis 0            ││
-    │├┼──────────────────┤│
-    │││ 0.00  1.00  2.00 ││
-    │└┴──────────────────┘│
-    └─────────────────────┘
-    |}];
+    {| [1]: r3 shape 0:3  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ c;
[%expect
{|
@@ -406,37 +263,10 @@ let%expect_test "einsum outer product" =
Train.forward_and_forget backend ctx c;
Tensor.print ~with_code:false ~with_grad:false `Default @@ a;
[%expect
-    {|
-    ┌─────────────────────────────────────────────────────────────┐
-    │[5]: r2x4x3 shape 0:2|2:3->1:4                               │
-    │┌──────┬────────────────────────┬───────────────────────────┐│
-    ││      │0 @ 0                   │1 @ 0                      ││
-    ││      │axis 2                  │axis 2                     ││
-    │├──────┼────────────────────────┼───────────────────────────┤│
-    ││axis 1│ 0.00  1.00     2.00    │ 1.20e+1  1.30e+1  1.40e+1 ││
-    ││      │ 3.00  4.00     5.00    │ 1.50e+1  1.60e+1  1.70e+1 ││
-    ││      │ 6.00  7.00     8.00    │ 1.80e+1  1.90e+1  2.00e+1 ││
-    ││      │ 9.00  1.00e+1  1.10e+1 │ 2.10e+1  2.20e+1  2.30e+1 ││
-    │└──────┴────────────────────────┴───────────────────────────┘│
-    └─────────────────────────────────────────────────────────────┘
-    |}];
+    {| [5]: r2x4x3 shape 0:2|2:3->1:4  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ b;
[%expect
-    {|
-    ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-    │[6]: r5x7x6 shape 0:5|2:6->1:7                                                                                                                                                                                            │
-    │┌──────┬─────────────────────────────────────────┬─────────────────────────────────────────┬─────────────────────────────────────────┬─────────────────────────────────────────┬─────────────────────────────────────────┐│
-    ││      │0 @ 0                                    │1 @ 0                                    │2 @ 0                                    │3 @ 0                                    │4 @ 0                                    ││
-    ││      │axis 2                                   │axis 2                                   │axis 2                                   │axis 2                                   │axis 2                                   ││
-    │├──────┼─────────────────────────────────────────┼─────────────────────────────────────────┼─────────────────────────────────────────┼─────────────────────────────────────────┼─────────────────────────────────────────┤│
-    ││axis 1│ 0.00     1.00     ...  4.00     5.00    │ 4.20e+1  4.30e+1  ...  4.60e+1  4.70e+1 │ 8.40e+1  8.50e+1  ...  8.80e+1  8.90e+1 │ 1.26e+2  1.27e+2  ...  1.30e+2  1.31e+2 │ 1.68e+2  1.69e+2  ...  1.72e+2  1.73e+2 ││
-    ││      │ 6.00     7.00     ...  1.00e+1  1.10e+1 │ 4.80e+1  4.90e+1  ...  5.20e+1  5.30e+1 │ 9.00e+1  9.10e+1  ...  9.40e+1  9.50e+1 │ 1.32e+2  1.33e+2  ...  1.36e+2  1.37e+2 │ 1.74e+2  1.75e+2  ...  1.78e+2  1.79e+2 ││
-    ││      │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     │ ...      ...      ...  ...      ...     ││
-    ││      │ 3.00e+1  3.10e+1  ...  3.40e+1  3.50e+1 │ 7.20e+1  7.30e+1  ...  7.60e+1  7.70e+1 │ 1.14e+2  1.15e+2  ...  1.18e+2  1.19e+2 │ 1.56e+2  1.57e+2  ...  1.60e+2  1.61e+2 │ 1.98e+2  1.99e+2  ...  2.02e+2  2.03e+2 ││
-    ││      │ 3.60e+1  3.70e+1  ...  4.00e+1  4.10e+1 │ 7.80e+1  7.90e+1  ...  8.20e+1  8.30e+1 │ 1.20e+2  1.21e+2  ...  1.24e+2  1.25e+2 │ 1.62e+2  1.63e+2  ...  1.66e+2  1.67e+2 │ 2.04e+2  2.05e+2  ...  2.08e+2  2.09e+2 ││
-    │└──────┴─────────────────────────────────────────┴─────────────────────────────────────────┴─────────────────────────────────────────┴─────────────────────────────────────────┴─────────────────────────────────────────┘│
-    └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-    |}];
+    {| [6]: r5x7x6 shape 0:5|2:6->1:7  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ c;
[%expect
{|
@@ -723,20 +553,7 @@ let%expect_test "einsum1 broadcast or sum out prefix axes" =
let ctx = Train.forward_and_ctx backend ctx ho in
Tensor.print ~with_code:false ~with_grad:false `Default @@ hey;
[%expect
-    {|
-    ┌─────────────────────────────────────────────────────────────┐
-    │[0]: r2x4x3 shape 0:2|2:3->1:4                               │
-    │┌──────┬────────────────────────┬───────────────────────────┐│
-    ││      │0 @ 0                   │1 @ 0                      ││
-    ││      │axis 2                  │axis 2                     ││
-    │├──────┼────────────────────────┼───────────────────────────┤│
-    ││axis 1│ 0.00  1.00     2.00    │ 1.20e+1  1.30e+1  1.40e+1 ││
-    ││      │ 3.00  4.00     5.00    │ 1.50e+1  1.60e+1  1.70e+1 ││
-    ││      │ 6.00  7.00     8.00    │ 1.80e+1  1.90e+1  2.00e+1 ││
-    ││      │ 9.00  1.00e+1  1.10e+1 │ 2.10e+1  2.20e+1  2.30e+1 ││
-    │└──────┴────────────────────────┴───────────────────────────┘│
-    └─────────────────────────────────────────────────────────────┘
-    |}];
+    {| [0]: r2x4x3 shape 0:2|2:3->1:4  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ ho;
[%expect
{|
@@ -776,106 +593,7 @@ let%expect_test "einsum1 broadcast or sum out prefix axes" =
let ctx = Train.forward_and_ctx backend ctx ho3 in
Tensor.print ~with_code:false ~with_grad:false `Default @@ hey2;
[%expect
-    {|
-    ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-    │[3]: r2x3x6x7x4x5 shape 0:2,1:3|4:4,5:5->2:6,3:7                                                                                                                                                │
-    │┌──────┬─────────────────────────────────────────────┬─────────────────────────────────────────────┬─────────────────────────────────────────────┬─────────────────────────────────────────────┐│
-    ││0 @ 1 │0 @ 4                                        │1 @ 4                                        │2 @ 4                                        │3 @ 4                                        ││
-    ││      │axis 5                                       │axis 5                                       │axis 5                                       │axis 5                                       ││
-    │├──────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┼─────────────────────────────────────────────┤│
...TRUNCATED BY DUNE...
Train.forward_and_forget backend ctx f;
Tensor.print ~with_code:false ~with_grad:false `Default @@ d;
[%expect
-    {|
-    ┌─────────────────────────┐
-    │[3]: r3x2 shape 1:2->0:3 │
-    │┌──────┬────────────┐    │
-    ││      │axis 1      │    │
-    │├──────┼────────────┤    │
-    ││axis 0│ 0.00  1.00 │    │
-    ││      │ 2.00  3.00 │    │
-    ││      │ 4.00  5.00 │    │
-    │└──────┴────────────┘    │
-    └─────────────────────────┘
-    |}];
+    {| [3]: r3x2 shape 1:2->0:3  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ e;
[%expect
-    {|
-    ┌───────────────────────────────────────┐
-    │[4]: r3x4 shape 1:4->0:3               │
-    │┌──────┬──────────────────────────────┐│
-    ││      │axis 1                        ││
-    │├──────┼──────────────────────────────┤│
-    ││axis 0│ 0.00  1.00  2.00     3.00    ││
-    ││      │ 4.00  5.00  6.00     7.00    ││
-    ││      │ 8.00  9.00  1.00e+1  1.10e+1 ││
-    │└──────┴──────────────────────────────┘│
-    └───────────────────────────────────────┘
-    |}];
+    {| [4]: r3x4 shape 1:4->0:3  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ f;
[%expect
{|
@@ -1253,20 +888,7 @@ let%expect_test "einsum1 fixed dim axis" =
let ctx = Train.forward_and_ctx backend ctx ho in
Tensor.print ~with_code:false ~with_grad:false `Default @@ hey;
[%expect
-    {|
-    ┌─────────────────────────────────────────────────────────────┐
-    │[0]: r2x4x3 shape 0:2|2:3->1:4                               │
-    │┌──────┬────────────────────────┬───────────────────────────┐│
-    ││      │0 @ 0                   │1 @ 0                      ││
-    ││      │axis 2                  │axis 2                     ││
-    │├──────┼────────────────────────┼───────────────────────────┤│
-    ││axis 1│ 0.00  1.00     2.00    │ 1.20e+1  1.30e+1  1.40e+1 ││
-    ││      │ 3.00  4.00     5.00    │ 1.50e+1  1.60e+1  1.70e+1 ││
-    ││      │ 6.00  7.00     8.00    │ 1.80e+1  1.90e+1  2.00e+1 ││
-    ││      │ 9.00  1.00e+1  1.10e+1 │ 2.10e+1  2.20e+1  2.30e+1 ││
-    │└──────┴────────────────────────┴───────────────────────────┘│
-    └─────────────────────────────────────────────────────────────┘
-    |}];
+    {| [0]: r2x4x3 shape 0:2|2:3->1:4  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ ho;
[%expect
{|
@@ -1284,20 +906,7 @@ let%expect_test "einsum1 fixed dim axis" =
let ctx = Train.forward_and_ctx backend ctx ho2 in
Tensor.print ~with_code:false ~with_grad:false `Default @@ hey;
[%expect
-    {|
-    ┌─────────────────────────────────────────────────────────────┐
-    │[0]: r2x4x3 shape 0:2|2:3->1:4                               │
-    │┌──────┬────────────────────────┬───────────────────────────┐│
-    ││      │0 @ 0                   │1 @ 0                      ││
-    ││      │axis 2                  │axis 2                     ││
-    │├──────┼────────────────────────┼───────────────────────────┤│
-    ││axis 1│ 0.00  1.00     2.00    │ 1.20e+1  1.30e+1  1.40e+1 ││
-    ││      │ 3.00  4.00     5.00    │ 1.50e+1  1.60e+1  1.70e+1 ││
-    ││      │ 6.00  7.00     8.00    │ 1.80e+1  1.90e+1  2.00e+1 ││
-    ││      │ 9.00  1.00e+1  1.10e+1 │ 2.10e+1  2.20e+1  2.30e+1 ││
-    │└──────┴────────────────────────┴───────────────────────────┘│
-    └─────────────────────────────────────────────────────────────┘
-    |}];
+    {| [0]: r2x4x3 shape 0:2|2:3->1:4  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ ho2;
[%expect
{|
@@ -1316,18 +925,7 @@ let%expect_test "einsum1 fixed dim axis" =
let ctx = Train.forward_and_ctx backend ctx ho3 in
Tensor.print ~with_code:false ~with_grad:false `Default @@ hey2;
[%expect
-    {|
-    ┌─────────────────────────┐
-    │[3]: r3x2 shape 1:2->0:3 │
-    │┌──────┬────────────┐    │
-    ││      │axis 1      │    │
-    │├──────┼────────────┤    │
-    ││axis 0│ 0.00  1.00 │    │
-    ││      │ 2.00  3.00 │    │
-    ││      │ 4.00  5.00 │    │
-    │└──────┴────────────┘    │
-    └─────────────────────────┘
-    |}];
+    {| [3]: r3x2 shape 1:2->0:3  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ ho3;
[%expect
{|
@@ -1379,34 +977,10 @@ let%expect_test "einsum with fixed dim axes" =
Train.forward_and_forget backend ctx c;
Tensor.print ~with_code:false ~with_grad:false `Default @@ a;
[%expect
-    {|
-    ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-    │[0]: r3x2x4 shape 0:3|2:4->1:2                                                                             │
-    │┌──────┬────────────────────────┬────────────────────────────────────┬────────────────────────────────────┐│
-    ││      │0 @ 0                   │1 @ 0                               │2 @ 0                               ││
-    ││      │axis 2                  │axis 2                              │axis 2                              ││
-    │├──────┼────────────────────────┼────────────────────────────────────┼────────────────────────────────────┤│
-    ││axis 1│ 0.00  1.00  2.00  3.00 │ 8.00     9.00     1.00e+1  1.10e+1 │ 1.60e+1  1.70e+1  1.80e+1  1.90e+1 ││
-    ││      │ 4.00  5.00  6.00  7.00 │ 1.20e+1  1.30e+1  1.40e+1  1.50e+1 │ 2.00e+1  2.10e+1  2.20e+1  2.30e+1 ││
-    │└──────┴────────────────────────┴────────────────────────────────────┴────────────────────────────────────┘│
-    └───────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-    |}];
+    {| [0]: r3x2x4 shape 0:3|2:4->1:2  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ b;
[%expect
-    {|
-    ┌────────────────────────────────┐
-    │[1]: r3x4x1 shape 0:3|2:1->1:4  │
-    │┌──────┬──────┬──────┬─────────┐│
-    ││      │0 @ 0 │1 @ 0 │2 @ 0    ││
-    ││      │axis 2│axis 2│axis 2   ││
-    │├──────┼──────┼──────┼─────────┤│
-    ││axis 1│ 0.00 │ 4.00 │ 8.00    ││
-    ││      │ 1.00 │ 5.00 │ 9.00    ││
-    ││      │ 2.00 │ 6.00 │ 1.00e+1 ││
-    ││      │ 3.00 │ 7.00 │ 1.10e+1 ││
-    │└──────┴──────┴──────┴─────────┘│
-    └────────────────────────────────┘
-    |}];
+    {| [1]: r3x4x1 shape 0:3|2:1->1:4  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ c;
[%expect
{|
@@ -1450,175 +1024,175 @@ let%expect_test "outer_sum simulating axis concatenation" =
Tensor.print ~with_code:false ~with_grad:false `Default @@ positions;
[%expect
{|
-    ┌────────────────────────────────┐
-    │[9]: ;=>+ shape 0:4,1:5,2:6,3:3 │
-    │┌──────┬──────────────────┐     │
-    ││0 @ 0 │axis 3            │     │
-    │├──────┼──────────────────┤     │
-    ││0 @ 1 │ 0.00  0.00  0.00 │     │
-    ││axis 2│ 0.00  0.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 0.00  0.00  4.00 │     │
-    ││      │ 0.00  0.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││1 @ 1 │ 0.00  1.00  0.00 │     │
-    ││axis 2│ 0.00  1.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 0.00  1.00  4.00 │     │
-    ││      │ 0.00  1.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││2 @ 1 │ 0.00  2.00  0.00 │     │
-    ││axis 2│ 0.00  2.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 0.00  2.00  4.00 │     │
-    ││      │ 0.00  2.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││3 @ 1 │ 0.00  3.00  0.00 │     │
-    ││axis 2│ 0.00  3.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 0.00  3.00  4.00 │     │
-    ││      │ 0.00  3.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││4 @ 1 │ 0.00  4.00  0.00 │     │
-    ││axis 2│ 0.00  4.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 0.00  4.00  4.00 │     │
-    ││      │ 0.00  4.00  5.00 │     │
-    │└──────┴──────────────────┘     │
-    ├────────────────────────────────┤
-    │┌──────┬──────────────────┐     │
-    ││1 @ 0 │axis 3            │     │
-    │├──────┼──────────────────┤     │
-    ││0 @ 1 │ 1.00  0.00  0.00 │     │
-    ││axis 2│ 1.00  0.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 1.00  0.00  4.00 │     │
-    ││      │ 1.00  0.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││1 @ 1 │ 1.00  1.00  0.00 │     │
-    ││axis 2│ 1.00  1.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 1.00  1.00  4.00 │     │
-    ││      │ 1.00  1.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││2 @ 1 │ 1.00  2.00  0.00 │     │
-    ││axis 2│ 1.00  2.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 1.00  2.00  4.00 │     │
-    ││      │ 1.00  2.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││3 @ 1 │ 1.00  3.00  0.00 │     │
-    ││axis 2│ 1.00  3.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 1.00  3.00  4.00 │     │
-    ││      │ 1.00  3.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││4 @ 1 │ 1.00  4.00  0.00 │     │
-    ││axis 2│ 1.00  4.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 1.00  4.00  4.00 │     │
-    ││      │ 1.00  4.00  5.00 │     │
-    │└──────┴──────────────────┘     │
-    ├────────────────────────────────┤
-    │┌──────┬──────────────────┐     │
-    ││2 @ 0 │axis 3            │     │
-    │├──────┼──────────────────┤     │
-    ││0 @ 1 │ 2.00  0.00  0.00 │     │
-    ││axis 2│ 2.00  0.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 2.00  0.00  4.00 │     │
-    ││      │ 2.00  0.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││1 @ 1 │ 2.00  1.00  0.00 │     │
-    ││axis 2│ 2.00  1.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 2.00  1.00  4.00 │     │
-    ││      │ 2.00  1.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││2 @ 1 │ 2.00  2.00  0.00 │     │
-    ││axis 2│ 2.00  2.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 2.00  2.00  4.00 │     │
-    ││      │ 2.00  2.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││3 @ 1 │ 2.00  3.00  0.00 │     │
-    ││axis 2│ 2.00  3.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 2.00  3.00  4.00 │     │
-    ││      │ 2.00  3.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││4 @ 1 │ 2.00  4.00  0.00 │     │
-    ││axis 2│ 2.00  4.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 2.00  4.00  4.00 │     │
-    ││      │ 2.00  4.00  5.00 │     │
-    │└──────┴──────────────────┘     │
-    ├────────────────────────────────┤
-    │┌──────┬──────────────────┐     │
-    ││3 @ 0 │axis 3            │     │
-    │├──────┼──────────────────┤     │
-    ││0 @ 1 │ 3.00  0.00  0.00 │     │
-    ││axis 2│ 3.00  0.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 3.00  0.00  4.00 │     │
-    ││      │ 3.00  0.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││1 @ 1 │ 3.00  1.00  0.00 │     │
-    ││axis 2│ 3.00  1.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 3.00  1.00  4.00 │     │
-    ││      │ 3.00  1.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││2 @ 1 │ 3.00  2.00  0.00 │     │
-    ││axis 2│ 3.00  2.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 3.00  2.00  4.00 │     │
-    ││      │ 3.00  2.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││3 @ 1 │ 3.00  3.00  0.00 │     │
-    ││axis 2│ 3.00  3.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 3.00  3.00  4.00 │     │
-    ││      │ 3.00  3.00  5.00 │     │
-    │├──────┼──────────────────┤     │
-    ││4 @ 1 │ 3.00  4.00  0.00 │     │
-    ││axis 2│ 3.00  4.00  1.00 │     │
-    ││      │ ...   ...   ...  │     │
-    ││      │ 3.00  4.00  4.00 │     │
-    ││      │ 3.00  4.00  5.00 │     │
-    │└──────┴──────────────────┘     │
-    └────────────────────────────────┘
+    ┌───────────────────────────────────────┐
+    │[9]: ;=>+ shape 0:4,1:5,2:6,3:3        │
+    │┌──────┬──────────────────────────────┐│
+    ││0 @ 0 │axis 3                        ││
+    │├──────┼──────────────────────────────┤│
+    ││0 @ 1 │ 2.56e+11  1.81e+22  1.21e+1  ││
+    ││axis 2│ 2.51e-16  1.74e+25  1.31e+1  ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 1.32e-8   1.73e+2   1.61e+1  ││
+    ││      │ 2.51e-16  1.73e+2   1.71e+1  ││
+    │├──────┼──────────────────────────────┤│
+    ││1 @ 1 │ 2.56e+11  1.81e+22  3.31e+24 ││
+    ││axis 2│ 1.46e-19  1.74e+25  3.31e+24 ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 1.32e-8   1.74e+2   3.31e+24 ││
+    ││      │ 5.16e-42  1.74e+2   3.31e+24 ││
+    │├──────┼──────────────────────────────┤│
+    ││2 @ 1 │ 2.63e+23  1.81e+22  1.21e+1  ││
+    ││axis 2│ 2.63e+23  1.74e+25  1.31e+1  ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 2.63e+23  1.75e+2   1.61e+1  ││
+    ││      │ 2.63e+23  1.75e+2   1.71e+1  ││
+    │├──────┼──────────────────────────────┤│
+    ││3 @ 1 │ 3.07e+32  1.81e+22  1.21e+1  ││
+    ││axis 2│ 3.07e+32  1.74e+25  1.31e+1  ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 3.07e+32  1.76e+2   1.61e+1  ││
+    ││      │ 3.07e+32  1.76e+2   1.71e+1  ││
+    │├──────┼──────────────────────────────┤│
+    ││4 @ 1 │ 2.56e+11  1.81e+22  3.27e+3  ││
+    ││axis 2│ 1.46e-19  1.74e+25  3.27e+3  ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 1.32e-8   1.77e+2   3.27e+3  ││
+    ││      │ 9.50e-39  1.77e+2   3.27e+3  ││
+    │└──────┴──────────────────────────────┘│
+    ├───────────────────────────────────────┤
+    │┌──────┬──────────────────────────────┐│
+    ││1 @ 0 │axis 3                        ││
+    │├──────┼──────────────────────────────┤│
+    ││0 @ 1 │ 2.56e+11  1.81e+22  3.48e+15 ││
+    ││axis 2│ 1.00      1.74e+25  3.48e+15 ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 1.00      3.42e+3   3.48e+15 ││
+    ││      │ 1.00      3.42e+3   3.48e+15 ││
+    │├──────┼──────────────────────────────┤│
+    ││1 @ 1 │ 2.56e+11  1.81e+22  3.31e+24 ││
+    ││axis 2│ 1.00      1.74e+25  3.31e+24 ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 1.00      3.43e+3   3.31e+24 ││
+    ││      │ 1.00      3.43e+3   3.31e+24 ││
+    │├──────┼──────────────────────────────┤│
+    ││2 @ 1 │ 2.63e+23  1.81e+22  3.48e+15 ││
+    ││axis 2│ 2.63e+23  1.74e+25  3.48e+15 ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 2.63e+23  3.43e+3   3.48e+15 ││
+    ││      │ 2.63e+23  3.43e+3   3.48e+15 ││
+    │├──────┼──────────────────────────────┤│
+    ││3 @ 1 │ 3.07e+32  1.81e+22  3.48e+15 ││
+    ││axis 2│ 3.07e+32  1.74e+25  3.48e+15 ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 3.07e+32  3.43e+3   3.48e+15 ││
+    ││      │ 3.07e+32  3.43e+3   3.48e+15 ││
+    │├──────┼──────────────────────────────┤│
+    ││4 @ 1 │ 2.56e+11  1.81e+22  3.48e+15 ││
+    ││axis 2│ 1.00      1.74e+25  3.48e+15 ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 1.00      3.43e+3   3.48e+15 ││
+    ││      │ 1.00      3.43e+3   3.48e+15 ││
+    │└──────┴──────────────────────────────┘│
+    ├───────────────────────────────────────┤
+    │┌──────┬──────────────────────────────┐│
+    ││2 @ 0 │axis 3                        ││
+    │├──────┼──────────────────────────────┤│
+    ││0 @ 1 │ 2.56e+11  1.81e+22  3.35e+7  ││
+    ││axis 2│ 2.00      1.74e+25  3.35e+7  ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 2.00      5.15e+4   3.35e+7  ││
+    ││      │ 2.00      5.15e+4   3.35e+7  ││
+    │├──────┼──────────────────────────────┤│
+    ││1 @ 1 │ 2.56e+11  1.81e+22  3.31e+24 ││
+    ││axis 2│ 2.00      1.74e+25  3.31e+24 ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 2.00      5.15e+4   3.31e+24 ││
+    ││      │ 2.00      5.15e+4   3.31e+24 ││
+    │├──────┼──────────────────────────────┤│
+    ││2 @ 1 │ 2.63e+23  1.81e+22  3.35e+7  ││
+    ││axis 2│ 2.63e+23  1.74e+25  3.35e+7  ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 2.63e+23  5.15e+4   3.35e+7  ││
+    ││      │ 2.63e+23  5.15e+4   3.35e+7  ││
+    │├──────┼──────────────────────────────┤│
+    ││3 @ 1 │ 3.07e+32  1.81e+22  3.35e+7  ││
+    ││axis 2│ 3.07e+32  1.74e+25  3.35e+7  ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 3.07e+32  5.15e+4   3.35e+7  ││
+    ││      │ 3.07e+32  5.15e+4   3.35e+7  ││
+    │├──────┼──────────────────────────────┤│
+    ││4 @ 1 │ 2.56e+11  1.81e+22  3.35e+7  ││
+    ││axis 2│ 2.00      1.74e+25  3.35e+7  ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 2.00      5.15e+4   3.35e+7  ││
+    ││      │ 2.00      5.15e+4   3.35e+7  ││
+    │└──────┴──────────────────────────────┘│
+    ├───────────────────────────────────────┤
+    │┌──────┬──────────────────────────────┐│
+    ││3 @ 0 │axis 3                        ││
+    │├──────┼──────────────────────────────┤│
+    ││0 @ 1 │ 2.56e+11  1.81e+22  2.53e+2  ││
+    ││axis 2│ 3.00      1.74e+25  2.54e+2  ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 3.00      2.20e+2   2.57e+2  ││
+    ││      │ 3.00      2.20e+2   2.58e+2  ││
+    │├──────┼──────────────────────────────┤│
+    ││1 @ 1 │ 2.56e+11  1.81e+22  3.31e+24 ││
+    ││axis 2│ 3.00      1.74e+25  3.31e+24 ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 3.00      2.21e+2   3.31e+24 ││
+    ││      │ 3.00      2.21e+2   3.31e+24 ││
+    │├──────┼──────────────────────────────┤│
+    ││2 @ 1 │ 2.63e+23  1.81e+22  2.53e+2  ││
+    ││axis 2│ 2.63e+23  1.74e+25  2.54e+2  ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 2.63e+23  2.22e+2   2.57e+2  ││
+    ││      │ 2.63e+23  2.22e+2   2.58e+2  ││
+    │├──────┼──────────────────────────────┤│
+    ││3 @ 1 │ 3.07e+32  1.81e+22  2.53e+2  ││
+    ││axis 2│ 3.07e+32  1.74e+25  2.54e+2  ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 3.07e+32  2.23e+2   2.57e+2  ││
+    ││      │ 3.07e+32  2.23e+2   2.58e+2  ││
+    │├──────┼──────────────────────────────┤│
+    ││4 @ 1 │ 2.56e+11  1.81e+22  3.51e+3  ││
+    ││axis 2│ 3.00      1.74e+25  3.51e+3  ││
+    ││      │ ...       ...       ...      ││
+    ││      │ 3.00      2.24e+2   3.51e+3  ││
+    ││      │ 3.00      2.24e+2   3.51e+3  ││
+    │└──────┴──────────────────────────────┘│
+    └───────────────────────────────────────┘
|}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ ti;
[%expect
{|
-    ┌───────────────────────────┐
-    │[1]: =>_ti shape 0:4,1:3   │
-    │┌──────┬──────────────────┐│
-    ││      │axis 1            ││
-    │├──────┼──────────────────┤│
-    ││axis 0│ 0.00  0.00  0.00 ││
-    ││      │ 1.00  0.00  0.00 ││
-    ││      │ 2.00  0.00  0.00 ││
-    ││      │ 3.00  0.00  0.00 ││
-    │└──────┴──────────────────┘│
-    └───────────────────────────┘
+    ┌──────────────────────────────────┐
+    │[1]: =>_ti shape 0:4,1:3          │
+    │┌──────┬─────────────────────────┐│
+    ││      │axis 1                   ││
+    │├──────┼─────────────────────────┤│
+    ││axis 0│ 0.00  1.73e+2  1.21e+1  ││
+    ││      │ 1.00  3.42e+3  3.48e+15 ││
+    ││      │ 2.00  5.15e+4  3.35e+7  ││
+    ││      │ 3.00  2.20e+2  2.53e+2  ││
+    │└──────┴─────────────────────────┘│
+    └──────────────────────────────────┘
|}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ tk;
[%expect
{|
-    ┌───────────────────────────┐
-    │[7]: =>_tk shape 0:6,1:3   │
-    │┌──────┬──────────────────┐│
-    ││      │axis 1            ││
-    │├──────┼──────────────────┤│
-    ││axis 0│ 0.00  0.00  0.00 ││
-    ││      │ 0.00  0.00  1.00 ││
-    ││      │ ...   ...   ...  ││
-    ││      │ 0.00  0.00  4.00 ││
-    ││      │ 0.00  0.00  5.00 ││
-    │└──────┴──────────────────┘│
-    └───────────────────────────┘
+    ┌───────────────────────────────────┐
+    │[7]: =>_tk shape 0:6,1:3           │
+    │┌──────┬──────────────────────────┐│
+    ││      │axis 1                    ││
+    │├──────┼──────────────────────────┤│
+    ││axis 0│ 2.56e+11  1.81e+22  0.00 ││
+    ││      │ 1.46e-19  1.74e+25  1.00 ││
+    ││      │ ...       ...       ...  ││
+    ││      │ 1.32e-8   5.16e-42  4.00 ││
+    ││      │ 5.16e-42  1.32e-8   5.00 ││
+    │└──────┴──────────────────────────┘│
+    └───────────────────────────────────┘
|}]


let%expect_test "einsum with a leftmost input axis preserved as output axis" =
@@ -1644,54 +1218,10 @@ let%expect_test "einsum with a leftmost input axis preserved as output axis" =
Train.forward_and_forget backend ctx c;
Tensor.print ~with_code:false ~with_grad:false `Default @@ a;
[%expect
-    {|
-    ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-    │[0]: r3x2x4_a shape 0:3|2:4->1:2                                                                           │
-    │┌──────┬────────────────────────┬────────────────────────────────────┬────────────────────────────────────┐│
-    ││      │0 @ 0                   │1 @ 0                               │2 @ 0                               ││
-    ││      │axis 2                  │axis 2                              │axis 2                              ││
-    │├──────┼────────────────────────┼────────────────────────────────────┼────────────────────────────────────┤│
-    ││axis 1│ 0.00  1.00  2.00  3.00 │ 8.00     9.00     1.00e+1  1.10e+1 │ 1.60e+1  1.70e+1  1.80e+1  1.90e+1 ││
-    ││      │ 4.00  5.00  6.00  7.00 │ 1.20e+1  1.30e+1  1.40e+1  1.50e+1 │ 2.00e+1  2.10e+1  2.20e+1  2.30e+1 ││
-    │└──────┴────────────────────────┴────────────────────────────────────┴────────────────────────────────────┘│
-    └───────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-    |}];
+    {| [0]: r3x2x4_a shape 0:3|2:4->1:2  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ b;
[%expect
-    {|
-    ┌────────────────────────────────────────────────────────────────┐
-    │[1]: r3x4x2x3_b shape 0:3|2:2,3:3->1:4                          │
-    │┌──────┬───────────────────────────┬───────────────────────────┐│
-    ││0 @ 0 │0 @ 2                      │1 @ 2                      ││
-    ││      │axis 3                     │axis 3                     ││
-    │├──────┼───────────────────────────┼───────────────────────────┤│
-    ││axis 1│ 0.00     1.00     2.00    │ 3.00     4.00     5.00    ││
-    ││      │ 6.00     7.00     8.00    │ 9.00     1.00e+1  1.10e+1 ││
-    ││      │ 1.20e+1  1.30e+1  1.40e+1 │ 1.50e+1  1.60e+1  1.70e+1 ││
-    ││      │ 1.80e+1  1.90e+1  2.00e+1 │ 2.10e+1  2.20e+1  2.30e+1 ││
-    │└──────┴───────────────────────────┴───────────────────────────┘│
-    ├────────────────────────────────────────────────────────────────┤
-    │┌──────┬───────────────────────────┬───────────────────────────┐│
-    ││1 @ 0 │0 @ 2                      │1 @ 2                      ││
-    ││      │axis 3                     │axis 3                     ││
-    │├──────┼───────────────────────────┼───────────────────────────┤│
-    ││axis 1│ 2.40e+1  2.50e+1  2.60e+1 │ 2.70e+1  2.80e+1  2.90e+1 ││
-    ││      │ 3.00e+1  3.10e+1  3.20e+1 │ 3.30e+1  3.40e+1  3.50e+1 ││
-    ││      │ 3.60e+1  3.70e+1  3.80e+1 │ 3.90e+1  4.00e+1  4.10e+1 ││
-    ││      │ 4.20e+1  4.30e+1  4.40e+1 │ 4.50e+1  4.60e+1  4.70e+1 ││
-    │└──────┴───────────────────────────┴───────────────────────────┘│
-    ├────────────────────────────────────────────────────────────────┤
-    │┌──────┬───────────────────────────┬───────────────────────────┐│
-    ││2 @ 0 │0 @ 2                      │1 @ 2                      ││
-    ││      │axis 3                     │axis 3                     ││
-    │├──────┼───────────────────────────┼───────────────────────────┤│
-    ││axis 1│ 4.80e+1  4.90e+1  5.00e+1 │ 5.10e+1  5.20e+1  5.30e+1 ││
-    ││      │ 5.40e+1  5.50e+1  5.60e+1 │ 5.70e+1  5.80e+1  5.90e+1 ││
-    ││      │ 6.00e+1  6.10e+1  6.20e+1 │ 6.30e+1  6.40e+1  6.50e+1 ││
-    ││      │ 6.60e+1  6.70e+1  6.80e+1 │ 6.90e+1  7.00e+1  7.10e+1 ││
-    │└──────┴───────────────────────────┴───────────────────────────┘│
-    └────────────────────────────────────────────────────────────────┘
-    |}];
+    {| [1]: r3x4x2x3_b shape 0:3|2:2,3:3->1:4  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ c;
[%expect
{|
@@ -1728,34 +1258,10 @@ let%expect_test "einsum permuting two leftmost input axes as output axes" =
Train.forward_and_forget backend ctx c;
Tensor.print ~with_code:false ~with_grad:false `Default @@ a;
[%expect
-    {|
-    ┌───────────────────────────┐
-    │[0]: r2x2_a shape 1:2->0:2 │
-    │┌──────┬────────────┐      │
-    ││      │axis 1      │      │
-    │├──────┼────────────┤      │
-    ││axis 0│ 0.00  1.00 │      │
-    ││      │ 2.00  3.00 │      │
-    │└──────┴────────────┘      │
-    └───────────────────────────┘
-    |}];
+    {| [0]: r2x2_a shape 1:2->0:2  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ b;
[%expect
-    {|
-    ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-    │[1]: r2x2x3x4_b shape 1:2,2:3,3:4->0:2                                                                                 │
-    │┌──────┬────────────────────────────────────┬────────────────────────────────────┬────────────────────────────────────┐│
-    ││      │0 @ 2                               │1 @ 2                               │2 @ 2                               ││
-    ││      │axis 3                              │axis 3                              │axis 3                              ││
-    │├──────┼────────────────────────────────────┼────────────────────────────────────┼────────────────────────────────────┤│
-    ││0 @ 1 │ 0.00     1.00     2.00     3.00    │ 4.00     5.00     6.00     7.00    │ 8.00     9.00     1.00e+1  1.10e+1 ││
-    ││axis 0│ 2.40e+1  2.50e+1  2.60e+1  2.70e+1 │ 2.80e+1  2.90e+1  3.00e+1  3.10e+1 │ 3.20e+1  3.30e+1  3.40e+1  3.50e+1 ││
-    │├──────┼────────────────────────────────────┼────────────────────────────────────┼────────────────────────────────────┤│
-    ││1 @ 1 │ 1.20e+1  1.30e+1  1.40e+1  1.50e+1 │ 1.60e+1  1.70e+1  1.80e+1  1.90e+1 │ 2.00e+1  2.10e+1  2.20e+1  2.30e+1 ││
-    ││axis 0│ 3.60e+1  3.70e+1  3.80e+1  3.90e+1 │ 4.00e+1  4.10e+1  4.20e+1  4.30e+1 │ 4.40e+1  4.50e+1  4.60e+1  4.70e+1 ││
-    │└──────┴────────────────────────────────────┴────────────────────────────────────┴────────────────────────────────────┘│
-    └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-    |}];
+    {| [1]: r2x2x3x4_b shape 1:2,2:3,3:4->0:2  <virtual> |}];
Tensor.print ~with_code:false ~with_grad:false `Default @@ c;
[%expect
{|
jail: /usr/bin/su -l opam -c cd '/src' && env OCAMLCI='true' CI='true' DEPS='angstrom.0.16.1 astring.0.8.5 backoff.0.1.1 base.v0.17.3 base-bigarray.base base-bytes.base base-domains.base base-effects.base base-nnp.base base-threads.base base-unix.base bigarray-compat.1.1.0 bigstringaf.0.10.0 camlp-streams.5.0.1 camlzip.1.13 cmdliner.1.3.0 conf-libcurl.2 conf-libffi.2.0.0 conf-pkg-config.4 conf-zlib.1 cppo.1.8.0 csexp.1.5.2 csv.2.4 ctypes.0.23.0 ctypes-foreign.0.23.0 curl.0.10.0 dune.3.19.1 dune-configurator.3.19.1 fieldslib.v0.17.0 fmt.0.10.0 integers.0.7.0 jane-street-headers.v0.17.0 jst-config.v0.17.0 logs.0.9.0 mdx.2.5.0 mtime.2.1.0 multicore-magic.2.3.1 num.1.6 ocaml.5.3.0 ocaml-base-compiler.5.3.0 ocaml-compiler.5.3.0 ocaml-compiler-libs.v0.17.0 ocaml-config.3 ocaml-options-vanilla.1 ocaml-syntax-shims.1.0.0 ocaml-version.4.0.1 ocaml_intrinsics_kernel.v0.17.1 ocamlbuild.0.16.1 ocamlfind.1.9.8 parsexp.v0.17.0 pprint.20230830 ppx_assert.v0.17.0 ppx_base.v0.17.0 ppx_cold.v0.17.0 ppx_compare.v0.17.0 ppx_derivers.1.2.1 ppx_deriving.6.1.0 ppx_enumerate.v0.17.0 ppx_expect.v0.17.3 ppx_fields_conv.v0.17.0 ppx_globalize.v0.17.2 ppx_hash.v0.17.0 ppx_here.v0.17.0 ppx_inline_test.v0.17.1 ppx_minidebug.2.3.0 ppx_optcomp.v0.17.1 ppx_sexp_conv.v0.17.1 ppx_string.v0.17.0 ppx_variants_conv.v0.17.1 ppxlib.0.36.0 ppxlib_jane.v0.17.4 printbox.0.12 printbox-ext-plot.0.12 printbox-html.0.12 printbox-md.0.12 printbox-text.0.12 ptime.1.2.0 re.1.13.2 result.1.5 saturn_lockfree.0.5.0 seq.base sexplib.v0.17.0 sexplib0.v0.17.0 stdio.v0.17.0 stdlib-shims.0.3.0 thread-local-storage.0.2 time_now.v0.17.0 topkg.1.0.8 tyxml.4.6.0 uucp.16.0.0 uutf.1.0.4 variantslib.v0.17.0' OPAMCOLOR='always' CLICOLOR_FORCE='1' '/usr/bin/env' 'bash' '-c' 'opam exec -- dune build @install @check @runtest && rm -rf _build': failed
"jail" "-c" "name=obuilder_11788_124588" "mount.devfs" "path=/obuilder/result/a2add69a74090f338cbffabb9cab21e7c37df81dec1d4e1ea96fe690fae0be79/rootfs" "vnet" "exec.start=/sbin/ifconfig lo0 127.0.0.1/8" "command=/usr/bin/su" "-l" "opam" "-c" "cd '/src' && env OCAMLCI='true' CI='true' DEPS='angstrom.0.16.1 astring.0.8.5 backoff.0.1.1 base.v0.17.3 base-bigarray.base base-bytes.base base-domains.base base-effects.base base-nnp.base base-threads.base base-unix.base bigarray-compat.1.1.0 bigstringaf.0.10.0 camlp-streams.5.0.1 camlzip.1.13 cmdliner.1.3.0 conf-libcurl.2 conf-libffi.2.0.0 conf-pkg-config.4 conf-zlib.1 cppo.1.8.0 csexp.1.5.2 csv.2.4 ctypes.0.23.0 ctypes-foreign.0.23.0 curl.0.10.0 dune.3.19.1 dune-configurator.3.19.1 fieldslib.v0.17.0 fmt.0.10.0 integers.0.7.0 jane-street-headers.v0.17.0 jst-config.v0.17.0 logs.0.9.0 mdx.2.5.0 mtime.2.1.0 multicore-magic.2.3.1 num.1.6 ocaml.5.3.0 ocaml-base-compiler.5.3.0 ocaml-compiler.5.3.0 ocaml-compiler-libs.v0.17.0 ocaml-config.3 ocaml-options-vanilla.1 ocaml-syntax-shims.1.0.0 ocaml-version.4.0.1 ocaml_intrinsics_kernel.v0.17.1 ocamlbuild.0.16.1 ocamlfind.1.9.8 parsexp.v0.17.0 pprint.20230830 ppx_assert.v0.17.0 ppx_base.v0.17.0 ppx_cold.v0.17.0 ppx_compare.v0.17.0 ppx_derivers.1.2.1 ppx_deriving.6.1.0 ppx_enumerate.v0.17.0 ppx_expect.v0.17.3 ppx_fields_conv.v0.17.0 ppx_globalize.v0.17.2 ppx_hash.v0.17.0 ppx_here.v0.17.0 ppx_inline_test.v0.17.1 ppx_minidebug.2.3.0 ppx_optcomp.v0.17.1 ppx_sexp_conv.v0.17.1 ppx_string.v0.17.0 ppx_variants_conv.v0.17.1 ppxlib.0.36.0 ppxlib_jane.v0.17.4 printbox.0.12 printbox-ext-plot.0.12 printbox-html.0.12 printbox-md.0.12 printbox-text.0.12 ptime.1.2.0 re.1.13.2 result.1.5 saturn_lockfree.0.5.0 seq.base sexplib.v0.17.0 sexplib0.v0.17.0 stdio.v0.17.0 stdlib-shims.0.3.0 thread-local-storage.0.2 time_now.v0.17.0 topkg.1.0.8 tyxml.4.6.0 uucp.16.0.0 uutf.1.0.4 variantslib.v0.17.0' OPAMCOLOR='always' CLICOLOR_FORCE='1' '/usr/bin/env' 'bash' '-c' 'opam exec -- dune build @install @check @runtest && rm -rf _build'" failed with exit status 1
2025-07-12 12:56.59: Job failed: Failed: Build failed