vpAf      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef=Enable internal consistency checks for operations that could  corrupt the heap. g$Enable internal consistency checks.  This is NOT implied by f above. If you want both  you need to set both to `True.` h=Print tracing information for each DPH primitive to console. ( The tracing hooks are in dph-prim-parDAP Unlifted.hs fghfgh8;Records information about the use of a primitive operator. =These are the operator names that the vectoriser introduces. V The actual implementation of each operator varies depending on what DPH backend we' re using. C We only trace operators that are at least O(n) in complexity.  !"#$%&'()*+,-./0123456789:;<=>?&Print tracing information to console. BThis function is used to wrap the calls to DPH primitives defined  in  dph-prim-par:Data.Array.Parallel.Unlifted Tracing is only enabled when h in Data.Array.Parallel.Base.Config is i,  otherwise it' s a no-op. 8  !"#$%&'()*+,-./0123456789:;<=>?e?=;9654321/-,+*)('$#"!  >><:<78<><<<<<<0..<<<<<.%&<<<<<<....<..<<<<<<<><.<<<<.8c=;9654321/-,+*)('$#"!  >><:<78<><<<<<<0..<<<<<.%&<<<<<<....<..<<<<<<<><.<<<<.  !"#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJ @ABCDEFGHIJ BC@DEAFGHIJ @ABCDEFGHIJKLMKLMKLMN:Given a value of an algebraic type, the tag tells us what + data constructor was used to create it. OGet the N of a j value. k is 0, i is 1. P Convert a N to a j value. Q Convert a N to an l'. This is identity at the value level. R Convert an l to a N'. This is identity at the value level. NOPQRNOPQRmSBounds check, enabled when g = i. =The first integer is the length of the array, and the second 8 is the index. The second must be greater or equal to '0' and less than the " first integer. If the not then n with the o. TBounds check, enabled when f = i. FThis version is used to check operations that could corrupt the heap. =The first integer is the length of the array, and the second 8 is the index. The second must be greater or equal to '0' and less than the " first integer. If the not then n with the o. ULength check, enabled when g = i. 5Check that the second integer is greater or equal to `0' and less or equal + than the first integer. If the not then n with the o. VEquality check, enabled when g = i. The two a values must be equal, else n.  The first oG gives the location of the error, and the second some helpful message. W-Given an array length, check it is not zero. X6Throw an error saying something was not intitialised. The oJ must contain a helpful message saying what module the error occured in, N and the possible reasons for it. If not then a puppy dies at compile time. STUVWXSTUVWXY  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXSTUVWXNOPQRKLMY=Tag each element of an stream with its index in that stream.   indexed [42,93,13]  = [(0,42), (1,93), (2,13)] Z:Given a stream of pairs containing a count an an element, = replicate element the number of times given by the count. @The first parameter sets the size hint of the resulting stream.  ) replicateEach 10 [(2,10), (5,20), (3,30)] # = [10,10,20,20,20,20,20,30,30,30] [=Repeat each element in the stream the given number of times.   replicateEach 2 [10,20,30]  = [10,10,20,20,30,30] p"Multiply a size hint by a scalar. \GInterleave the elements of two streams. We alternate between the first + and second streams, stopping when we can't find a matching element.   interleave [2,3,4] [10,20,30] = [2,10,3,20,4,30]  interleave [2,3] [10,20,30] = [2,10,3,20]  interleave [2,3,4] [10,20] = [2,10,3,20,4] ]ECombine two streams, using a tag stream to tell us which of the data * streams to take the next element from. GIf there are insufficient elements in the data strams for the provided  tag stream then n.   combine2ByTag [0,1,1,0,0,1] [1,2,3] [4,5,6]  = [1,4,5,2,3,6] ^ACreate a stream of integer ranges. The pairs in the input stream 0 give the first and last value of each range. BThe first parameter gives the size hint for the resulting stream.  + enumFromToEach 11 [(2,5), (10,16), (20,22)] * = [2,3,4,5,10,11,12,13,14,15,16,20,21,22] _CCreate a stream of integer ranges. The triples in the input stream : give the first value, increment, length of each range. BThe first parameter gives the size hint for the resulting stream.  1 enumFromStepLenEach [(1,1,5), (10,2,4), (20,3,5)] ) = [1,2,3,4,5,10,12,14,16,20,23,26,29,32] `ISegmented Stream fold. Take segments from the given stream and fold each 5 using the supplied function and initial element.   foldSS (+) 0 [2, 3, 2] [10, 20, 30, 40, 50, 60, 70]  = [30,120,130] function to perform the fold initial element of each fold stream of segment lengths stream of input data stream of fold results aLike `8, but use the first member of each chunk as the initial  element for the fold. bSegmented Stream combine. Like ], except that the tags select T entire segments of each data stream, instead of selecting one element at a time.   1 combineSS [True, True, False, True, False, False]  [2,1,3] [10,20,30,40,50,60]  [1,2,3] [11,22,33,44,55,66] ( = [10,20,30,11,40,50,60,22,33,44,55,66] MThis says take two elements from the first stream, then another one element N from the first stream, then one element from the second stream, then three % elements from the first stream...  tag values &segment lengths for first data stream first data stream 'segment lengths for second data stream second data stream cHSegmented Strem append. Append corresponding segments from each stream.   appendSS [2, 1, 3] [10, 20, 30, 40, 50, 60]  [1, 3, 2] [11, 22, 33, 44, 55, 66] ( = [10,20,11,30,22,33,44,40,50,60,55,66] &segment lengths for first data stream first data stream 'segment lengths for second data stream second data stream d4Segmented Stream fold, with a fixed segment length. Like `* but use a fixed length for each segment. function to perform the fold initial element for fold length of each segment  data stream q Divide a size hint by a scalar. eSegmented Stream indices.    indicesSS 15 4 [3, 5, 7] " = [4,5,6,0,1,2,3,4,0,1,2,3,4,5,6] KNote that we can set the starting value of the first segment independently L via the second argument of indicesSS. We use this when distributing arrays # across worker threads, as a thread'$s chunk may not start exactly at a + segment boundary, so the index of a thread' s first data element may not be  zero. YZ[\]^_`abcde YZ[\]^_`abcde YZ[\]^_`abcder         !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvtuwtuxtuyz {| }~dph-base-0.5.1.1Data.Array.Parallel.Base"Data.Array.Parallel.Base.TracePrimData.Array.Parallel.Base.DTraceData.Array.Parallel.StreamData.Array.Parallel.Base.ConfigData.Array.Parallel.Base.TextData.Array.Parallel.Base.UtilData.Array.Parallel.Base.DebugbaseGHC.ReadReadGHC.STST readListPrecreadPrecreadList readsPrecrunST TracePrimTraceIndices_s TraceSum_r TraceFold_r TraceFold1_s TraceFold_s TraceAppend_sTraceReplicate_rsTraceReplicate_sTraceElementsSelRep2_1TraceElementsSelRep2_0TraceIndicesSelRep2TraceMkSelRep2TraceElementsSel2_1TraceElementsSel2_0TraceIndicesSel2 TraceTagsSel2 TraceMkSel2TraceEnumFromStepLenEachTraceEnumFromStepLenTraceEnumFromThenToTraceEnumFromTo TraceIndexed TraceScanTraceSumTraceAnd TraceFold1 TraceFold TraceZipWithtraceSrc1LengthtraceSrc2Length TraceFilterTraceMap TraceCombine2 TraceCombine TracePackTraceInterleave TraceAppendtraceDstLength TraceUpdatetraceModLengthTraceMBPermute TraceBPermuteTraceBPermuteDft TracePermute TraceDrop TraceExtract traceStarttraceSliceLength TraceIndex traceIndex TraceRepeattraceSrcLengthTraceReplicate traceCount tracePrim traceLoopST traceLoopIOtraceLoopEntry traceLoopExittraceLoopEntrySTtraceLoopExitSTtraceLoopEntryIOtraceLoopExitIOtraceFntraceArgtraceFshowsAppreadAppreadsAppTagfromBooltoBooltagToIntintToTagcheck checkCriticalcheckLencheckEq checkNotEmpty uninitialisedindexedSreplicateEachSreplicateEachRS interleaveScombine2ByTagSenumFromToEachSenumFromStepLenEachSfoldSSfold1SS combineSSappendSS foldValuesR indicesSS debugCriticaldebugtracePrimEnabledghc-prim GHC.TypesTrueBoolFalseInt outOfBoundsGHC.ErrerrorGHC.BaseStringmultSizedivSize