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