from preswald import Workflow, WorkflowAnalyzer
import pandas as pd
# Create a sample workflow
workflow = Workflow()
@workflow.atom()
def load_data():
return pd.read_csv("data.csv")
@workflow.atom(dependencies=['load_data'])
def clean_data(load_data):
return load_data.dropna()
@workflow.atom(dependencies=['clean_data'])
def analyze_data(clean_data):
return clean_data.describe()
# Initialize the WorkflowAnalyzer
analyzer = WorkflowAnalyzer(workflow)
# Execute the workflow
workflow.execute()
# Visualize the workflow
fig = analyzer.visualize(title="Workflow Dependency Graph")
fig.show() # Opens visualization in a web browser
# Identify and display the critical path
critical_path = analyzer.get_critical_path()
print("Critical path:", ' -> '.join(critical_path))
# Visualize the critical path
fig_critical = analyzer.visualize(
highlight_path=critical_path,
title="Workflow Critical Path"
)
fig_critical.show()
# Identify and display parallel execution groups
parallel_groups = analyzer.get_parallel_groups()
print("\nParallel execution groups:")
for i, group in enumerate(parallel_groups, 1):
print(f"Group {i}: {', '.join(group)}")