Organisationsahrefsocannl4a2915 ()(lint-fmt)

(lint-fmt)

Logs

Show full logs
2025-06-13 17:13.59: New job: test ahrefs/ocannl https://github.com/ahrefs/ocannl.git#refs/heads/master (4a291573c46f63d3f21f1d56bc89e6d1bd40fe85) (linux-x86_64:(lint-fmt))
Base: ocaml/opam:debian-12-ocaml-4.08@sha256:48fa4a7216c3973bb95572cf5dca98cbbcefe90f288f552e7ac70a8ccd438aa7
ocamlformat version: version 0.27.0 (from opam)

To reproduce locally:

git clone --recursive "https://github.com/ahrefs/ocannl.git" -b "master" && cd "ocannl" && git reset --hard 4a291573
cat > Dockerfile <<'END-OF-DOCKERFILE'
FROM ocaml/opam:debian-12-ocaml-4.08@sha256:48fa4a7216c3973bb95572cf5dca98cbbcefe90f288f552e7ac70a8ccd438aa7
USER 1000:1000
RUN cd ~/opam-repository && (git cat-file -e 0eea63ad71af2b1116c556023bedc6bf083e6125 || git fetch origin master) && git reset -q --hard 0eea63ad71af2b1116c556023bedc6bf083e6125 && git log --no-decorate -n1 --oneline && opam update -u
RUN opam depext -i dune
WORKDIR /src
RUN opam depext -i ocamlformat=0.27.0
COPY --chown=1000:1000 . /src/
RUN opam exec -- dune build @fmt --ignore-promoted-rules || (echo "dune build @fmt failed"; exit 2)

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

2025-06-13 17:13.59: Using cache hint "ahrefs/ocannl-ocaml/opam:debian-12-ocaml-4.08@sha256:48fa4a7216c3973bb95572cf5dca98cbbcefe90f288f552e7ac70a8ccd438aa7-debian-12-4.08_opam-2.3-ocamlformat-0eea63ad71af2b1116c556023bedc6bf083e6125"
2025-06-13 17:13.59: Using OBuilder spec:
((from ocaml/opam:debian-12-ocaml-4.08@sha256:48fa4a7216c3973bb95572cf5dca98cbbcefe90f288f552e7ac70a8ccd438aa7)
 (user (uid 1000) (gid 1000))
 (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
      (network host)
      (shell "cd ~/opam-repository && (git cat-file -e 0eea63ad71af2b1116c556023bedc6bf083e6125 || git fetch origin master) && git reset -q --hard 0eea63ad71af2b1116c556023bedc6bf083e6125 && git log --no-decorate -n1 --oneline && opam update -u"))
 (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
      (network host)
      (shell "opam depext -i dune"))
 (workdir /src)
 (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
      (network host)
      (shell "opam depext -i ocamlformat=0.27.0"))
 (copy (src .) (dst /src/))
 (run (shell "opam exec -- dune build @fmt --ignore-promoted-rules || (echo \"dune build @fmt failed\"; exit 2)"))
)

2025-06-13 17:13.59: Waiting for resource in pool OCluster
2025-06-13 17:13.59: Waiting for worker…
2025-06-13 17:13.59: Got resource from pool OCluster
Building on odawa.caelum.ci.dev
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint: 	git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint: 	git branch -m <name>
Initialized empty Git repository in /var/cache/obuilder/ocluster/git/ocannl.git-6892d315d851562e83f7284a240d4486ed11f9c7/.git/
HEAD is now at 4a291573 Convolutions clarification and a bit of formatting

(from ocaml/opam:debian-12-ocaml-4.08@sha256:48fa4a7216c3973bb95572cf5dca98cbbcefe90f288f552e7ac70a8ccd438aa7)
2025-06-13 17:14.01 ---> using "d1b97f3f32fc7cff4791d73e3fff398d19cc5b0541c709028ff05a921e22d2c8" from cache

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

/: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
        (network host)
        (shell "cd ~/opam-repository && (git cat-file -e 0eea63ad71af2b1116c556023bedc6bf083e6125 || git fetch origin master) && git reset -q --hard 0eea63ad71af2b1116c556023bedc6bf083e6125 && git log --no-decorate -n1 --oneline && opam update -u"))
From https://github.com/ocaml/opam-repository
 * branch                  master     -> FETCH_HEAD
   0d013e603b..c7269f729a  master     -> origin/master
0eea63ad71 Merge pull request #27946 from mtelvers/opam-publish-ocaml-version.4.0.1

<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>
[default] Initialised
default (at git+file:///home/opam/opam-repository): 
    [INFO] opam 2.1 and 2.2 include many performance and security improvements over 2.0; please consider upgrading (https://opam.ocaml.org/doc/Install.html)


Everything as up-to-date as possible (run with --verbose to show unavailable upgrades).
However, you may "opam upgrade" these packages explicitly, which will ask permission to downgrade or uninstall the conflicting packages.
Nothing to do.
# Run eval $(opam env) to update the current shell environment
2025-06-13 17:14.51 ---> saved as "96cf7cb4f290bdde63e0891300660f309335b98ec063b9c2de517b6b08952aac"

/: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
        (network host)
        (shell "opam depext -i dune"))
# Detecting depexts using vars: arch=x86_64, os=linux, os-distribution=debian, os-family=debian
# No extra OS packages requirements found.
# All required OS packages found.
# Now letting opam install the packages
The following actions will be performed:
  - install dune 3.19.0

<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
[dune.3.19.0] downloaded from https://github.com/ocaml/dune/releases/download/3.19.0/dune-3.19.0.tbz

<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
-> installed dune.3.19.0
Done.
# Run eval $(opam env) to update the current shell environment
2025-06-13 17:15.14 ---> saved as "89c0585fea6e0efe18837c1dd4fe4772483d123bc62d2e4be11e9db74e5475f0"

/: (workdir /src)

/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
           (network host)
           (shell "opam depext -i ocamlformat=0.27.0"))
