Organisationsahrefsocannl6c8c8d ()(lint-fmt)

(lint-fmt)

Link Copied
Code Copied

Logs

2025-09-03 11:56.13: New job: test ahrefs/ocannl https://github.com/ahrefs/ocannl.git#refs/heads/master (6c8c8df0863c02adcf90abc50c89aee75cf4d8b5) (linux-x86_64:(lint-fmt))
Base: ocaml/opam:debian-12-ocaml-4.08@sha256:1f8f583356b37c1cbcde061de13bfdb1a8963b80127e721c7ca17f4e884e669d
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 6c8c8df0
cat > Dockerfile <<'END-OF-DOCKERFILE'
FROM ocaml/opam:debian-12-ocaml-4.08@sha256:1f8f583356b37c1cbcde061de13bfdb1a8963b80127e721c7ca17f4e884e669d
USER 1000:1000
RUN cd ~/opam-repository && (git cat-file -e b8021439f8c57ba6435bc2263f6596671f4f4466 || git fetch origin master) && git reset -q --hard b8021439f8c57ba6435bc2263f6596671f4f4466 && 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-09-03 11:56.13: Using cache hint "ahrefs/ocannl-ocaml/opam:debian-12-ocaml-4.08@sha256:1f8f583356b37c1cbcde061de13bfdb1a8963b80127e721c7ca17f4e884e669d-debian-12-4.08_opam-2.4-ocamlformat-b8021439f8c57ba6435bc2263f6596671f4f4466"
2025-09-03 11:56.13: Using OBuilder spec:
((from ocaml/opam:debian-12-ocaml-4.08@sha256:1f8f583356b37c1cbcde061de13bfdb1a8963b80127e721c7ca17f4e884e669d)
(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 b8021439f8c57ba6435bc2263f6596671f4f4466 || git fetch origin master) && git reset -q --hard b8021439f8c57ba6435bc2263f6596671f4f4466 && 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-09-03 11:56.13: Waiting for resource in pool OCluster
2025-09-03 11:56.13: Waiting for worker…
2025-09-03 11:59.48: Got resource from pool OCluster
Building on doris.caelum.ci.dev
All commits already cached
HEAD is now at 6c8c8df0 Implement shape equality constraints with set_dim and set_equal


(from ocaml/opam:debian-12-ocaml-4.08@sha256:1f8f583356b37c1cbcde061de13bfdb1a8963b80127e721c7ca17f4e884e669d)
2025-09-03 11:59.50 ---> using "b69d5f1106f8a1cfb35e904f37f2ccc38216aa61a22ee32dd7c324a91608cf44" 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 b8021439f8c57ba6435bc2263f6596671f4f4466 || git fetch origin master) && git reset -q --hard b8021439f8c57ba6435bc2263f6596671f4f4466 && git log --no-decorate -n1 --oneline && opam update -u"))
b8021439f8 Merge pull request #28261 from kit-ty-kate/deploy-fix-25819


<><> 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-09-03 11:59.50 ---> using "1be76adbf83434462493f6d60d3a403af1e722bb13c1f26df1ed667dd3ad008c" 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.20.0


<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
[dune.3.20.0] found in cache


<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
-> installed dune.3.20.0
Done.
# Run eval $(opam env) to update the current shell environment
2025-09-03 11:59.50 ---> using "76384e7e1078506ef4c7e0c049f9a49f543e9fdc75f2cd2f57b1b769d15b1cc0" 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 menhirLib         20240715 [required by ocamlformat-lib]
- install menhirCST         20240715 [required by menhir]
- install ocamlbuild        0.16.1   [required by fpath, astring, uuseg]
- install cmdliner          1.3.0    [required by ocamlformat]
- install menhirSdk         20240715 [required by ocamlformat-lib]
- install either            1.0.0    [required by ocamlformat-lib]
- install dune-build-info   3.20.0   [required by ocamlformat-lib]
- install csexp             1.5.2    [required by ocamlformat]
- install camlp-streams     5.0.1    [required by ocamlformat-lib]
- install seq               base     [required by re]
- install fix               20250428 [required by ocamlformat-lib]
- install ocaml-version     4.0.1    [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.20.0   [required by base]
- install re                1.11.0   [required by ocamlformat]
- install topkg             1.1.0    [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.20.0] found in cache
[dune-configurator.3.20.0] 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.1.0] 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 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.20.0
-> installed dune-configurator.3.20.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.1.0
-> 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-09-03 11:59.50 ---> using "ee5f36fa10328bf844b6feeab861ac0336aa35be5e288d81331a0c9c26b8859a" from cache


/src: (copy (src .) (dst /src/))
2025-09-03 11:59.51 ---> saved as "9f4caabae1a8ee7552f208a59a4bd9f714fd44ad9127cc28c4e22693fccf8575"


