dispel tutorial - verce.eu · 1 packagedispel.datamine f 2 usedispel.core.randomlistsplit; 3...

36
Virtual Earthquake and seismology Research Community e-science environment in Europe Project 283543 – FP7-INFRASTRUCTURES-2011-2 – www.verce.eu – [email protected] DISPEL Tutorial Paul Martin VERCE Training Programme 3rd September 2012 www.verce.eu

Upload: doankhanh

Post on 10-Jan-2019

216 views

Category:

Documents


0 download

TRANSCRIPT

Virtual Earthquake and seismology Research Community e-science environment in Europe

Project 283543 – FP7-INFRASTRUCTURES-2011-2 – www.verce.eu – [email protected]

DISPEL Tutorial

Paul Martin

VERCE Training Programme

3rd September 2012

www.verce.eu

Workflow enactment

ComputeCluster

User Machine

DISPEL Tutorial 3rd September 2012 2 / 30

Workflow enactment

VERCE Gateway / Portal

ADMIRE Gateway

Data Store

Enactment Engine

Component Registry

Component Repository

DISPEL Tutorial 3rd September 2012 2 / 30

Workflow enactment

User Request

Dispel Request

DISPEL Tutorial 3rd September 2012 2 / 30

Workflow enactment

Delegation / Registry Lookup

DISPEL Tutorial 3rd September 2012 2 / 30

Workflow enactment

Instruction

DISPEL Tutorial 3rd September 2012 2 / 30

Workflow enactment

Data Request / Submission / Signalling

DISPEL Tutorial 3rd September 2012 2 / 30

Workflow enactment

Result Notification

DISPEL Tutorial 3rd September 2012 2 / 30

An example workflow

DISPEL Tutorial 3rd September 2012 3 / 30

A simple script

1 // Import PEs from the local registry.2 use dispel.db.SQLQuery;

3 use dispel.lang.Results;

4

5 // Create instances of PEs.6 SQLQuery query = new SQLQuery;

7 Results results = new Results;

8

9 // Construct workflow and feed in data.10 |-"SELECT * FROM littleblackbook WHERE id < 10"-| => query.expression;

11 |-"uk.org.UoE.dbA"-| => query.resource;

12 |-"10 entries from the little black book"-| => results.name;

13 query.data => results.input;

14

15 // Submit the entire workflow.16 submit;

DISPEL Tutorial 3rd September 2012 4 / 30

Demonstrating stream literals

1 // Import PEs from the local registry.2 use dispel.db.SQLQuery;

3

4 // Create instances of PEs.5 SQLQuery query = new SQLQuery;

6 Results results = new Results;

7

8 // Define a set of queries.9 String[] queries = new String[2];

10 queries[0] = "SELECT name FROM littleblackbook WHERE id < 10";

11 queries[1] = "SELECT name FROM littleblackbook WHERE id >= 10 AND id < 20";

12 queries[2] = "SELECT address FROM littleblackbook WHERE name = ’David Hume’";

13

14 // Construct workflow and feed in data.15 |-queries[0], queries[1], queries[2]-| => query.expression;

16 |-"uk.org.UoE.dbA", "uk.org.UoE.dbB", "uk.org.UoE.dbC"-| => query.resource;

17 |-"Results from the little black book"-| => results.name;

18 query.data => results.input;

19

20 // Submit the entire workflow.21 submit;

DISPEL Tutorial 3rd September 2012 5 / 30

Demonstrating stream literals

1 // Import PEs from the local registry.2 use dispel.db.SQLQuery;

3

4 // Create instances of PEs.5 SQLQuery query = new SQLQuery;

6 Results results = new Results;

7

8 // Define a set of queries.9 String[] queries = new String[2];

10 queries[0] = "SELECT name FROM littleblackbook WHERE id < 10";

11 queries[1] = "SELECT name FROM littleblackbook WHERE id >= 10 AND id < 20";

12 queries[2] = "SELECT address FROM littleblackbook WHERE name = ’David Hume’";