# Detecting depexts using vars: arch=x86_64, os=linux, os-distribution=debian, os-family=debian
# No extra OS packages requirements found.
# All required OS packages found.
# Now letting opam install the packages
The following actions will be performed:
  - install sexplib0          v0.14.0  [required by base]
  - install cmdliner          1.3.0    [required by ocamlformat]
  - install menhirLib         20240715 [required by ocamlformat-lib]
  - install menhirCST         20240715 [required by menhir]
  - install ocamlbuild        0.16.1   [required by fpath, astring, uuseg]
  - install menhirSdk         20240715 [required by ocamlformat-lib]
  - install either            1.0.0    [required by ocamlformat-lib]
  - install ocaml-version     4.0.1    [required by ocamlformat-lib]
  - install camlp-streams     5.0.1    [required by ocamlformat-lib]
  - install csexp             1.5.2    [required by ocamlformat]
  - install seq               base     [required by re]
  - install fix               20250428 [required by ocamlformat-lib]
  - install ocamlfind         1.9.8    [required by ocp-indent, astring, fpath, uuseg]
  - install dune-build-info   3.19.0   [required by ocamlformat-lib]
  - install menhir            20240715 [required by ocamlformat-lib]
  - install dune-configurator 3.19.0   [required by base]
  - install re                1.11.0   [required by ocamlformat]
  - install topkg             1.0.8    [required by fpath, astring, uuseg]
  - install base-bytes        base     [required by ocp-indent]
  - install base              v0.14.3  [required by ocamlformat-lib]
  - install uutf              1.0.4    [required by ocamlformat-lib]
  - install astring           0.8.5    [required by ocamlformat-lib]
  - install ocp-indent        1.8.1    [required by ocamlformat-lib]
  - install stdio             v0.14.0  [required by ocamlformat-lib]
  - install uucp              15.0.0   [required by uuseg]
  - install fpath             0.7.3    [required by ocamlformat-lib]
  - install uuseg             15.0.0   [required by ocamlformat-lib]
  - install ocamlformat-lib   0.27.0   [required by ocamlformat]
  - install ocamlformat       0.27.0
===== 29 to install =====

<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
[astring.0.8.5] found in cache
[camlp-streams.5.0.1] found in cache
[cmdliner.1.3.0] found in cache
[csexp.1.5.2] found in cache
[dune-build-info.3.19.0] found in cache
[dune-configurator.3.19.0] found in cache
[either.1.0.0] found in cache
[base.v0.14.3] downloaded from https://github.com/janestreet/base/archive/v0.14.3.tar.gz
[fix.20250428] found in cache
[fpath.0.7.3] found in cache
[menhir.20240715] found in cache
[menhirCST.20240715] found in cache
[menhirLib.20240715] found in cache
[menhirSdk.20240715] found in cache
[ocaml-version.4.0.1] found in cache
[ocamlbuild.0.16.1] found in cache
[ocamlfind.1.9.8] found in cache
[ocamlformat.0.27.0] downloaded from https://github.com/ocaml-ppx/ocamlformat/releases/download/0.27.0/ocamlformat-0.27.0.tbz
[ocp-indent.1.8.1] downloaded from https://github.com/OCamlPro/ocp-indent/archive/1.8.1.tar.gz
[ocamlformat-lib.0.27.0] downloaded from https://github.com/ocaml-ppx/ocamlformat/releases/download/0.27.0/ocamlformat-0.27.0.tbz
[re.1.11.0] found in cache
[topkg.1.0.8] found in cache
[sexplib0.v0.14.0] downloaded from https://ocaml.janestreet.com/ocaml-core/v0.14/files/sexplib0-v0.14.0.tar.gz
[stdio.v0.14.0] downloaded from https://ocaml.janestreet.com/ocaml-core/v0.14/files/stdio-v0.14.0.tar.gz
[uutf.1.0.4] found in cache
[uuseg.15.0.0] downloaded from https://erratique.ch/software/uuseg/releases/uuseg-15.0.0.tbz
[uucp.15.0.0] downloaded from https://erratique.ch/software/uucp/releases/uucp-15.0.0.tbz

<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
-> installed seq.base
-> installed camlp-streams.5.0.1
-> installed csexp.1.5.2
-> installed cmdliner.1.3.0
-> installed either.1.0.0
-> installed fix.20250428
-> installed menhirCST.20240715
-> installed menhirLib.20240715
-> installed menhirSdk.20240715
-> installed ocaml-version.4.0.1
-> installed re.1.11.0
-> installed sexplib0.v0.14.0
-> installed dune-build-info.3.19.0
-> installed dune-configurator.3.19.0
-> installed ocamlfind.1.9.8
-> installed base-bytes.base
-> installed ocamlbuild.0.16.1
-> installed ocp-indent.1.8.1
-> installed base.v0.14.3
-> installed topkg.1.0.8
-> installed stdio.v0.14.0
-> installed uutf.1.0.4
-> installed astring.0.8.5
-> installed menhir.20240715
-> installed fpath.0.7.3
-> installed uucp.15.0.0
-> installed uuseg.15.0.0
-> installed ocamlformat-lib.0.27.0
-> installed ocamlformat.0.27.0
Done.

<><> ocp-indent.1.8.1 installed successfully ><><><><><><><><><><><><><><><><><>
=> This package requires additional configuration for use in editors. Install package 'user-setup', or manually:

   * for Emacs, add these lines to ~/.emacs:
     (add-to-list 'load-path "/home/opam/.opam/4.08/share/emacs/site-lisp")
     (require 'ocp-indent)

   * for Vim, add this line to ~/.vimrc:
     set rtp^="/home/opam/.opam/4.08/share/ocp-indent/vim"
# Run eval $(opam env) to update the current shell environment
2025-06-13 17:16.00 ---> saved as "3806f45ef51bb70dc27c6783fa556ac6054f53765f6f6e5d7f0761003690b07c"

/src: (copy (src .) (dst /src/))
2025-06-13 17:16.01 ---> saved as "67c9cf801ccda52bd9ed897d50d4bc984bb6a12a3e71cc4f69db3ed476199271"

/src: (run (shell "opam exec -- dune build @fmt --ignore-promoted-rules || (echo \"dune build @fmt failed\"; exit 2)"))
File "arrayjit/bin/dune", line 6, characters 21-34:
6 |   (pps ppx_minidebug ppx_sexp_conv))
                         ^^^^^^^^^^^^^
Error: Library "ppx_sexp_conv" not found.
-> required by _build/default/arrayjit/bin/read_config.exe
-> required by %{dep:../../arrayjit/bin/read_config.exe} at test/dune:25
-> required by _build/default/test/config/ocannl_backend.txt
-> required by %{read:config/ocannl_backend.txt} at test/dune:44
-> required by Computing directory contents of _build/default/test
File "arrayjit/bin/dune", line 6, characters 7-20:
6 |   (pps ppx_minidebug ppx_sexp_conv))
           ^^^^^^^^^^^^^
Error: Library "ppx_minidebug" not found.
-> required by _build/default/arrayjit/bin/.merlin-conf/exe-read_config
-> required by _build/default/arrayjit/bin/read_config.exe
-> required by %{dep:../../arrayjit/bin/read_config.exe} at test/dune:25
-> required by _build/default/test/config/ocannl_backend.txt
-> required by %{read:config/ocannl_backend.txt} at test/dune:44
-> required by Computing directory contents of _build/default/test
File "arrayjit/test/test_numerical_types.ml", line 1, characters 0-0:
diff --git a/_build/default/arrayjit/test/test_numerical_types.ml b/_build/default/arrayjit/test/.formatted/test_numerical_types.ml
index 222a2ec..971d196 100644
--- a/_build/default/arrayjit/test/test_numerical_types.ml
+++ b/_build/default/arrayjit/test/.formatted/test_numerical_types.ml
@@ -48,13 +48,15 @@ let test_padding () =
   Stdio.printf "\n\nTesting padding functionality:\n";
 
   (* Test padding with float32 array *)
-  let padding_config = [| (1, 1); (2, 1) |] in (* left=1,right=1 for first dim; left=2,right=1 for second dim *)
+  let padding_config = [| (1, 1); (2, 1) |] in
+  (* left=1,right=1 for first dim; left=2,right=1 for second dim *)
   let padding_value = -999.0 in
 
-  let padded_dims = [| 4; 6 |] in (* (2+1+1) x (3+2+1) *)
-  
+  let padded_dims = [| 4; 6 |] in
+  (* (2+1+1) x (3+2+1) *)
+
   let arr =
-    Ndarray.create_array ~debug:"padded_test" Ops.single ~dims:padded_dims 
+    Ndarray.create_array ~debug:"padded_test" Ops.single ~dims:padded_dims
       ~padding:(Some (padding_config, padding_value))
       (Ops.Constant_fill { values = [| 1.0; 2.0; 3.0; 4.0; 5.0; 6.0 |]; strict = true })
   in
@@ -65,12 +67,13 @@ let test_padding () =
     for j = 0 to dims.(1) - 1 do
       let idx = [| i; j |] in
       let value = Ndarray.get_as_float arr idx in
-      Stdio.printf "%8.1f " value;
+      Stdio.printf "%8.1f " value
     done;
     Stdio.printf "\n"
   done;
-  
-  Stdio.printf "\nExpected: padding value (-999.0) in margins, data values (1.0-6.0) in center region\n"
+
+  Stdio.printf
+    "\nExpected: padding value (-999.0) in margins, data values (1.0-6.0) in center region\n"
 
 let () =
   test_bfloat16_conversions ();
File "lib/shape.mli", line 1, characters 0-0:
diff --git a/_build/default/lib/shape.mli b/_build/default/lib/.formatted/shape.mli
index be0773c..6537143 100644
--- a/_build/default/lib/shape.mli
+++ b/_build/default/lib/.formatted/shape.mli
@@ -108,10 +108,7 @@ val make :
     that these are dimensions labels and not axis labels: they need not be unique for a row, are
     inferred when provided, and must match whenever the axis sizes must match. *)
 
-val to_string_hum :
-  ?style:Row.print_style ->
-  t ->
-  string
+val to_string_hum : ?style:Row.print_style -> t -> string
 
 val unsafe_reinitialize : unit -> unit
 (** Bring global state to its initialization values. This invalidates any unfinished inference. *)
File "arrayjit/lib/assignments.ml", line 1, characters 0-0:
diff --git a/_build/default/arrayjit/lib/assignments.ml b/_build/default/arrayjit/lib/.formatted/assignments.ml
index bd3908f..3e41a7e 100644
--- a/_build/default/arrayjit/lib/assignments.ml
+++ b/_build/default/arrayjit/lib/.formatted/assignments.ml
@@ -154,20 +154,20 @@ let%diagn2_sexp to_low_level code =
     let projections = Lazy.force projections in
     let basecase rev_iters =
       (* Create a substitution from product iterators to loop iterators *)
-      let subst_map = 
+      let subst_map =
         let loop_iters = Array.of_list_rev rev_iters in
         Array.mapi projections.product_iterators ~f:(fun i prod_iter ->
-          (prod_iter, Indexing.Iterator loop_iters.(i)))
+            (prod_iter, Indexing.Iterator loop_iters.(i)))
         |> Array.to_list
         |> Map.of_alist_exn (module Indexing.Symbol)
       in
       (* Substitute in projections *)
       let subst_index = function
         | Indexing.Fixed_idx _ as idx -> idx
-        | Indexing.Iterator s as idx -> 
-            Option.value ~default:idx (Map.find subst_map s)
+        | Indexing.Iterator s as idx -> Option.value ~default:idx (Map.find subst_map s)
         | Indexing.Affine { symbols; offset } ->
-            (* For affine indices, we don't substitute - they should already use the right symbols *)
+            (* For affine indices, we don't substitute - they should already use the right
+               symbols *)
             Indexing.Affine { symbols; offset }
       in
       let lhs_idcs = Array.map projections.project_lhs ~f:subst_index in
File "arrayjit/lib/tnode.ml", line 1, characters 0-0:
diff --git a/_build/default/arrayjit/lib/tnode.ml b/_build/default/arrayjit/lib/.formatted/tnode.ml
index d58ce98..2d9cc89 100644
--- a/_build/default/arrayjit/lib/tnode.ml
+++ b/_build/default/arrayjit/lib/.formatted/tnode.ml
@@ -105,7 +105,6 @@ let dims_without_padding tn =
       Array.map2_exn dims padding ~f:(fun dim (left, right) -> dim - left - right)
 
 let get_padding tn = Lazy.force tn.padding
-
 let id { id; _ } = "n" ^ Int.to_string id
 let label a = String.concat ~sep:"_" a.label
 let is_alphanum_ = String.for_all ~f:(fun c -> Char.equal c '_' || Char.is_alphanum c)
@@ -540,8 +539,8 @@ let create ?default_prec ~id ~label ~dims ~padding init_op =
     lazy
       (if is_hosted_force tn 30 then
          Some
-           (Nd.create_array ~debug (Lazy.force prec) ~dims:(Lazy.force dims) ~padding:(Lazy.force padding)
-              init_op)
+           (Nd.create_array ~debug (Lazy.force prec) ~dims:(Lazy.force dims)
+              ~padding:(Lazy.force padding) init_op)
        else None)
   and prec =
     lazy
File "lib/tensor.ml", line 1, characters 0-0:
diff --git a/_build/default/lib/tensor.ml b/_build/default/lib/.formatted/tensor.ml
index 8b877b4..36e4fda 100644
--- a/_build/default/lib/tensor.ml
+++ b/_build/default/lib/.formatted/tensor.ml
@@ -238,7 +238,11 @@ let op ~(label : string list) ?(ternary_op = Shape.Pointwise_tern)
     in
     let grad_id = session_state.next_id in
     session_state.next_id <- session_state.next_id + 1;
-    let g = Tn.create ~default_prec ~id:grad_id ~label:("grad" :: label) ~dims ~padding:(lazy None) default_init_op in
+    let g =
+      Tn.create ~default_prec ~id:grad_id ~label:("grad" :: label) ~dims
+        ~padding:(lazy None)
+        default_init_op
+    in
     let is_bck_root ti = Map.mem session_state.backprop_roots ti.id in
     let zero_grads =
       let zero_g ti =
@@ -358,7 +362,8 @@ let ndarray ?(label = []) ?(grad_spec = Prohibit_grad) ?batch_dims ?input_dims ?
     let dims = Array.concat_map [| batch_ds; output_ds; input_ds |] ~f:Array.of_list in
     let debug = "Temporary array for pretty-printing" in
     let ndarr =
-      Nd.create_array ~debug Ir.Ops.double ~dims ~padding:None (Ir.Ops.Constant_fill { values; strict })
+      Nd.create_array ~debug Ir.Ops.double ~dims ~padding:None
+        (Ir.Ops.Constant_fill { values; strict })
     in
     let ( ! ) = List.length in
     let b = Buffer.create 1024 in
@@ -590,7 +595,7 @@ let to_doc ?(spy = false) ~with_grad ~with_code ?(with_low_level = false)
   let label = Tn.label t.value in
   let prefix_str =
     "[" ^ Int.to_string t.id ^ "]: " ^ label ^ " shape "
-            ^ Shape.to_string_hum ~style:Row.Axis_number_and_size sh
+    ^ Shape.to_string_hum ~style:Row.Axis_number_and_size sh
     ^ " "
   in
   let grad_txt diff =
@@ -631,7 +636,9 @@ let to_doc ?(spy = false) ~with_grad ~with_code ?(with_low_level = false)
     Array.exists ~f:(Fn.non String.is_empty) labels
     || Shape.(List.exists ~f:Row.(equal_dim @@ get_dim ~d:1 ()) sh.input.dims)
   in
-      let axes_spec = if needs_spec then Some (Shape.to_string_hum ~style:Row.Only_labels sh) else None in
+  let axes_spec =
+    if needs_spec then Some (Shape.to_string_hum ~style:Row.Only_labels sh) else None
+  in
   let num_batch_axes = List.length sh.batch.dims in
   let num_input_axes = List.length sh.input.dims in
   let num_output_axes = List.length sh.output.dims in
File "arrayjit/lib/ndarray.ml", line 1, characters 0-0:
diff --git a/_build/default/arrayjit/lib/ndarray.ml b/_build/default/arrayjit/lib/.formatted/ndarray.ml
index f062552..747022d 100644
--- a/_build/default/arrayjit/lib/ndarray.ml
+++ b/_build/default/arrayjit/lib/.formatted/ndarray.ml
@@ -132,41 +132,42 @@ let indices_to_offset ~dims ~idcs =
 let create_bigarray (type ocaml elt_t) (prec : (ocaml, elt_t) Ops.precision) ~dims ~padding
     (init_op : Ops.init_op) : (ocaml, elt_t) bigarray =
   Option.iter Utils.settings.fixed_state_for_init ~f:(fun seed -> Rand.Lib.init seed);
-  
+
   (* Handle padding: dims already includes padding, compute unpadded dimensions *)
-  let unpadded_dims, padding_info = match padding with
-    | None -> dims, None
+  let unpadded_dims, padding_info =
+    match padding with
+    | None -> (dims, None)
     | Some (pad_config, pad_value) ->
-        let unpadded_dims = Array.map2_exn dims pad_config ~f:(fun dim (left, right) -> 
-          dim - left - right) in
+        let unpadded_dims =
+          Array.map2_exn dims pad_config ~f:(fun dim (left, right) -> dim - left - right)
+        in
         (unpadded_dims, Some (pad_config, pad_value))
   in
-  
+
   let arr = create_bigarray_of_prec prec dims in
-  
+
   (* Fill with padding value if padding is specified *)
   (match padding_info with
-   | None -> ()
-   | Some (_, pad_value) ->
-       (* Fill the entire array with padding value using precision-specific fill *)
-       (match prec with
-        | Ops.Byte -> A.fill arr (Char.of_int_exn @@ Int.of_float pad_value)
-        | Ops.Uint16 -> A.fill arr (Int.of_float pad_value)
-        | Ops.Int32 -> A.fill arr (Int32.of_float pad_value)
-        | Ops.Half -> A.fill arr pad_value
-        | Ops.Bfloat16 -> A.fill arr (float_to_bfloat16 pad_value)
-        | Ops.Fp8 -> A.fill arr (Char.of_int_exn @@ float_to_fp8 pad_value)
-        | Ops.Single -> A.fill arr pad_value
-        | Ops.Double -> A.fill arr pad_value));
-  
+  | None -> ()
+  | Some (_, pad_value) -> (
+      (* Fill the entire array with padding value using precision-specific fill *)
+      match prec with
+      | Ops.Byte -> A.fill arr (Char.of_int_exn @@ Int.of_float pad_value)
+      | Ops.Uint16 -> A.fill arr (Int.of_float pad_value)
+      | Ops.Int32 -> A.fill arr (Int32.of_float pad_value)
+      | Ops.Half -> A.fill arr pad_value
+      | Ops.Bfloat16 -> A.fill arr (float_to_bfloat16 pad_value)
+      | Ops.Fp8 -> A.fill arr (Char.of_int_exn @@ float_to_fp8 pad_value)
+      | Ops.Single -> A.fill arr pad_value
+      | Ops.Double -> A.fill arr pad_value));
+
   (* Helper function to convert unpadded indices to padded indices *)
   let unpadded_to_padded_indices idcs =
     match padding_info with
     | None -> idcs
-    | Some (pad_config, _) ->
-        Array.map2_exn idcs pad_config ~f:(fun idx (left, _) -> idx + left)
+    | Some (pad_config, _) -> Array.map2_exn idcs pad_config ~f:(fun idx (left, _) -> idx + left)
   in
-  
+
   (* For non-constant fill operations, we need to iterate over unpadded dimensions *)
   let init_unpadded_region init_func =
     let rec loop_dims idcs dim_idx =
@@ -181,7 +182,7 @@ let create_bigarray (type ocaml elt_t) (prec : (ocaml, elt_t) Ops.precision) ~di
     in
     loop_dims (Array.create ~len:(Array.length unpadded_dims) 0) 0
   in
