"""Two-step fixed probability tree; not an LLM or tokenizer."""
from decimal import Decimal as D
import json
first={"A":D("0.6"),"B":D("0.4")}
after={"A":{"X":D("0.5"),"Y":D("0.5")},"B":{"X":D("0.9"),"Y":D("0.1")}}
if __name__=="__main__":
    joint={a+b:pa*pb for a,pa in first.items() for b,pb in after[a].items()}
    assert sum(joint.values())==1
    # Ties use insertion order: X before Y, declared for this toy.
    a=max(first,key=first.get);greedy=a+max(after[a],key=after[a].get)
    best=max(joint,key=joint.get)
    assert greedy=="AX" and best=="BX"
    assert joint[greedy]==D("0.30") and joint[best]==D("0.36")
    print(json.dumps({"joint":{k:str(v) for k,v in joint.items()},"greedy":greedy,"highest_joint":best},indent=2))