13

14 // Construct workflow and feed in data.15 |-queries[0], queries[1], queries[2]-| => query.expression;

16 |-repeat 3 of "uk.org.UoE.dbA"-| => query.resource;

17 |-"Results from the little black book"-| => results.name;

18 query.data => results.input;

19

20 // Submit the entire workflow.21 submit;

DISPEL Tutorial 3rd September 2012 6 / 30

A precocious script

1 // Import PEs from the local registry.2 use dispel.db.SQLQuery;

3 use dispel.tutorial.PrecociousChild;

4

5 // Create instances of PEs.6 PrecociousChild child = new PrecociousChild;

7 SQLQuery query = new SQLQuery;

8 Results results = new Results;

9

10 // Construct workflow and feed in data.11 child.output => query.expression;

12 |-repeat enough of "uk.org.UoE.dbA"-| => query.resource;

13 |-"Adult responses"-| => results.name;

14 query.data => results.input;

15

16 // Submit the entire workflow.17 submit;

DISPEL Tutorial 3rd September 2012 7 / 30

PE Specification

1 // Within the Dispel database package.2 package dispel.db {3 // Link to database ontology.4 namespace db "http://www.dispel-lang.org/resource/db";

5 // Type signature for the SQLQuery PE.6 Type SQLQuery is PE( <Connection:String::"db:SQLQuery" terminator expression; Connection:String::"db:URI" locator resource> =>

7 <Connection:[<rest>]::"db:TupleRowSet" data> );

8 // Register the PE.9 register SQLQuery;

10 }11

12 // Within the package of generically useful PEs.13 package dispel.core {14 // A generic interpolation PE with few restrictions.15 Type Interpolate is PE( Stype Element is Any; <Connection[]:Element inputs> => <Connection:Element output> );

16 // This PE evenly interpolates in order of input connections.17 Type OrderedInterpolate is Interpolate

18 with roundrobin inputs, @description = "Interpolates evenly by order of inputs.";

19

20 register Interpolate, OrderedInterpolate;

21 }22

23 // Within the Dispel filter package.24 package dispel.filter {25 Type AbstractFilter is PE( Stype Element is Any;

26 <Connection:Element inputs> => <Connection:Element filtered; Connection:Element unfiltered> )

27 with @description = "A filter splits input into filtered and unfiltered streams.";

28

29 Type HeadFilter is AbstractFilter

30 with filtered as head, unfiltered as tail, @description = "Diverts the head of a stream.";

31

32 Type ProgrammableIntegerFilter is PE( <Connection:Integer terminator input; Connection:String initiator expression;

33 Connection[]:Integer lockstep parameters> =>

34 <Connection:Integer filtered; Connection:Integer unfiltered> )

35 with @description = "Splits the input integer stream into ’filtered’ and ’unfiltered’ streams in" +

36 "accordance with the expression and parameters given.";

37

38 register AbstractFilter, HeadFilter, ProgrammableIntegerFilter;

39 }40

DISPEL Tutorial 3rd September 2012 8 / 30

Constructing new PEs

1 package tutorial.example {2 // Import existing PE from the registry.3 use dispel.db.SQLQuery;

4

5 // Define new PE type.6 Type SQLToTupleList is PE( <Connection expression> => <Connection data> );

7

8 // Define new PE constructor.9 PE<SQLToTupleList> lockSQLDataSource(String dataSource) {

10 SQLQuery query = new SQLQuery;

11 |-repeat enough of dataSource-| => query.resource;

12 return PE( <Connection expression = query.expression> =>

13 <Connection data = query.data> );

14 }15

16 // Create new PEs.17 PE<SQLToTupleList> TutorialQuery = lockSQLDataSource("uk.org.UoE.dbA");

18 PE<SQLToTupleList> MirrorQuery = lockSQLDataSource("uk.org.UoE.dbB");

19

20 // Register new entities.21 register TutorialQuery, MirrorQuery;

22 }

DISPEL Tutorial 3rd September 2012 9 / 30

