Skip to content
Snippets Groups Projects
Commit cd72626d authored by Nicolas Mansard's avatar Nicolas Mansard Committed by Nicolas Mansard
Browse files

IVIGIT.

parent 330cb8db
No related branches found
No related tags found
No related merge requests found
...@@ -104,6 +104,8 @@ SET (PYTHON_SOURCES ...@@ -104,6 +104,8 @@ SET (PYTHON_SOURCES
dynamic_graph/__init__.py dynamic_graph/__init__.py
dynamic_graph/entity.py dynamic_graph/entity.py
dynamic_graph/signal_base.py dynamic_graph/signal_base.py
dynamic_graph/matlab.py
dynamic_graph/script_shortcuts.py
) )
SET (PYTHON_SOURCES_FULLPATH "") SET (PYTHON_SOURCES_FULLPATH "")
......
# The matlab class is define to produce a nice rendering of vector and matrix
# signals. The class builds at construction a string from the display
# of the matrix/vector, and stores the string internally. The string can be recovered
# using the str() member.
# The statics prec, space and fullPrec can be used to modify the display.
def pseudozero(prec):
"""
Return a string with '0...' and enough space to fill prec cars.
"""
res='0...'
for i in range(2,prec):
res+=' '
return res
class matlab:
prec=12
space=2
fullPrec=1e-5
def __init__( self,obj ):
try:
return self.matlabFromMatrix(obj)
except:
pass
try:
return self.matlabFromVector(obj)
except:
pass
self.resstr = str(obj)
def __str__(self):
return self.resstr
def matlabFromMatrix(self,A):
nr=len(A)
nc=len(A[0]);
fm='%.'+str(self.prec)+'f'
maxstr=0
mstr=(())
for v in A:
lnstr=()
for x in v:
if (abs(x)<self.fullPrec*self.fullPrec):
curr='0'
else:
if (abs(x)<self.fullPrec):
curr=pseudozero(self.prec)
else:
curr= ' '+(fm % x)
if( maxstr<len(curr)):
maxstr=len(curr)
lnstr+=(curr,)
mstr+=(lnstr,)
maxstr+=self.space
resstr='[...\n'
first=True
for v in mstr:
if first:
first=False;
else:
resstr+=' ;\n'
firstC=True
for x in v:
if firstC:
firstC=False
else:
resstr+=','
for i in range(1,maxstr-len(x)):
resstr+=' '
resstr+=x
resstr+=' ];'
self.resstr = resstr
def matlabFromVector(self,v):
nr=len(v)
fm='%.'+str(self.prec)+'f'
maxstr=0
vstr=(())
for x in v:
if (abs(x)<self.fullPrec*self.fullPrec):
curr='0'
else:
if (abs(x)<self.fullPrec):
curr=pseudozero(self.prec)
else:
curr= ' '+(fm % x)
if( maxstr<len(curr)):
maxstr=len(curr)
vstr+=(curr,)
maxstr+=self.space
resstr='[ '
first=True
for x in vstr:
if first:
first=False;
else:
resstr+=','
for i in range(1,maxstr-len(x)):
resstr+=' '
resstr+=x
resstr+=' ]\';'
self.resstr = resstr
# Defines the following shortcuts:
# signal.name -> return the shortname
# signal -> display nicely the content of the signal
# signal(3) -> recompute the signal at time 3, and display nicely
# signal +1 -> increment the signal time of 1, recompute, and display.
# signal.deps -> display the graph dependancy up to the default value (3)
# signal.deps(6) -> same, but with depth = 6.
# entity -> same as print(entity)
# change the prompt to be '%'
from dynamic_graph.signal_base import *
from dynamic_graph.entity import *
from matlab import matlab
# Enables shortcut "name"
def sig_short_name(self):
return self.getName().split(':')[-1]
setattr(SignalBase,'name',property(sig_short_name))
# Enables shortcuts "m"
# This code implements a pseudo function 'm' in the class signal_base,
# with no args, or optional args. Three calls can be made:
# - sig.m : print the current value.
# - sig.m(time): recompute at given <time>, and display the current value
# - sig.m +time: recompute at <time> after current time, and display.
class PrettySignalPrint:
sig = None
def __init__(self,sig):
self.sig = sig
def __repr__(self):
return str(matlab(self.sig.value))
def __call__(self,iter):
self.sig.recompute(iter)
return self
def __add__(self,iter):
self.sig.recompute( self.sig.time+iter )
return self
def sigMatPrint(sig):
return PrettySignalPrint(sig)
setattr(SignalBase,'m',property(PrettySignalPrint))
print('Pretty matlab print set')
# Enable the same as 'm', but directly on the signal object.
def sigRepr( self ):
return self.name+' = '+str(matlab(self.value))
def sigCall( sig,iter ):
sig.recompute(iter)
print sigRepr(sig)
def sigTimeIncr( sig,iter ):
sig.recompute(sig.time+iter)
print sigRepr(sig)
setattr(SignalBase,'__repr__',sigRepr)
setattr(SignalBase,'__call__',sigCall)
setattr(SignalBase,'__add__',sigTimeIncr)
# Enables shortcut "deps"
# Implements the peudo function 'deps', that can be called without arg,
# or specifying a specific depth to be printed.
class SignalDepPrint:
defaultDepth = 2
sig = None
def __init__(self,sig):
self.sig=sig
def __repr__(self):
return self.sig.displayDependencies(self.defaultDepth)
def __call__(self,depth):
self.defaultDepth = depth
return self
setattr(SignalBase,'deps',property(SignalDepPrint))
setattr(Entity,'__repr__',Entity.__str__)
# Changing prompt
import sys
sys.ps1 = '% '
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment