Hi Vincent,

Great, thanks!
I'd say that the docstring should be amended as well, don't you think? (As 
the keyword argument `entries` does not exist)


Peleg.


On Wednesday, 21 December 2016 14:42:00 UTC+2, vdelecroix wrote:
>
> Hi Peleg, 
>
> It would be better if matrix would do a type check for partial function. 
> Currently it does not, the relevant line is 
>
> {{{ 
> if isinstance(arg, (types.FunctionType, types.LambdaType, 
> types.MethodType)): 
> }}} 
>
> in sage/matrix/constructor.pyx the function MatrixFactory. 
>
> Concerning a direct solution, you can cheat with 
>
> sage: matrix(QQ, 3, 3, lambda i,j: g(i,j)) 
>
> Or even more directly with 
>
> sage: matrix(QQ, 3, 3, lambda i,j: f(i,j,7)) 
>
> Vincent 
>
> Le 21/12/2016 à 13:29, Peleg Michaeli a écrit : 
> > The matrix (or Matrix) documentation reads: 
> > 
> >    INPUT: 
> > 
> >    * "ring" -- the base ring for the entries of the matrix. 
> > 
> >    * "nrows" -- the number of rows in the matrix. 
> > 
> >    * "ncols" -- the number of columns in the matrix. 
> > 
> >    * "sparse" -- create a sparse matrix. This defaults to "True" 
> >      when the entries are given as a dictionary, otherwise defaults to 
> >      "False". 
> > 
> >    * "entries" -- see examples below. 
> > 
> > 
> > However, the examples below do not give any example of using "entries" 
> as a *keyword 
> > argument*. And, indeed, passing `entries=...` in the call of Matrix 
> raises 
> > TypeError. 
> > 
> > I can overcome this using positional arguments only.  Here is a working 
> > example: 
> > 
> > sage: def f(i, j): 
> > ....:     return i+j 
> > ....: 
> > sage: matrix(QQ, 3, 3, f) 
> > 
> > [0 1 2] 
> > [1 2 3] 
> > [2 3 4] 
> > 
> > But if I am passing a *partial function*, this does not work any more: 
> > 
> > sage: def f(i, j, x): 
> > ....:     return (i + j) * x 
> > ....: 
> > sage: import functools 
> > sage: def f(i, j, x): 
> > ....:     return (i + j) * x 
> > ....: 
> > sage: g = functools.partial(f, x=7) 
> > sage: g(0, 1) 
> > 7 
> > sage: matrix(QQ, 3, 3, g) 
> > Traceback (most recent call last): 
> >   File "<ipython-input-131-5bd380f06a54>", line 1, in <module> 
> >     matrix(QQ, Integer(3), Integer(3), g) 
> >   File "sage/matrix/constructor.pyx", line 794, in 
> sage.matrix.constructor. 
> > MatrixFactory.__call__ (build/cythonized/sage/matrix/constructor.c:7154) 
> >     return MatrixSpace(ring, nrows, ncols, sparse=sparse)(entries) 
> >   File 
> > 
> "/home/peleg/sage/local/lib/python2.7/site-packages/sage/matrix/matrix_space.py"
>  
>
> > , line 531, in __call__ 
> >     return self.matrix(entries, coerce, copy) 
> >   File 
> > 
> "/home/peleg/sage/local/lib/python2.7/site-packages/sage/matrix/matrix_space.py"
>  
>
> > , line 1488, in matrix 
> >     return MC(self, x, copy=copy, coerce=coerce) 
> >   File "sage/matrix/matrix_rational_dense.pyx", line 199, in 
> sage.matrix. 
> > matrix_rational_dense.Matrix_rational_dense.__init__ 
> (build/cythonized/sage/ 
> > matrix/matrix_rational_dense.c:4734) 
> >     raise TypeError("entries must be coercible to a list or integer") 
> > TypeError: entries must be coercible to a list or integer 
> > 
> > 
> > How can I make this work? 
> > 
>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-support+unsubscr...@googlegroups.com.
To post to this group, send email to sage-support@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-support.
For more options, visit https://groups.google.com/d/optout.

Reply via email to