Using the new PE

1 // Import PEs from the local registry.2 use tutorial.example.TutorialQuery;

3

4 // Create instances of PEs (no import necessary).5 TutorialQuery query = new TutorialQuery;

6 Results results = new Results;

7

8 // Connect PEI together to create workflow (no data source needed).9 |-"SELECT * FROM littleblackbook WHERE id <= 10"-| => query.expression;

10 |-"10 entries from the little black book"-| => results.name;

11 query.data => results.input;

12

13 // Submit workflow.14 submit results;

DISPEL Tutorial 3rd September 2012 10 / 30

Multicasting with composite PEs

MulticastQuery

QueryGenerator

"uk.org.UoE.dbA"

"uk.org.UoE.dbB"

"uk.org.UoE.dbC"

Results

DISPEL Tutorial 3rd September 2012 11 / 30

Multicasting with composite PEs

QueryGenerator

"uk.org.UoE.dbA"

"uk.org.UoE.dbB"

"uk.org.UoE.dbC"

SQLQuery

SQLQuery

SQLQuery

ListIntersect Results

DISPEL Tutorial 3rd September 2012 12 / 30

A PE constructor featuring iteration

1 package tutorial.example {2 use dispel.db.SQLQuery;

3 use dispel.list.ListIntersect;

4

5 // A PE type which queries multiple sources.6 Type MulticastQuery is PE( <Connection expression; Connection[] sources> => <Connection data> );

7

8 // Use parallel SQLQuery instances to corroborate results.9 PE<MulticastQuery> makeCorroboratedSQLQuery(Integer size) {

10 // Define aliases for workflow inputs in advance.11 Connection expr;

12 Connection[] srcs = new Connection[size];

13 // Create instances of internal PEs.14 SQLQuery[] queries = new SQLQuery[size];

15 ListIntersect intersect = new ListIntersect with inputs.length = size;

16

17 // Connect SQLQuery instances in parallel.18 for (Integer i = 0; i < size; i++) {19 queries[i] = new SQLQuery;

20 expr => queries[i].expression;

21 srcs[i] => queries[i].resource;

22 queries[i].data => intersect.inputs[i];

23 }24

25 // Return intersection of query results.26 return PE( <Connection expression = expr; Connection[] sources = srcs> =>

27 <Connection data = intersect.output> );

28 }29

30 register MulticastQuery, makeCorroboratedSQLQuery;

31 }

DISPEL Tutorial 3rd September 2012 13 / 30

Multicasting with composite PEs

QueryGenerator

"uk.org.UoE.dbA"

"uk.org.UoE.dbB"

"uk.org.UoE.dbC"

SQLQuery

SQLQuery

SQLQuery

ListMerge Results

QueryGenerator

"uk.org.UoE.dbD"

"uk.org.UoE.dbE"

"uk.org.UoE.dbF"

SQLQuery

SQLQuery

SQLQuery

ListUnion Results

DISPEL Tutorial 3rd September 2012 14 / 30

A PE constructor featuring selection

1 package tutorial.example {2 use dispel.db.SQLQuery;

3 use dispel.list.Combiner;

4 use dispel.list.ListUnion;

5 use dispel.list.ListMerge;

6 // Import abstract type defined earlier.7 use tutorial.example.MulticastQuery;

8

9 // Use parallel SQLQuery instances to collect results.10 PE<MulticastQuery> makeMassSQLQuery(Integer size, Boolean unique) {11 // Prepare components for connection.12 Connection expr;

13 Connection[] srcs = new Connection[size];

14 SQLQuery[] queries = new SQLQuery[size];

15 Combiner merge;

16 // Select combiner based on uniqueness condition.17 if (unique) merge = new ListUnion with inputs.length = size;

18 else merge = new ListMerge with inputs.length = size;

19

20 // Connect SQLQuery instances in parallel.21 for (Integer i = 0; i < size; i++) {22 queries[i] = new SQLQuery;

23 expr => queries[i].expression;

24 srcs[i] => queries[i].resource;

25 queries[i].data => merge.inputs[i];

26 }27

