GiNaC/ginac print.h ...
Pearu Peterson
pearu at cens.ioc.ee
Mon Apr 9 09:44:45 CEST 2001
Hi!
On Sun, 8 Apr 2001, Christian Bauer wrote:
> On Sun, Apr 08, 2001 at 06:17:50PM +0200, Pearu Peterson wrote:
> > basic::precedence
>
> Why do you need this?
basic::precedence (that is, basic::get_precedence() virtual) is needed for
Python `str' representation. It is very close to ginsh output type but
has the following differences:
1) a^b is a**b in Python,
2) [[ [[a]], [[b]] ]] is [ [a], [b] ] (matrix)
3) For GiNaC function objects I needed a special trick to support their
creation and calling from Python. The trick includes a special class that
contains information about Python functions and its instance is past to
GiNaC function as an additional argument that the end-user should *not*
see.
4) Some additional tricks were needed for constant objects in order to
support Python callbacks for evaluation.
Because of all this I separated the code generating Python `str' and
`repr' representation from GiNaC and it is now (almost) independent of
GiNaC.print functions.
> Here's another idea for finding all properties of all objects of a GiNaC
> expression: if you archive the expression, all relevant information will be
> stored inside an archive object. Currently, it's all safely hidden inside,
> but I see no problem in making the data available for public read access. It
> should then be easy to, e.g., convert an archived expression to a Python
> initializer.
I guess (never tried), it means extra work/code. But not all properties
are needed, just those that were used in *constructing* the object.
In order words, just getter methods
inline const * get_<what's-in-constructor-arguments>() const;
In addtion, I found that
color::representation_label
is private. Could you make it at least protected or provide
get_representation_label() function? Because it is explicitely used in
construction of an color object and therefore is crucial to know for
reproducibility in Python interface.
The same holds for
minkmetric::pos_sig
tensepsilon::minkowski
tensepsilon::pos_sig
Thanks for your other hints as well,
Pearu
More information about the GiNaC-devel
mailing list