The issue is that Matrix_integer_dense has a __cinit__ method, which means that all subclasses must conform to the same inputs for their __init__ methods. So you need to do
def __init__(self, parent, entries, coerce, copy): sage.matrix.matrix_integer_dense.Matrix_integer_dense.__init__(self, parent, entries, coerce, copy) .... I would suggest having another function (e.g. pooling_matrix) which takes arguments in the way you want to handle them and creates the appropriate class; this is what the function matrix does. Note that you may need to have a separate parent class if you want to do arithmetic with these matrices, since by default MatrixSpace will create Matrix_integer_dense objects rather than PoolingMatrix objects. See sage.matrix.constructor and sage.matrix.matrix_space. David On Wed, Jun 5, 2013 at 1:53 PM, Rob <ulamga...@gmail.com> wrote: > Here is a kluge that is closer to what I want. Can be copied into and run > in a Sage cell. The deficiency in the construction is on lines 6-8 (within > commented section). > > class PoolingMatrix(sage.matrix.matrix_integer_dense.Matrix_integer_dense): > # Example construction: > # a = matrix(ZZ, [[1,1],[2,2]]) > # m=PoolingMatrix(parent(a), [1,2,3,4], False, False) > # > # But the construction above is silly. You have to make a matrix of > same dimensions and get its parent before > # constructing the matrix you want. > # I would prefer these construction capabilities: > # m = PoolingMatrix(ZZ, [[1,0,0],[0,1,0]]) > # m = PoolingMatrix(ZZ, 2, [1,0,0,0,1,0]) > # m = PoolingMatrix(ZZ, 2, 3, [1,0,0,0,1,0]) > # And since the ring is always ZZ, maybe the ZZ argument should be > optional. > def __init__(self, parent, data, arg1, arg2): > print data > > sage.matrix.matrix_integer_dense.Matrix_integer_dense.__init__(self, > parent, data, arg1, arg2) > self.d_lower_bound = -1 > # parent class, maybe dense integer matrices, provides the method > ncols() > self.d_upper_bound = self.ncols() > > a = matrix(ZZ, [[1,1],[2,2]]) > m=PoolingMatrix(parent(a), [1,2,3,4], False, False) > print m.ncols() > > > On Wednesday, June 5, 2013 10:09:55 AM UTC-7, Rob wrote: >> >> Thanks for the responses. Probably the answer is I don't know what >> __init__ method to call within the inheriting __init__ method. >> >> Maybe I'd like to say: >> >> class PoolingMatrix(parent_class): >> def __init__(self, ring_arg, 2D_list_arg): >> parent_class.__init__(self, ring_arg, 2D_list_arg) >> self.my_variable1 = ... >> self.my_variable2 = ... >> >> I'm getting confused by what's a class, what's a constructor, what's a >> parent going into a Matrix_integer_dense.__init__ call, etc. (this is for >> example, not saying Matrix_integer_dense is right). I do know that I want >> dense integer matrices of whatever shape the the 2D_list_arg determines. >> >> I'd like to know what to put in for parent_class in both places above, >> and whether the same thing goes in both places. >> >> Thanks, >> Rob >> >> >> >> On Wednesday, June 5, 2013 9:37:01 AM UTC-7, David Roe wrote: >>> >>> Are you calling some_matrix_thingy.__init__ inside your __init__ method? >>> David >>> >>> >>> On Tue, Jun 4, 2013 at 8:10 PM, Rob <ulam...@gmail.com> wrote: >>> >>>> I am trying to make a class PoolingMatrix, which needs to be an >>>> (binary) integer matrix with extra attributes and functions. For >>>> example, I'd like to say: >>>> >>>> sage: m = PoolingMatrix(ZZ, [[1,0,0],[0,1,0],[0,0,1]]) >>>> sage: m.nrows() >>>> 2 >>>> sage: m.is_disjunct(2) # the 3x3 identity matrix is 2-disjunct >>>> True >>>> >>>> But the init specification for PoolingMatrix is tripping me up. Can >>>> anyone provide a suggestion? >>>> >>>> I'm trying something like: >>>> class PoolingMatrix(some_matrix_**thingy): >>>> def __init__(self, input_ring, input_array): >>>> ... >>>> >>>> Thanks for any assistance >>>> -Rob >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "sage-devel" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to sage-devel+...@googlegroups.**com. >>>> To post to this group, send email to sage-...@googlegroups.com. >>>> Visit this group at >>>> http://groups.google.com/**group/sage-devel?hl=en<http://groups.google.com/group/sage-devel?hl=en> >>>> . >>>> For more options, visit >>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out> >>>> . >>>> >>>> >>>> >>> -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.