28 // Return merger of query results.29 return PE( <Connection expression = expr; Connection[] sources = srcs> =>

30 <Connection data = merge.output> );

31 }32

33 register makeMassSQLQuery;

34 }35

DISPEL Tutorial 3rd September 2012 15 / 30

k-fold cross validation

DataValidator

DataProducer

Results

DISPEL Tutorial 3rd September 2012 16 / 30

k-fold cross validation

1 package dispel.datamine {2 use dispel.core.DataPartition;

3 use dispel.list.ListMerge;

4

5 // Produces a k-fold cross validation workflow pattern.6 PE<Validator> makeCrossValidator(Integer k, PE<TrainClassifier> Train,

7 PE<ApplyClassifier> Classify, PE<ModelEvaluate> Evaluate) {8 Connection input;

9 // Data must be partitioned and re-combined for each fold.10 PE<DataPartitioner> FoldData = makeDataFold(k);

11 FoldData fold = new FoldData;

12 ListMerge union = new ListMerge with inputs.length = k;

13

14 // For each fold, train a classifier then evaluate it.15 input => fold.data;

16 for (Integer i = 0; i < k; i++) {17 Train train = new Train;

18 Classify classify = new Classify;

19 Evaluate evaluate = new Evaluate;

20

21 fold.training[i] => train.data;

22 train.classifier => classify.classifier;

23 fold.test[i] => classify.data;

24 classify.result => evaluate.predicted;

25 fold.test[i] => evaluate.expected;

26 evaluate.score => union.inputs[i];

27 }28

29 // Return cross validation pattern.30 return PE( <Connection data = input> => <Connection results = union.output> );

31 }32

33 register makeCrossValidator;

34 }

DISPEL Tutorial 3rd September 2012 17 / 30

k-fold cross validation

DataPartitioner

TrainClassifier

ApplyClassifier

ModelEvaluator

TrainClassifier

TrainClassifier

ApplyClassifier

ApplyClassifier

ModelEvaluator

ModelEvaluator

ListMerge

DataProducer

Results

DISPEL Tutorial 3rd September 2012 18 / 30

k-fold cross validation

1 package dispel.datamine {2 use dispel.core.RandomListSplit;

3 use dispel.list.ListMerge;

4

5 // Produces a PE capable of splitting data for k-fold cross validation.6 PE<DataPartitioner> makeDataFold(Integer k) {7 Connection input;

8 Connection[] trainingData = new Connection[k];

9 Connection[] testData = new Connection[k];

10 // Create instance of PEs for randomly splitting and recombining data.11 RandomListSplit sample = new RandomListSplit with results.length = k;

12 ListMerge[] union = new ListMerge[k];

13

14 // After partitioning data, form training and test sets.15 input => sample.input;

16 for (Integer i = 0; i < k; i++) {17 union[i] = new TupleUnionAll with inputs.length = k - 1;

18 for (Integer j = 0; j < i; j++) sample.outputs[j] => union[i].inputs[j];

19 sample.outputs[i] => testData[i];

20 for (Integer j = i + 1; j < k; j++) sample.outputs[j] => union[i].inputs[j - 1];

21 union[i].output => trainingData[i];

22 }23

24 // Return data folding pattern.25 return PE( <Connection data = input> =>

26 <Connection[] training = trainingData; Connection[] test = testData> );

27 }28

29 register makeDataFold;

30 }

DISPEL Tutorial 3rd September 2012 19 / 30

k-fold cross validation

ListMerge

ListMerge

ListMerge

RandomListSplit

TrainClassifier

ApplyClassifier

ModelEvaluator

TrainClassifier

TrainClassifier

ApplyClassifier

ApplyClassifier

ModelEvaluator

ModelEvaluator

ListMerge

DataProducer

Results

DISPEL Tutorial 3rd September 2012 20 / 30

k-fold cross validation

