parent
							
								
									bceef1e601
								
							
						
					
					
						commit
						0bd6f56422
					
				
				 1 changed files with 84 additions and 0 deletions
			
			
		| @ -0,0 +1,84 @@ | ||||
| # $Id: result_base.py,v 1.1 2010-11-11 17:48:01 wirawan Exp $ | ||||
| # | ||||
| # pyqmc.results.result_base.py | ||||
| # Basic tool for storing the result of a calculation. | ||||
| # | ||||
| # Wirawan Purwanto | ||||
| # Created: 20101025 (pyqmc.results.result_base) | ||||
| # Moved: 20101111 (to wpylib.db.result_base) | ||||
| # | ||||
| 
 | ||||
| """ | ||||
| The class result_base is very similar to | ||||
| wpylib.params.params_flat.Parameters , | ||||
| except that it does not contain multiple dict-like objects, thus is | ||||
| much simpler. | ||||
| """ | ||||
| 
 | ||||
| import os | ||||
| import os.path | ||||
| 
 | ||||
| class result_base(dict): | ||||
|   '''Structure to represent metadata or structured result. | ||||
|   No particular structure is assumed. | ||||
|   Results are fetchable by either X.member or X['member'] syntax, and these | ||||
|   results are typically meant to be read-only. | ||||
| 
 | ||||
|   CAVEATS | ||||
|   * Note: dict method names are left intact. | ||||
|     Please be aware when programming this thing! | ||||
|   * Additional possible field names set by this class: | ||||
|     - filename_ | ||||
|     - absfilename_ -- full file name including absolute directory path. | ||||
|   * __setattr__ is not set. | ||||
|     Result-related attributes are supposed to be read-only. | ||||
|     As a consequence, adding metadata or result *must* be done in the | ||||
|     dict way, e.g. | ||||
|         X['nblocks'] = 32 | ||||
|     instead of | ||||
|         X.nblocks = 32. | ||||
| 
 | ||||
|   ''' | ||||
|   def __init__(self, _src_=None, **_extra_values_): | ||||
|     src = _src_ | ||||
|     if isinstance(src, dict): | ||||
|       self.clear() | ||||
|       self.update(src) | ||||
|     elif isinstance(src, str): | ||||
|       # WARNING: Awaiting future definition of parse_text_file_(). | ||||
|       # This must be specified in the derived class. | ||||
|       self.parse_text_file_(src) | ||||
|       self.filename_ = src | ||||
|       self.absfilename_ = os.path.abspath(src) | ||||
|     else: | ||||
|       pass | ||||
|     self.update(_extra_values_) | ||||
|   def __getattr__(self, key): | ||||
|     try: | ||||
|       return self[key] | ||||
|     except: | ||||
|       return dict.__getattribute__(self, key) | ||||
|   def __str__(self): | ||||
|     return "<" +self.__module__ + "." + self.__class__.__name__ + \ | ||||
|       " object (" + dict.__str__(self) + ")>" | ||||
| 
 | ||||
| 
 | ||||
| # Test programs | ||||
| if __name__ == "__main__": | ||||
| 
 | ||||
|   def _test_result_base1(): | ||||
|     x = result_base() | ||||
|     print x.keys() | ||||
|     print x.values() | ||||
|     x['nblocks'] = 32 | ||||
|     print x | ||||
| 
 | ||||
|     y = result_base({'lack': 352, 'Etrial': -32.764}) | ||||
|     print y.keys() | ||||
|     print y.values() | ||||
|     y['nblocks'] = 32 | ||||
|     print y | ||||
|     print y.Etrial | ||||
| 
 | ||||
| 
 | ||||
|   _test_result_base1() | ||||
					Loading…
					
					
				
		Reference in new issue