from models import DiffusionModelGraph
from uncertainty import UncertaintyQuantifier
from utils import generate_example_data

def main():
    # Generate example data
    models, architectures, outputs = generate_example_data()

    # Build the graph
    graph = DiffusionModelGraph(models, architectures, outputs)

    # Initialize uncertainty quantifier
    quantifier = UncertaintyQuantifier(graph.graph)

    # Compute uncertainties for a node
    node = 0
    intrinsic = quantifier.intrinsic_uncertainty(node)
    propagated = quantifier.propagated_uncertainty(node)
    spectral = quantifier.spectral_uncertainty_propagation()[node]
    path_specific = quantifier.path_specific_uncertainty(node)

    # Print results
    print(f"Intrinsic Uncertainty: {intrinsic}")
    print(f"Propagated Uncertainty: {propagated}")
    print(f"Spectral Uncertainty: {spectral}")
    print(f"Path-Specific Uncertainty: {path_specific}")

if __name__ == "__main__":
    main()