Organisationsahrefsocannld12867 ()(lint-fmt)

(lint-fmt)

Link Copied
Code Copied

Logs

2025-06-14 11:14.19: New job: test ahrefs/ocannl https://github.com/ahrefs/ocannl.git#refs/heads/master (d128673bca20bf5b3d678948b169dc4ee1ec3018) (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 d128673b
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-14 11:14.19: 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-14 11:14.19: 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-14 11:14.19: Waiting for resource in pool OCluster
2025-06-14 11:14.19: Waiting for worker…
2025-06-14 11:14.19: Got resource from pool OCluster
Building on odawa.caelum.ci.dev
HEAD is now at 94b96170 This upsets the design where assignments are available immediately, while shape inference and precision refinement can continue till an actual compilation request.
HEAD is now at d128673b Small cleanups -- e.g. give up on a TODO file


(from ocaml/opam:debian-12-ocaml-4.08@sha256:48fa4a7216c3973bb95572cf5dca98cbbcefe90f288f552e7ac70a8ccd438aa7)
2025-06-14 11:14.20 ---> 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-14 11:14.20 ---> using "96cf7cb4f290bdde63e0891300660f309335b98ec063b9c2de517b6b08952aac" from cache


/: (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-14 11:14.20 ---> using "89c0585fea6e0efe18837c1dd4fe4772483d123bc62d2e4be11e9db74e5475f0" from cache


/: (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-14 11:14.20 ---> using "3806f45ef51bb70dc27c6783fa556ac6054f53765f6f6e5d7f0761003690b07c" from cache


/src: (copy (src .) (dst /src/))
2025-06-14 11:14.20 ---> saved as "5aa167af9acf8b53204eb60b36de50528f904b0e254c66dc26feea48c61da5c9"


/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)
File "lib/row.ml", line 1, characters 0-0:
diff --git a/_build/default/lib/row.ml b/_build/default/lib/.formatted/row.ml
index f90a476..4bd709e 100644
--- a/_build/default/lib/row.ml
+++ b/_build/default/lib/.formatted/row.ml
@@ -1588,11 +1588,7 @@ let%debug5_sexp eliminate_variables (env : environment) ({ dims; bcast; id } as
| Some (Bounds_row { constr = Total_elems _; _ }) -> assert false
| _ -> elim_var :: elim_dims)


-let empty_env =
-  {
-    dim_env = Map.empty (module Dim_var);
-    row_env = Map.empty (module Row_var);
-  }
+let empty_env = { dim_env = Map.empty (module Dim_var); row_env = Map.empty (module Row_var) }


let%debug4_sexp solve_inequalities ~(stage : stage) (ineqs : constraint_ list) (env : environment) :
constraint_ list * environment =
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-14 11:14.21: Job failed: Failed: Build failed