/src: (run (shell "opam exec -- dune build @fmt --ignore-promoted-rules || (echo \"dune build @fmt failed\"; exit 2)"))
File "test/ppx/test_ppx_op.ml", line 1, characters 0-0:
diff --git a/_build/default/test/ppx/test_ppx_op.ml b/_build/default/test/ppx/.formatted/test_ppx_op.ml
index 6683528..78bcf88 100644
--- a/_build/default/test/ppx/test_ppx_op.ml
+++ b/_build/default/test/ppx/.formatted/test_ppx_op.ml
@@ -28,11 +28,11 @@ let%op _use_layer =
fun x -> l1 (l2 x)


let%op _config_layer ~label () =
-let l = mlp_layer ~label:(label @ [ "L" ]) ~hid_dim:3 () in
-fun x -> l x
+  let l = mlp_layer ~label:(label @ [ "L" ]) ~hid_dim:3 () in
+  fun x -> l x


let%op _three_layer_perceptron ~label ~dim1 ~dim2 ~dim3 () =
-let l1 = mlp_layer ~label:(label @ [ "L1" ]) ~hid_dim:dim1 () in
-let l2 = mlp_layer ~label:(label @ [ "L2" ]) ~hid_dim:dim2 () in
-let l3 = mlp_layer ~label:(label @ [ "L3" ]) ~hid_dim:dim3 () in
-fun x -> l3 (l2 (l1 x))
+  let l1 = mlp_layer ~label:(label @ [ "L1" ]) ~hid_dim:dim1 () in
+  let l2 = mlp_layer ~label:(label @ [ "L2" ]) ~hid_dim:dim2 () in
+  let l3 = mlp_layer ~label:(label @ [ "L3" ]) ~hid_dim:dim3 () in
+  fun x -> l3 (l2 (l1 x))
File "test/operations/test_einsum_capture.ml", line 1, characters 0-0:
diff --git a/_build/default/test/operations/test_einsum_capture.ml b/_build/default/test/operations/.formatted/test_einsum_capture.ml
index 5f77b8e..f02bf57 100644
--- a/_build/default/test/operations/test_einsum_capture.ml
+++ b/_build/default/test/operations/.formatted/test_einsum_capture.ml
@@ -263,24 +263,26 @@ let capture_for_shape_inference () =
Stdio.printf "\n=== Testing pure shape inference with equality constraints ===\n";