-  
+
   let constant_fill_f f values strict =
     let len = Array.length values in
     if strict then (
@@ -195,32 +196,32 @@ let create_bigarray (type ocaml elt_t) (prec : (ocaml, elt_t) Ops.precision) ~di
       init_unpadded_region (fun idcs -> f values.(indices_to_offset ~dims:unpadded_dims ~idcs)))
     else
       init_unpadded_region (fun idcs ->
-        f values.(indices_to_offset ~dims:unpadded_dims ~idcs % len))
+          f values.(indices_to_offset ~dims:unpadded_dims ~idcs % len))
   in
   let constant_fill_float values strict = constant_fill_f Fn.id values strict in
-  
+
   (match (prec, init_op) with
   | Ops.Byte, Constant_fill { values; strict } ->
       ignore (constant_fill_f (Fn.compose Char.of_int_exn Int.of_float) values strict)
   | Ops.Byte, Range_over_offsets ->
-      init_unpadded_region (fun idcs -> Char.of_int_exn @@ indices_to_offset ~dims:unpadded_dims ~idcs)
+      init_unpadded_region (fun idcs ->
+          Char.of_int_exn @@ indices_to_offset ~dims:unpadded_dims ~idcs)
   | Ops.Byte, Standard_uniform -> init_unpadded_region (fun _ -> Rand.Lib.char ())
-  | Ops.Uint16, Constant_fill { values; strict } -> 
+  | Ops.Uint16, Constant_fill { values; strict } ->
       ignore (constant_fill_f Int.of_float values strict)
   | Ops.Uint16, Range_over_offsets ->
       init_unpadded_region (fun idcs -> indices_to_offset ~dims:unpadded_dims ~idcs)
   | Ops.Uint16, Standard_uniform -> init_unpadded_region (fun _ -> Random.int 65536)
-  | Ops.Int32, Constant_fill { values; strict } -> 
+  | Ops.Int32, Constant_fill { values; strict } ->
       ignore (constant_fill_f Int32.of_float values strict)
   | Ops.Int32, Range_over_offsets ->
-      init_unpadded_region (fun idcs -> Int32.of_int_exn @@ indices_to_offset ~dims:unpadded_dims ~idcs)
-  | Ops.Int32, Standard_uniform ->
-      init_unpadded_region (fun _ -> Random.int32 Int32.max_value)
+      init_unpadded_region (fun idcs ->
+          Int32.of_int_exn @@ indices_to_offset ~dims:unpadded_dims ~idcs)
+  | Ops.Int32, Standard_uniform -> init_unpadded_region (fun _ -> Random.int32 Int32.max_value)
   | Ops.Half, Constant_fill { values; strict } -> ignore (constant_fill_float values strict)
   | Ops.Half, Range_over_offsets ->
       init_unpadded_region (fun idcs -> Float.of_int @@ indices_to_offset ~dims:unpadded_dims ~idcs)
-  | Ops.Half, Standard_uniform ->
-      init_unpadded_region (fun _ -> Rand.Lib.float_range 0.0 1.0)
+  | Ops.Half, Standard_uniform -> init_unpadded_region (fun _ -> Rand.Lib.float_range 0.0 1.0)
   | Ops.Bfloat16, Constant_fill { values; strict } ->
       ignore (constant_fill_f float_to_bfloat16 values strict)
   | Ops.Bfloat16, Range_over_offsets ->
@@ -232,23 +233,25 @@ let create_bigarray (type ocaml elt_t) (prec : (ocaml, elt_t) Ops.precision) ~di
       ignore (constant_fill_f (Fn.compose Char.of_int_exn float_to_fp8) values strict)
   | Ops.Fp8, Range_over_offsets ->
       init_unpadded_region (fun idcs ->
-          Char.of_int_exn @@ float_to_fp8 @@ Float.of_int @@ indices_to_offset ~dims:unpadded_dims ~idcs)
+          Char.of_int_exn @@ float_to_fp8 @@ Float.of_int
+          @@ indices_to_offset ~dims:unpadded_dims ~idcs)
   | Ops.Fp8, Standard_uniform ->
-      init_unpadded_region (fun _ -> Char.of_int_exn @@ float_to_fp8 @@ Rand.Lib.float_range 0.0 1.0)
+      init_unpadded_region (fun _ ->
+          Char.of_int_exn @@ float_to_fp8 @@ Rand.Lib.float_range 0.0 1.0)
   | Ops.Single, Constant_fill { values; strict } -> ignore (constant_fill_float values strict)
   | Ops.Single, Range_over_offsets ->
       init_unpadded_region (fun idcs -> Float.of_int @@ indices_to_offset ~dims:unpadded_dims ~idcs)
-  | Ops.Single, Standard_uniform ->
-      init_unpadded_region (fun _ -> Rand.Lib.float_range 0.0 1.0)
+  | Ops.Single, Standard_uniform -> init_unpadded_region (fun _ -> Rand.Lib.float_range 0.0 1.0)
   | Ops.Double, Constant_fill { values; strict } -> ignore (constant_fill_float values strict)
   | Ops.Double, Range_over_offsets ->
       init_unpadded_region (fun idcs -> Float.of_int @@ indices_to_offset ~dims:unpadded_dims ~idcs)