1 package dispel.datamine {2 // Import test PEs.3 use dispel.tutorial.DataProducer;

4 use dispel.tutorial.TrainingAlgorithmA;

5 use dispel.tutorial.BasicClassifier;

6 use dispel.tutorial.MeanEvaluator;

7

8 // Create a cross validator PE.9 PE<Validator> CrossValidator

10 = makeCrossValidator(12, TrainingAlgorithmA, BasicClassifier, MeanEvaluator);

11 // Make instances of PEs for workflows.12 DataProducer producer = new DataProducer;

13 CrossValidator validator = new CrossValidator;

14 Results results = new Results;

15

16 // Connect workflow.17 |- "uk.org.UoE.data.corpus11" -| => producer.source;

18 producer.data => validator.data;

19 validator.results => results.input;

20 |- "Classifier Scores" -| => results.name;

21

22 submit;

23 }

DISPEL Tutorial 3rd September 2012 21 / 30

k-fold cross validation

expression resource

queryTestuk.org.ogsadai.SQLQuery

data

expression data

uk.org.ogsadai.TupleArithmeticSample

result[0] result[2] result[1] result[3]

MySQLResourceselect outlook, temp...

result

name input

resultseu.admire.Results

select outlook, temp...

expression resource

queryTrainuk.org.ogsadai.SQLQuery

data

MySQLResource

columnIds aggregates data resultColumnNames

uk.org.ogsadai.GroupBy

result

data[0] data[2] data[1] data[3]

uk.org.ogsadai.TupleUnionAll

data

play

nominalValues columnIndices data classIndex

eu.admire.BuildClassifier

classifier

[, [, sunny, rainy, overcast, ], [, true, false, ], [, yes, no, ], ]

nominalValues columnIndices data classIndex

eu.admire.BuildClassifier

classifier

[, expected, actual, count, ]

columnIds aggregates data resultColumnNames

uk.org.ogsadai.GroupBy

result

play[, [, sunny, rainy, overcast, ], [, true, false, ], [, yes, no, ], ]

columnIds aggregates data resultColumnNames

uk.org.ogsadai.GroupBy

result

data[0] data[1]

uk.org.ogsadai.TupleSimpleMerge

result

[, expected, actual, count, ]

predicted

resultColumnName classifier data

eu.admire.datamine.Classify

result

[, COUNT(*), ]

predicted

resultColumnName classifier data

eu.admire.datamine.Classify

result

[, SUM(count), ]

columnIds aggregates data resultColumnNames

uk.org.ogsadai.GroupBy

result

resultColumnName classifier data

eu.admire.datamine.Classify

result

[, expected, actual, ]

data[0] data[1]

uk.org.ogsadai.TupleSimpleMerge

result

[, expected, actual, count, ][, play, predicted, ]

data[0] data[2] data[1]

uk.org.ogsadai.TupleUnionAll

data

nominalValues columnIndices data classIndex

eu.admire.BuildClassifier

classifier

[, outlook, windy, play, ]

[, COUNT(*), ]

data[0] data[1]

uk.org.ogsadai.TupleSimpleMerge

result

columnIds aggregates data resultColumnNames

uk.org.ogsadai.GroupBy

result

[, [, sunny, rainy, overcast, ], [, true, false, ], [, yes, no, ], ]

nominalValues columnIndices data classIndex

eu.admire.BuildClassifier

classifier

data[0] data[2] data[1]

uk.org.ogsadai.TupleUnionAll

data

data[0] data[1]

uk.org.ogsadai.TupleSimpleMerge

result

resultColumnName classifier data

eu.admire.datamine.Classify

result

