Source code for dpgen2.exploration.report.naive_report

from . import ExplorationReport

[docs]class NaiveExplorationReport(ExplorationReport): def __init__( self, counter_f, counter_v, ): self.valid_quantities = ['force', 'virial'] self.valid_items = ['accurate', 'candidate', 'failed'] self.report = { 'force' : {}, 'virial' : {}, } self.report['force']['candidate'], \ self.report['force']['accurate'], \ self.report['force']['failed'] = \ NaiveExplorationReport.calculate_ratio( counter_f['candidate'], counter_f['accurate'], counter_f['failed'] ) self.report['virial']['candidate'], \ self.report['virial']['accurate'], \ self.report['virial']['failed'] = \ NaiveExplorationReport.calculate_ratio( counter_v['candidate'], counter_v['accurate'], counter_v['failed'] )
[docs] @staticmethod def calculate_ratio( cc, ca, cf, ): sumed = float(cc + ca + cf) if sumed > 0: rf = float(cf) / sumed rc = float(cc) / sumed ra = float(ca) / sumed else: rf = rc = ra = None return rc, ra, rf
[docs] def failed_ratio ( self, tag = None, ) -> float : return self.ratio('force', 'failed')
[docs] def accurate_ratio ( self, tag = None, ) -> float : return self.ratio('force', 'accurate')
[docs] def candidate_ratio ( self, tag = None, ) -> float : return self.ratio('force', 'candidate')
[docs] def ratio( self, quantity : str, item : str )-> float: if not quantity in self.valid_quantities: raise RuntimeError(f'invalid quantity {quantity}, must in [{" ".join(self.valid_quantities)}]') if not item in self.valid_items: raise RuntimeError(f'invalid item {item}, must in [{" ".join(self.valid_items)}]') return self.report[quantity][item]