-  | Ops.Double, Standard_uniform ->
-      init_unpadded_region (fun _ -> Rand.Lib.float_range 0.0 1.0)
+  | Ops.Double, Standard_uniform -> init_unpadded_region (fun _ -> Rand.Lib.float_range 0.0 1.0)
   | _, File_mapped (filename, stored_prec) ->
       (* For file mapping, we don't support padding yet - require no padding *)
       if Option.is_some padding then
-        raise @@ Utils.User_error "Ndarray.create_bigarray: File_mapped initialization does not support padding";
+        raise
+        @@ Utils.User_error
+             "Ndarray.create_bigarray: File_mapped initialization does not support padding";
       (* See: https://github.com/janestreet/torch/blob/master/src/torch/dataset_helper.ml#L3 *)
       if not @@ Ops.equal_prec stored_prec (Ops.pack_prec prec) then
         raise
@@ -384,8 +387,7 @@ let reset_bigarray (init_op : Ops.init_op) (type o b) (prec : (o, b) Ops.precisi
   | Ops.Int32, Constant_fill { values; strict } -> constant_set_f Int32.of_float values strict
   | Ops.Int32, Range_over_offsets ->
       set_bigarray arr ~f:(fun idcs -> Int32.of_int_exn @@ indices_to_offset ~dims ~idcs)
-  | Ops.Int32, Standard_uniform ->
-      set_bigarray arr ~f:(fun _ -> Random.int32 Int32.max_value)
+  | Ops.Int32, Standard_uniform -> set_bigarray arr ~f:(fun _ -> Random.int32 Int32.max_value)
   | Ops.Half, Constant_fill { values; strict } -> constant_set_float values strict
   | Ops.Half, Range_over_offsets ->
       set_bigarray arr ~f:(fun idcs -> Float.of_int @@ indices_to_offset ~dims ~idcs)
@@ -558,8 +560,8 @@ let hash_t nd = Nativeint.hash @@ to_native nd
 
 let used_memory = Atomic.make 0
 
-let%track7_sexp create_array ~debug:(_debug : string) (prec : Ops.prec) ~(dims : int array)
-    ~padding init_op =
+let%track7_sexp create_array ~debug:(_debug : string) (prec : Ops.prec) ~(dims : int array) ~padding
+    init_op =
   (* dims already includes padding if padding is specified *)
   let size_in_bytes : int =
     (if Array.length dims = 0 then 0 else Array.reduce_exn dims ~f:( * )) * Ops.prec_in_bytes prec
File "arrayjit/lib/gcc_backend.ml", line 1, characters 0-0:
diff --git a/_build/default/arrayjit/lib/gcc_backend.ml b/_build/default/arrayjit/lib/.formatted/gcc_backend.ml
index 6bcb3b9..8d7a7ec 100644
--- a/_build/default/arrayjit/lib/gcc_backend.ml
+++ b/_build/default/arrayjit/lib/.formatted/gcc_backend.ml
@@ -233,10 +233,9 @@ let compile_main ~name ~log_functions ~env { ctx; nodes; get_ident; merge_node;
         | Iterator s -> Map.find_exn env s
         | Affine { symbols; offset } ->
             List.fold symbols ~init:(RValue.int ctx c_index offset) ~f:(fun acc (coeff, s) ->
-              RValue.binary_op ctx Plus c_index acc
-                (RValue.binary_op ctx Mult c_index 
-                  (RValue.int ctx c_index coeff) 
-                  (Map.find_exn env s))))
+                RValue.binary_op ctx Plus c_index acc
+                  (RValue.binary_op ctx Mult c_index (RValue.int ctx c_index coeff)
+                     (Map.find_exn env s))))
     with e ->
       Stdlib.Format.eprintf
         "exec_as_gccjit: missing index from@ %a@ among environment keys:@ %a\n%!" Sexp.pp_hum
@@ -359,10 +358,14 @@ let compile_main ~name ~log_functions ~env { ctx; nodes; get_ident; merge_node;
     | Embed_index (Fixed_idx i) -> (Int.to_string i, [])
     | Embed_index (Iterator s) -> (Indexing.symbol_ident s ^ "{=%d}", [ Map.find_exn env s ])
     | Embed_index (Affine { symbols; offset }) ->
-        let terms = List.map symbols ~f:(fun (coeff, s) ->
-          if coeff = 1 then Indexing.symbol_ident s
-          else Int.to_string coeff ^ "*" ^ Indexing.symbol_ident s) in
-        let expr = String.concat ~sep:"+" (terms @ if offset = 0 then [] else [Int.to_string offset]) in
+        let terms =
+          List.map symbols ~f:(fun (coeff, s) ->
+              if coeff = 1 then Indexing.symbol_ident s
+              else Int.to_string coeff ^ "*" ^ Indexing.symbol_ident s)
+        in
+        let expr =
+          String.concat ~sep:"+" (terms @ if offset = 0 then [] else [ Int.to_string offset ])
+        in
         (expr, [])
     | Binop (Arg1, v1, _v2) -> loop v1
     | Binop (Arg2, _v1, v2) -> loop v2
@@ -524,10 +527,9 @@ let compile_main ~name ~log_functions ~env { ctx; nodes; get_ident; merge_node;
           raise e)
     | Embed_index (Affine { symbols; offset }) ->
         List.fold symbols ~init:(RValue.int ctx num_typ offset) ~f:(fun acc (coeff, s) ->
-          RValue.binary_op ctx Plus num_typ acc
-            (RValue.binary_op ctx Mult num_typ 
-              (RValue.int ctx num_typ coeff) 
-              (RValue.cast ctx (Map.find_exn env s) num_typ)))
+            RValue.binary_op ctx Plus num_typ acc
+              (RValue.binary_op ctx Mult num_typ (RValue.int ctx num_typ coeff)
+                 (RValue.cast ctx (Map.find_exn env s) num_typ)))
     | Binop (Arg2, _, c2) -> loop c2
     | Binop (Arg1, c1, _) -> loop c1
     | Binop (op, c1, c2) -> loop_binop op ~num_typ prec ~v1:(loop c1) ~v2:(loop c2)
File "arrayjit/lib/low_level.ml", line 1, characters 0-0:
diff --git a/_build/default/arrayjit/lib/low_level.ml b/_build/default/arrayjit/lib/.formatted/low_level.ml
index 7e519f9..ea6ac75 100644
--- a/_build/default/arrayjit/lib/low_level.ml
+++ b/_build/default/arrayjit/lib/.formatted/low_level.ml
@@ -157,7 +157,7 @@ let visit_llc traced_store ~merge_node_id reverse_node_map ~max_visits llc =
       | Iterator s -> Option.value ~default:(* static index *) 0 @@ Map.find env s
       | Indexing.Affine { symbols; offset } ->
           List.fold symbols ~init:offset ~f:(fun acc (coeff, s) ->
-            acc + coeff * (Option.value ~default:0 @@ Map.find env s)))
+              acc + (coeff * (Option.value ~default:0 @@ Map.find env s))))
   in
   let rec loop_proc env llc =
     let loop = loop_proc env in
