Ejemplo n.º 1
0
    def __init__(self, a):
        self.name = a.__name__.split('.')[-1]
        self.eval = a.eval
        self.functionalform = a.functionalform
        self.functionalform.name = self.name
        self.functionalform.eval = a.eval
        if iterable(a.applystdform):
            self.functionalform._stdforms = set(a.applystdform)
        else:
            self.functionalform._stdforms = set((a.applystdform, ))
        # jem. redundancy, but used to make vex.split work.
        self.functionalform.func = self
        # jem: next line seems to be used only by test/atoms.py.
        self.module = a

        # only used for classify function etc (e.g. classify(log)).
        self.increasing = hasattr(self.functionalform, 'incfn') and \
                (not isinstance(self.functionalform.incfn, property)) and \
                self.functionalform.incfn
        self.decreasing = hasattr(self.functionalform, 'decfn') and \
                (not isinstance(self.functionalform.decfn, property)) and \
                self.functionalform.decfn
        self.pos = hasattr(self.functionalform, 'posfn') and \
                (not isinstance(self.functionalform.posfn, property)) and \
                self.functionalform.posfn
        self.neg = hasattr(self.functionalform, 'negfn') and \
                (not isinstance(self.functionalform.negfn, property)) and \
                self.functionalform.negfn
        self.convex = hasattr(self.functionalform, 'convfn') and \
                (not isinstance(self.functionalform.convfn, property)) and \
                self.functionalform.convfn
        self.concave = hasattr(self.functionalform, 'concfn') and \
                (not isinstance(self.functionalform.concfn, property)) and \
                self.functionalform.concfn

        self.psd = hasattr(self.functionalform,
                           'psd') and self.functionalform.psd
        self.nsd = hasattr(self.functionalform,
                           'nsd') and self.functionalform.nsd
Ejemplo n.º 2
0
    def __init__(self, a):
        self.name = a.__name__.split('.')[-1]
        self.eval = a.eval
        self.functionalform = a.functionalform
        self.functionalform.name = self.name
        self.functionalform.eval = a.eval
        if iterable(a.applystdform):
            self.functionalform._stdforms = set(a.applystdform)
        else:
            self.functionalform._stdforms = set((a.applystdform,))
        # jem. redundancy, but used to make vex.split work.
        self.functionalform.func = self
        # jem: next line seems to be used only by test/atoms.py.
        self.module = a

        # only used for classify function etc (e.g. classify(log)).
        self.increasing = hasattr(self.functionalform, 'incfn') and \
                (not isinstance(self.functionalform.incfn, property)) and \
                self.functionalform.incfn
        self.decreasing = hasattr(self.functionalform, 'decfn') and \
                (not isinstance(self.functionalform.decfn, property)) and \
                self.functionalform.decfn
        self.pos = hasattr(self.functionalform, 'posfn') and \
                (not isinstance(self.functionalform.posfn, property)) and \
                self.functionalform.posfn
        self.neg = hasattr(self.functionalform, 'negfn') and \
                (not isinstance(self.functionalform.negfn, property)) and \
                self.functionalform.negfn
        self.convex = hasattr(self.functionalform, 'convfn') and \
                (not isinstance(self.functionalform.convfn, property)) and \
                self.functionalform.convfn
        self.concave = hasattr(self.functionalform, 'concfn') and \
                (not isinstance(self.functionalform.concfn, property)) and \
                self.functionalform.concfn

        self.psd = hasattr(self.functionalform, 'psd') and self.functionalform.psd
        self.nsd = hasattr(self.functionalform, 'nsd') and self.functionalform.nsd
Ejemplo n.º 3
0
def min(*args):
    #"""Maximum element of a vector."""
    # need to upgrade this to handle things like min(matrix((1,2)), matrix((2,3))).
    if len(args) > 1:
        if not getoptvars(args) and not getparams(args):
            r = __builtin__.min([rows(x) for x in args])
            c = __builtin__.min([cols(x) for x in args])

            if (r, c) == (1, 1):
                return __builtin__.min(args)

            args = list(args)
            for i in xrange(len(args)):
                if size(args[i]) == (1, 1):
                    args[i] = args[i] * matrix(ones(r, c))
                elif size(args[i]) != (r, c):
                    raise AtomArgsError('incompatible arguments to min')

            z = zeros(r, c)
            for i in range(r * c):
                z[i] = __builtin__.min([x[i] for x in args])

            return z
        else:
            return multiargminfunction(args)
    else:
        arg = args[0]
        if iterable(arg):
            return min(*arg)
        elif isinstance(arg, (int, float)):
            return arg
        elif not getoptvars(arg) and not getparams(arg):
            return __builtin__.min(arg)
        elif is1x1(arg):
            return arg
        else:
            return singleargminfunction(arg)
Ejemplo n.º 4
0
def min(*args):
    #"""Maximum element of a vector."""
    # need to upgrade this to handle things like min(matrix((1,2)), matrix((2,3))).
    if len(args) > 1:
        if not getoptvars(args) and not getparams(args):
            r = __builtin__.min([rows(x) for x in args])
            c = __builtin__.min([cols(x) for x in args])

            if (r,c) == (1,1):
                return __builtin__.min(args)

            args = list(args)
            for i in xrange(len(args)):
                if size(args[i]) == (1,1):
                    args[i] = args[i]*matrix(ones(r,c))
                elif size(args[i]) != (r,c):
                    raise AtomArgsError('incompatible arguments to min')

            z = zeros(r, c)
            for i in range(r*c):
                z[i] = __builtin__.min([x[i] for x in args])

            return z
        else:
            return multiargminfunction(args)
    else:
        arg = args[0]
        if iterable(arg):
            return min(*arg)
        elif isinstance(arg, (int, float)):
            return arg
        elif not getoptvars(arg) and not getparams(arg):
            return __builtin__.min(arg)
        elif is1x1(arg):
            return arg
        else:
            return singleargminfunction(arg)