(* Test 1: Pure matrix multiply with constraint-driven shape inference *)
-  let%op m1 = { m1 = uniform1 () } in  (* No shape specified *)
-  let%op m2 = { m2 = uniform1 () } in  (* No shape specified *)
+  let%op m1 = { m1 = uniform1 () } in
+  (* No shape specified *)
+  let%op m2 = { m2 = uniform1 () } in
+  (* No shape specified *)
let%op result1 = m1 *+ "ij;jk=>ik" [ "i"; "j"; "k" ] m2 in
-
+
(* Set constraints to drive shape inference *)
let i_size = Shape.get_variable_ref "i_size" in
let j_size = Shape.get_variable_ref "j_size" in
let k_size = Shape.get_variable_ref "k_size" in
-
+
Shape.set_dim i_size 3;
-  Shape.set_dim j_size 4;
+  Shape.set_dim j_size 4;
Shape.set_dim k_size 5;
Shape.set_equal i i_size;
Shape.set_equal j j_size;
Shape.set_equal k k_size;
-
+
let ctx = Train.forward_once (module Backend) result1 in
-
+
Stdio.printf "Test 1 - Matrix multiply with constraint-driven shapes:\n";
Stdio.printf "  m1 inferred shape: %s\n" (Shape.to_string_hum m1.shape);
Stdio.printf "  m2 inferred shape: %s\n" (Shape.to_string_hum m2.shape);
@@ -289,28 +291,32 @@ let capture_for_shape_inference () =
(match i.var_ref.solved_dim with Some d -> Int.to_string d | None -> "?")
(match j.var_ref.solved_dim with Some d -> Int.to_string d | None -> "?")
(match k.var_ref.solved_dim with Some d -> Int.to_string d | None -> "?");
-
+
(* Test 2: Chain of operations with constraint propagation *)
-  let%op base = { base = uniform1 () } in  (* No shape specified *)
+  let%op base = { base = uniform1 () } in
+  (* No shape specified *)
let%op transposed = base ++ "ab=>ba" [ "a"; "b" ] in
-  let%op multiplied = { mult_input = uniform1 () } in  (* No shape specified *)
+  let%op multiplied = { mult_input = uniform1 () } in
+  (* No shape specified *)
let%op final = transposed *+ "ba;bc=>ac" [ "a"; "b"; "c" ] multiplied in
-
+
(* Set dimensions directly on the captured variables *)
let base_height = Shape.get_variable_ref "base_height" in
let base_width = Shape.get_variable_ref "base_width" in
let mult_depth = Shape.get_variable_ref "mult_depth" in
-
+
Shape.set_dim base_height 6;
Shape.set_dim base_width 8;
Shape.set_dim mult_depth 10;
-
-  Shape.set_equal a base_height;  (* This should propagate through the chain *)
-  Shape.set_equal b base_width;   (* This should propagate through the chain *)
+
+  Shape.set_equal a base_height;
+  (* This should propagate through the chain *)
+  Shape.set_equal b base_width;
+  (* This should propagate through the chain *)
Shape.set_equal c mult_depth;
-
+
let ctx = Train.forward_once (module Backend) ~ctx final in
-
+
Stdio.printf "\nTest 2 - Chain operations with constraint propagation:\n";
Stdio.printf "  base inferred shape: %s\n" (Shape.to_string_hum base.shape);
Stdio.printf "  transposed inferred shape: %s\n" (Shape.to_string_hum transposed.shape);
@@ -320,27 +326,29 @@ let capture_for_shape_inference () =
(match a.var_ref.solved_dim with Some d -> Int.to_string d | None -> "?")
(match b.var_ref.solved_dim with Some d -> Int.to_string d | None -> "?")
(match c.var_ref.solved_dim with Some d -> Int.to_string d | None -> "?");
-
+
(* Test 3: Simple 3-tensor einsum with pure inference *)
-  let%op tensor1 = { tensor1 = uniform1 () } in  (* No shape specified *)
-  let%op tensor2 = { tensor2 = uniform1 () } in  (* No shape specified *)
+  let%op tensor1 = { tensor1 = uniform1 () } in
+  (* No shape specified *)
+  let%op tensor2 = { tensor2 = uniform1 () } in
+  (* No shape specified *)
let%op result3 = tensor1 *+ "xy;yz=>xz" [ "x"; "y"; "z" ] tensor2 in
-
+
(* Set up constraints for shape inference *)
let x_size = Shape.get_variable_ref "x_size" in
let y_size = Shape.get_variable_ref "y_size" in
let z_size = Shape.get_variable_ref "z_size" in
-
+
Shape.set_dim x_size 7;
Shape.set_dim y_size 8;
Shape.set_dim z_size 9;
-
+
Shape.set_equal x x_size;
Shape.set_equal y y_size;
Shape.set_equal z z_size;
-
+
let ctx = Train.forward_once (module Backend) ~ctx result3 in
-
+
Stdio.printf "\nTest 3 - Simple 3-tensor einsum with pure inference:\n";
Stdio.printf "  tensor1 inferred shape: %s\n" (Shape.to_string_hum tensor1.shape);
Stdio.printf "  tensor2 inferred shape: %s\n" (Shape.to_string_hum tensor2.shape);
@@ -349,33 +357,36 @@ let capture_for_shape_inference () =
(match x.var_ref.solved_dim with Some d -> Int.to_string d | None -> "?")
(match y.var_ref.solved_dim with Some d -> Int.to_string d | None -> "?")
(match z.var_ref.solved_dim with Some d -> Int.to_string d | None -> "?");
-
+
(* Test 4: Complex inference with mixed constraints *)
-  let%op complex1 = { complex1 = uniform1 () } in  (* No shape specified *)
-  let%op complex2 = { complex2 = uniform1 () } in  (* No shape specified *)
+  let%op complex1 = { complex1 = uniform1 () } in
+  (* No shape specified *)
+  let%op complex2 = { complex2 = uniform1 () } in
+  (* No shape specified *)
let%op complex_result = complex1 *+ "pqr;rst=>pqst" [ "p"; "q"; "r"; "s"; "t" ] complex2 in
-
+
(* Set up interdependent constraints *)
let size_constraint = Shape.get_variable_ref "size_constraint" in
Shape.set_dim size_constraint 4;
-
+
(* Make p = t = size_constraint, and q = s *)
Shape.set_equal p size_constraint;
-  Shape.set_equal t size_constraint;
+  Shape.set_equal t size_constraint;
Shape.set_equal q s;
-
+
(* Set r to specific value *)
let r_size = Shape.get_variable_ref "r_size" in
Shape.set_dim r_size 6;
Shape.set_equal r r_size;
-
+
(* Set q to a different specific value *)
let q_size = Shape.get_variable_ref "q_size" in
Shape.set_dim q_size 5;
-  Shape.set_equal q q_size;  (* This will also constrain s=5 due to q=s *)
-
+  Shape.set_equal q q_size;
+
+  (* This will also constrain s=5 due to q=s *)
let _ctx = Train.forward_once (module Backend) ~ctx complex_result in
-
+
Stdio.printf "\nTest 4 - Complex interdependent constraints:\n";
Stdio.printf "  complex1 inferred shape: %s\n" (Shape.to_string_hum complex1.shape);
Stdio.printf "  complex2 inferred shape: %s\n" (Shape.to_string_hum complex2.shape);
@@ -387,7 +398,7 @@ let capture_for_shape_inference () =
(match s.var_ref.solved_dim with Some d -> Int.to_string d | None -> "?")
(match t.var_ref.solved_dim with Some d -> Int.to_string d | None -> "?");
Stdio.printf "  Expected: p=4, q=5, r=6, s=5, t=4 (with q=s and p=t constraints satisfied)\n";
-
+
Stdio.printf "=== Pure shape inference tests completed ===\n"


let () =
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-09-03 11:59.53: Job failed: Failed: Build failed