mirror of
https://github.com/wassname/simpeg.git
synced 2026-07-09 20:14:20 +08:00
Recursive printing to view the inversion.
This commit is contained in:
+1
-1
@@ -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
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user