[SciPy-dev] change scipy.optimize function signatures?? FEEDBACK NEEDED!! (ticket 285)

Alan G Isaac aisaac at american.edu
Thu Jul 19 11:33:56 EDT 2007


Dmitrey has raised some questions about ticket 285:
http://projects.scipy.org/scipy/scipy/ticket/285

The changes proposed are not complex to implement,
but they increase the interface complexity.
They also raise some design considerations.

For example, according to the ticket, the signature for brent would change from
def brent(func, args=(), brack=None, tol=1.48e-8, full_output=0, maxiter=500):
to
def brent(func, args=(), brack=None, tol=1.48e-8, full_output=0, maxiter=500, bracket_keywords = {} ):

In my personal view, this signature is already messy.
If it is to grow an argument, I suggest that the argument
be a parameters object.

This would work something like the following.
(No deep thought on this yet.)

class OptizationParams:
    def __init__(self, **kwargs):
        self.set_defaults()
        for k,v in kwargs.iteritems():
            if hasattr(self, k):
                setattr(self, k, v)
            else:
                raise AttributeError
    def set_defaults(self):
        self.args = ()
        self.tol = 1.48e-8
        self.full_output=0
        self.maxiter=500
        self.bracket_interval = None
        self.bracket_grow_limit = None

The signature for brent would become
def brent(func, params=OptizationParams(), **kwargs):

Any kwargs provided to `brent` would override the values in 
the OptParam instance.  This should be fully backwards 
compatible and, looking forward, very flexible.

Comments?

Cheers,
Alan Isaac





More information about the SciPy-Dev mailing list