@@ -196,8 +196,8 @@ let visit_llc traced_store ~merge_node_id reverse_node_map ~max_visits llc =
               assert (Tn.equal old_tn tn)
           | Indexing.Affine { symbols; _ } ->
               List.iter symbols ~f:(fun (_, s) ->
-                let old_tn = Hashtbl.find_or_add reverse_node_map s ~default:(fun () -> tn) in
-                assert (Tn.equal old_tn tn)))
+                  let old_tn = Hashtbl.find_or_add reverse_node_map s ~default:(fun () -> tn) in
+                  assert (Tn.equal old_tn tn)))
     | Set_local (_, llv) -> loop_float env llv
     | Comment _ -> ()
     | Staged_compilation _ -> ()
@@ -279,11 +279,14 @@ let%diagn2_sexp check_and_store_virtual traced static_indices top_llc =
                function
                | Fixed_idx _ -> None
                | Iterator s -> Option.some_if (not @@ Set.mem static_indices s) s
-               | Affine { symbols; _ } ->
+               | Affine { symbols; _ } -> (
                    (* For affine indices, collect all symbols that are not static *)
                    List.filter_map symbols ~f:(fun (_, s) ->
-                     Option.some_if (not @@ Set.mem static_indices s) s)
-                   |> function [] -> None | [s] -> Some s | _ -> failwith "check_idcs: multiple non-static symbols in affine index")
+                       Option.some_if (not @@ Set.mem static_indices s) s)
+                   |> function
+                   | [] -> None
+                   | [ s ] -> Some s
+                   | _ -> failwith "check_idcs: multiple non-static symbols in affine index"))
     in
     let num_syms =
       Array.count indices ~f:(function Iterator s -> not @@ Set.mem static_indices s | _ -> false)
@@ -349,11 +352,13 @@ let%diagn2_sexp check_and_store_virtual traced static_indices top_llc =
           raise @@ Non_virtual 10)
     | Embed_index (Affine { symbols; _ }) ->
         List.iter symbols ~f:(fun (_, s) ->
-          if not @@ Set.mem env_dom s then (
-            if not (Set.mem static_indices s) then
-              [%log2
-                "Inlining candidate has an escaping variable", (s : Indexing.symbol), (top_llc : t)];
-            raise @@ Non_virtual 10))
+            if not @@ Set.mem env_dom s then (
+              if not (Set.mem static_indices s) then
+                [%log2
+                  "Inlining candidate has an escaping variable",
+                  (s : Indexing.symbol),
+                  (top_llc : t)];
+              raise @@ Non_virtual 10))
     | Ternop (_, llv1, llv2, llv3) ->
         loop_float ~env_dom llv1;
         loop_float ~env_dom llv2;
@@ -686,7 +691,7 @@ let simplify_llc llc =
     | Get_global _ -> llv
     | Embed_index (Fixed_idx i) -> Constant (Float.of_int i)
     | Embed_index (Iterator _) -> llv
-    | Embed_index (Affine _) -> llv  (* Cannot simplify affine expressions to constants *)
+    | Embed_index (Affine _) -> llv (* Cannot simplify affine expressions to constants *)
     | Binop (Arg1, llv1, _) -> loop_float llv1
     | Binop (Arg2, _, llv2) -> loop_float llv2
     | Binop (op, Constant c1, Constant c2) -> Constant (Ops.interpret_binop op c1 c2)
dune build @fmt failed
"/usr/bin/env" "bash" "-c" "opam exec -- dune build @fmt --ignore-promoted-rules || (echo "dune build @fmt failed"; exit 2)" failed with exit status 2
2025-06-13 17:16.02: Job failed: Failed: Build failed