using abc module (abstract base class) to check for proper implementation of the container classes
This commit is contained in:
parent
c7a258aa1d
commit
8f538174d9
@ -13,7 +13,6 @@ import gui.container_widgets
|
|||||||
|
|
||||||
__author__ = 'markusro'
|
__author__ = 'markusro'
|
||||||
|
|
||||||
# FIXME: why are the functions implemented again? Better to use function_library!!
|
|
||||||
class Conductivity(BaseContainer):
|
class Conductivity(BaseContainer):
|
||||||
def __init__( self, plt_imag=None, plt_real=None, limits=None ):
|
def __init__( self, plt_imag=None, plt_real=None, limits=None ):
|
||||||
super(Conductivity, self).__init__(plt_real=plt_real, plt_imag=plt_imag, limits=limits)
|
super(Conductivity, self).__init__(plt_real=plt_real, plt_imag=plt_imag, limits=limits)
|
||||||
@ -27,6 +26,10 @@ class Conductivity(BaseContainer):
|
|||||||
def function(self, p ,x):
|
def function(self, p ,x):
|
||||||
return functions.cond_cmplx(p,x)
|
return functions.cond_cmplx(p,x)
|
||||||
|
|
||||||
|
def start_parameter(self, pos):
|
||||||
|
cond_par = [0.0, 10**(pos.y()+pos.x())*2*np.pi, 1.0]
|
||||||
|
self.set_parameter(beta=cond_par)
|
||||||
|
|
||||||
|
|
||||||
class PowerComplex(BaseContainer):
|
class PowerComplex(BaseContainer):
|
||||||
def __init__( self, plt_real=None, plt_imag=None, limits=None ):
|
def __init__( self, plt_real=None, plt_imag=None, limits=None ):
|
||||||
@ -40,6 +43,10 @@ class PowerComplex(BaseContainer):
|
|||||||
def function( self, p, x ):
|
def function( self, p, x ):
|
||||||
return functions.power_cmplx(p, x)
|
return functions.power_cmplx(p, x)
|
||||||
|
|
||||||
|
def start_parameter(self, pos):
|
||||||
|
cond_par = [10**(pos.y()+pos.x())*2*np.pi, 1.0]
|
||||||
|
self.set_parameter(cond_par)
|
||||||
|
|
||||||
|
|
||||||
class Static(BaseContainer):
|
class Static(BaseContainer):
|
||||||
def __init__( self, plt_real=None, plt_imag=None, limits=None ):
|
def __init__( self, plt_real=None, plt_imag=None, limits=None ):
|
||||||
@ -53,6 +60,9 @@ class Static(BaseContainer):
|
|||||||
def function( self, p, x ):
|
def function( self, p, x ):
|
||||||
return functions.static_cmplx(p, x)
|
return functions.static_cmplx(p, x)
|
||||||
|
|
||||||
|
def start_parameter(self, position):
|
||||||
|
cond_par = [10**position.y()]
|
||||||
|
self.set_parameter(beta=cond_par)
|
||||||
|
|
||||||
class Peak(BaseContainer):
|
class Peak(BaseContainer):
|
||||||
def __init__( self, id_num=None, plt_real=None, plt_imag=None, limits=None ):
|
def __init__( self, id_num=None, plt_real=None, plt_imag=None, limits=None ):
|
||||||
@ -69,6 +79,9 @@ class Peak(BaseContainer):
|
|||||||
def function( self, p, x ):
|
def function( self, p, x ):
|
||||||
return functions.hn(p, x)
|
return functions.hn(p, x)
|
||||||
|
|
||||||
|
def start_parameter(self, pos):
|
||||||
|
new_peak_beta0 = [2*10**pos.y(), 1/(2*np.pi*10**pos.x()), 1, 1]
|
||||||
|
self.set_parameter(beta=new_peak_beta0)
|
||||||
|
|
||||||
class YAFF(BaseContainer):
|
class YAFF(BaseContainer):
|
||||||
def __init__( self, plt_real=None, plt_imag=None, limits=None ):
|
def __init__( self, plt_real=None, plt_imag=None, limits=None ):
|
||||||
@ -106,4 +119,10 @@ class YAFF(BaseContainer):
|
|||||||
def function( self, p, x ):
|
def function( self, p, x ):
|
||||||
ya = self._libyaff.loss(p, x)
|
ya = self._libyaff.loss(p, x)
|
||||||
cplx = np.array([ya.imag, ya.real])
|
cplx = np.array([ya.imag, ya.real])
|
||||||
return cplx
|
return cplx
|
||||||
|
|
||||||
|
def start_parameter(self, pos):
|
||||||
|
gg_y = 10**pos.y()*2
|
||||||
|
gg_x = 1/(10**pos.x()*2*np.pi)
|
||||||
|
yaff_par = [gg_y, gg_x, 20.0, 1.0, 0.5, gg_x/100, 1.0, 1.0]
|
||||||
|
self.set_parameter(yaff_par)
|
@ -2,10 +2,15 @@ from PyQt4.QtCore import QObject, pyqtSignal, Qt, pyqtSlot
|
|||||||
from PyQt4.QtGui import QColor
|
from PyQt4.QtGui import QColor
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pyqtgraph as pg
|
import pyqtgraph as pg
|
||||||
|
import abc
|
||||||
|
|
||||||
__author__ = 'markusro'
|
__author__ = 'markusro'
|
||||||
|
|
||||||
|
class QABCMeta(abc.ABCMeta, QObject.__class__):
|
||||||
|
"""
|
||||||
|
Allows us to use ABCMeta
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
class BaseContainer(QObject):
|
class BaseContainer(QObject):
|
||||||
"""
|
"""
|
||||||
@ -14,6 +19,8 @@ class BaseContainer(QObject):
|
|||||||
Specific containers are implemented in the container.py module.
|
Specific containers are implemented in the container.py module.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
__metaclass__ = QABCMeta
|
||||||
|
|
||||||
# TODO generalize the base class so that we can use plugins (self-contained fit functions)
|
# TODO generalize the base class so that we can use plugins (self-contained fit functions)
|
||||||
changedData = pyqtSignal()
|
changedData = pyqtSignal()
|
||||||
removeObj = pyqtSignal(QObject)
|
removeObj = pyqtSignal(QObject)
|
||||||
@ -74,7 +81,6 @@ class BaseContainer(QObject):
|
|||||||
# self._func = self.functions.get_function(id)
|
# self._func = self.functions.get_function(id)
|
||||||
self._id_string = id
|
self._id_string = id
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def id_label( self ):
|
def id_label( self ):
|
||||||
return self._id_label
|
return self._id_label
|
||||||
@ -108,16 +114,16 @@ class BaseContainer(QObject):
|
|||||||
p = self.widget.getTable() # TODO ugly ... should return self._beta etc ...?
|
p = self.widget.getTable() # TODO ugly ... should return self._beta etc ...?
|
||||||
return p
|
return p
|
||||||
|
|
||||||
def get_fixed( self ):
|
|
||||||
p = self.widget.fixedParameter()
|
|
||||||
return p
|
|
||||||
|
|
||||||
def set_parameter( self, beta, sd_beta=None ):
|
def set_parameter( self, beta, sd_beta=None ):
|
||||||
self._beta = beta
|
self._beta = beta
|
||||||
self._sd_beta = sd_beta
|
self._sd_beta = sd_beta
|
||||||
self.widget.update_table(beta, sd_beta)
|
self.widget.update_table(beta, sd_beta)
|
||||||
self.update_data()
|
self.update_data()
|
||||||
|
|
||||||
|
def get_fixed( self ):
|
||||||
|
p = self.widget.fixedParameter()
|
||||||
|
return p
|
||||||
|
|
||||||
def get_data( self ):
|
def get_data( self ):
|
||||||
return self._frequency, self._data
|
return self._frequency, self._data
|
||||||
|
|
||||||
@ -147,9 +153,14 @@ class BaseContainer(QObject):
|
|||||||
self.data_curve_real.setData(x=[np.nan], y=[np.nan])
|
self.data_curve_real.setData(x=[np.nan], y=[np.nan])
|
||||||
self.data_curve_imag.setData(x=[np.nan], y=[np.nan])
|
self.data_curve_imag.setData(x=[np.nan], y=[np.nan])
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
|
def start_parameter(self, position):
|
||||||
|
raise NotImplementedError("This needs to be implemented in your subclass")
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
def function( self, p, x ):
|
def function( self, p, x ):
|
||||||
if self._abort:
|
if self._abort:
|
||||||
raise StopIteration
|
raise StopIteration
|
||||||
raise NotImplementedError, "This needs to be implemented in your subclass"
|
raise NotImplementedError("This needs to be implemented in your subclass")
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user