Caml1999I037h # 'Diffing$Defs$left;@@@A@@@@@1utils/diffing.mli | ~ | @@@@@@A@%right;@@@A@@@@@ @   @  @@@@A@A@"eq;@@@A@@@@@A  A  @@@@'B@A@$diff;@@@A@@@@@D   D  @@@@1C@A@%state;@@@A@@@@@)G  *G  @@@@;D@A@@@-~ e e.I & )@?E@@+change_kind;@@(Deletion@@<N  =N  @@NG@)Insertion@@EO  FO  @@WH@,Modification@@NP  OP  @@`I@,Preservation@@WQ  XQ  @@iJ@@@A@@@@@[M  @@A@lF@A@&prefix*Format_doc'printer@#intA@@@렠@G@@@@@@@@@|R  }R  @@K@@%style@@@@@@$listK$Misc%Style%style@@@@@@@@@S  S  =@@L@@&change;$left@%right@"eq@$diff@@D&Delete@@W g iW g z@@N@&Insert@@X { }X { @@O@$Keep.*&@@Y  Y  @@P@&Change:6-@@Z  Z  @@Q@@@A@YYYY@@@@@@@@V @ @ @@@@M@A@(classify@[@@@@@@@@@@@@@@@@ \   \  @@R@@Ӡ&Define@!D&&change;@@@A($left@@@%right@@@ "eq@@@$diff@@@@@@@@@@?f@f4@@@@QT@@@%patch ;@@@A3@@@@@@@@@@Sg57Tg5O@@@@eU@A@*Parameters -update_result;@@@A@@@@@dkek@@@@vV@A@&weight@#@@@@@@@@@@@xmym@@W@@$test@_%state@@@@@@h$left@@@@@@q%right@@@@@&Stdlib&result~"eq@@@נ$diff@@@@@@@@@@@@@q>Bq>w@@X@@&update@o@@@@@@%state@@@@@l@@@@@@@@ww%@@Y@@@@j|@Z@@!S $diff@%state@@@@@@%arrayJ$left@@@@@@@@@%right@@@@@@@@@@@@@@@@@@  %@@[@@@@~@"\@@Ӡ&Simple @@@@@@@@@@@@@@*+@@@@@@@@@@@@@@@@@@@@@'@@@,@@@@@@@@@@@@@-@@@@@@@@@@@@@@@D%state@@@@@@@@E@@@@qr@^@@@Ӡ-Left_variadic @@@7@@@@@@@@@@@@@@@p@@@@@@x@@@@@@@@@@@  @@@ @@@@@@@@@@@@@-@@@r@@@@@@@@@@@@%state@@@@$left@@@@@@@@@@@@@U@@@q@}@`@@@Ӡ.Right_variadic@@@@@@u@@v@@@w@@x@1@@@@@@@y@@z@@@@{@@|@@@@}@@~~{z@@@y@@@@@@@@@@@@@-@u@t@@@@@@@s@@@@@@%state@@@@X$%right@@@@@@@@@@@@@U@@@@QR7@cb@@@@@UbV9<@gc@@@@bZQ'Diffing0?>pp=3+-Stdlib__Uchar0=H^V9>ɠ.Stdlib__String0 w_OA4D"Q~~+Stdlib__Set0ܔ@Z8XWaa2+Stdlib__Seq0?72#[O.Stdlib__Result0p~ !ԥ//+Stdlib__Map0*4ɇ2.Stdlib__Domain0'Ϳo\0m.K.Stdlib__Digest0#z25I*.Stdlib__Buffer0,I[?z&Stdlib0t0VoS%{<F:$Misc0/n-(KOY*Format_doc0uy@GmWUࠠ8CamlinternalFormatBasics0|.e1R$|o5Build_path_prefix_map0zd,J4z@@@Caml1999T037] 84JC'Diffing*ocaml.text&_none_@@A  Parametric diffing This module implements diffing over lists of arbitrary content. It is parameterized by - The content of the two lists - The equality witness when an element is kept - The diffing witness when an element is changed Diffing is extended to maintain state depending on the computed changes while walking through the two lists. The underlying algorithm is a modified Wagner-Fischer algorithm (see ). We provide the following guarantee: Given two lists [l] and [r], if different patches result in different states, we say that the state diverges. - We always return the optimal patch on prefixes of [l] and [r] on which state does not diverge. - Otherwise, we return a correct but non-optimal patch where subpatches with no divergent states are optimal for the given initial state. More precisely, the optimality of Wagner-Fischer depends on the property that the edit-distance between a k-prefix of the left input and a l-prefix of the right input d(k,l) satisfies d(k,l) = min ( del_cost + d(k-1,l), insert_cost + d(k,l-1), change_cost + d(k-1,l-1) ) Under this hypothesis, it is optimal to choose greedily the state of the minimal patch transforming the left k-prefix into the right l-prefix as a representative of the states of all possible patches transforming the left k-prefix into the right l-prefix. If this property is not satisfied, we can still choose greedily a representative state. However, the computed patch is no more guaranteed to be globally optimal. Nevertheless, it is still a correct patch, which is even optimal among all explored patches. 1utils/diffing.mliP77{ / 1@@@@@@3@@@@@@#intA;@@#intA@@@@@;@A@$charB;@@$charA@@@@@A@A@&stringQ;@@&stringA@@@@@G@@@%bytesC;@@%bytesA@@@@@M@@@%floatD;@@%floatA@@@@@S@@@$boolE;@@%falsec@@]@$trued@@c@@@A@@@@@d@A@$unitF;@@"()e@@n@@@A@@@@@o@A@ #exnG;@@@A@@@@@s@@@#effH;@@O@A@A@@@@@@|@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@@@@%arrayJ;@@R@A%arrayA@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@)nativeintA@@@@@@@@%int32N;@@%int32A@@@@@@@@%int64O;@@%int64A@@@@@@@@&lazy_tP;@@X@A&lazy_tA@Y@@@@@@@@ 5extension_constructorR;@@5extension_constructorA@@@@@@@@*floatarrayS;@@*floatarrayA@@@@@@@@&iarrayT;@@Y@A&iarrayA@Y@@@@@@@@ *atomic_locU;@@Z@A*atomic_locA@@@@@@ @@@ .Assert_failure`#@@@@@J@@@@@@@@[@@A!=ocaml.warn_on_literal_pattern%@&@0Division_by_zero]#@@@A+ . .@+End_of_file\#$@@@A366@'FailureY#,@'@@A<??@0Invalid_argumentX#5@0@@AE$H#H@-Match_failureV#>@@=@9@;@@a@@AV5Y4Y@)Not_foundZ#O@@@A^=a<a@-Out_of_memoryW#W@@@AfEiDi@.Stack_overflow^#_@@@AnMqLq@.Sys_blocked_io_#g@@@AvUyTy@)Sys_error[#o@j@@A^]@:Undefined_recursive_modulea#x@@w@s@u@@h@@Aon@:Continuation_already_takenb#@@@Awv@&Stdlib@A$DefsF~ e q~ e u@E@БA+$leftA |  | @@;@@@A@@@@@ | ~@@@@@@@@A@@@3@@A@A+%rightB@  @  @@;@@A@@@@@@  @@@@A@@@A@@@3@@A@A+"eqCA  A  @@;@@$A@@@@@A  @)ocaml.doc䐠9 Detailed equality trace B  B  @@@@@@@@@B@@@A@@@@@@@@3@.93@A #@A+$diffDD  D  @@;@@QA@@@@@D  @-; Detailed difference trace  E   E  @@@@@@@@@%C@@@A@<@@@@@@@3@,RL@A!@A+%stateE&G  'G  @@;@@|A@@@@@*G  @X environment of a partial patch 7H  8H  %@@@@@@@@@PD@@@A@gJ@@@@@@@3BAABBBBB@,PJ@A!@@A@A@~A@YSA@0*A@@3ONNOOOOO@2,@A 3RQQRRRRR@P@AW~ e xXI & )@@i , The core types of a diffing implementation f} 3 3g} 3 d@@@@@@@i~ e e@g@A++change_kindGtM  uM  @@;@@(Deletion@@~N  N  @@G@)Insertion@@O  O  @@H@,Modification@@P  P  @@I@,Preservation@@Q  Q  @@J@@@A@@@@@M  @ː Z The kind of changes which is used to share printing and styling across implementationK + +L o @@@@@@@A@F@@#66N  4@3@@@7@#33O  1@0@@@4@#00P  .@-@@@1@#--Q  +@*@@@.@@A@*֐)(@((@@@(@(@@3@=2,A@"A@ A@A@A@@ @@@@@@N@ANQ@&prefixZR  R  @г*Format_doc'printer*Format_docR  R  @ R  R  @@В@г蠐#intR  R  @@ @@@ m3@J@A@@@г+change_kind&R  'R  @@ @@@ n@@@@@ @@ o @@@> @@@ q8R  2@@@;R  5@@SK@@7@@$%styleFS  GS  @б@гݠ+change_kindQS  RS  $@@ @@@ r3SRRSSSSS@=i@A@@гѠ$list`S  9aS  =@г$Misc%Style%style$MisctS  (uS  ,@ xS  -yS  2@@}S  3~S  8@ @@@@@-@@@+@@@2(@@@:@@ @@7=-@@@S  0@@L@@2@@=A+&changeHV @ ^V @ d@А$left@3@Rg;@@֠@@נ@@ؠ@@@D@A@GGGG@BBBB@@@V @ @Z  @@@@M@@AV @ FV @ K@@BAА%right@)V @ LV @ R@@ А"eq@4V @ SV @ V@@А$diff@?V @ WV @ \@@"@;G @D&DeleteSI@@@W g iW g z@@N@&Insert6I@@@X { }X { @@O@$KeepkI@EI@=I@@@Y  Y  @@.P@&Change}I@WI@DI@@@'Z  g@@?Q@@@A@YYYY@@@@@@@@r@@@o@#DD6W g k7W g q@?@А$leftI>W g uG@@@@I@#EECX { DX { @@@А%rightJKX { H@@@@J@#FFPY  QY  @;@А$leftKXY  YY  @@А%rightO_Y  `Y  @@А"eqSfY  Q@@@@S@#OOkZ  lZ  @E@А$leftT̰sZ  tZ  @@А%rightXӰzZ  {Z  @@А$diff\ڰZ  @@@@\@@A@@@3~~@@A@(classify\  \  @б@г&change\  \  @@@@3@@A\  \  @@@@@ @@@@  @@@@@@ @@@@@гI+change_kind\  \  @@ @@@%@@@@@@@*( @@@\   @@R@@@@0&DefineIbb@c@@Т!DJbb@РR$Defsbb@3@Si)@A@@Бࠐ!Dcc@@A3@'@ @%S@*@A c @@3@@A @@+&changeKff@@;@@kA&$left@@@,%right@@@ 2"eq@@@ 8$diff@@@ @@@@@@@6f7f4@e * The type of potential changes on a list. DeEe@@@@@@@@@]T@@@Aг/&changeNf.@г34UfVf@@:V@@г67^f_f$@@=_@@г9:gf%hf'@@@h@@г<=pf(qf,@@Cq@@@Zrtf>@@@>=@==@@@=@=@@KJ@A+%patchLg5<g5A@@;@@A@@@'@@@)@@@@g57g5O@ǐ ( A patch is an ordered list of changes. hPRhP@@@@@@@@@U@@@Aг$listg5K@г &changeg5Dg5J@@(3@7;@@@A?@@@<@&@@@@/,@@@A@@@9 /@@1ؐ/.@..@@@.@.@@3@@A=<@*ParametersNjj@Z@БA+-update_resultMkk@@;@@CA@@@@@k@@@@ V@@@A@@@3@9oi@A@&weight mm@б@г&change m m@@ @@@@3        @'!@A@@г렐#intmm@@ @@@A@@@@@B@@C @@@%m @S ] [weight ch] returns the weight of the change [ch]. Used to find the smallest patch. 2n3o<@@@@@@@KW@@@cF@@@@@@3$testàIq>FJq>J@б@гV%stateTq>LUq>Q@@ @@@D3VUUVVVVV@La8@A@@б@гg$lefteq>Ufq>Y@@ @@@E@@б@гv%righttq>]uq>b@@ @@@F @@г&resultq>qq>w@г"eqq>gq>i@@ @@@G7@@г$diffq>kq>o@@ @@@HE@@@%@@@KKq>f$@@@4@@L @@MQ7)@@@H@@N @@OVK.@@@^@@P @@Q[a3@@@q>B6@吠 r [test st xl xr] tests if the elements [xl] and [xr] are co mpatible ([Ok]) or not ([Error]). rx|u@@@@@@@X@@F@ؐ@@@@@@z&updateĠww@б@гѠ&changeww @@ @@@R3@8@A@@б@г%stateww@@ @@@S@@г-update_resultww%@@ @@@T@@@@@U@@V# @@@+@@W @@X(.@@@w@D [update ch st] returns the new state after applying a change. The [update_result] type also contains expansions in the variadic case. #x&*${@@@@@@@@P_Q@@P@Р0!S }6 ~7@ʰ@@@lͰ @@@  @Ѱ @@ys@@A@T@O@I@E@@@@@@@@@@@@@3        @@@@~}@VU@@2@%@A#3        @@A b 9<@@3        @@A@@ Ð [Define(Defs)] creates the diffing types from the types defined in [Defs] and the functors that need to be instantatied with the diffing algorithm parameters  ^   a@@@@@@@ b@@@ 1ua -@[UA@@A@9A@K @@' "!@!!@@@!@!@@@@3        @@@@e_A@ A@@A@!@@@@-@@@@@@@@@@w@j@@d@@@@@@Vh@@}@@@@@@@@@@PdM@A@ H************************************************************************ *A@@ +A@L@ H  0BMM 1BM@ H OCaml  6C 7C@ H  ). We provide the following guarantee: Given two lists [l] and [r], if different patches result in different states, we say that the state diverges. - We always return the optimal patch on prefixes of [l] and [r] on which state does not diverge. - Otherwise, we return a correct but non-optimal patch where subpatches with no divergent states are optimal for the given initial state. More precisely, the optimality of Wagner-Fischer depends on the property that the edit-distance between a k-prefix of the left input and a l-prefix of the right input d(k,l) satisfies d(k,l) = min ( del_cost + d(k-1,l), insert_cost + d(k,l-1), change_cost + d(k-1,l-1) ) Under this hypothesis, it is optimal to choose greedily the state of the minimal patch transforming the left k-prefix into the right l-prefix as a representative of the states of all possible patches transforming the left k-prefix into the right l-prefix. If this property is not satisfied, we can still choose greedily a representative state. However, the computed patch is no more guaranteed to be globally optimal. Nevertheless, it is still a correct patch, which is even optimal among all explored patches.  ~ -* The core types of a diffing implementation  :* Detailed equality trace  <* Detailed difference trace  { !* environment of a partial patch  S [* The kind of changes which is used to share printing and styling across implementation㠠 * [Define(Defs)] creates the diffing types from the types defined in [Defs] and the functors that need to be instantatied with the diffing algorithm parameters Р +* The type of potential changes on a list. O )* A patch is an ordered list of changes.  ^* [weight ch] returns the weight of the change [ch]. Used to find the smallest patch. g s* [test st xl xr] tests if the elements [xl] and [xr] are co mpatible ([Ok]) or not ([Error]). ؠ * [update ch st] returns the new state after applying a change. The [update_result] type also contains expansions in the variadic case. | p* [diff state l r] computes the optimal patch between [l] and [r], using the initial state [state].  * {1 Variadic diffing} Variadic diffing allows to expand the lists being diffed during diffing. in one specific direction. @-./boot/ocamlc)-nostdlib"-I&./boot*-use-prims2runtime/primitives"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I%utils"-I%utils"-I'parsing"-I&typing"-I(bytecomp"-I,file_formats"-I&lambda"-I*middle_end"-I2middle_end/closure"-I2middle_end/flambda"-I=middle_end/flambda/base_types"-I'asmcomp"-I&driver"-I(toplevel"-I%tools"-I'runtime"-I1otherlibs/dynlink"-I-otherlibs/str"-I4otherlibs/systhreads"-I.otherlibs/unix"-I8otherlibs/runtime_events"-c ߐ S/home/teraram/ci/builds/workspace/parallel-build/flambda/true/label/ocaml-manycores >10/.-,+*)('&%$#"! @@0nhCQP3        @ @@5Build_path_prefix_map0zd,J4z8CamlinternalFormatBasics0|.e1R$|o 0?>pp=3+ 0uy@GmWUࠠ0/n-(KOY&Stdlib0t0VoS%{<F:.Stdlib__Buffer0,I[?z.Stdlib__Digest0#z25I*.Stdlib__Domain0'Ϳo\0m.K.Stdlib__Either0HD ?|>.Stdlib__Format00FClW/Stdlib__Hashtbl0pYq\)$,+Stdlib__Map0*4ɇ2@0?>pp=3+Ac@  @@ P i@@ܰ_%@@q@@S@&]  @{9G%-@@@@і۰oy@FJ  @    Ȱ Ò ΰ  @@@2@@ Q j@d% N T   @@@o  @@@@@ؐ[@@P@@