play Floor(Rand(54783) * ...

[, play, predicted, ]

data[0] data[2] data[1]

uk.org.ogsadai.TupleUnionAll

data

[, outlook, windy, play, ][, outlook, windy, play, ]

[, expected, actual, count, ]

[, [, sunny, rainy, overcast, ], [, true, false, ], [, yes, no, ], ]

[, COUNT(*), ]

play

Floor(Rand(54783) * ...

expression data

uk.org.ogsadai.TupleArithmeticSample

result[0] result[2] result[1] result[3]

[, play, predicted, ] [, play, predicted, ]

data[0] data[2] data[1]

uk.org.ogsadai.TupleUnionAll

data

predicted

[, expected, actual, count, ]

[, outlook, windy, play, ]

predicted

[, COUNT(*), ]

DISPEL Tutorial 3rd September 2012 22 / 30

Sieve of Eratosthenes

PrimeGenerator

DISPEL Tutorial 3rd September 2012 23 / 30

Sieve of Eratosthenes

DISPEL Tutorial 3rd September 2012 24 / 30

Sieve of Eratosthenes

1 package tutorial.example {2 use dispel.filter.AbstractFilter;

3 use dispel.filter.HeadFilter;

4 use dispel.filter.ProgrammableIntegerFilter;

5

6 // Define sieve element constructor.7 PE<AbstractFilter> makeSieveFilter() {8 // Create reference to input connection.9 Connection:Integer input;

10 // Instantiate internal components.11 HeadFilter split = new HeadFilter;

12 ProgrammableIntegerFilter divide = new ProgrammableIntegerFilter with parameters.length = 1;

13

14 // Construct internal workflow.15 |-"x if (x % $0) == 0"-| => divide.expression;

16 input => split.input;

17 split.head => divide.parameter[0];

18 split.tail => divide.input;

19 divide.unfiltered => discard;

20

21 // Output first integer received and all indivisible integers.22 return PE( <Connection input = input> =>

23 <Connection filtered = split.head; Connection unfiltered = divide.filtered> );

24 }25

26 // Create the sieve element PE.27 PE<AbstractFilter> SieveFilter = makeSieveFilter();

28

29 register SieveFilter;

30 }31

DISPEL Tutorial 3rd September 2012 25 / 30

Sieve of Eratosthenes

1 package tutorial.example {2 use dispel.core.Interpolate;

3 use tutorial.example.SieveFilter;

4 use dispel.math.PrimeGenerator;

5

6 // Define sieve constructor.7 PE<PrimeGenerator> makeSieveOfEratosthenes(Integer count) {8 // Instantiate internal components.9 SieveFilter filter = new SieveFilter[count];

10 Interpolate interpolate = new Interpolate with roundrobin inputs, input.length = count;

11

12 // Initialise sieve elements.13 for (Integer i = 0; i < count - 1; i++) filter[i] = new SieveFilter with terminator output;

14 filter[count - 1] = new SieveFilter with terminator prime;

15

16 // Construct internal workflow.17 |-x for x in 2..-| => filter[0].input;

18 for (Integer i = 0; i < count - 1; i++) {19 filter[i].unfiltered => filter[i + 1].input;

20 filter[i].filtered => interpolate.inputs[i];

21 }22 filter[count - 1].unfiltered => discard;

23 filter[count - 1].filtered => interpolate.input[count - 1];

24 filter[count - 1].filtered => stop;

25

26 // Return all primes generated.27 return PE( <> => <Connection primes = interpolate.output> );

28 }29

30 register makeSieveOfEratosthenes;

31 }

DISPEL Tutorial 3rd September 2012 26 / 30

Sieve of Eratosthenes

1 package tutorial.example {2 // Import abstract PE type and constructor.3 use dispel.math.PrimeGenerator;

4

5 // Construct the sieve.6 PE <PrimeGenerator> SoE100 = makeSieveOfEratosthenes(100);

7 SoE100 sieve100 = new SoE100;

8 Results results = new Results;

9

10 // Construct the top-level workflow.11 |-"100 prime numbers"-| => results.name;

12 sieve100.primes => results.input;

13

14 // Submit the workflow.15 submit;

16 }

DISPEL Tutorial 3rd September 2012 27 / 30

Sieve of Eratosthenes

nam

ein

put

resu

lts

eu.a

dm

ire.

Res

ults

