Original Date: Fri, 25 Mar 2005 10:47:55 -0600 In axiom the cercion of power series is really strange:
I will give some hint to understand this. Here the interpreter has to coerce the series (EXPR (INT OR OTHER)), the variable and the expansion point. In Axiom trace all these functions: P2Uls P2Upxs P2Uts Expr2Up NDmp?2domain Var2OtherPS Var2QF P2Us canCoerceLocal coerceIntTableOrFunction coerceIntTower canCoerce1 canCoerceTower canCoerce canCoerceFrom resolveTT1 resolveTTSpecial (you can had HasCate? hasCaty hasCaty1 hasCate1 if you want to better understand ofCategory bug (not parameterized ?) : )tr P2Uls )tr P2Upxs )tr P2Uts )tr Expr2Up )tr NDmp2domain )tr Var2OtherPS )tr Var2QF )tr P2Us )tr canCoerceLocal )tr coerceIntTableOrFunction )tr coerceIntTower )tr canCoerce1 )tr canCoerceTower )tr canCoerce )tr canCoerceFrom )tr resolveTT1 )tr coerceInt )tr algEqual )tr resolveTTSpecial Now you can create power series:a:=series(sin(x)) Beware axiom will crash. Now type: a*1.0 restart do the same and type:
You will see that axiom in this process does not coerce all types (for example sometimes 0 (expansion point) remain Integer but of type EXPR FLOAT). Normally: x in displayed type is of type Symbol 0.0 (expansion point) has the same type as the coefficients of the power series. For example: EXPR FLOAT. Now you can restart and create 2 power series, one with integer the other with float: a:=series(sin(x)) Coerce it (see above): a:= a::UnivariatePuiseuxSeries(Expression Integer,x,0) b:= a::UnivariatePuiseuxSeries(Expression Float,x,0.0) You can type: a*b restart do the same type: b*a This process of coercion involve some strange type and axiom coerce sometimes to UnivariatePuiseuxSeries?(UnivariatePuiseuxSeries?) etc ... This and the expansion point not really coerced trigger bug. In boot code there is a function resolveTTSpecial and its commentary: -- tries to resolve things that would otherwise get mangled in the -- rest of the resolve world. I'll leave it for Albi to fix those -- things. (RSS 1/-86) In this patch I use this function to express the resolved type. It' a temporary hack and I'm not sure that this patch is correct (see the code). Second, I add two other tests: I check the equality of the Symbol(s) and the two expansion points (two different symbols crash axiom for example). Regards This result is cached --unknown, Fri, 25 Mar 2005 11:03:14 -0600 reply The previous patch change the resolved type. It's internally cached and resolveTTspecial is only invoked once.
After the above patch applied one bug remain:
If you add this text to the file .axiom.input (interpreted at the start of axiom) you will crash axiom: 1.0::UnivariatePuiseuxSeries(Expression Float,x,0.0 Regards Here is another patch if you run into problem with a 'maformed patch 'message .Change to axiom directory: cat power-series.patch2 |patch -0Cheers This patch doesn't check the equality of the expansion points and the symbols for different power series. Example: a:=series(sin(x)) b:=taylor(sin(x),x=2) a*bBreak if expansion point or variable are not equal for UnivariatePowerSeriesCategory? (fix Sun, 22 May 2005 09:22:00 -0500 bug) Simplified code. Possible information about this bug:: http://lists.gnu.org/archive/html/axiom-developer/2004-11/msg00137.html Category: Axiom Compiler => Axiom Interpreter Status: open => fixed somewhere Status: fixed somewhere => closed |