"""Transparent DNA path, rate, geometry, and guidance calculations.""" import math import torch from lecture_core import encode, gat_rates, fisher_path, dirichlet_velocity print('Alphabet order: A C G T.') source=encode(['TGCA']);target=encode(['ACGT']);u=torch.tensor([[.1,.7,.2,.9]]) print('Gat sampled t=.25 intermediate:',torch.where(u<.25,target,source).tolist(),'= AGGA') print('Gat target probability loss:',-math.log(.7*.6*.8*.5)) rates=gat_rates(torch.tensor([[[.1,.6,.2,.1]]]),torch.tensor([[2]]),torch.tensor([.5])) p=.1*rates;p[...,2]=1-.1*rates.sum(-1) print('Gat Euler probabilities from G:',p.flatten().tolist()) z=torch.tensor([[[.1,.2,.4,.3]]]);posterior=torch.tensor([[[0.,0.,1.,0.]]]) v=dirichlet_velocity(z,posterior,3.) print('Dirichlet conditional G velocity:',v.flatten().tolist()) y,v=fisher_path(torch.full((1,1,4),.25),torch.tensor([[2]]),torch.tensor([.5])) print('Fisher midpoint probabilities:',y.square().flatten().tolist()) print('Fisher spherical velocity:',v.flatten().tolist()) a=torch.tensor([0.,math.log(2),math.log(4),0.]);z=a.softmax(-1) print('Gumbel realized softmax at tau=1:',z.tolist()) print('Same noisy logits at tau=.5:',(2*a).softmax(-1).tolist()) print('Temperature derivative -1 velocity:',(z*(a-(z*a).sum())).tolist()) for beta in [1.,4.,8.]: print('DNA endpoint winner probability, beta=',beta,':',math.exp(beta)/(math.exp(beta)+3)) print('ReDi independent matching-pair TC:',math.log(4),'nats; deterministic informative coupling TC: 0') print('Preference (.8,.2), change (.3,-.1): weighted gain .22 despite second-objective loss')