def dot(self):

    def node2style(job):
        if (not self.needrun(job)):
            return 'rounded,dashed'
        if (self.dynamic(job) or job.dynamic_input):
            return 'rounded,dotted'
        return 'rounded'

    def format_wildcard(wildcard):
        (name, value) = wildcard
        if (DYNAMIC_FILL in value):
            value = '...'
        return '{}: {}'.format(name, value)
    node2rule = (lambda job: job.rule)
    node2label = (lambda job: '\\n'.join(chain([job.rule.name], sorted(map(format_wildcard, self.new_wildcards(job))))))
    dag = {job: self.dependencies[job] for job in self.jobs}
    return self._dot(dag, node2rule=node2rule, node2style=node2style, node2label=node2label)
def dot(self):

    def node2style(job):
        if (not self.needrun(job)):
            return 'rounded,dashed'
        if (self.dynamic(job) or job.dynamic_input):
            return 'rounded,dotted'
        return 'rounded'

    def format_wildcard(wildcard):
        (name, value) = wildcard
        if (DYNAMIC_FILL in value):
            value = '...'
        return '{}: {}'.format(name, value)
    node2rule = (lambda job: job.rule)
    node2label = (lambda job: '\\n'.join(chain([job.rule.name], sorted(map(format_wildcard, self.new_wildcards(job))))))
    dag = {job: self.dependencies[job] for job in self.jobs}
    return self._dot(dag, node2rule=node2rule, node2style=node2style, node2label=node2label)