123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780open!Baseopen!Importmoduletype%templateGet=sig@@portabletype('a:anymodportableseparable)t[@@@kind.defaultk=ks][@@@mode.defaultm=(uncontended,shared)](** To read a value from a parallel array, we must prove that it does not escape its
capsule. This is the case if its type crosses contention, or if it is manipulated
within a portable function. *)(** [get t i] reads the element at index [i]. Raises [Invalid_arg] if [i] is not in the
range \[0..length t). *)valget:('a:kmodcontendedportableseparable).'at@m->int->'a@m(** [unsafe_get t i] unsafely reads the element at index [i]. *)valunsafe_get:('a:kmodcontendedportableseparable).'at@m->int->'a@m(** [extract t i f] applies [f] with the element read from index [i]. Raises
[Invalid_arg] if [i] is not in the range \[0..length t). *)valextract:('a:kmodportableseparable).'at@m->int->('a@m->'b@contendedportable)@localonceportable->'b@contendedportable(** [unsafe_extract t i f] applies [f] with the element unsafely read from index [i]. *)valunsafe_extract:('a:kmodportableseparable).'at@m->int->('a@m->'b@contendedportable)@localonceportable->'b@contendedportableend[@@kind_setks=(value_or_null,base_or_null)]moduletype%templateSet=sig@@portabletype('a:anymodportableseparable)t[@@@kind.defaultk=ks](** To store a value in a parallel array, we must prove that it does not share
unsynchronized state with any other elements. This is the case if its type crosses
contention or it lives in a fresh capsule. *)(** [set t i a] stores the element [a] at index [i]. Raises [Invalid_arg] if [i] is not
in the range \[0..length t). *)valset:('a:kmodcontendedportableseparable).'at->int->'a->unit(** [unsafe_set t i a] unsafely stores the element [a] at index [i]. *)valunsafe_set:('a:kmodcontendedportableseparable).'at->int->'a->unit(** [insert t i f] stores [f ()] at index [i]. Raises [Invalid_arg] if [i] is not in the
range \[0..length t). *)valinsert:('a:kmodportableseparable).'at->int->(unit->'a)@localonceportable->unit(** [unsafe_insert t i f] unsafely stores [f ()] at index [i]. *)valunsafe_insert:('a:kmodportableseparable).'at->int->(unit->'a)@localonceportable->unitend[@@kind_setks=(value_or_null,base_or_null)]moduletype%templateInit=sig@@portabletype('a:anymodportableseparable)ttype('a:any)init[@@@kind.defaultk=ks](** [init parallel n ~f] initializes an array with the result of [f] applied to the
integers 0..n-1.
If [t] is [array] or [iarray], [f] is not allowed to return boxed floats, as this
would break the float array optimization. Prefer [float# t]. *)valinit:('a:kmodmportable).Parallel_kernel.t@local->'ainit->f:(Parallel_kernel.t@local->int->'a)@shareable->'atend[@@modalitym=(non_float,separable)][@@kind_setks=(value_or_null,base_or_null)]moduletype%templateReduce=sig@@portabletype('a:anymodportableseparable)t[@@@kind.defaultk=ks](** [fold parallel t ~init ~f ~combine] folds [combine] over the result of
[map parallel t ~f]. [combine] must be associative and [combine init x] must equal
[x]. *)valfold:('a:kmodportableseparable).Parallel_kernel.t@local->'at@shared->init:(unit->'acc)@portable->f:(Parallel_kernel.t@local->'acc->'a@shared->'acc)@shareable->combine:(Parallel_kernel.t@local->'acc->'acc->'acc)@shareable->'acc(** [foldi parallel t ~init ~f ~combine] folds [combine] over the result of
[mapi parallel t ~f]. [combine] must be associative and [combine init x] must equal
[x]. *)valfoldi:('a:kmodportableseparable).Parallel_kernel.t@local->'at@shared->init:(unit->'acc)@portable->f:(Parallel_kernel.t@local->int->'acc->'a@shared->'acc)@shareable->combine:(Parallel_kernel.t@local->'acc->'acc->'acc)@shareable->'acc[@@@mode.defaultm=(uncontended,shared)](** [iter parallel t ~f] applies [f] to each element of [t]. *)valiter:('a:kmodportableseparable).Parallel_kernel.t@local->'at@m->f:(Parallel_kernel.t@local->'a@m->unit)@shareable->unit(** [iteri parallel t ~f] applies [f] to each element of [t] and its index. *)valiteri:('a:kmodportableseparable).Parallel_kernel.t@local->'at@m->f:(Parallel_kernel.t@local->int->'a@m->unit)@shareable->unit(** [find parallel t ~f] returns the first element of [t] for which [f] returns [true],
if it exists. *)valfind:('a:kmodportableseparable).Parallel_kernel.t@local->'at@m->f:(Parallel_kernel.t@local->'a@m->bool)@shareable->('aOption_u.t[@kindk])@m(** [findi parallel t ~f] returns the first element of [t] for which [f] returns [true],
if it exists. *)valfindi:('a:kmodportableseparable).Parallel_kernel.t@local->'at@m->f:(Parallel_kernel.t@local->int->'a@m->bool)@shareable->('aOption_u.t[@kindk])@m(** [reduce parallel t ~f] folds [f] over the elements of [t]. [f] must be associative.
If [t] is empty, [reduce] returns [None]. *)valreduce:('a:kmodportableseparable).Parallel_kernel.t@local->'at@m->f:(Parallel_kernel.t@local->'a@shared->'a@shared->'a@m)@shareable->('aOption_u.t[@kindk])@m(** [min_elt parallel t ~compare] is the minimum element of [t] according to [compare].
If [t] is empty, returns [None]. *)valmin_elt:('a:kmodportableseparable).Parallel_kernel.t@local->'at@m->compare:(Parallel_kernel.t@local->'a@localshared->'a@localshared->int)@shareable->('aOption_u.t[@kindk])@m(** [max_elt parallel t ~compare] is the maximum element of [t] according to [compare].
If [t] is empty, returns [None]. *)valmax_elt:('a:kmodportableseparable).Parallel_kernel.t@local->'at@m->compare:(Parallel_kernel.t@local->'a@localshared->'a@localshared->int)@shareable->('aOption_u.t[@kindk])@mend[@@kind_setks=(value_or_null,base_or_null)]moduletype%templateMap=sig@@portabletype('a:anymodportableseparable)t(** Mapping functions do not need to be templated over the mode of their output type. To
work with a contended or shared ['b], return a ['b Modes.Contended.t] or
['b Modes.Shared.t]. *)includesig[@@@kind.defaultk1=ks,k2=ks][@@@mode.defaultm=(uncontended,shared)](** [map parallel t ~f] initializes an array with the result of [f] applied to each
element of [t].
[f] is not allowed to return boxed floats, as this would break the float array
optimization. Prefer [float# t]. *)valmap:('a:k1modportableseparable)('b:k2modnon_floatportable).Parallel_kernel.t@local->'at@m->f:(Parallel_kernel.t@local->'a@m->'b)@shareable->'bt(** [mapi parallel t ~f] initializes an array with the result of [f] applied to each
element of [t] and its index.
[f] is not allowed to return boxed floats, as this would break the float array
optimization. Prefer [float# t]. *)valmapi:('a:k1modportableseparable)('b:k2modnon_floatportable).Parallel_kernel.t@local->'at@m->f:(Parallel_kernel.t@local->int->'a@m->'b)@shareable->'btendend[@@kind_setks=(value_or_null,base_or_null)]moduletype%templateSort=sig@@portabletype('a:anymodportableseparable)t[@@@kind.defaultk=ks][@@@mode.defaultm=(uncontended,shared)](** [sort parallel t ~compare] initializes an array with the contents of [t] unstably
sorted with respect to [compare]. *)valsort:('a:kmodportableseparable).Parallel_kernel.t@local->'at@m->compare:(Parallel_kernel.t@local->'a@localshared->'a@localshared->int)@shareable->'at@m(** [stable_sort parallel t ~compare] initializes an array with the contents of [t]
stably sorted with respect to [compare]. *)valstable_sort:('a:kmodportableseparable).Parallel_kernel.t@local->'at@m->compare:(Parallel_kernel.t@local->'a@localshared->'a@localshared->int)@shareable->'at@mend[@@kind_setks=(value_or_null,base_or_null)]moduletype%templateScan=sig@@portabletype('a:anymodportableseparable)t[@@@kind.defaultk=ks][@@@mode.defaultm=(uncontended,shared)](** [scan parallel t ~init ~f] initialises an array containing the exclusive prefix sums
of [t] with respect to [f]. The first element is [init] and the full reduction of
[t] is returned separately. [f] must be associative and [f init x] must equal [x]. *)valscan:('a:kmodportableseparable).Parallel_kernel.t@local->'at@m->init:'a@m->f:(Parallel_kernel.t@local->'a@shared->'a@shared->'a@m)@shareable->#('at*'a)@m(** [scan_inclusive parallel t ~init ~f] initialises an array containing the inclusive
prefix sums of [t] with respect to [f]. The first element is the first element of
[t]. [f] must be associative and [f init x] must equal [x]. *)valscan_inclusive:('a:kmodportableseparable).Parallel_kernel.t@local->'at@m->init:'a@m->f:(Parallel_kernel.t@local->'a@shared->'a@shared->'a@m)@shareable->'at@mend[@@kind_setks=(value_or_null,base_or_null)]moduletype%templateFilter=sig@@portabletype('a:anymodportableseparable)t[@@@kind.defaultk=ks][@@@mode.defaultm=(uncontended,shared)](** [filter parallel t ~f] initialises an array containing the elements of [t] that
satisfy the predicate [f]. *)valfilter:('a:kmodportableseparable).Parallel_kernel.t@local->'at@m->f:(Parallel_kernel.t@local->'a@m->bool)@shareable->'at@m(** [filteri parallel t ~f] initialises an array containing the elements of [t] that,
alongside their index, satisfy the predicate [f]. *)valfilteri:('a:kmodportableseparable).Parallel_kernel.t@local->'at@m->f:(Parallel_kernel.t@local->int->'a@m->bool)@shareable->'at@mend[@@kind_setks=(value_or_null,base_or_null)]moduletype%templateFilter_map=sig@@portabletype('a:anymodportableseparable)t[@@@mode.defaultm=(uncontended,shared)](** [filter_map parallel t ~f] initializes an array with the results of [f] applied to
each element of [t], filtering out [Null]s. *)valfilter_map:('a:value_or_nullmodportableseparable)('b:valuemodnon_floatportable).Parallel_kernel.t@local->'at@m->f:(Parallel_kernel.t@local->'a@m->'bor_null)@shareable->'bt(** [filter_mapi parallel t ~f] initializes an array with the result of [f] applied to
each element of [t] and its index, filtering out [Null]s. *)valfilter_mapi:('a:value_or_nullmodportableseparable)('b:valuemodnon_floatportable).Parallel_kernel.t@local->'at@m->f:(Parallel_kernel.t@local->int->'a@m->'bor_null)@shareable->'btendmoduletype%templateInplace=sig@@portabletype('a:anymodportableseparable)t[@@@kind.defaultk=ks](** [map_inplace parallel t ~f] overwrites an array with the result of [f] applied to
each of its elements. *)valmap_inplace:('a:kmodportableseparable).Parallel_kernel.t@local->'at->f:(Parallel_kernel.t@local->'a->'a)@shareable->unit(** [mapi_inplace parallel t ~f] overwrites an array with the result of [f] applied to
each of its elements and their indices. *)valmapi_inplace:('a:kmodportableseparable).Parallel_kernel.t@local->'at->f:(Parallel_kernel.t@local->int->'a->'a)@shareable->unit(** [init_inplace parallel t ~f] overwrites an array with the result of [f] applied to
each array index. This can be much faster than using [mapi_inplace] since it does
not need to read the array. *)valinit_inplace:('a:kmodportableseparable).Parallel_kernel.t@local->'at->f:(Parallel_kernel.t@local->int->'a)@shareable->unit(** [sort_inplace parallel t ~compare] unstably sorts [t] with respect to [compare]. *)valsort_inplace:('a:kmodportableseparable).Parallel_kernel.t@local->'at->compare:(Parallel_kernel.t@local->'a@localshared->'a@localshared->int)@shareable->unit(** [stable_sort_inplace parallel t ~compare] stably sorts [t] with respect to
[compare]. *)valstable_sort_inplace:('a:kmodportableseparable).Parallel_kernel.t@local->'at->compare:(Parallel_kernel.t@local->'a@localshared->'a@localshared->int)@shareable->unit(** [scan_inplace parallel t ~init ~f] overwrites [t] to contain the its exclusive
prefix sums with respect to [f]. The first element becomes [init] and the full
reduction of [t] is returned. [f] must be associative and [f init x] must equal [x]. *)valscan_inplace:('a:kmodportableseparable).Parallel_kernel.t@local->'at->init:'a->f:(Parallel_kernel.t@local->'a@shared->'a@shared->'a)@shareable->'a(** [scan_inclusive_inplace parallel t ~init ~f] overwrites [t] to contain its inclusive
prefix sums with respect to [f]. The first element is unchanged. [f] must be
associative and [f init x] must equal [x]. *)valscan_inclusive_inplace:('a:kmodportableseparable).Parallel_kernel.t@local->'at->init:'a->f:(Parallel_kernel.t@local->'a@shared->'a@shared->'a)@shareable->unitend[@@kind_setks=(value_or_null,base_or_null)]moduletype%templateSlice0=sig@@portabletype('a:anymodportableseparable)array:valuemodcportablewith'a(** Slices represent a contiguous portion of an array. *)type('a:anymodportableseparable)t:valuemodcportablewith'a(** [length t] returns the number of elements in [t]. *)vallength:('a:anymodportableseparable).'at@contendedlocal->int[@@@kind.defaultk=ks][@@@mode.defaultm=(uncontended,shared)](** [slice ~i ~j array] is a slice representing [array\[i..j)]. *)valslice:('a:kmodportableseparable).?i:int->?j:int->'aarray@m->'at@localm(** [sub ~i ~j slice] is a slice representing [slice\[i..j)]. *)valsub:('a:kmodportableseparable).?i:int->?j:int->'at@localm->'at@localm(** To read a value from a parallel array, we must prove that it does not escape its
capsule. This is the case if its type crosses contention, or if it is manipulated
within a portable function. *)(** [get t i] reads the element at index [i]. Raises [Invalid_arg] if [i] is not in the
range \[0..length t). *)valget:('a:kmodcontendedportableseparable).'at@localm->int->'a@m(** [unsafe_get t i] unsafely reads the element at index [i]. *)valunsafe_get:('a:kmodcontendedportableseparable).'at@localm->int->'a@m(** [extract t i f] applies [f] with the element read from index [i]. Raises
[Invalid_arg] if [i] is not in the range \[0..length t). *)valextract:('a:kmodportableseparable).'at@localm->int->('a@m->'b@contendedportable)@localonceportable->'b@contendedportable(** [unsafe_extract t i f] applies [f] with the element unsafely read from index [i]. *)valunsafe_extract:('a:kmodportableseparable).'at@localm->int->('a@m->'b@contendedportable)@localonceportable->'b@contendedportable(** [fork_join2 parallel ~pivot t f g] splits the slice [t] into two sub-slices
representing [t\[0..pivot)] and [t\[pivot..length t)], respectively. The sub-slices
are passed to [f] and [g], which run in parallel (refer to
[{Parallel_kernel.fork_join2}]). *)valfork_join2:('a:kmodportableseparable).Parallel_kernel.t@local->?pivot:int->'at@localm->(Parallel_kernel.t@local->'at@localm->'b)@forkablelocalonceshareable->(Parallel_kernel.t@local->'at@localm->'c)@onceshareable->#('b*'c)(** [for_ parallel ~pivots t ~f] splits the slice [t] into multiple sub-slices
representing the ranges [t\[0..pivots[0])], [t\[pivots[i]..pivots[i+1])], etc. The
function [f] is evaluated for each sub-slice in parallel. [pivots] must be
non-decreasing, but may have duplicate elements, resulting in empty sub-slices. *)valfor_:('a:kmodportableseparable).Parallel_kernel.t@local->pivots:intiarray->'at@localm->f:(Parallel_kernel.t@local->'at@localm->unit)@shareable->unit(** [fori parallel ~pivots t ~f] splits the slice [t] into multiple sub-slices
representing the ranges [t\[0..pivots[0])], [t\[pivots[i]..pivots[i+1])], etc. The
function [f] is evaluated for each sub-slice and its index in parallel. [pivots]
must be non-decreasing, but may have duplicate elements. *)valfori:('a:kmodportableseparable).Parallel_kernel.t@local->pivots:intiarray->'at@localm->f:(Parallel_kernel.t@local->int->'at@localm->unit)@shareable->unitend[@@kind_setks=(value_or_null,base_or_null)][@@modec=(uncontended,contended)]moduletype%templateIslice=Slice0[@modecontended][@kind_setks][@@kind_setks=(value_or_null,base_or_null)]moduletype%templateSlice=sig@@portableincludeSlice0[@modeuncontended][@kind_setks](** @inline *)[@@@kind.defaultk=ks](** To store a value in a parallel array, we must prove that it does not share
unsynchronized state with any other elements. This is the case if its type crosses
contention or it lives in a fresh capsule. *)(** [set t i a] stores the element [a] at index [i]. Raises [Invalid_arg] if [i] is not
in the range \[0..length t). *)valset:('a:kmodcontendedportableseparable).'at@local->int->'a->unit(** [unsafe_insert t i f] unsafely stores [f a] at index [i]. *)valunsafe_set:('a:kmodcontendedportableseparable).'at@local->int->'a->unit(** [insert t i f] stores [f a] at index [i]. Raises [Invalid_arg] if [i] is not in the
range \[0..length t). *)valinsert:('a:kmodportableseparable).'at@local->int->(unit->'a)@localonceportable->unit(** [unsafe_insert t i f] unsafely stores [f a] at index [i]. *)valunsafe_insert:('a:kmodportableseparable).'at@local->int->(unit->'a)@localonceportable->unitend[@@kind_setks=(value_or_null,base_or_null)]moduletypeParallel_arrays=sig@@portableinclude%templatesig[@@@kind_set.defaultks=(value_or_null,base_or_null)]moduletypeInit=Init[@modalitym][@kind_setks][@@modalitym=(non_float,separable)]moduletypeGet=Get[@kind_setks]moduletypeSet=Set[@kind_setks]moduletypeMap=Map[@kind_setks]moduletypeReduce=Reduce[@kind_setks]moduletypeSort=Sort[@kind_setks]moduletypeScan=Scan[@kind_setks]moduletypeFilter=Filter[@kind_setks]moduletypeInplace=Inplace[@kind_setks]moduletypeIslice=Islice[@kind_setks]moduletypeSlice=Slice[@kind_setks]endmoduletypeFilter_map=Filter_map(** The following "parallel array" types are distinct from normal arrays because their
elements must always be portable and must never share unsynchronized state.
This is the case when the element type ['a] crosses portability and contention, or
when the array elements are portable and live in separate capsules (that is, were
returned at portable uncontended from portable functions).
To work with a pre-existing array whose element type does not cross portability and
contention, the elements may be wrapped in [Modes.Portended.t] or [Capsule.Data.t]
as applicable. *)moduleArray:sigtype('a:anymodportableseparable)t:mutable_datawith'a(** [length t] returns the number of elements in [t]. *)externallength:('a:anymodportableseparable).'at@contended->int="%array_length"[@@layout_poly]include%templatesig[@@@mode.defaultm=(uncontended,shared)]valof_array:('a:anymodcontendedportableseparable).'aarray@m->'at@mvalto_array:('a:anymodcontendedportableseparable).'at@m->'aarray@mendincludeGet[@kind_setbase_or_null]withtype('a:any)t:='at(** @inline *)includeSet[@kind_setbase_or_null]withtype('a:any)t:='at(** @inline *)moduleSlice:Slice[@kind_setbase_or_null]withtype('a:any)array:='at(** @inline *)includeInit[@modalitynon_float][@kind_setbase_or_null]withtype('a:any)t:='atandtype('a:any)init=intincludeMap[@kind_setbase_or_null]withtype('a:any)t:='at(** @inline *)includeReduce[@kind_setbase_or_null]withtype('a:any)t:='at(** @inline *)includeSort[@kind_setbase_or_null]withtype('a:any)t:='at(** @inline *)includeScan[@kind_setbase_or_null]withtype('a:any)t:='at(** @inline *)includeFilter[@kind_setbase_or_null]withtype('a:any)t:='at(** @inline *)includeInplace[@kind_setbase_or_null]withtype('a:any)t:='at(** @inline *)includeFilter_mapwithtype('a:any)t:='at(** @inline *)endmoduleIarray:sigtype('a:anymodportableseparable)t:immutable_datawith'a(** [length t] returns the number of elements in [t]. *)externallength:('a:anymodportableseparable).'at@contended->int="%array_length"[@@layout_poly]include%templatesig[@@@mode.defaultm=(uncontended,shared)]valof_iarray:('a:anymodcontendedportableseparable).'aiarray@m->'at@mvalto_iarray:('a:anymodcontendedportableseparable).'at@m->'aiarray@mendincludeGet[@kind_setbase_or_null]withtype('a:any)t:='at(** @inline *)moduleSlice:Islice[@kind_setbase_or_null]withtype('a:any)array:='at(** @inline *)includeInit[@modalitynon_float][@kind_setbase_or_null]withtype('a:any)t:='atandtype('a:any)init=intincludeMap[@kind_setbase_or_null]withtype('a:any)t:='at(** @inline *)includeReduce[@kind_setbase_or_null]withtype('a:any)t:='at(** @inline *)includeSort[@kind_setbase_or_null]withtype('a:any)t:='at(** @inline *)includeScan[@kind_setbase_or_null]withtype('a:any)t:='at(** @inline *)includeFilter[@kind_setbase_or_null]withtype('a:any)t:='at(** @inline *)includeFilter_mapwithtype('a:any)t:='at(** @inline *)endmoduleBigstring:sigmoduleKind=Bigstring.Kindtype('a:any)t='aBigstring.t=private{kind:'aKind.t;data:Base_bigstring.t}[@@derivingsexp_of]val%templatewith_kind_exn:'aBigstring.Kind.t->Base_bigstring.t@m->'at@m[@@modem=(uncontended,shared)](** [length t] returns the number of elements in [t]. *)vallength:'at@contended->intincludeGetwithtype('a:any)t:='at(** @inline *)includeSetwithtype('a:any)t:='at(** @inline *)moduleSlice:Slicewithtype('a:any)array:='atval%templateof_slice:'aSlice.t@localm->'at@m[@@modem=(uncontended,shared)](** [of_string s] is a new character bigstring initialized by copying the contents of
the string [s]. The optional arguments [pos] and [len] are forwarded to
{!Base_bigstring.of_string} *)valof_string:?pos:int->?len:int->string->chart(** @inline *)includeInit[@modalityseparable]withtype('a:any)t:='atandtype('a:any)init:='aKind.t*intincludeReducewithtype('a:any)t:='at(** @inline *)includeSortwithtype('a:any)t:='at(** @inline *)includeScanwithtype('a:any)t:='at(** @inline *)includeFilterwithtype('a:any)t:='at(** @inline *)includeInplacewithtype('a:any)t:='at(** @inline *)endmoduleBigarray:sigmoduleKind:sigtype('a:any,'k:any)t=('a,'k)Bigarray.kind=|Float32:(float,Bigarray.float32_elt)t|Float64:(float,Bigarray.float64_elt)t|Int8_signed:(int,Bigarray.int8_signed_elt)t|Int8_unsigned:(int,Bigarray.int8_unsigned_elt)t|Int16_signed:(int,Bigarray.int16_signed_elt)t|Int16_unsigned:(int,Bigarray.int16_unsigned_elt)t|Int32:(int32,Bigarray.int32_elt)t|Int64:(int64,Bigarray.int64_elt)t|Int:(int,Bigarray.int_elt)t|Nativeint:(nativeint,Bigarray.nativeint_elt)t|Complex32:(Stdlib.Complex.t,Bigarray.complex32_elt)t|Complex64:(Stdlib.Complex.t,Bigarray.complex64_elt)t|Char:(char,Bigarray.int8_unsigned_elt)t|Float16:(float,Bigarray.float16_elt)tendmoduleLayout:sigtype('a:any)t='aBigarray.layout=|C_layout:Bigarray.c_layoutt|Fortran_layout:Bigarray.fortran_layouttendmoduleSpec:sigtype('a:any)t=|T:('a:any)('b:any)('c:any).('a,'b)Kind.t*'cLayout.t->'atendtype('a:any)t=|T:('a:any)('b:any)('c:any).('a,'b,'c)Bigarray.Array1.t->'at[@@unboxed](** Wraps a [Bigarray.Array1.t] as a parallel bigarray. *)val%templateof_bigarray:('a:any)('b:any)('c:any).('a,'b,'c)Bigarray.Array1.t@m->'at@m[@@modem=(uncontended,shared)](** Wraps a [Bigarray.kind] and [Bigarray.layout] as a parallel bigarray spec. *)valkind:('a,_)Kind.t->_Layout.t->'aSpec.t(** [length t] returns the number of elements in [t]. *)vallength:'at@contended->intincludeGetwithtype('a:any)t:='at(** @inline *)includeSetwithtype('a:any)t:='at(** @inline *)moduleSlice:Slicewithtype('a:any)array:='atval%templateof_slice:'aSlice.t@localm->'at@m[@@modem=(uncontended,shared)](** @inline *)includeInit[@modalityseparable]withtype('a:any)t:='atandtype('a:any)init:='aSpec.t*intincludeReducewithtype('a:any)t:='at(** @inline *)includeSortwithtype('a:any)t:='at(** @inline *)includeScanwithtype('a:any)t:='at(** @inline *)includeFilterwithtype('a:any)t:='at(** @inline *)includeInplacewithtype('a:any)t:='at(** @inline *)endend