ATLAS Offline Software
Digraph.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 # Data structure adapted from Sedgewick and Wayne, Algorithms v4 p569
4 
5 class Digraph:
6  """Digraph is an implementation of digraphs which supports
7  adding edges and reversal"""
8 
9  def __init__(self, V=0, fn=''):
10  self.adjTable_ = {}
11  self.E = 0
12  if fn:
13  self.fromFile(fn)
14  else:
15  self.V = V
16  for i in range(V):
17  self.adjTable_[i] = []
18 
19  def fromFile(self, fn):
20  state = 'START'
21  with open(fn, 'r') as fh:
22  for ll in fh:
23  l = ll.strip()
24  if not l or l.startswith('#'): continue
25 
26  if state == 'START':
27  self.V = int(l.strip())
28  for i in range(self.V):
29  self.adjTable_[i] = list()
30  state = 'NE'
31  continue
32  if state == 'NE':
33  # self.E = int(l.strip())
34  state = 'EDGES'
35  continue
36 
37  if state == 'EDGES':
38  toks = l.strip().split()
39  assert len(toks) == 2
40  v = int(toks[0])
41  w = int(toks[1])
42  self.addEdge(v, w)
43  continue
44 
45  def addEdge(self, v, w):
46  assert v < self.V
47  assert w < self.V
48  self.adjTable_[v].append(w)
49  self.E += 1
50 
51  def adj(self, v):
52  assert v < self.V
53  return self.adjTable_[v]
54 
55  def reverse(self):
56  R = Digraph(self.V)
57  for v in range(self.V):
58  for w in self.adj(v):
59  R.addEdge(w, v)
60  return R
61 
62  def __str__(self):
63  lines = ['Digraph. V: '+ str(self.V) + ' E: ' + str(self.E)]
64  for v in range(self.V):
65  for w in self.adj(v):
66  lines.append('%d -> %d' % (v, w))
67 
68  return '\n'.join(lines)
Digraph.Digraph.reverse
def reverse(self)
Definition: Digraph.py:55
Digraph.Digraph
Definition: Digraph.py:5
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
Digraph.Digraph.__str__
def __str__(self)
Definition: Digraph.py:62
dumpHVPathFromNtuple.append
bool append
Definition: dumpHVPathFromNtuple.py:91
Digraph.Digraph.adj
def adj(self, v)
Definition: Digraph.py:51
Digraph.Digraph.E
E
Definition: Digraph.py:11
Digraph.Digraph.adjTable_
adjTable_
Definition: Digraph.py:10
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
Digraph.Digraph.__init__
def __init__(self, V=0, fn='')
Definition: Digraph.py:9
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
Digraph.Digraph.addEdge
def addEdge(self, v, w)
Definition: Digraph.py:45
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
Trk::open
@ open
Definition: BinningType.h:40
Digraph.Digraph.fromFile
def fromFile(self, fn)
Definition: Digraph.py:19
Digraph.Digraph.V
V
Definition: Digraph.py:15
str
Definition: BTagTrackIpAccessor.cxx:11
Trk::split
@ split
Definition: LayerMaterialProperties.h:38