From c61e51dd0b7eb05ef3d173a90aed7c6e969dbef1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Bobot?= <francois.bobot@cea.fr> Date: Fri, 17 Mar 2023 17:23:45 +0100 Subject: [PATCH] [interpretation] c'est l'heure de gouter. --- src/interpretation.ml | 86 ++-- tests/interpretation_dataset.t | 811 +++++++++++++++++++++++++++++---- 2 files changed, 777 insertions(+), 120 deletions(-) diff --git a/src/interpretation.ml b/src/interpretation.ml index a4d0337..5db1a81 100644 --- a/src/interpretation.ml +++ b/src/interpretation.ml @@ -29,12 +29,13 @@ type dataset = DS_csv of Csv.t [@printer fun fmt _ -> Fmt.pf fmt "<csv>"] type classifier = string [@@deriving show] type data = D_csv of string list [@@deriving show] +type index = I_csv of int [@@deriving show] type caisar_op = | Classifier of classifier | Dataset of dataset | Data of data - | Index of int + | Index of index | Tensor of int [@@deriving show] @@ -44,13 +45,13 @@ type caisar_env = { cwd : string; } -let ls_of_caisar_op engine op ty = +let ls_of_caisar_op engine op ty_args ty = let caisar_env = CRE.user_env engine in Fmt.pr "ls_of_caisar_op: %a@." pp_caisar_op op; Option.iter ty ~f:(Fmt.pr "ty: %a@." Pretty.print_ty); Hashtbl.find_or_add caisar_env.ls_of_caisar_op op ~default:(fun () -> let id = Ident.id_fresh "caisar_op" in - let ls = Term.create_lsymbol id [] ty in + let ls = Term.create_lsymbol id ty_args ty in Fmt.pr "ls: %a@." Pretty.print_ls ls; Hashtbl.Poly.add_exn caisar_env.ls_of_caisar_op ~key:op ~data:ls; Term.Hls.add caisar_env.caisar_op_of_ls ls op; @@ -60,8 +61,9 @@ let caisar_op_of_ls engine ls = let caisar_env = CRE.user_env engine in Term.Hls.find caisar_env.caisar_op_of_ls ls -let term_of_caisar_op engine op ty = - Term.t_app_infer (ls_of_caisar_op engine op ty) [] +let term_of_caisar_op ?(args = []) engine op ty = + let t_args, ty_args = List.unzip args in + Term.t_app_infer (ls_of_caisar_op engine op ty_args ty) t_args let caisar_env _env cwd = { @@ -108,7 +110,7 @@ let builtin_caisar : caisar_env CRE.built_in_theories list = Term.t_int_const (BigInt.of_int (Int.of_string label)) ) in Term (Term.t_tuple [ t_features; t_label ]) - | Data _ | Classifier _ | Var _ | Index _ -> assert false) + | Data _ | Classifier _ | Tensor _ | Index _ -> assert false) | [ Term ({ t_node = Tapp _; _ } as t1); Term ({ t_node = Tvar _; _ } as t2); ] -> @@ -125,7 +127,30 @@ let builtin_caisar : caisar_env CRE.built_in_theories list = | [ Term { t_node = Tapp (ls, []); _ } ] -> ( match caisar_op_of_ls engine ls with | Dataset (DS_csv csv) -> Int (BigInt.of_int (Csv.lines csv)) - | Data _ | Classifier _ | Var _ | Index _ -> assert false) + | Data _ | Classifier _ | Tensor _ | Index _ -> assert false) + | _ -> invalid_arg (error_message ls) + in + + (* Tensor *) + let tget : _ CRE.builtin = + fun engine ls vl ty -> + Fmt.pr "--@.hash_get: ls:%a , ty:%a@." Pretty.print_ls ls + Fmt.(option ~none:nop Pretty.print_ty) + ty; + match vl with + | [ + Term ({ t_node = Tapp (lsapp1, lsapp1_args); _ } as t1); + Term ({ t_node = Tapp (lsapp2, _); _ } as t2); + ] -> ( + Fmt.pr "Terms: %a , %a@." Pretty.print_term t1 Pretty.print_term t2; + match (caisar_op_of_ls engine lsapp1, caisar_op_of_ls engine lsapp2) with + | Tensor n1, Index (I_csv i1) -> + assert (i1 <= n1); + Term (List.nth_exn lsapp1_args i1) + | _ -> assert false) + | [ Term t1; Term t2 ] -> + Fmt.pr "Terms: %a , %a@." Pretty.print_term t1 Pretty.print_term t2; + Term (Term.t_app_infer ls [ t1; t2 ]) | _ -> invalid_arg (error_message ls) in @@ -188,6 +213,7 @@ let builtin_caisar : caisar_env CRE.built_in_theories list = "Vector", [], [ (Ident.op_get "" (* ([]) *), None, vget); ("length", None, length) ] ); + ([ "interpretation" ], "Tensor", [], [ (Ident.op_infix "#", None, tget) ]); ( [ "interpretation" ], "Classifier", [], @@ -212,24 +238,24 @@ let bounded_quant engine vs ~cond : CRE.bounded_quant_result option = if not (Term.vs_equal vs vs2) then None else + let n = + match caisar_op_of_ls engine ls with + | Data (D_csv d) -> List.length d + | _ -> assert false + in + let ty = + match vs.vs_ty with + | { ty_node = Tyapp (_, ty :: _); _ } -> ty + | _ -> assert false + in let new_quant = - let n = - match caisar_op_of_ls engine ls with - | Data (D_csv d) -> List.length d - | _ -> assert false - in - let ty = - match vs.vs_ty with - | { ty_node = Tyapp (_, ty :: _); _ } -> ty - | _ -> assert false - in - (* Fmt.pr "TY: %a@." Pretty.print_ty ty; *) - List.init n ~f:(fun i -> - let preid = Ident.id_fresh (Fmt.str "caisar_es%i" i) in + List.init n ~f:(fun _ -> + let preid = Ident.id_fresh "caisar_es" in Term.create_vsymbol preid ty) in + let args = List.map new_quant ~f:(fun vs -> (Term.t_var vs, ty)) in let substitutions = - [ term_of_caisar_op engine (Tensor new_quant) (Some vs.vs_ty) ] + [ term_of_caisar_op ~args engine (Tensor n) (Some vs.vs_ty) ] in Some { new_quant; substitutions } | Tapp @@ -243,26 +269,14 @@ let bounded_quant engine vs ~cond : CRE.bounded_quant_result option = else let n = match caisar_op_of_ls engine ls with - | Var d -> List.length d + | Tensor d -> d | _ -> assert false | exception _ -> 5 in - let new_quant = - [] - (* let ty = *) - (* match vs.vs_ty with *) - (* | { ty_node = Tyapp (_, ty :: _); _ } -> ty *) - (* | _ -> assert false *) - (* in *) - (* (\* Fmt.pr "TY: %a@." Pretty.print_ty ty; *\) *) - (* List.init n ~f:(fun i -> *) - (* let preid = Ident.id_fresh (Fmt.str "caisar_vi%i" i) in *) - (* Term.create_vsymbol preid ty) *) - in - (* let substitutions = List.map new_quant ~f:Term.t_var in *) + let new_quant = [] in let substitutions = List.init n ~f:(fun i -> - term_of_caisar_op engine (Index i) (Some vs.vs_ty)) + term_of_caisar_op engine (Index (I_csv i)) (Some vs.vs_ty)) in Some { new_quant; substitutions } | _ -> None diff --git a/tests/interpretation_dataset.t b/tests/interpretation_dataset.t index 4bcaabe..4b0ea58 100644 --- a/tests/interpretation_dataset.t +++ b/tests/interpretation_dataset.t @@ -65,6 +65,64 @@ Test interpret on dataset int) ls: caisar_op1 -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image , v + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image , v + -- + valid_index: perturbed_image - y2 v1 + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 4)) + ty: vector + int + ls: caisar_op2 + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 3)) + ty: vector + int + ls: caisar_op3 + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 2)) + ty: vector + int + ls: caisar_op4 + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 1)) + ty: vector + int + ls: caisar_op5 + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 0)) + ty: vector + int + ls: caisar_op6 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image - y2 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image - y2 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image - y2 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image - y2 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image - y2 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image - y2 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image - y2 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image - y2 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image - y2 , caisar_op6 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image - y2 , caisar_op6 + -- apply_classifier: ls:(@@) , ty:vector t Terms: y0 , perturbed_image @@ -107,6 +165,42 @@ Test interpret on dataset vget: ls:([]) , ty:t Terms: y0 @@ perturbed_image , 2 -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image1 , v2 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image1 , v2 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image1 - y21 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image1 - y21 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image1 - y21 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image1 - y21 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image1 - y21 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image1 - y21 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image1 - y21 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image1 - y21 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image1 - y21 , caisar_op6 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image1 - y21 , caisar_op6 + -- apply_classifier: ls:(@@) , ty:vector t Terms: caisar_op , perturbed_image1 @@ -149,6 +243,42 @@ Test interpret on dataset vget: ls:([]) , ty:t Terms: caisar_op @@ perturbed_image1 , y31 -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image2 , v3 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image2 , v3 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image2 - y22 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image2 - y22 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image2 - y22 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image2 - y22 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image2 - y22 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image2 - y22 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image2 - y22 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image2 - y22 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image2 - y22 , caisar_op6 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image2 - y22 , caisar_op6 + -- apply_classifier: ls:(@@) , ty:vector t Terms: caisar_op , perturbed_image2 @@ -203,10 +333,46 @@ Test interpret on dataset "0.776470588"])) ty: tensor t - ls: caisar_op2 - reduce_match@(caisar_op2, + ls: caisar_op7 + reduce_match@(caisar_op7, 1) -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image3 , v4 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image3 , v4 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image3 - y23 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image3 - y23 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image3 - y23 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image3 - y23 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image3 - y23 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image3 - y23 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image3 - y23 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image3 - y23 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image3 - y23 , caisar_op6 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image3 - y23 , caisar_op6 + -- apply_classifier: ls:(@@) , ty:vector t Terms: caisar_op , perturbed_image3 @@ -249,95 +415,246 @@ Test interpret on dataset vget: ls:([]) , ty:t Terms: caisar_op @@ perturbed_image3 , y33 -- - equal_shape: caisar_op2 perturbed_image4 - ls_of_caisar_op: <var> + equal_shape: caisar_op7 perturbed_image4 + ls_of_caisar_op: (Interpretation.Tensor 5) ty: tensor t - ls: caisar_op3 + ls: caisar_op8 + -- + valid_index: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 v5 + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 4)) + ty: vector + int + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 3)) + ty: vector + int + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 2)) + ty: vector + int + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 1)) + ty: vector + int + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 0)) + ty: vector + int + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , caisar_op6 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , caisar_op6 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 + - caisar_op7 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 + - caisar_op7 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 + - caisar_op7 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 + - caisar_op7 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 + - caisar_op7 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 + - caisar_op7 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 + - caisar_op7 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 + - caisar_op7 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 + - caisar_op7 , caisar_op6 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 + - caisar_op7 , caisar_op6 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op3 + Terms: caisar_op , caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 + caisar_es4 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op3 , 0 + Terms: caisar_op + @@ caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , 0 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op3 + Terms: caisar_op , caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 + caisar_es4 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op3 , y34 + Terms: caisar_op + @@ caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , y34 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op3 + Terms: caisar_op , caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 + caisar_es4 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op3 , 1 + Terms: caisar_op + @@ caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , 1 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op3 + Terms: caisar_op , caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 + caisar_es4 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op3 , y34 + Terms: caisar_op + @@ caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , y34 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op3 + Terms: caisar_op , caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 + caisar_es4 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op3 , 2 + Terms: caisar_op + @@ caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , 2 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op3 + Terms: caisar_op , caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 + caisar_es4 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op3 , y34 + Terms: caisar_op + @@ caisar_op8 caisar_es caisar_es1 caisar_es2 caisar_es3 caisar_es4 , y34 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 + - caisar_op7 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 + - caisar_op7 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 + - caisar_op7 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 + - caisar_op7 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 + - caisar_op7 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 + - caisar_op7 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 + - caisar_op7 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 + - caisar_op7 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 + - caisar_op7 , caisar_op6 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 + - caisar_op7 , caisar_op6 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op3 + Terms: caisar_op , caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 + caisar_es9 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op3 , 0 + Terms: caisar_op + @@ caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 , 0 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op3 + Terms: caisar_op , caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 + caisar_es9 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op3 , 1 + Terms: caisar_op + @@ caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 , 1 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op3 + Terms: caisar_op , caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 + caisar_es9 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op3 , 1 + Terms: caisar_op + @@ caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 , 1 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op3 + Terms: caisar_op , caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 + caisar_es9 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op3 , 1 + Terms: caisar_op + @@ caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 , 1 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op3 + Terms: caisar_op , caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 + caisar_es9 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op3 , 2 + Terms: caisar_op + @@ caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 , 2 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op3 + Terms: caisar_op , caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 + caisar_es9 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op3 , 1 + Terms: caisar_op + @@ caisar_op8 caisar_es5 caisar_es6 caisar_es7 caisar_es8 caisar_es9 , 1 -- vget: ls:([]) , ty:(tensor t, int) @@ -348,10 +665,46 @@ Test interpret on dataset "0.784313725"])) ty: tensor t - ls: caisar_op4 - reduce_match@(caisar_op4, + ls: caisar_op9 + reduce_match@(caisar_op9, 0) -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image5 , v6 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image5 , v6 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image5 - y24 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image5 - y24 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image5 - y24 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image5 - y24 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image5 - y24 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image5 - y24 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image5 - y24 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image5 - y24 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image5 - y24 , caisar_op6 + -- + hash_get: ls:(#) , ty:t + Terms: perturbed_image5 - y24 , caisar_op6 + -- apply_classifier: ls:(@@) , ty:vector t Terms: caisar_op , perturbed_image5 @@ -394,124 +747,414 @@ Test interpret on dataset vget: ls:([]) , ty:t Terms: caisar_op @@ perturbed_image5 , y35 -- - equal_shape: caisar_op4 perturbed_image6 - ls_of_caisar_op: <var> + equal_shape: caisar_op9 perturbed_image6 + ls_of_caisar_op: (Interpretation.Tensor 5) ty: tensor t - ls: caisar_op5 + -- + valid_index: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 + caisar_es14 v7 + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 4)) + ty: vector + int + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 3)) + ty: vector + int + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 2)) + ty: vector + int + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 1)) + ty: vector + int + ls_of_caisar_op: (Interpretation.Index (Interpretation.I_csv 0)) + ty: vector + int + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 , caisar_op6 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 , caisar_op6 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 + - caisar_op9 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 + - caisar_op9 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 + - caisar_op9 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 + - caisar_op9 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 + - caisar_op9 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 + - caisar_op9 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 + - caisar_op9 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 + - caisar_op9 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 + - caisar_op9 , caisar_op6 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 caisar_es14 + - caisar_op9 , caisar_op6 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op5 + Terms: caisar_op , caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 + caisar_es14 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op5 , 0 + Terms: caisar_op + @@ caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 + caisar_es14 , 0 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op5 + Terms: caisar_op , caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 + caisar_es14 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op5 , y36 + Terms: caisar_op + @@ caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 + caisar_es14 , y36 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op5 + Terms: caisar_op , caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 + caisar_es14 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op5 , 1 + Terms: caisar_op + @@ caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 + caisar_es14 , 1 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op5 + Terms: caisar_op , caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 + caisar_es14 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op5 , y36 + Terms: caisar_op + @@ caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 + caisar_es14 , y36 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op5 + Terms: caisar_op , caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 + caisar_es14 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op5 , 2 + Terms: caisar_op + @@ caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 + caisar_es14 , 2 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op5 + Terms: caisar_op , caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 + caisar_es14 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op5 , y36 + Terms: caisar_op + @@ caisar_op8 caisar_es10 caisar_es11 caisar_es12 caisar_es13 + caisar_es14 , y36 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 caisar_es19 + - caisar_op9 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 caisar_es19 + - caisar_op9 , caisar_op2 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 caisar_es19 + - caisar_op9 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 caisar_es19 + - caisar_op9 , caisar_op3 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 caisar_es19 + - caisar_op9 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 caisar_es19 + - caisar_op9 , caisar_op4 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 caisar_es19 + - caisar_op9 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 caisar_es19 + - caisar_op9 , caisar_op5 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 caisar_es19 + - caisar_op9 , caisar_op6 + -- + hash_get: ls:(#) , ty:t + Terms: caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 caisar_es19 + - caisar_op9 , caisar_op6 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op5 + Terms: caisar_op , caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 + caisar_es19 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op5 , 0 + Terms: caisar_op + @@ caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 + caisar_es19 , 0 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op5 + Terms: caisar_op , caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 + caisar_es19 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op5 , 0 + Terms: caisar_op + @@ caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 + caisar_es19 , 0 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op5 + Terms: caisar_op , caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 + caisar_es19 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op5 , 1 + Terms: caisar_op + @@ caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 + caisar_es19 , 1 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op5 + Terms: caisar_op , caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 + caisar_es19 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op5 , 0 + Terms: caisar_op + @@ caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 + caisar_es19 , 0 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op5 + Terms: caisar_op , caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 + caisar_es19 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op5 , 2 + Terms: caisar_op + @@ caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 + caisar_es19 , 2 -- apply_classifier: ls:(@@) , ty:vector t - Terms: caisar_op , caisar_op5 + Terms: caisar_op , caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 + caisar_es19 -- vget: ls:([]) , ty:t - Terms: caisar_op @@ caisar_op5 , 0 - G : ((forall v:vector int. - valid_index caisar_op3 v -> - le (0.0:t) (caisar_op3 # v) /\ le (caisar_op3 # v) (1.0:t)) -> - (forall v:vector int. - valid_index (caisar_op3 - caisar_op2) v -> - le (neg (0.375:t)) ((caisar_op3 - caisar_op2) # v) /\ - le ((caisar_op3 - caisar_op2) # v) (0.375:t)) -> - lt (caisar_op @@ caisar_op3)[0] (caisar_op @@ caisar_op3)[1] /\ - lt (caisar_op @@ caisar_op3)[2] (caisar_op @@ caisar_op3)[1]) /\ - ((forall v:vector int. - valid_index caisar_op5 v -> - le (0.0:t) (caisar_op5 # v) /\ le (caisar_op5 # v) (1.0:t)) -> - (forall v:vector int. - valid_index (caisar_op5 - caisar_op4) v -> - le (neg (0.375:t)) ((caisar_op5 - caisar_op4) # v) /\ - le ((caisar_op5 - caisar_op4) # v) (0.375:t)) -> - lt (caisar_op @@ caisar_op5)[1] (caisar_op @@ caisar_op5)[0] /\ - lt (caisar_op @@ caisar_op5)[2] (caisar_op @@ caisar_op5)[0]) + Terms: caisar_op + @@ caisar_op8 caisar_es15 caisar_es16 caisar_es17 caisar_es18 + caisar_es19 , 0 + G : (forall caisar_es20:t, caisar_es21:t, caisar_es22:t, caisar_es23:t, + caisar_es24:t. + ((((le (0.0:t) caisar_es24 /\ le caisar_es24 (1.0:t)) /\ + le (0.0:t) caisar_es23 /\ le caisar_es23 (1.0:t)) /\ + le (0.0:t) caisar_es22 /\ le caisar_es22 (1.0:t)) /\ + le (0.0:t) caisar_es21 /\ le caisar_es21 (1.0:t)) /\ + le (0.0:t) caisar_es20 /\ le caisar_es20 (1.0:t) -> + ((((le (neg (0.375:t)) + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op7) + # caisar_op2) /\ + le + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op7) + # caisar_op2) + (0.375:t)) /\ + le (neg (0.375:t)) + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op7) + # caisar_op3) /\ + le + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op7) + # caisar_op3) + (0.375:t)) /\ + le (neg (0.375:t)) + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op7) + # caisar_op4) /\ + le + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op7) + # caisar_op4) + (0.375:t)) /\ + le (neg (0.375:t)) + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op7) + # caisar_op5) /\ + le + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op7) + # caisar_op5) + (0.375:t)) /\ + le (neg (0.375:t)) + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op7) + # caisar_op6) /\ + le + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op7) + # caisar_op6) + (0.375:t) -> + lt + (caisar_op + @@ caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24) + [0] + (caisar_op + @@ caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24) + [1] /\ + lt + (caisar_op + @@ caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24) + [2] + (caisar_op + @@ caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24) + [1]) /\ + (forall caisar_es20:t, caisar_es21:t, caisar_es22:t, caisar_es23:t, + caisar_es24:t. + ((((le (0.0:t) caisar_es24 /\ le caisar_es24 (1.0:t)) /\ + le (0.0:t) caisar_es23 /\ le caisar_es23 (1.0:t)) /\ + le (0.0:t) caisar_es22 /\ le caisar_es22 (1.0:t)) /\ + le (0.0:t) caisar_es21 /\ le caisar_es21 (1.0:t)) /\ + le (0.0:t) caisar_es20 /\ le caisar_es20 (1.0:t) -> + ((((le (neg (0.375:t)) + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op9) + # caisar_op2) /\ + le + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op9) + # caisar_op2) + (0.375:t)) /\ + le (neg (0.375:t)) + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op9) + # caisar_op3) /\ + le + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op9) + # caisar_op3) + (0.375:t)) /\ + le (neg (0.375:t)) + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op9) + # caisar_op4) /\ + le + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op9) + # caisar_op4) + (0.375:t)) /\ + le (neg (0.375:t)) + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op9) + # caisar_op5) /\ + le + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op9) + # caisar_op5) + (0.375:t)) /\ + le (neg (0.375:t)) + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op9) + # caisar_op6) /\ + le + ((caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24 - caisar_op9) + # caisar_op6) + (0.375:t) -> + lt + (caisar_op + @@ caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24) + [1] + (caisar_op + @@ caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24) + [0] /\ + lt + (caisar_op + @@ caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24) + [2] + (caisar_op + @@ caisar_op8 caisar_es20 caisar_es21 caisar_es22 caisar_es23 + caisar_es24) + [0]) + caisar_op7, + (Interpretation.Data + (Interpretation.D_csv + ["0.0"; "1.0"; "0.784313725"; "0.019607843"; "0.776470588"])) caisar_op, (Interpretation.Classifier "$TESTCASE_ROOT/TestNetwork.nnet") - caisar_op5, <var> - caisar_op3, <var> - caisar_op1, (Interpretation.Dataset <csv>) - caisar_op4, + caisar_op9, (Interpretation.Data (Interpretation.D_csv ["1.0"; "0.0"; "0.019607843"; "0.776470588"; "0.784313725"])) - caisar_op2, - (Interpretation.Data - (Interpretation.D_csv - ["0.0"; "1.0"; "0.784313725"; "0.019607843"; "0.776470588"])) + caisar_op1, (Interpretation.Dataset <csv>) + caisar_op8, (Interpretation.Tensor 5) + caisar_op2, (Interpretation.Index (Interpretation.I_csv 4)) + caisar_op3, (Interpretation.Index (Interpretation.I_csv 3)) + caisar_op4, (Interpretation.Index (Interpretation.I_csv 2)) + caisar_op5, (Interpretation.Index (Interpretation.I_csv 1)) + caisar_op6, + (Interpretation.Index (Interpretation.I_csv 0)) -- GitLab