Coverage for /builds/debichem-team/python-ase/ase/cli/info.py: 86.30%
73 statements
« prev ^ index » next coverage.py v7.5.3, created at 2025-03-06 04:00 +0000
« prev ^ index » next coverage.py v7.5.3, created at 2025-03-06 04:00 +0000
1# Note:
2# Try to avoid module level import statements here to reduce
3# import time during CLI execution
6class CLICommand:
7 """Print information about files or system.
9 Without arguments, show information about ASE installation
10 and library versions of dependencies.
11 """
13 @staticmethod
14 def add_arguments(parser):
15 parser.add_argument('--files', nargs='*', metavar='PATH',
16 help='Print information about specified files.')
17 parser.add_argument('-v', '--verbose', action='store_true',
18 help='Show additional information about files.')
19 parser.add_argument('--formats', action='store_true',
20 help='List file formats known to ASE.')
21 parser.add_argument('--calculators', nargs='*', metavar='NAME',
22 help='List all or specified calculators known to '
23 'ASE and their configuration.')
25 @staticmethod
26 def run(args):
27 if args.calculators is not None:
28 from ase.codes import codes, list_codes
29 if args.calculators:
30 names = args.calculators
31 else:
32 names = [*codes]
33 list_codes(names)
34 return
36 if args.files:
37 print_file_info(args)
38 return
40 print_info()
41 if args.formats:
42 print()
43 print_formats()
46def print_file_info(args):
47 from ase.io.bundletrajectory import print_bundletrajectory_info
48 from ase.io.formats import UnknownFileTypeError, filetype, ioformats
49 from ase.io.ulm import print_ulm_info
50 n = max(len(filename) for filename in args.files) + 2
51 nfiles_not_found = 0
52 for filename in args.files:
53 try:
54 format = filetype(filename)
55 except FileNotFoundError:
56 format = '?'
57 description = 'No such file'
58 nfiles_not_found += 1
59 except UnknownFileTypeError:
60 format = '?'
61 description = '?'
62 else:
63 if format in ioformats:
64 description = ioformats[format].description
65 else:
66 description = '?'
68 print('{:{}}{} ({})'.format(filename + ':', n,
69 description, format))
70 if args.verbose:
71 if format == 'traj':
72 print_ulm_info(filename)
73 elif format == 'bundletrajectory':
74 print_bundletrajectory_info(filename)
76 raise SystemExit(nfiles_not_found)
79def print_info():
80 import platform
81 import sys
83 from ase.dependencies import all_dependencies
85 versions = [('platform', platform.platform()),
86 ('python-' + sys.version.split()[0], sys.executable)]
88 for name, path in versions + all_dependencies():
89 print(f'{name:24} {path}')
92def print_formats():
93 from ase.io.formats import ioformats
95 print('Supported formats:')
96 for fmtname in sorted(ioformats):
97 fmt = ioformats[fmtname]
99 infos = [fmt.modes, 'single' if fmt.single else 'multi']
100 if fmt.isbinary:
101 infos.append('binary')
102 if fmt.encoding is not None:
103 infos.append(fmt.encoding)
104 infostring = '/'.join(infos)
106 moreinfo = [infostring]
107 if fmt.extensions:
108 moreinfo.append('ext={}'.format('|'.join(fmt.extensions)))
109 if fmt.globs:
110 moreinfo.append('glob={}'.format('|'.join(fmt.globs)))
112 print(' {} [{}]: {}'.format(fmt.name,
113 ', '.join(moreinfo),
114 fmt.description))