(self, A, b)
:param A: scaling matrix. Either a P-dimensional vector, or a P x P transformation matrix. For the latter, 
            the inverse and backward methods are not guaranteed to work as A must be invertible.
            
            It is also possible to specify a matrix with size P x Q with Q != P to achieve 
            a lower dimensional representation of X.
            In this case, A is not invertible, hence inverse and backward transforms are not supported.
        :param b: A P-dimensional offset vector.
:param A: scaling matrix. Either a P-dimensional vector, or a P x P transformation matrix. For the latter, 
            the inverse and backward methods are not guaranteed to work as A must be invertible.
            
            It is also possible to specify a matrix with size P x Q with Q != P to achieve 
            a lower dimensional representation of X.
            In this case, A is not invertible, hence inverse and backward transforms are not supported.
        :param b: A P-dimensional offset vector.
: param A : scaling matrix . Either a P - dimensional vector or a P x P transformation matrix . For the latter the inverse and backward methods are not guaranteed to work as A must be invertible . It is also possible to specify a matrix with size P x Q with Q ! = P to achieve a lower dimensional representation of X . In this case A is not invertible hence inverse and backward transforms are not supported . : param b : A P - dimensional offset vector .
def __init__(self, A, b):
        """
        :param A: scaling matrix. Either a P-dimensional vector, or a P x P transformation matrix. For the latter, 
            the inverse and backward methods are not guaranteed to work as A must be invertible.
            
            It is also possible to specify a matrix with size P x Q with Q != P to achieve 
            a lower dimensional representation of X.
            In this case, A is not invertible, hence inverse and backward transforms are not supported.
        :param b: A P-dimensional offset vector.
        """
        super(LinearTransform, self).__init__()
        assert A is not None
        assert b is not None

        b = np.atleast_1d(b)
        A = np.atleast_1d(A)
        if len(A.shape) == 1:
            A = np.diag(A)

        assert (len(b.shape) == 1)
        assert (len(A.shape) == 2)

        self.A = DataHolder(A)
        self.b = DataHolder(b)
def __init__ ( self , A , b ) : super ( LinearTransform , self ) . __init__ ( ) assert A is not None assert b is not None b = np . atleast_1d ( b ) A = np . atleast_1d ( A ) if len ( A . shape ) == 1 : A = np . diag ( A ) assert ( len ( b . shape ) == 1 ) assert ( len ( A . shape ) == 2 ) self . A = DataHolder ( A ) self . b = DataHolder ( b )