Recursive printing to view the inversion.

This commit is contained in:
rowanc1
2013-12-04 14:12:37 -08:00
parent 9f76d2c3d9
commit c9b98cc7c0
2 changed files with 84 additions and 44 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ python:
virtualenv:
system_site_packages: true
before_install:
- sudo apt-get install -qq python-numpy python-scipy python-matplotlib libhdf5-dev
- sudo apt-get install -qq python-numpy python-scipy python-matplotlib
- python SimPEG/setup.py
# command to install dependencies
install: "pip install -r requirements.txt --use-mirrors"
+83 -43
View File
@@ -1,8 +1,12 @@
import numpy as np
import time
import h5py
import re
try:
import h5py
except Exception, e:
print 'Warning: SimPEG table needs h5py to be installed.'
def natural_keys(text):
'''
alist.sort(key=natural_keys) sorts in human order
@@ -25,6 +29,52 @@ class SimPEGTable:
self.inversions = hdf5InversionGroup(self,self.root.addGroup('inversions',soft=True))
def saveInversion(self, invObj, dataPath):
invObj._invNode = self.inversions.addGroup('%d'%self.numChildren)
# At the start of every iteration we will create a inversion iteration node.
def _doStartIteration_hdf5_inv(invObj):
invNodeIt = invObj._invNode.addGroup('%d'%(invObj._iter+1))
invNodeIt.attrs['complete'] = False
invNodeIt.attrs['time'] = time.time()
invObj._invNodeIt = invNodeIt
invObj.hook(_doStartIteration_hdf5_inv, overwrite=True)
def _doEndIteration_hdf5_inv(invObj):
invNodeIt = invObj._invNodeIt
invNodeIt.attrs['time'] = time.time() - invNodeIt.attrs['time']
invNodeIt.attrs['ctime'] = time.ctime()
invNodeIt.attrs['phi_d'] = invObj.phi_d
invNodeIt.attrs['phi_m'] = invObj.phi_m
invNodeIt.setArray('m', invObj.m)
invNodeIt.setArray('dpred', invObj.dpred)
invNodeIt.attrs['complete'] = True
invObj.hook(_doEndIteration_hdf5_inv, overwrite=True)
def _doStartIteration_hdf5_opt(optObj):
optNodeIt = optObj.parent._invNode.addGroup('%d.%d'%(optObj.parent._iter, optObj._iter))
optNodeIt.attrs['complete'] = False
optNodeIt.attrs['time'] = time.time()
optObj._optNodeIt = optNodeIt
invObj.opt.hook(_doStartIteration_hdf5_opt, overwrite=True)
def _doEndIteration_hdf5_opt(optObj, xt):
optNodeIt = optObj._optNodeIt
optNodeIt.attrs['time'] = time.time() - optNodeIt.attrs['time']
optNodeIt.attrs['ctime'] = time.ctime()
optNodeIt.setArray('m', xt)
optNodeIt.setArray('dpred', optObj.parent.dpred)
optNodeIt.setArray('searchDirection', optObj.searchDirection)
optNodeIt.attrs['complete'] = True
invObj.opt.hook(_doEndIteration_hdf5_opt, overwrite=True)
return invObj._invNode
class hdf5Group(object):
"""Has some low level support for wrapping the native HDF5-Group class"""
@@ -93,54 +143,44 @@ class hdf5Group(object):
child = self.childClass(self.T, child)
return child
def show(self, pad='', maxDepth=1, depth=0):
"""
Recursively show the structure of the database.
For example::
<hdf5InversionGroup group "/inversions" (1 member)>
- <hdf5Inversion group "/inversions/0" (4 members)>
- <hdf5InversionIteration group "/inversions/0/0.0" (3 members)>
- <hdf5InversionIteration group "/inversions/0/0.1" (3 members)>
- <hdf5InversionIteration group "/inversions/0/0.2" (3 members)>
- <hdf5InversionIteration group "/inversions/0/0.3" (3 members)>
"""
s = self.__str__()
pad += ' '*4
if maxDepth <= 0: print s
if depth >= maxDepth: return s
for c in self.children:
if issubclass(self[c].__class__, hdf5Group):
s += '\n%s- %s' % (pad, self[c].show(pad=pad,depth=depth+1,maxDepth=maxDepth))
else:
s += '\n%s- %s' % (pad, self[c].__str__())
if depth is 0:
print s
else:
return s
def __str__(self):
return '<%s "%s" (%d member%s)>' % (self.__class__.__name__, self.path, self.numChildren, '' if self.numChildren == 1 else 's')
class hdf5InversionGroup(hdf5Group):
def __init__(self, T, groupNode):
hdf5Group.__init__(self, T, groupNode)
self.childClass = hdf5Inversion
def saveInversion(self, invObj, dataPath):
invObj._invNode = self.addGroup('%d'%self.numChildren)
# At the start of every iteration we will create a inversion iteration node.
def _doStartIteration_hdf5_inv(invObj):
invNodeIt = invObj._invNode.addGroup('%d'%(invObj._iter+1))
invNodeIt.attrs['complete'] = False
invNodeIt.attrs['time'] = time.time()
invObj._invNodeIt = invNodeIt
invObj.hook(_doStartIteration_hdf5_inv, overwrite=True)
def _doEndIteration_hdf5_inv(invObj):
invNodeIt = invObj._invNodeIt
invNodeIt.attrs['time'] = time.time() - invNodeIt.attrs['time']
invNodeIt.attrs['ctime'] = time.ctime()
invNodeIt.attrs['phi_d'] = invObj.phi_d
invNodeIt.attrs['phi_m'] = invObj.phi_m
invNodeIt.setArray('m', invObj.m)
invNodeIt.setArray('dpred', invObj.dpred)
invNodeIt.attrs['complete'] = True
invObj.hook(_doEndIteration_hdf5_inv, overwrite=True)
def _doStartIteration_hdf5_opt(optObj):
optNodeIt = optObj.parent._invNode.addGroup('%d.%d'%(optObj.parent._iter, optObj._iter))
optNodeIt.attrs['complete'] = False
optNodeIt.attrs['time'] = time.time()
optObj._optNodeIt = optNodeIt
invObj.opt.hook(_doStartIteration_hdf5_opt, overwrite=True)
def _doEndIteration_hdf5_opt(optObj, xt):
optNodeIt = optObj._optNodeIt
optNodeIt.attrs['time'] = time.time() - optNodeIt.attrs['time']
optNodeIt.attrs['ctime'] = time.ctime()
optNodeIt.setArray('m', xt)
optNodeIt.setArray('dpred', optObj.parent.dpred)
optNodeIt.setArray('searchDirection', optObj.searchDirection)
optNodeIt.attrs['complete'] = True
invObj.opt.hook(_doEndIteration_hdf5_opt, overwrite=True)
return invObj._invNode
class hdf5Inversion(hdf5Group):
def __init__(self, T, groupNode):