The

fir

st 5

pri

me

nu...

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

r

inpu

t[0

]in

put[

2]in

put[

1]in

put[

3]in

put[

4]

eu.a

dm

ire.

mat

h.C

om

bine

r

out

put

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

eu.a

dm

ire.

mat

h.N

umbe

rGen

erat

or

out

put

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

DISPEL Tutorial 3rd September 2012 28 / 30

Sieve of Eratosthenes

nam

ein

put

resu

lts

eu.a

dm

ire.

Res

ults

The

fir

st 1

00

pri

me

...

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t[12

]in

put[

6]

inpu

t[13

]in

put[

19]

inpu

t[5

]in

put[

18]

inpu

t[0

]in

put[

7]in

put[

8]in

put[

17]

inpu

t[2]

inpu

t[9

]in

put[

10]

inpu

t[16

]in

put[

1]in

put[

15]

inpu

t[14

]in

put[

3]in

put[

11]

inpu

t[4

]

eu.a

dm

ire.

mat

h.C

om

bine

r

out

put

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

r

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

eu.a

dm

ire.

mat

h.N

umbe

rGen

erat

or

out

put

DISPEL Tutorial 3rd September 2012 29 / 30

Sieve of Eratosthenes

The

fir

st 1

00

pri

me

...

nam

ein

put

resu

lts

eu.a

dm

ire.

Res

ults

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

r

inpu

t[4

0]

inpu

t[22

]in

put[

95

]in

put[

67]

inpu

t[4

9]

inpu

t[12

]in

put[

31]

inpu

t[20

]in

put[

6]

inpu

t[75

]in

put[

27]

inpu

t[5

5]

inpu

t[9

6]

inpu

t[89

]in

put[

68]

inpu

t[6

2]in

put[

19]

inpu

t[34

]in

put[

83]

inpu

t[13

]in

put[

41]

inpu

t[4

8]in

put[

5]

inpu

t[28

]in

put[

69

]in

put[

33]

inpu

t[9

7]in

put[

18]

inpu

t[6

1]in

put[

88]

inpu

t[74

]in

put[

42]

inpu

t[25

]in

put[

47]

inpu

t[5

6]

inpu

t[84

]in

put[

70]

inpu

t[7]

inpu

t[9

1]in

put[

81]

inpu

t[0

]in

put[

46

]in

put[

98]

inpu

t[73

]in

put[

53]

inpu

t[9

0]

inpu

t[9

9]

inpu

t[26

]in

put[

36]

inpu

t[8]

inpu

t[4

5]

inpu

t[35

]in

put[

63]

inpu

t[72

]in

put[

54

]in

put[

82]

inpu

t[17

]in

put[

2]in

put[

9]

inpu

t[5

1]in

put[

86]

inpu

t[4

4]

inpu

t[37

]in

put[

58]

inpu

t[6

4]

inpu

t[9

2]in

put[

16]

inpu

t[71

]in

put[

10]

inpu

t[5

2]in

put[

78]

inpu

t[4

3]in

put[

30]

inpu

t[23

]in

put[

15]

inpu

t[38

]in

put[

85]

inpu

t[29

]in

put[

1]in

put[

80]

inpu

t[5

7]in

put[

65

]in

put[

24]

inpu

t[79

]in

put[

93]

inpu

t[14

]in

put[

21]

inpu

t[6

0]

inpu

t[77

]in

put[

3]in

put[

94

]in

put[

66

]in

put[

32]

inpu

t[39

]in

put[

11]

inpu

t[4

]in

put[

50

]in

put[

87]

inpu

t[5

9]

inpu

t[76

]

eu.a

dm

ire.

mat

h.C

om

bine

r

out

put

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

eu.a

dm

ire.

mat

h.N

umbe

rGen

erat

or

out

put

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

inpu

t

eu.a

dm

ire.

mat

h.D

ivis

ionF

ilte

r

div

iso

rre

mai

nder

DISPEL Tutorial 3rd September 2012 30 / 30