Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
153 commits
Select commit Hold shift + click to select a range
f6e2bc8
vine: separate pending and ready tasks
JinZhou5042 May 1, 2025
9abf3e5
rename func name
JinZhou5042 May 2, 2025
89fd467
aggressively send tasks
JinZhou5042 May 2, 2025
fbcb4f4
just send one task
JinZhou5042 May 2, 2025
a47e419
Merge branch 'cooperative-computing-lab:master' into separate_pending…
JinZhou5042 May 25, 2025
8f234f3
use vine_schedule_have_committable_resources
May 25, 2025
2333d65
static
May 25, 2025
904b08b
vine_schedule_rotate_pending
May 25, 2025
96162e9
revert
May 25, 2025
de0d70d
adjust location
May 25, 2025
aff40f7
fix int done
May 25, 2025
8961a15
Merge branch 'cooperative-computing-lab:master' into separate_pending…
JinZhou5042 May 29, 2025
00c7300
Merge branch 'cooperative-computing-lab:master' into separate_pending…
JinZhou5042 Jun 12, 2025
b269fa3
Merge branch 'cooperative-computing-lab:master' into separate_pending…
JinZhou5042 Jun 20, 2025
7f589f2
vine_schedule_count_committable_cores
Jun 20, 2025
84c135c
Merge branch 'cooperative-computing-lab:master' into separate_pending…
JinZhou5042 Jun 27, 2025
f944fc6
Merge branch 'cooperative-computing-lab:master' into separate_pending…
JinZhou5042 Jun 27, 2025
a217aa8
merge
Jun 30, 2025
ed57fe0
Merge remote-tracking branch 'origin/separate_pending_and_ready_tasks…
Jun 30, 2025
8b9c37c
Merge branch 'cooperative-computing-lab:master' into separate_pending…
JinZhou5042 Jul 5, 2025
c9ccf6a
Merge branch 'cooperative-computing-lab:master' into separate_pending…
JinZhou5042 Sep 23, 2025
6714bca
vine: function infile load mode
Oct 13, 2025
a78dc95
specify utf-8
Oct 13, 2025
83cd050
utf-8
Oct 13, 2025
d6f2fea
vine: some bug fixes for the library code
Oct 13, 2025
d79b1ed
dttools: progress_bar src and test
Oct 14, 2025
354a6d4
add unit
Oct 14, 2025
81b228f
format issue
Oct 14, 2025
d5dad06
vine: valid link when sending message on worker
Oct 14, 2025
5b5c142
merge
Oct 14, 2025
a599721
Merge remote-tracking branch 'origin/progress-bar' into task-graph
Oct 14, 2025
ad3f0fb
Merge remote-tracking branch 'origin/worker-bug-fix' into task-graph
Oct 14, 2025
39b1d66
vine: LIST_ITERATE_REVERSE
Oct 14, 2025
e94875e
temp
Oct 14, 2025
15fe7fd
Merge remote-tracking branch 'origin/LIST_ITERATE_REVERSE' into task-…
Oct 14, 2025
40e9679
vine: task graph executor in C
Oct 14, 2025
21b25a4
simple fix
Oct 14, 2025
648071f
braces in block
Oct 14, 2025
8242136
type fix
Oct 14, 2025
c841f6c
type fix
Oct 14, 2025
39168ef
lint
Oct 14, 2025
e8c23e6
some fixes
Oct 15, 2025
ef0e8a2
bug
Oct 15, 2025
6b527b1
use proxy function and library
Oct 15, 2025
b4e5a7b
comment functions
Oct 15, 2025
1955fd1
use a separate directory
Oct 15, 2025
6b1a5db
backup
Oct 16, 2025
8cd855f
libtask
Oct 16, 2025
5cb9b49
dagvine
Oct 16, 2025
38c7cff
new interface
Oct 16, 2025
dbe57a8
api change
Oct 16, 2025
6bf5de3
new
Oct 16, 2025
2032815
vine task graph tuning
Oct 16, 2025
642d144
new version
Oct 17, 2025
3fab110
remove _task_graph
Oct 18, 2025
5b85f46
new
Oct 18, 2025
ec96041
reg
Oct 18, 2025
767988f
sog && reg
Oct 18, 2025
fa50958
sog
Oct 18, 2025
0a0dd40
milestone
Oct 19, 2025
73308fb
new files
Oct 19, 2025
90476b8
lint and format
Oct 19, 2025
256c02f
rename executor
Oct 19, 2025
ea9285f
checkpoint works
Oct 19, 2025
35243c5
update apis
Oct 19, 2025
7ba4fac
make
Oct 19, 2025
728531b
lint
Oct 19, 2025
ac40b74
make format
Oct 19, 2025
76d55c8
comment
Oct 20, 2025
31af425
Merge branch 'cooperative-computing-lab:master' into task-graph
JinZhou5042 Oct 20, 2025
945e26f
file name fix
Oct 20, 2025
5d00612
Merge branch 'cooperative-computing-lab:master' into separate_pending…
JinZhou5042 Oct 21, 2025
c668184
rename to vinedag
Oct 21, 2025
b8bca0d
add three fields
Oct 21, 2025
4beda4d
Merge remote-tracking branch 'origin/separate_pending_and_ready_tasks…
Oct 21, 2025
1575045
calculate time spent on scheduling
Oct 21, 2025
eabf0c3
Merge remote-tracking branch 'origin/separate_pending_and_ready_tasks…
Oct 21, 2025
c107a9c
gpus
Oct 22, 2025
ec0c8c5
Merge remote-tracking branch 'origin/separate_pending_and_ready_tasks…
Oct 22, 2025
cc27109
time metrics
Oct 29, 2025
a9b95b2
optimized put
Oct 29, 2025
363b5e7
lint
Oct 29, 2025
c7e9d65
lint
Oct 29, 2025
2faa0d1
time metrics
Oct 29, 2025
fd06a26
new structure
Nov 1, 2025
cca3170
git ignore
Nov 1, 2025
b8a3472
Merge branch 'cooperative-computing-lab:master' into task-graph
JinZhou5042 Nov 3, 2025
c1b4e67
revert vine_manager_put_task
Nov 3, 2025
51c13bc
Merge remote-tracking branch 'origin/task-graph' into task-graph
Nov 3, 2025
c0cc116
traverse w->current_libraries instead of w->current_tasks
Nov 3, 2025
2430286
Merge remote-tracking branch 'origin/use-current-library' into task-g…
Nov 3, 2025
a8dd136
merge
Nov 3, 2025
0372e72
revert push_task_to_ready_tasks
Nov 3, 2025
1059321
vine: multiply task priority on resource exhaustion
Nov 3, 2025
409fdd9
Merge remote-tracking branch 'origin/push_task_to_ready_tasks' into t…
Nov 3, 2025
7850141
vine: clean redundant input replicas upon task completion
Nov 3, 2025
3bcc9d0
lint
Nov 3, 2025
128afce
Merge branch 'cooperative-computing-lab:master' into clean_redundant_…
JinZhou5042 Nov 4, 2025
203736a
make it an argument
Nov 4, 2025
af1eb9d
shift-disk-load
Nov 4, 2025
8aab2df
merge
Nov 4, 2025
e3e51b5
lint
Nov 4, 2025
f6e2b0e
comment
Nov 4, 2025
caff977
vine_temp
Nov 4, 2025
cdd96a8
vine: vine_temp.c
Nov 4, 2025
f590c77
merge
Nov 4, 2025
d10c7ac
lint
Nov 4, 2025
57673e7
trigger rebuild
Nov 4, 2025
1d91659
comments
Nov 5, 2025
ed1fc23
remove unrelated code
Nov 5, 2025
17da0b5
Merge remote-tracking branch 'origin/master' into progress-bar
Nov 5, 2025
8280ef6
fix flicker
Nov 5, 2025
ddc460c
update doc
Nov 6, 2025
176201f
fix comment
Nov 6, 2025
b6880b2
trigger rebuild
Nov 6, 2025
062c4d3
Merge branch 'cooperative-computing-lab:master' into library-network-…
JinZhou5042 Nov 10, 2025
ba0b985
review fix
Nov 10, 2025
289e8ee
merge
Dec 3, 2025
c89bd85
modify project name
Dec 3, 2025
111f989
Merge branch 'cooperative-computing-lab:master' into library-network-…
JinZhou5042 Dec 4, 2025
86cbc13
fix
Dec 4, 2025
67b29a5
fix comments
Jan 5, 2026
876a24e
Merge branch 'cooperative-computing-lab:master' into vine_temp
JinZhou5042 Jan 5, 2026
40a0929
merge
Jan 5, 2026
b1e70df
clean
Jan 5, 2026
581208e
merge
Jan 5, 2026
56892f2
merge
Jan 5, 2026
b5d8a0f
merge
Jan 5, 2026
f953106
Merge remote-tracking branch 'origin/library-network-code-bugfix' int…
Jan 5, 2026
058466e
update
Jan 5, 2026
da8aa18
rename recovery_tasks_submitted
Jan 5, 2026
39ae787
timestamp format
Jan 5, 2026
1b0cdf1
vine: check whether hash table key is present before inserting
Jan 6, 2026
ff7eeb2
fix hash table insertion
Jan 6, 2026
91ed9df
Merge remote-tracking branch 'origin/duplicate-key-insertion' into ta…
Jan 6, 2026
933946b
merge
Jan 6, 2026
fe47036
Add example target to Makefile for running example_blueprint
Jan 6, 2026
bc442cd
Add example target to Makefile for running example_blueprint
Jan 6, 2026
747a647
temp
Jan 7, 2026
ffda413
merge
Jan 7, 2026
97993b4
support new dask expr
Jan 8, 2026
2a6d2ca
revert vine_worker
Jan 8, 2026
7d729ab
support dask expressions
Jan 8, 2026
a7d05b1
gitignore
Jan 8, 2026
23331bf
remove context graph from makefile
Jan 8, 2026
6f6aca5
convert bg to dask expr
Jan 9, 2026
a4d078d
support internal in/out
Jan 9, 2026
160c2b9
auto recovery
Jan 9, 2026
f43bd83
rename to User
Jan 9, 2026
845e0a6
block rec tasks w missing inputs
Jan 9, 2026
3036a0d
Merge remote-tracking branch 'origin/master' into task-graph
Jan 12, 2026
3abe87b
add compute makespan
Jan 15, 2026
4222532
use processing_transfers in vine_cache_check_files
Jan 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 24 additions & 6 deletions poncho/src/poncho/library_network_code.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@
r, w = os.pipe()
exec_method = None

