#!/usr/bin/env python
from htcondor_dag import Dag

# This is the simple diamond-shaped DAG example
dag = Dag('htcondor_ex0')
a = dag.job('A','A.condor',comment="This is node A")
b = dag.job('B','B.condor')
c = dag.job('C','C.condor')
d = dag.job('D','D.condor')
a.child(b,c)
d.parent(b,c)
dag.write()
#!/usr/bin/env python
import subprocess
from htcondor_dag import Dag, autorun

def bash(cmd):
    subprocess.check_call(["/bin/bash","-c","set -o pipefail; " + cmd])

def bash2(cmd):
    subprocess.check_call(["/bin/bash","-c","set -o pipefail; " + cmd])

autorun()

dag = Dag("htcondor_ex6")
diamond = dag.dag(id="DIAMOND", filename="diamond.dag")

d_bash = dag.defer(bash, output=None, retry=1)
d_bash2 = diamond.defer(bash2, output=None, retry=1)

# http://research.cs.wisc.edu/htcondor/manual/v7.8/2_10DAGMan_Applications.html#SECTION003107900000000000000

a = d_bash2("echo A")
b = d_bash2("echo B")
c = d_bash2("echo C")
d = d_bash2("echo D")
a.child(b,c)
d.parent(b,c)

# splice into the normal top-level dag
x = d_bash("echo X")
y = d_bash("echo Y")
#!/usr/bin/env python
import subprocess
from htcondor_dag import Dag, autorun

# Note: you can't set input=None because this is where htcondor_dag.py
# stores the picked arguments to call the function
def bash(cmd):
    subprocess.check_call(["/bin/bash","-c","set -o pipefail; " + cmd])

autorun()

dag = Dag("htcondor_ex5")
d_bash = dag.defer(bash, output=None, arguments=["one","\"two\"","spacey 'quoted' argument"],
                   environment={"one":1,"two":'"2"',"three":"spacey 'quoted' value"})

j1 = d_bash("tr 'a-z' 'A-Z' </etc/passwd >tmp1")
j2 = d_bash("tr 'a-z' 'A-Z' </etc/hosts >tmp2")
j3 = d_bash("cat tmp1 tmp2 >tmp.out").parent(j1, j2).var(job_files="tmp1,tmp2")
dag.write()
#!/usr/bin/env python
from htcondor_dag import Dag, autorun

# Limit the number of concurrent jobs which run in a particular category,
# in this case only 3 at a time.
   
def adder(a, b):
    return a + b

autorun()
dag = Dag("htcondor_ex4")
dag.maxjobs["adder"] = 3

d_adder = dag.defer(adder, category="adder")
d_adder(1, 1)
d_adder(2, 2)
d_adder(3, 3)
d_adder(4, 4)
d_adder(5, 5)
d_adder(6, 6)
dag.write()
#!/usr/bin/env python
from htcondor_dag import Dag, autorun, procid

# First we run a cluster of jobs, each of which returns a value.
# Then we run another job which prints all the results from the cluster.
   
def adder(a, b):
    return a + b

def printer(v):
    print repr(v)

autorun()

dag = Dag("htcondor_ex3")

j1 = dag.defer(adder, processes=10)(procid, 5)
dag.defer(printer, output="result.txt")(j1)

dag.write()
#!/usr/bin/env python
from htcondor_dag import Dag, autorun

# Two jobs, each writes text to its output file
   
def print_sum(a, b):
    print a + b

autorun(report_hostname=True)

dag = Dag('htcondor_ex1')
dag.defer(print_sum, output="res1.txt")(1, 2)
dag.defer(print_sum, output="res2.txt")(3, 4)
dag.write()
#!/usr/bin/env python
from htcondor_dag import Dag, autorun

# Two jobs write a python value to their output file; the
# third job waits for these jobs to complete, reads their values
# and writes text output.


def print_sum(a, b):
    print a + b

def adder(a, b):
    return a + b

autorun()

dag = Dag('htcondor_ex2')
d_print_sum = dag.defer(print_sum, request_memory=200, output="result.txt")
d_adder = dag.defer(adder, request_memory=100)

j1 = d_adder(1, 2)
j2 = d_adder(3, 4)
j3 = d_print_sum(j1, j2)
dag.write()