ATLAS Offline Software
Classes | Functions
apydep Namespace Reference

Classes

class  DependencyFinder
 

Functions

def get_dependencies (filename, print_error=False)
 
def walk_tree (path='./', print_error=False, filterFnc=None)
 
def make_graph (deps, filterFnc=None)
 
def main ()
 

Function Documentation

◆ get_dependencies()

def apydep.get_dependencies (   filename,
  print_error = False 
)
Get all the imports/includes in a file.

Definition at line 41 of file apydep.py.

41 def get_dependencies(filename, print_error=False):
42  """Get all the imports/includes in a file."""
43 
44  try:
45  tree = ast.parse(open(filename,'rb').read(), filename=filename)
46  except SyntaxError as e:
47  if print_error:
48  print(e, file=sys.stderr)
49  return DependencyFinder()
50 
51  finder = DependencyFinder()
52  finder.visit(tree)
53 
54  return finder
55 
56 

◆ main()

def apydep.main ( )

Definition at line 89 of file apydep.py.

89 def main():
90  parser = argparse.ArgumentParser(description=__doc__)
91 
92  parser.add_argument('path', metavar='DIRECTORY', nargs='?', default='./',
93  help='root of source tree [%(default)s]')
94 
95  parser.add_argument('-o', '--output', metavar='FILE', type=str,
96  help='output file for DOT graph')
97 
98  parser.add_argument('-p', '--packages', metavar='FILE', type=str,
99  help='path to packages.txt file [from release]')
100 
101  parser.add_argument('-a', '--all', action='store_true',
102  help='include non-athena dependencies')
103 
104  parser.add_argument('-v', '--verbose', action='store_true',
105  help='print parse errors')
106 
107  args = parser.parse_args()
108 
109  packages = None
110  if not args.all:
111  package_file = args.packages or os.path.join(os.environ['AtlasArea'],'InstallArea',
112  os.environ['BINARY_TAG'],'packages.txt')
113 
114  try:
115  with open(package_file) as f:
116  packages = set(line.rstrip().split('/')[-1] for line in f if not line.startswith('#'))
117  except FileNotFoundError:
118  parser.error(f"Cannot read '{package_file}'. Specify via '-p/--packages' or run with '-a/--all'")
119 
120  # By default only show athena packages:
121  filterFnc = None if args.all else lambda p : p in packages
122 
123  # Walk source tree and create DOT graph:
124  g = make_graph(walk_tree(args.path, args.verbose, filterFnc), filterFnc)
125 
126  if args.output:
127  g.write(args.output)
128  else:
129  print(g)
130 

◆ make_graph()

def apydep.make_graph (   deps,
  filterFnc = None 
)
Save the dependencies as dot graph, nodes filtered by filterFnc

Definition at line 77 of file apydep.py.

77 def make_graph(deps, filterFnc=None):
78  """Save the dependencies as dot graph, nodes filtered by filterFnc"""
79 
80  graph = pygraphviz.AGraph(name='AthPyGraph', directed=True)
81  for a in deps:
82  for t in ['import','include']:
83  graph.add_edges_from(((a,b) for b in deps[a][t]
84  if a!=b and (filterFnc is None or (filterFnc(a) and filterFnc(b)))),
85  label = t)
86  return graph
87 
88 

◆ walk_tree()

def apydep.walk_tree (   path = './',
  print_error = False,
  filterFnc = None 
)
Walk the source tree and extract python dependencies, filtered by FilterFnc

Definition at line 57 of file apydep.py.

57 def walk_tree(path='./', print_error=False, filterFnc=None):
58  """Walk the source tree and extract python dependencies, filtered by FilterFnc"""
59 
60  pkg = 'UNKNOWN'
61  deps = defaultdict(lambda : defaultdict(set))
62  for root, dirs, files in os.walk(path):
63  if 'CMakeLists.txt' in files:
64  pkg = os.path.basename(root)
65 
66  if (filterFnc and not filterFnc(pkg)):
67  continue
68 
69  for f in filter(lambda p : os.path.splitext(p)[1]=='.py', files):
70  d = get_dependencies(os.path.join(root,f), print_error)
71  deps[pkg]['import'].update(d.imports)
72  deps[pkg]['include'].update(d.includes)
73 
74  return deps
75 
76 
read
IovVectorMap_t read(const Folder &theFolder, const SelectionCriterion &choice, const unsigned int limit=10)
Definition: openCoraCool.cxx:569
apydep.main
def main()
Definition: apydep.py:89
apydep.walk_tree
def walk_tree(path='./', print_error=False, filterFnc=None)
Definition: apydep.py:57
covarianceTool.filter
filter
Definition: covarianceTool.py:514
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:224
apydep.make_graph
def make_graph(deps, filterFnc=None)
Definition: apydep.py:77
apydep.get_dependencies
def get_dependencies(filename, print_error=False)
Definition: apydep.py:41
Trk::open
@ open
Definition: BinningType.h:40
dqt_zlumi_pandas.update
update
Definition: dqt_zlumi_pandas.py:42
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
Trk::split
@ split
Definition: LayerMaterialProperties.h:38