2025-06-17 18:25.52: New job: test ahrefs/ocannl https://github.com/ahrefs/ocannl.git#refs/heads/master (d8187fceb937314865f544477433be3febb0ee0a) (linux-x86_64:(lint-fmt))Base: ocaml/opam:debian-12-ocaml-4.08@sha256:cc4b148b1fa1916574df02fcec0956fedbec6798bedacd9bfd4417c1c098ce8eocamlformat 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 d8187fcecat > Dockerfile <<'END-OF-DOCKERFILE'FROM ocaml/opam:debian-12-ocaml-4.08@sha256:cc4b148b1fa1916574df02fcec0956fedbec6798bedacd9bfd4417c1c098ce8eUSER 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-17 18:25.52: Using cache hint "ahrefs/ocannl-ocaml/opam:debian-12-ocaml-4.08@sha256:cc4b148b1fa1916574df02fcec0956fedbec6798bedacd9bfd4417c1c098ce8e-debian-12-4.08_opam-2.3-ocamlformat-0eea63ad71af2b1116c556023bedc6bf083e6125"2025-06-17 18:25.52: Using OBuilder spec:((from ocaml/opam:debian-12-ocaml-4.08@sha256:cc4b148b1fa1916574df02fcec0956fedbec6798bedacd9bfd4417c1c098ce8e)(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-17 18:25.52: Waiting for resource in pool OCluster2025-06-17 18:58.27: Waiting for worker…2025-06-17 19:00.53: Got resource from pool OClusterBuilding on asteria.caelum.ci.devAll commits already cachedHEAD is now at d8187fce A step away from the expect-test framework(from ocaml/opam:debian-12-ocaml-4.08@sha256:cc4b148b1fa1916574df02fcec0956fedbec6798bedacd9bfd4417c1c098ce8e)2025-06-17 19:00.53 ---> using "4ea5038d254cfd14663698deb665a2dc4ce1e1383d544c063adebb02ed15ce16" 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"))0eea63ad71 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-17 19:01.51 ---> saved as "ed14c208b709d50e26e290f8f669e0b0b6a2456751ee5b87b29d71221f0a9fc1"/: (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.1<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><>[dune.3.19.1] found in cache<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>-> installed dune.3.19.1Done.# Run eval $(opam env) to update the current shell environment2025-06-17 19:02.34 ---> saved as "249f8284e2625ce869f4c794eb6ff1eab40d82e0af762bb312d97ad81bf8d4f1"/: (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 dune-build-info 3.19.1 [required by ocamlformat-lib]- 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 menhir 20240715 [required by ocamlformat-lib]- install dune-configurator 3.19.1 [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[base.v0.14.3] 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.1] found in cache[dune-configurator.3.19.1] found in cache[either.1.0.0] found in cache[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] found in cache[ocamlformat-lib.0.27.0] found in cache[ocp-indent.1.8.1] found in cache[re.1.11.0] found in cache[sexplib0.v0.14.0] found in cache[stdio.v0.14.0] found in cache[topkg.1.0.8] found in cache[uucp.15.0.0] found in cache[uuseg.15.0.0] found in cache[uutf.1.0.4] found in cache<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>-> installed seq.base-> installed camlp-streams.5.0.1-> installed cmdliner.1.3.0-> installed csexp.1.5.2-> installed either.1.0.0-> installed fix.20250428-> installed menhirCST.20240715-> installed menhirLib.20240715-> installed menhirSdk.20240715-> installed ocaml-version.4.0.1-> installed sexplib0.v0.14.0-> installed re.1.11.0-> installed dune-build-info.3.19.1-> installed ocamlfind.1.9.8-> installed base-bytes.base-> installed dune-configurator.3.19.1-> installed ocamlbuild.0.16.1-> installed ocp-indent.1.8.1-> installed topkg.1.0.8-> installed base.v0.14.3-> installed astring.0.8.5-> installed uutf.1.0.4-> installed stdio.v0.14.0-> installed fpath.0.7.3-> installed menhir.20240715-> 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-17 19:03.33 ---> saved as "7fd5d4ac1bb4f93065934b08bd6aad3989793fd62a884f257d9f7ac1e147ec1a"/src: (copy (src .) (dst /src/))2025-06-17 19:03.34 ---> saved as "2b56ac57174ae623c67eaa081caed802393cb2795bba3b74ba3e202436e18127"/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 7a25434..92fcbca 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 = [| { Ndarray.left = 1; right = 1 }; { left = 2; right = 1 } |] in (* left=1,right=1 for first dim; left=2,right=1 for second dim *)+ let padding_config = [| { Ndarray.left = 1; right = 1 }; { left = 2; right = 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 "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 93c8f75..0a7293b 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 "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 e7c81cb..39b9190 100644--- a/_build/default/arrayjit/lib/ndarray.ml+++ b/_build/default/arrayjit/lib/.formatted/ndarray.ml@@ -130,48 +130,48 @@ let indices_to_offset ~dims ~idcs =Array.fold2_exn dims idcs ~init:0 ~f:(fun accu dim idx -> (accu * dim) + idx)(** {2 *** Initialization ***} *)--type axis_padding = { left : int; right : int }-[@@deriving sexp, equal]++type axis_padding = { left : int; right : int } [@@deriving sexp, equal]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 =@@ -186,7 +186,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 (@@ -200,32 +200,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 ->@@ -237,23 +237,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@@ -389,8 +391,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)@@ -563,8 +564,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)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-17 19:03.35: Job failed: Failed: Build failed