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:48fa4a7216c3973bb95572cf5dca98cbbcefe90f288f552e7ac70a8ccd438aa7ocamlformat 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 d128673bcat > Dockerfile <<'END-OF-DOCKERFILE'FROM ocaml/opam:debian-12-ocaml-4.08@sha256:48fa4a7216c3973bb95572cf5dca98cbbcefe90f288f552e7ac70a8ccd438aa7USER 1000:1000RUN 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 -uRUN opam depext -i duneWORKDIR /srcRUN opam depext -i ocamlformat=0.27.0COPY --chown=1000:1000 . /src/RUN opam exec -- dune build @fmt --ignore-promoted-rules || (echo "dune build @fmt failed"; exit 2)END-OF-DOCKERFILEdocker build .END-REPRO-BLOCK2025-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 OCluster2025-06-14 11:14.19: Waiting for worker…2025-06-14 11:14.19: Got resource from pool OClusterBuilding on odawa.caelum.ci.devHEAD 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_HEAD0d013e603b..c7269f729a master -> origin/master0eea63ad71 Merge pull request #27946 from mtelvers/opam-publish-ocaml-version.4.0.1<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>[default] Initialiseddefault (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 environment2025-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 packagesThe 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.0Done.# Run eval $(opam env) to update the current shell environment2025-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 packagesThe 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.0Done.<><> 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 environment2025-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/testFile "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/testFile "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.mlindex 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 dolet idx = [| i; j |] inlet value = Ndarray.get_as_float arr idx in- Stdio.printf "%8.1f " value;+ Stdio.printf "%8.1f " valuedone;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.mliindex 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, areinferred 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 -> stringval 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.mlindex 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 inlet 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 inArray.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 }inlet lhs_idcs = Array.map projections.project_lhs ~f:subst_index inFile "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.mlindex 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 idlet label a = String.concat ~sep:"_" a.labellet 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 thenSome- (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 =lazyFile "lib/tensor.ml", line 1, characters 0-0:diff --git a/_build/default/lib/tensor.ml b/_build/default/lib/.formatted/tensor.mlindex 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)inlet grad_id = session_state.next_id insession_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+ inlet is_bck_root ti = Map.mem session_state.backprop_roots ti.id inlet 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 inlet debug = "Temporary array for pretty-printing" inlet 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 })inlet ( ! ) = List.length inlet 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 inlet 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^ " "inlet 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+ inlet num_batch_axes = List.length sh.batch.dims inlet num_input_axes = List.length sh.input.dims inlet num_output_axes = List.length sh.output.dims inFile "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.mlindex 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) ~diinloop_dims (Array.create ~len:(Array.length unpadded_dims) 0) 0in-+let constant_fill_f f values strict =let len = Array.length values inif strict then (@@ -195,32 +196,32 @@ let create_bigarray (type ocaml elt_t) (prec : (ocaml, elt_t) Ops.precision) ~diinit_unpadded_region (fun idcs -> f values.(indices_to_offset ~dims:unpadded_dims ~idcs)))elseinit_unpadded_region (fun idcs ->- f values.(indices_to_offset ~dims:unpadded_dims ~idcs % len))+ f values.(indices_to_offset ~dims:unpadded_dims ~idcs % len))inlet 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) ~diignore (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) thenraise@@ -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 ndlet 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 precFile "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.mlindex 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.mlindex 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))))inlet 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"))inlet 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.mlindex 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 22025-06-14 11:14.21: Job failed: Failed: Build failed