def do_with(self, args): '''Changes or displays the working set.''' args = args.split() if args: self.files = [] for arg in args: # So that if arg is not a glob, it won't get removed # because it doesn't exist on the fs: globbed = list(flatten(glob.glob(arg))) if globbed: self.files += globbed else: self.files.append(arg) msg("Working set is: " + list_preview(self.files))
def output(self): random.shuffle(self.words) self.coverages = defaultdict(list) for i in xrange(self.NFOLDS): split = train_and_test_for_fold(self.words, i, self.NFOLDS) for coverage_type, selector in ( ('category', operator.itemgetter(1)), ('lex' , operator.itemgetter(0))): #msg('Computing %s coverage for fold %d', coverage_type, i) for mode in ('type', 'token'): self.coverages[coverage_type + '.' + mode].append( get_coverage(train=split.train, test=split.test, selector=selector, mode=mode) ) for coverage_type, coverages in self.coverages.iteritems(): msg('%s: %.2f%%', coverage_type, avg(coverages) * 100.0)
def output(self): random.shuffle(self.words) self.coverages = defaultdict(list) for i in xrange(self.NFOLDS): split = train_and_test_for_fold(self.words, i, self.NFOLDS) for coverage_type, selector in (('category', operator.itemgetter(1)), ('lex', operator.itemgetter(0))): #msg('Computing %s coverage for fold %d', coverage_type, i) for mode in ('type', 'token'): self.coverages[coverage_type + '.' + mode].append( get_coverage(train=split.train, test=split.test, selector=selector, mode=mode)) for coverage_type, coverages in self.coverages.iteritems(): msg('%s: %.2f%%', coverage_type, avg(coverages) * 100.0)
def print_output_destination(): if self.output_file is None: msg("Filter output will be sent to the console.") elif self.output_file == PagerFilename: msg("Filter output will be paged with %s.", self.pager_path) else: msg("Filter output will be redirected to: %s", self.output_file)
def do_load(self, args): '''Loads filter modules given as package names.''' modules = args.split() old_modules = set(self.tracer.available_filters_dict.keys()) self.tracer.add_modules(modules) modules = set(self.tracer.available_filters_dict.keys()) added_modules = modules.difference(old_modules) if added_modules: msg("%s modules added:", len(added_modules)) for module in added_modules: msg("\t%s", module) else: msg("No modules added.")
def redirecting_stdout(self, action, filter_name, filter_args): '''Calls the given _action_ with stdout temporarily redirected to _self.output_file_ or a pager program.''' try: old_stdout = sys.stdout pipe = None if self.output_file == PagerFilename: pipe = self.create_pager_pipe() sys.stdout = pipe.stdin elif self.output_file: sys.stdout = open(self.output_file, 'w') action() if self.output_file == PagerFilename: if pipe: sys.stdout.close() # Signal EOF pipe.wait() except KeyboardInterrupt: if pipe: pipe.stdin.close() pipe.wait() msg("\nFilter run %s halted by user.", filter_run_name(filter_name, filter_args)) except Exception, e: if pipe: pipe.stdin.close() pipe.wait() msg("Filter run %s halted by framework:", filter_run_name(filter_name, filter_args)) # TODO: Exception no longer has a message field in Python 3.0, produces a DeprecationWarning # under Python 2.7 msg("\t%s (%s)", e.message, e.__class__.__name__) self.last_exception = sys.exc_info()
def do_verbose(self, args): '''Produces more output during processing.''' if not self._verbose: self.set_verbose(True) msg("Will generate more output.")
def do_quiet(self, args): '''Produces less output during processing.''' if self._verbose: self.set_verbose(False) msg("Will generate less output.")