From a38cf075db29b32807880847a13565e6bde6ec10 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Jan 2020 18:53:09 -0500 Subject: [PATCH] add checks for global commands, pair and bonded styles --- doc/utils/check-styles.py | 130 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 125 insertions(+), 5 deletions(-) diff --git a/doc/utils/check-styles.py b/doc/utils/check-styles.py index 3acd2aa0a9..ffa827e10c 100755 --- a/doc/utils/check-styles.py +++ b/doc/utils/check-styles.py @@ -2,10 +2,39 @@ from __future__ import print_function from glob import glob -import os, re +from argparse import ArgumentParser +import os, re, sys -headers = glob(os.path.join('..', '..', 'src', '*', '*.h')) -headers += glob(os.path.join('..', '..', 'src', '*.h')) +parser = ArgumentParser(prog='check-styles.py', + description="Check style table completeness") + +parser.add_argument("-v", "--verbose", + action='store_const', + const=True, default=False, + help="Enable verbose output") + +parser.add_argument("-d", "--doc", + help="Path to LAMMPS documentation sources") +parser.add_argument("-s", "--src", + help="Path to LAMMPS sources") + +args = parser.parse_args() +verbose = args.verbose +src = args.src +doc = args.doc + +if not args.src or not args.doc: + parser.print_help() + sys.exit(1) + +if not os.path.isdir(src): + sys.exit("LAMMPS source path %s does not exist" % src) + +if not os.path.isdir(doc): + sys.exit("LAMMPS documentation source path %s does not exist" % doc) + +headers = glob(os.path.join(src, '*', '*.h')) +headers += glob(os.path.join(src, '*.h')) angle = {} atom = {} @@ -44,10 +73,28 @@ def register_style(list,style,info): else: list[style] = info +def add_suffix(list,style): + suffix = "" + if list[style]['gpu']: + suffix += 'g' + if list[style]['intel']: + suffix += 'i' + if list[style]['kokkos']: + suffix += 'k' + if list[style]['omp']: + suffix += 'o' + if list[style]['opt']: + suffix += 't' + if suffix: + return style + ' (' + suffix + ')' + else: + return style + for h in headers: - # print("Checking ", h) + if verbose: print("Checking ", h) fp = open(h) text = fp.read() + fp.close() matches = re.findall("(.+)Style\((.+),(.+)\)",text,re.MULTILINE) for m in matches: @@ -121,5 +168,78 @@ for h in headers: register_style(region,style,info) else: print("Skipping over: ",m) -fp.close() + + +if verbose: + print(""" +Parsed styles from %s: + Angle styles: %3d + Atom styles: %3d + Body styles: %3d + Bond styles: %3d + Command styles: %3d + Compute styles: %3d + Dihedral styles: %3d + Dump styles: %3d + Fix styles: %3d + Improper styles: %3d + Integrate styles: %3d + Kspace styles: %3d + Minimize styles: %3d + Pair styles: %3d + Reader styles: %3d + Region styles: %3d +""" % (src, len(angle), len(atom), len(body), len(bond), \ + len(command), len(compute), len(dihedral), len(dump), \ + len(fix), len(improper), len(integrate), len(kspace), \ + len(minimize), len(pair), len(reader), len(region))) + + +# check main commands lists +f = os.path.join(doc, 'Commands_all.rst') +fp = open(f) +text = fp.read() +fp.close() +matches = re.findall(":doc:`(.+) <.+>`",text,re.MULTILINE) +for c in command.keys(): + if not c in matches: + print("Command %s is missing in Commands_all.rst" % c) + + +f = os.path.join(doc, 'Commands_pair.rst') +fp = open(f) +text = fp.read() +fp.close() +matches = re.findall(":doc:`(.+) `",text,re.MULTILINE) +for c in pair.keys(): + # known undocumented aliases we need to skip + if c in ('meam','lj/sf'): continue + if not add_suffix(pair,c) in matches: + if not pair[c]['removed']: + print("Pair style entry %s is missing or" % c, + "incomplete in Commands_pair.rst") + +f = os.path.join(doc, 'Commands_bond.rst') +fp = open(f) +text = fp.read() +fp.close() +matches = re.findall(":doc:`(.+) `",text,re.MULTILINE) +for c in bond.keys(): + if not add_suffix(bond,c) in matches: + print("Bond style entry %s is missing or incomplete in Commands_bond.rst" % c) + +matches = re.findall(":doc:`(.+) `",text,re.MULTILINE) +for c in angle.keys(): + if not add_suffix(angle,c) in matches: + print("Angle style entry %s is missing or incomplete in Commands_bond.rst" % c) + +matches = re.findall(":doc:`(.+) `",text,re.MULTILINE) +for c in dihedral.keys(): + if not add_suffix(dihedral,c) in matches: + print("Dihedral style entry %s is missing or incomplete in Commands_bond.rst" % c) + +matches = re.findall(":doc:`(.+) `",text,re.MULTILINE) +for c in improper.keys(): + if not add_suffix(improper,c) in matches: + print("Improper style entry %s is missing or incomplete in Commands_bond.rst" % c)