Source code for pyomo.contrib.pynumero.sparse.base_block

#  ___________________________________________________________________________
#
#  Pyomo: Python Optimization Modeling Objects
#  Copyright (c) 2008-2024
#  National Technology and Engineering Solutions of Sandia, LLC
#  Under the terms of Contract DE-NA0003525 with National Technology and
#  Engineering Solutions of Sandia, LLC, the U.S. Government retains certain
#  rights in this software.
#  This software is distributed under the 3-clause BSD License.
#  ___________________________________________________________________________

# These classes are for checking types consistently and raising errors

from ..dependencies import numpy as np


[docs] class BaseBlockVector(object): """Base class for block vectors"""
[docs] def __init__(self): pass
# We do not expect classes derived from BaseBlockVector to support # the methods below. def argpartition(self, kth, axis=-1, kind='introselect', order=None): msg = "argpartition not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def argsort(self, axis=-1, kind='quicksort', order=None): msg = "argsort not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def byteswap(self, inplace=False): msg = "byteswap not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def choose(self, choices, out=None, mode='raise'): msg = "choose not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def diagonal(self, offset=0, axis1=0, axis2=1): msg = "diagonal not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def getfield(self, dtype, offset=0): msg = "getfield not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def item(self, *args): msg = "item not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def itemset(self, *args): msg = "itemset not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def newbyteorder(self, new_order='S'): msg = "newbyteorder not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def put(self, indices, values, mode='raise'): msg = "put not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def partition(self, kth, axis=-1, kind='introselect', order=None): msg = "partition not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def repeat(self, repeats, axis=None): msg = "repeat not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def reshape(self, shape, order='C'): msg = "reshape not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def resize(self, new_shape, refcheck=True): msg = "resize not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def searchsorted(self, v, side='left', sorter=None): msg = "searchsorted not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def setfield(self, val, dtype, offset=0): msg = "setfield not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def setflags(self, write=None, align=None, uic=None): msg = "setflags not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def sort(self, axis=-1, kind='quicksort', order=None): msg = "sort not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def squeeze(self, axis=None): msg = "squeeze not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def swapaxes(self, axis1, axis2): msg = "swapaxes not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def trace(self, offset=0, axis1=0, axis2=1, dtype=None, out=None): msg = "trace not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def argmax(self, axis=None, out=None): msg = "argmax not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def argmin(self, axis=None, out=None): msg = "argmin not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def take(self, indices, axis=None, out=None, mode='raise'): msg = "take not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) # The following vectors are to be supported at some point def dump(self, file): msg = "dump not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def dumps(self): msg = "dumps not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def tobytes(self, order='C'): msg = "tobytes not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg)
[docs] class BaseBlockMatrix(object): """Base class for block matrices"""
[docs] def __init__(self): pass
# We do not expect classes derived from BaseBlockVector to support # the methods below. def tolil(self, copy=False): msg = "tolil not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def todia(self, copy=False): msg = "todia not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def tobsr(self, blocksize=None, copy=False): msg = "tobsr not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def sum(self, axis=None, dtype=None, out=None): msg = "sum not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def mean(self, axis=None, dtype=None, out=None): msg = "mean not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def diagonal(self, k=0): msg = "diagonal not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def nonzero(self): msg = "nonzero not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def setdiag(self, values, k=0): msg = "setdiag not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def transpose(self, *axes): msg = "transpose not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg) def tostring(self, order='C'): msg = "tostring not implemented for {}".format(self.__class__.__name__) raise NotImplementedError(msg)
#: NumPy ufuncs that take one vector and are compatible with pyNumero vectors vec_unary_ufuncs = { ## MATH ufuncs np.negative, np.positive, np.absolute, np.fabs, np.rint, np.sign, np.conj, np.conjugate, np.exp, np.exp2, np.log, np.log2, np.log10, np.expm1, np.log1p, np.sqrt, np.square, np.cbrt, np.reciprocal, ## TRIG ufuncs np.sin, np.cos, np.tan, np.arcsin, np.arccos, np.arctan, np.sinh, np.cosh, np.tanh, np.arcsinh, np.arccosh, np.arctanh, np.degrees, np.radians, np.deg2rad, np.rad2deg, ## COMPARISON ufuncs np.logical_not, ## BIT-TWIDDLING ufuncs np.invert, ## FLOATING ufuncs np.isfinite, np.isinf, np.isnan, # np.isnat, # only defined for datetime np.fabs, # numpy docs list here and in MATH np.signbit, np.spacing, # np.modf, # disabled because shape is not preserved # np.frexp, # disabled because shape is not preserved np.floor, np.ceil, np.trunc, # OTHER (not listed in ufuncs docs) np.abs, } #: NumPy ufuncs that take two vectors and are compatible with pyNumero vectors vec_binary_ufuncs = { ## MATH ufuncs np.add, np.subtract, np.multiply, # np.matmult, # disabled because shape is not preserved np.divide, np.logaddexp, np.logaddexp2, np.true_divide, np.floor_divide, np.power, np.float_power, np.remainder, np.mod, np.fmod, # np.divmod, # disabled because shape is not preserved np.heaviside, np.gcd, np.lcm, ## TRIG ufuncs np.arctan2, np.hypot, ## BIT-TWIDDLING ufuncs np.bitwise_and, np.bitwise_or, np.bitwise_xor, np.left_shift, np.right_shift, ## COMPARISON ufuncs np.greater, np.greater_equal, np.less, np.less_equal, np.not_equal, np.equal, np.logical_and, np.logical_or, np.logical_xor, np.maximum, np.minimum, np.fmax, np.fmin, ## FLOATING ufincs np.copysign, np.nextafter, np.ldexp, np.fmod, # numpy docs list here and in MATH } #: NumPy ufuncs can be used as reductions for pyNumero vectors vec_associative_reductions = { np.add, np.multiply, np.bitwise_and, np.bitwise_or, np.bitwise_xor, np.maximum, np.minimum, np.fmax, np.fmin, }