# infile load mode for function tasks inside this library
function_infile_load_mode = None


# This class captures how results from FunctionCalls are conveyed from
# the library to the manager.
Expand Down Expand Up @@ -85,6 +88,18 @@ def sigchld_handler(signum, frame):
os.write(w, b"a")


# Load the infile for a function task inside this library
def load_function_infile(in_file_path):
if function_infile_load_mode == "cloudpickle":
with open(in_file_path, "rb") as f:
return cloudpickle.load(f)
elif function_infile_load_mode == "json":
with open(in_file_path, "r", encoding="utf-8") as f:
return json.load(f)
else:
raise ValueError(f"invalid infile load mode: {function_infile_load_mode}")


# Read data from worker, start function, and dump result to `outfile`.
def start_function(in_pipe_fd, thread_limit=1):
# read length of buffer to read
Expand Down Expand Up @@ -131,8 +146,7 @@ def start_function(in_pipe_fd, thread_limit=1):
os.chdir(function_sandbox)

# parameters are represented as infile.
with open("infile", "rb") as f:
event = cloudpickle.load(f)
event = load_function_infile("infile")

# output of execution should be dumped to outfile.
result = globals()[function_name](event)
Expand All @@ -158,11 +172,10 @@ def start_function(in_pipe_fd, thread_limit=1):
return -1, function_id
elif exec_method == "fork":
try:
arg_infile = os.path.join(function_sandbox, "infile")
with open(arg_infile, "rb") as f:
event = cloudpickle.load(f)
infile_path = os.path.join(function_sandbox, "infile")
event = load_function_infile(infile_path)
except Exception:
stdout_timed_message(f"TASK {function_id} error: can't load the arguments from {arg_infile}")
stdout_timed_message(f"TASK {function_id} error: can't load the arguments from {infile_path}")
return -1, function_id
p = os.fork()
if p == 0:
Expand Down Expand Up @@ -368,11 +381,16 @@ def main():
global exec_method
exec_method = library_info['exec_mode']

