"""Original exact conductance Laplacian unit-flow network; no physical circuit."""
from fractions import Fraction as F
import json

def solve(a,b):
 n=len(b);m=[list(map(F,r))+[F(v)] for r,v in zip(a,b)]
 for i in range(n):
  p=next((j for j in range(i,n) if m[j][i]),None)
  if p is None:raise ValueError('disconnected grounded system')
  m[i],m[p]=m[p],m[i];d=m[i][i];m[i]=[v/d for v in m[i]]
  for j in range(n):
   if j!=i:d=m[j][i];m[j]=[v-d*w for v,w in zip(m[j],m[i])]
 return [m[i][-1] for i in range(n)]
def network(nodes,edges,src,dst,ground=None):
 if not isinstance(nodes,list) or not 2<=len(nodes)<=6 or any(type(v)!=str for v in nodes) or len(set(nodes))!=len(nodes) or src not in nodes or dst not in nodes or src==dst:raise ValueError('bounded unique nodes and distinct endpoints')
 ground=dst if ground is None else ground
 if ground not in nodes or not isinstance(edges,list) or not 1<=len(edges)<=12:raise ValueError('ground/edge budget')
 n=len(nodes);ids={v:i for i,v in enumerate(nodes)};l=[[F(0)]*n for _ in nodes];seen=set();adj={v:set() for v in nodes}
 for edge in edges:
  if not isinstance(edge,tuple) or len(edge)!=3:raise ValueError('one undirected edge tuple')
  a,b,c=edge
  if a not in ids or b not in ids or a==b or type(c)!=int or not 0<c<=100 or frozenset((a,b)) in seen:raise ValueError('positive integer conductance, no loops/parallel edges')
  seen.add(frozenset((a,b)));adj[a].add(b);adj[b].add(a);i,j=ids[a],ids[b];l[i][i]+=c;l[j][j]+=c;l[i][j]-=c;l[j][i]-=c
 reached={nodes[0]}
 for _ in nodes:reached|={v for a in list(reached) for v in adj[a]}
 if reached!=set(nodes):raise ValueError('whole local graph must be connected')
 assert all(sum(r)==0 for r in l) and all(l[i][j]==l[j][i] for i in range(n) for j in range(n))
 current=[F(int(v==src)-int(v==dst)) for v in nodes];keep=[i for i,v in enumerate(nodes) if v!=ground];solution=solve([[l[i][j] for j in keep] for i in keep],[current[i] for i in keep]);v=[F(0)]*n
 for i,z in zip(keep,solution):v[i]=z
 flows=[];kcl=[F(0)]*n;energy=F(0)
 for a,b,c in edges:
  f=c*(v[ids[a]]-v[ids[b]]);kcl[ids[a]]+=f;kcl[ids[b]]-=f;energy+=f*f/c;flows.append({'edge':[a,b],'conductance':c,'current_a_to_b':str(f)})
 reff=v[ids[src]]-v[ids[dst]];assert kcl==current and energy==reff and sum(current[i]*v[i] for i in range(n))==energy
 return {'laplacian':[[str(z) for z in r] for r in l],'ground':ground,'voltages':{a:str(z) for a,z in zip(nodes,v)},'flows':flows,'kcl':list(map(str,kcl)),'effective_resistance':str(reff),'energy':str(energy)}
def demo():
 ns=list('ABCD');cycle=[('A','B',1),('B','C',1),('C','D',1),('D','A',1)];diag=cycle+[('A','C',1)]
 ab=network(ns,cycle,'A','B');ac=network(ns,cycle,'A','C');dab=network(ns,diag,'A','B');dac=network(ns,diag,'A','C');assert F(ab['effective_resistance'])==1/(F(1)+F(1,3))==F(3,4) and F(ac['effective_resistance'])==1/(F(1,2)+F(1,2))==1 and F(dab['effective_resistance'])==F(5,8) and F(dac['effective_resistance'])==1/(F(1)+F(1,2)+F(1,2))==F(1,2)
 gauges=[]
 for edges in [cycle,diag]:
  for dst in ['B','C']:
   base=network(ns,edges,'A',dst)
   for ground in ns:
    got=network(ns,edges,'A',dst,ground);assert got['effective_resistance']==base['effective_resistance'];differences={F(got['voltages'][a])-F(base['voltages'][a]) for a in ns};assert len(differences)==1;gauges.append({'destination':dst,'ground':ground,'resistance':got['effective_resistance']})
 rejects=[]
 for label,args in [('disconnected',(list('ABC'),[('A','B',1)],'A','C')),('nonpositive',(ns,cycle+[('A','C',0)],'A','B')),('unknown',(ns,cycle,'A','Z')),('selfloop',(ns,cycle+[('A','A',1)],'A','B')),('parallel',(ns,cycle+[('B','A',1)],'A','B')),('bad_edge_tuple',(ns,[['A','B',1]],'A','B')),('budget',(list('ABCDEFG'),cycle,'A','B'))]:
  try:network(*args)
  except ValueError:rejects.append(label)
  else:raise AssertionError(label)
 return {'cycle_adjacent':ab,'cycle_opposite':ac,'diagonal_added_adjacent':dab,'diagonal_added_opposite':dac,'sixteen_ground_gauge_checks':gauges,'shortest_unit_edge_path_lengths':{'AB':1,'AC_cycle':2,'AC_diagonal':1},'invalid_cases_rejected':rejects,'scope':'Exact Fraction Gaussian grounded solve plus separate series/parallel references, KCL and energy. Whole local graph connected positive simple undirected. Full L singular; no ordinary inverse, no real circuit/safety/Opera routing claim.'}
if __name__=='__main__':print(json.dumps(demo(),indent=2))
