def main(): parser = OptionParser(usage=usage, version='%prog') parser.add_option('-c', '--counts', action='store_true', dest='counts', default=False, help=helps['counts']) parser.add_option('-u', '--unused', action='store_true', dest='unused', default=False, help=helps['unused']) options, args = parser.parse_args() if len(args) > 0: pdf_dir = os.path.realpath(args[0]) else: parser.print_help(), return required, other = get_standard_keywords() terms_use = dict_from_keys_init(term_table.keys(), set) for filename in locate_files('*.py', pdf_dir): base = filename.replace(pdf_dir, '').lstrip(os.path.sep) output('trying "%s"...' % base) try: conf = ProblemConf.from_file(filename, required, other, verbose=False) except: output('...failed') continue use = conf.options.get('use_equations', 'equations') eqs_conf = getattr(conf, use) for key, eq_conf in eqs_conf.iteritems(): term_descs = parse_definition(eq_conf) for td in term_descs: terms_use[td.name].add(base) output('...ok') output('...done') if options.unused: output('unused terms:') unused = [name for name in terms_use.keys() if len(terms_use[name]) == 0] for name in sorted(unused): output(' ' + name) output('total: %d' % len(unused)) else: output('terms use:') for name, ex_names in ordered_iteritems(terms_use): output('%s: %d' % (name, len(ex_names))) if not options.counts: for ex_name in sorted(ex_names): output(' ' + ex_name)
def parse_terms(regions, desc, itps): """ Parse equation given by 'desc' into terms. Assign each term its region. """ # Parse. term_descs = [] bnf = create_bnf(term_descs, itps) try: bnf.parseString(desc) except: print "cannot parse:\n", desc raise # Construct terms. terms = OneTypeList(Term) for td in term_descs: ## print td ## pause() try: constructor = term_table[td.name] except: msg = "term '%s' is not in %s" % (td.name, sorted(term_table.keys())) raise ValueError(msg) region = regions[td.region] arg_names = [] arg_steps = {} arg_derivatives = {} for arg in td.args: if len(arg) == 2: name, step = arg derivative = None else: name, step = arg[1] derivative = arg[2] arg_names.append(name) arg_steps[name] = step arg_derivatives[name] = derivative term = constructor(region, td.name, td.sign) term.arg_names = arg_names term.arg_steps = arg_steps term.arg_derivatives = arg_derivatives term.integral_name = td.integral terms.append(term) return terms
def new(name, integral, region, **kwargs): from sfepy.terms import term_table arg_str = _match_args(name) if arg_str is not None: name, arg_str = arg_str.groups() else: raise ValueError('bad term syntax! (%s)' % name) if name in term_table: constructor = term_table[name] else: msg = "term '%s' is not in %s" % (name, sorted(term_table.keys())) raise ValueError(msg) obj = constructor(name, arg_str, integral, region, **kwargs) return obj
def from_desc(term_descs, regions, integrals=None): """ Create terms, assign each term its region. """ from sfepy.terms import term_table terms = Terms() for td in term_descs: try: constructor = term_table[td.name] except: msg = "term '%s' is not in %s" % (td.name, sorted(term_table.keys())) raise ValueError(msg) try: region = regions[td.region] except IndexError: raise KeyError('region "%s" does not exist!' % td.region) term = Term.from_desc(constructor, td, region, integrals=integrals) terms.append(term) return terms
def main(): parser = OptionParser(usage=usage, version='%prog') parser.add_option('-c', '--counts', action='store_true', dest='counts', default=False, help=helps['counts']) parser.add_option('-u', '--unused', action='store_true', dest='unused', default=False, help=helps['unused']) options, args = parser.parse_args() if len(args) > 0: pdf_dir = os.path.realpath(args[0]) else: parser.print_help(), return required, other = get_standard_keywords() terms_use = dict_from_keys_init(term_table.keys(), set) for filename in locate_files('*.py', pdf_dir): base = filename.replace(pdf_dir, '').lstrip(os.path.sep) output('trying "%s"...' % base) try: conf = ProblemConf.from_file(filename, required, other, verbose=False) except: output('...failed') continue use = conf.options.get('use_equations', 'equations') eqs_conf = getattr(conf, use) for key, eq_conf in eqs_conf.iteritems(): term_descs = parse_definition(eq_conf) for td in term_descs: terms_use[td.name].add(base) output('...ok') output('...done') if options.unused: output('unused terms:') unused = [ name for name in terms_use.keys() if len(terms_use[name]) == 0 ] for name in sorted(unused): output(' ' + name) output('total: %d' % len(unused)) else: output('terms use:') for name, ex_names in ordered_iteritems(terms_use): output('%s: %d' % (name, len(ex_names))) if not options.counts: for ex_name in sorted(ex_names): output(' ' + ex_name)