Hi! I have been working with GiNaC's interface to Python for some time now and I have collected the following notes that I have found important in this kind of applications: 1) Having relational::get_operator() would be useful (read: necessary) for extensions that can perform symbolic operations like (a < b) && (b > a) -> a < b 2) If a,b are compatible pseries then ex(a) * ex(b) would automatically produce ex(a.mul_series(b)) The same for operations +,-,scalar_mul,scalar_div. If a,b are incompatible, then apply current behaviour (that is, do nothing). I have implemented this behaviour in the GiNaC->Python interface but it does not cover cases where multiplication is carried out inside GiNaC functions. I am thinking of applications where, for example, a matrix consists of compatible pseries and the task is to find its inverse. 3) If a,b are compatible matrices (for a given operation) then ex(a) * ex(b) -> ex(a.mul(b)) The same for operations +,-,scalar_mul,scalar_div. That's all for now. Regards, Pearu