# set infile load mode of functions in this library
global function_infile_load_mode
function_infile_load_mode = library_info['function_infile_load_mode']

# send configuration of library, just its name for now
config = {
"name": library_info['library_name'],
"taskid": args.task_id,
"exec_mode": exec_method,
"function_infile_load_mode": function_infile_load_mode,
}
send_configuration(config, out_pipe_fd, args.worker_pid)

Expand Down
11 changes: 9 additions & 2 deletions poncho/src/poncho/package_serverize.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ def pack_library_code(path, envpath):
# @param exec_mode The execution mode of functions in this library.
# @param hoisting_modules A list of modules imported at the preamble of library, including packages, functions and classes.
# @param library_context_info A list containing [library_context_func, library_context_args, library_context_kwargs]. Used to create the library context on remote nodes.
# @param function_infile_load_mode The mode to load infile for function tasks inside this library.
# @return A hash value.
def generate_library_hash(library_name,
function_list,
Expand All @@ -186,7 +187,8 @@ def generate_library_hash(library_name,
add_env,
exec_mode,
hoisting_modules,
library_context_info):
library_context_info,
function_infile_load_mode):
library_info = [library_name]
function_list = list(function_list)
function_names = set()
Expand Down Expand Up @@ -234,6 +236,8 @@ def generate_library_hash(library_name,
for kwarg in library_context_info[2]:
library_info.append(str(kwarg))
library_info.append(str(library_context_info[2][kwarg]))

library_info.append(str(function_infile_load_mode))

library_info = ''.join(library_info) # linear time complexity
msg = hashlib.sha1()
Expand Down Expand Up @@ -293,6 +297,7 @@ def generate_taskvine_library_code(library_path, hoisting_modules=None):
# @param exec_mode execution mode of functions in this library
# @param hoisting_modules a list of modules to be imported at the preamble of library
# @param library_context_info a list containing a library's context to be created remotely
# @param function_infile_load_mode The mode to load infile for function tasks inside this library.
# @return name of the file containing serialized information about the library
def generate_library(library_cache_path,
library_code_path,
Expand All @@ -303,7 +308,8 @@ def generate_library(library_cache_path,
need_pack=True,
exec_mode='fork',
hoisting_modules=None,
library_context_info=None
library_context_info=None,
function_infile_load_mode='cloudpickle'
):
# create library_info.clpk
library_info = {}
Expand All @@ -313,6 +319,7 @@ def generate_library(library_cache_path,
library_info['library_name'] = library_name
library_info['exec_mode'] = exec_mode
library_info['context_info'] = cloudpickle.dumps(library_context_info)
library_info['function_infile_load_mode'] = function_infile_load_mode
with open(library_info_path, 'wb') as f:
cloudpickle.dump(library_info, f)

Expand Down
5 changes: 3 additions & 2 deletions taskvine/src/Makefile
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
include ../../config.mk
include ../../rules.mk

TARGETS=manager worker tools bindings examples
TARGETS=manager worker tools bindings examples graph

all: $(TARGETS)

worker: manager
bindings: manager
graph: manager
bindings: manager graph
tools: manager
examples: manager worker tools bindings

Expand Down
2 changes: 1 addition & 1 deletion taskvine/src/bindings/python3/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,4 @@ install: all
mkdir -p $(CCTOOLS_PYTHON3_PATH)/ndcctools/taskvine/compat
cp ndcctools/taskvine/*.py $(DSPYTHONSO) $(CCTOOLS_PYTHON3_PATH)/ndcctools/taskvine
cp ndcctools/taskvine/compat/*.py $(CCTOOLS_PYTHON3_PATH)/ndcctools/taskvine/compat
cp taskvine.py $(CCTOOLS_PYTHON3_PATH)/
cp taskvine.py $(CCTOOLS_PYTHON3_PATH)/
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,10 @@ def get(self, dsk, keys, *,
hoisting_modules=None, # Deprecated, use lib_modules
import_modules=None, # Deprecated, use lib_modules
lazy_transfers=True, # Deprecated, use worker_tranfers
extra_serialize_time_sec=0,
):
try:
self.extra_serialize_time_sec = extra_serialize_time_sec
self.set_property("framework", "dask")
if retries and retries < 1:
raise ValueError("retries should be larger than 0")
Expand Down Expand Up @@ -213,10 +215,13 @@ def __call__(self, *args, **kwargs):
return self.get(*args, **kwargs)

def _dask_execute(self, dsk, keys):

indices = {k: inds for (k, inds) in find_dask_keys(keys)}
keys_flatten = indices.keys()

time_start = time.time()
dag = DaskVineDag(dsk, low_memory_mode=self.low_memory_mode, prune_depth=self.prune_depth)
print(f"Time taken to enqueue tasks: {time.time() - time_start:.6f} seconds")
tag = f"dag-{id(dag)}"

# create Library if using 'function-calls' task mode.
Expand Down Expand Up @@ -437,7 +442,8 @@ def _enqueue_dask_calls(self, dag, tag, rs, retries, enqueued_calls):
extra_files=self.extra_files,
retries=retries,
worker_transfers=lazy,
wrapper=self.wrapper)
wrapper=self.wrapper,
extra_serialize_time_sec=self.extra_serialize_time_sec)

t.set_priority(priority)
t.set_tag(tag) # tag that identifies this dag
Expand Down Expand Up @@ -557,7 +563,9 @@ def __init__(self, m,
env_vars=None,
retries=5,
worker_transfers=False,
wrapper=None):
wrapper=None,
extra_serialize_time_sec=0):
time.sleep(extra_serialize_time_sec)
self._key = key
self._sexpr = sexpr

Expand Down Expand Up @@ -658,7 +666,9 @@ def __init__(self, m,
extra_files=None,
retries=5,
worker_transfers=False,
wrapper=None):
wrapper=None,
extra_serialize_time_sec=0):
time.sleep(extra_serialize_time_sec)

self._key = key
self.resources = resources
Expand Down
9 changes: 6 additions & 3 deletions taskvine/src/bindings/python3/ndcctools/taskvine/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -946,8 +946,9 @@ def check_library_exists(self, library_name):
# @param hoisting_modules A list of modules imported at the preamble of library, including packages, functions and classes.
# @param exec_mode Execution mode that the library should use to run function calls. Either 'direct' or 'fork'
# @param library_context_info A list containing [library_context_func, library_context_args, library_context_kwargs]. Used to create the library context on remote nodes.
# @param function_infile_load_mode The mode to load infile for function tasks inside this library.
# @returns A task to be used with @ref ndcctools.taskvine.manager.Manager.install_library.
def create_library_from_functions(self, library_name, *function_list, poncho_env=None, init_command=None, add_env=True, hoisting_modules=None, exec_mode='fork', library_context_info=None):
def create_library_from_functions(self, library_name, *function_list, poncho_env=None, init_command=None, add_env=True, hoisting_modules=None, exec_mode='fork', library_context_info=None, function_infile_load_mode='cloudpickle'):
# Delay loading of poncho until here, to avoid bringing in poncho dependencies unless needed.
# Ensure poncho python library is available.
from ndcctools.poncho import package_serverize
Expand All @@ -969,7 +970,8 @@ def create_library_from_functions(self, library_name, *function_list, poncho_env
add_env=add_env,
exec_mode=exec_mode,
hoisting_modules=hoisting_modules,
library_context_info=library_context_info)
library_context_info=library_context_info,
function_infile_load_mode=function_infile_load_mode)

# Create path for caching library code and environment based on function hash.
library_cache_dir_name = "vine-library-cache"
Expand Down Expand Up @@ -1017,7 +1019,8 @@ def create_library_from_functions(self, library_name, *function_list, poncho_env
need_pack=need_pack,
exec_mode=exec_mode,
hoisting_modules=hoisting_modules,
library_context_info=library_context_info)
library_context_info=library_context_info,
function_infile_load_mode=function_infile_load_mode)

# enable correct permissions for library code
os.chmod(library_code_path, 0o775)
Expand Down
2 changes: 1 addition & 1 deletion taskvine/src/bindings/python3/taskvine.i
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* taskvine.i */
%module cvine
%module(package="ndcctools.taskvine") cvine

%include carrays.i
%array_functions(struct rmsummary *, rmsummayArray);
Expand Down
14 changes: 14 additions & 0 deletions taskvine/src/graph/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
include ../../../config.mk
include ../../../rules.mk

SUBDIRS = dagvine

all clean install test lint format: $(SUBDIRS)

$(SUBDIRS): %:
$(MAKE) -C $@ $(MAKECMDGOALS)

.PHONY: all clean install test lint format $(SUBDIRS) example

example:
PYTHONPATH=../../../ python -m taskvine.src.graph.example_blueprint
Empty file added taskvine/src/graph/__init__.py
Empty file.
7 changes: 7 additions & 0 deletions taskvine/src/graph/dagvine/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
*.a
*.so
*.o
*_wrap.c
*_wrap.0
build/
context_graph/
Empty file.
36 changes: 36 additions & 0 deletions taskvine/src/graph/dagvine/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
include ../../../../config.mk
include ../../../../rules.mk

MODULE_DIR := $(CCTOOLS_PYTHON3_PATH)/ndcctools/taskvine/dagvine
SUBDIRS := vine_graph blueprint_graph

.PHONY: all install clean lint format $(SUBDIRS)

all: $(SUBDIRS)

$(SUBDIRS):
$(MAKE) -C $@ all

install: all
mkdir -p $(MODULE_DIR)
cp dagvine.py $(MODULE_DIR)
cp __init__.py $(MODULE_DIR)
@for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir install; \
done

clean:
@for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir clean; \
done
rm -rf build

lint:
@for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir lint; \
done

format:
@for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir format; \
done
7 changes: 7 additions & 0 deletions taskvine/src/graph/dagvine/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Copyright (C) 2025- The University of Notre Dame
# This software is distributed under the GNU General Public License.
# See the file COPYING for details.

from .dagvine import DAGVine

__all__ = ["DAGVine"]
2 changes: 2 additions & 0 deletions taskvine/src/graph/dagvine/blueprint_graph/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
adaptor_test.py
__pycache__/
31 changes: 31 additions & 0 deletions taskvine/src/graph/dagvine/blueprint_graph/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
include ../../../../../config.mk
include ../../../../../rules.mk

PROJECT_NAME = dagvine

SOURCE_DIR = $(CCTOOLS_HOME)/taskvine/src/graph/$(PROJECT_NAME)/blueprint_graph
MODULE_ROOT = $(CCTOOLS_PYTHON3_PATH)/ndcctools/taskvine/$(PROJECT_NAME)
MODULE_DIR = $(MODULE_ROOT)/blueprint_graph

PY_SOURCES = $(wildcard $(SOURCE_DIR)/*.py)

.PHONY: all install clean lint format

all:
@true

install:
mkdir -p $(MODULE_DIR)
cp $(PY_SOURCES) $(MODULE_DIR)

clean:
rm -rf __pycache__

lint:
flake8 --ignore=$(CCTOOLS_FLAKE8_IGNORE_ERRORS) \
--exclude=$(CCTOOLS_FLAKE8_IGNORE_FILES) \
$(SOURCE_DIR)/

format:
@true

16 changes: 16 additions & 0 deletions taskvine/src/graph/dagvine/blueprint_graph/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Copyright (C) 2025 The University of Notre Dame
# This software is distributed under the GNU General Public License.
# See the file COPYING for details.


from .blueprint_graph import BlueprintGraph, TaskOutputRef, TaskOutputWrapper
from .proxy_functions import compute_single_key
from .adaptor import Adaptor

__all__ = [
"BlueprintGraph",
"TaskOutputRef",
"TaskOutputWrapper",
"compute_single_key",
"Adaptor",
]
Loading
Loading