login  home  contents  what's new  discussion  bug reports     help  links  subscribe  changes  refresh  edit

Trace may affect correct output of 1::EXPR INT . This page should be read in conjunction with IssueTracker #283. To suppress the infinite loop being displayed till overflow, add )math to the package traced (does not always work). I think the coercion 2/3::FRAC INT is where the main bug lies, but since it is affected by )trace, it may not be easy to find.

We first establish that without )trace , the following works as intended.

fricas
(1) -> 2/3::FRAC INT

\label{eq1}\frac{2}{3}(1)
Type: Fraction(Integer)
fricas
1::EXPR INT

\label{eq2}1(2)
Type: Expression(Integer)

What led me to suspect that FRAC is involved in the )trace bug is the following trace obtained in a Windows session (but unfortunately, I no longer know the exact set up to reproduce this):

  (7) -> 1::EXPR INT
  1<enter SparseMultivariatePolynomial.zero?,17 :
   arg1= 1
  1>exit  SparseMultivariatePolynomial.zero?,17 :
   false
  1<enter Fraction.*,60 : 1\((0 . 1) 0 . 1)
   1<enter SparseMultivariatePolynomial.coerce,77 :
    arg1= 1
   1>exit  SparseMultivariatePolynomial.coerce,77 :
    1
   1<enter SparseMultivariatePolynomial.=,97 :
    arg1= 1
    arg2= 1
   1>exit  SparseMultivariatePolynomial.=,97 :
    true
   1<enter SparseMultivariatePolynomial.*,65 :
    arg1= 1
    arg2= 1
    1<enter SparseMultivariatePolynomial.*,90 :
     arg1= 1
     arg2= 1
    1>exit  SparseMultivariatePolynomial.*,90 :
     1
   1>exit  SparseMultivariatePolynomial.*,65 :
    1
   1<enter SparseMultivariatePolynomial.zero?,17 :
    arg1= 1
   1>exit  SparseMultivariatePolynomial.zero?,17 :
    false
   1<enter SparseMultivariatePolynomial.=,97 :
    arg1= 1
    arg2= 1
   1>exit  SparseMultivariatePolynomial.=,97 :
    true
  1>exit  Fraction.*,60 : ((0 . 1) 0 . 1)
  1<enter Fraction.denom,73 : ((0 . 1) 0 . 1)
   2<enter Fraction.denom,73 : ((0 . 1) 0 . 1)
    3<enter Fraction.denom,73 : ((0 . 1) 0 . 1)
     ...

The following, surprisingly also works (trying to recreate the above trace, but failed).

fricas
)trace FRAC
Packages traced: Fraction(Integer), Fraction(SparseMultivariatePolynomial( Integer,Kernel(Expression(Integer)))), Fraction( Polynomial(Integer)) Parameterized constructors traced: FRAC
fricas
)trace SMP )math
Packages traced: Fraction(Integer), Fraction(SparseMultivariatePolynomial( Integer,Kernel(Expression(Integer)))), Fraction( Polynomial(Integer)), SparseMultivariatePolynomial( Integer,Kernel(Expression(Integer))), SparseMultivariatePolynomial(Integer,Symbol) Parameterized constructors traced: FRAC, SMP 1::EXPR INT
1<enter Fraction.*,64 : 1\(#1=(0 . 1) . #1#) 1<enter SparseMultivariatePolynomial.coerce,98 : arg1 = 1 1>exit SparseMultivariatePolynomial.coerce,98 : 1 1<enter SparseMultivariatePolynomial.=,32 : arg1 = 1 arg2 = 1 1>exit SparseMultivariatePolynomial.=,32 : true 1<enter SparseMultivariatePolynomial.*,79 : arg1 = 1 arg2 = 1 1<enter SparseMultivariatePolynomial.*,110 : arg1 = 1 arg2 = 1 1>exit SparseMultivariatePolynomial.*,110 : 1 1>exit SparseMultivariatePolynomial.*,79 : 1 1<enter SparseMultivariatePolynomial.zero?,18 : arg1 = 1 1>exit SparseMultivariatePolynomial.zero?,18 : false 1<enter SparseMultivariatePolynomial.=,32 : arg1 = 1 arg2 = 1 1>exit SparseMultivariatePolynomial.=,32 : true 1>exit Fraction.*,64 : ((0 . 1) 0 . 1)
1<enter SparseMultivariatePolynomial.=,32 : arg1 = 1 arg2 = 1 1>exit SparseMultivariatePolynomial.=,32 : true 1<enter SparseMultivariatePolynomial.retractIfCan,180 : arg1 = 1 1>exit SparseMultivariatePolynomial.retractIfCan,180 : 1

\label{eq3}1(3)
Type: Expression(Integer)

Here are trace examples that produced Bind Stack Overflow.

fricas
)trace INT
Packages traced: Fraction(Integer), Fraction(SparseMultivariatePolynomial( Integer,Kernel(Expression(Integer)))), Fraction( Polynomial(Integer)), SparseMultivariatePolynomial( Integer,Kernel(Expression(Integer))), SparseMultivariatePolynomial(Integer,Symbol), Integer Parameterized constructors traced: FRAC, SMP, INT
fricas
)trace FRAC 
Packages traced: SparseMultivariatePolynomial(Integer,Kernel(Expression( Integer))), SparseMultivariatePolynomial(Integer, Symbol), Integer, Fraction(Integer), Fraction( SparseMultivariatePolynomial(Integer,Kernel( Expression(Integer)))), Fraction(Polynomial(Integer)) Parameterized constructors traced: SMP, INT, FRAC
fricas
)trace EXPR INT )math
Packages traced: SparseMultivariatePolynomial(Integer,Kernel(Expression( Integer))), SparseMultivariatePolynomial(Integer, Symbol), Integer, Fraction(Integer), Fraction( SparseMultivariatePolynomial(Integer,Kernel( Expression(Integer)))), Fraction(Polynomial(Integer)) , Expression(Integer) Parameterized constructors traced: SMP, INT, FRAC
fricas
)trace KERNEL EXPR INT
Packages traced: SparseMultivariatePolynomial(Integer,Kernel(Expression( Integer))), SparseMultivariatePolynomial(Integer, Symbol), Integer, Fraction(Integer), Fraction( SparseMultivariatePolynomial(Integer,Kernel( Expression(Integer)))), Fraction(Polynomial(Integer)) , Expression(Integer), Kernel(Expression(Integer)) Parameterized constructors traced: SMP, INT, FRAC
fricas
)trace SMP(INT, KERNEL EXPR INT)
Packages traced: SparseMultivariatePolynomial(Integer,Kernel(Expression( Integer))), SparseMultivariatePolynomial(Integer, Symbol), Integer, Fraction(Integer), Fraction( SparseMultivariatePolynomial(Integer,Kernel( Expression(Integer)))), Fraction(Polynomial(Integer)) , Expression(Integer), Kernel(Expression(Integer)) Parameterized constructors traced: SMP, INT, FRAC
fricas
)trace OutputForm
Packages traced: SparseMultivariatePolynomial(Integer,Kernel(Expression( Integer))), SparseMultivariatePolynomial(Integer, Symbol), Integer, Fraction(Integer), Fraction( SparseMultivariatePolynomial(Integer,Kernel( Expression(Integer)))), Fraction(Polynomial(Integer)) , Expression(Integer), Kernel(Expression(Integer)), OutputForm Parameterized constructors traced: SMP, INT, FRAC, OUTFORM 1::EXPR INT
1<enter Expression.coerce,61 : arg1 = 1 1<enter Fraction.*,64 : 1\(#1=(0 . 1) . #1#) 1<enter SparseMultivariatePolynomial.coerce,98 : arg1 = 1 2<enter SparseMultivariatePolynomial.coerce,98 : arg1 = 1 2>exit SparseMultivariatePolynomial.coerce,98 : 1 1>exit SparseMultivariatePolynomial.coerce,98 : 1 1<enter SparseMultivariatePolynomial.=,32 : arg1 = 1 arg2 = 1 2<enter SparseMultivariatePolynomial.=,32 : arg1 = 1 arg2 = 1 1<enter Integer.=,58 : 1\1 1>exit Integer.=,58 : T 2>exit SparseMultivariatePolynomial.=,32 : true 1>exit SparseMultivariatePolynomial.=,32 : true 1<enter SparseMultivariatePolynomial.*,79 : arg1 = 1 arg2 = 1 2<enter SparseMultivariatePolynomial.*,79 : arg1 = 1 arg2 = 1 1<enter SparseMultivariatePolynomial.*,110 : arg1 = 1 arg2 = 1 2<enter SparseMultivariatePolynomial.*,110 : arg1 = 1 arg2 = 1 1<enter Integer.=,58 : 1\0 1>exit Integer.=,58 : NIL 1<enter Integer.=,58 : 1\1 1>exit Integer.=,58 : T 2>exit SparseMultivariatePolynomial.*,110 : 1 1>exit SparseMultivariatePolynomial.*,110 : 1 2>exit SparseMultivariatePolynomial.*,79 : 1 1>exit SparseMultivariatePolynomial.*,79 : 1 1<enter SparseMultivariatePolynomial.zero?,18 : arg1 = 1 2<enter SparseMultivariatePolynomial.zero?,18 : arg1 = 1 1<enter Integer.zero?,18 : 1 1>exit Integer.zero?,18 : NIL 2>exit SparseMultivariatePolynomial.zero?,18 : false 1>exit SparseMultivariatePolynomial.zero?,18 : false 1<enter SparseMultivariatePolynomial.=,32 : arg1 = 1 arg2 = 1 2<enter SparseMultivariatePolynomial.=,32 : arg1 = 1 arg2 = 1 1<enter Integer.=,58 : 1\1 1>exit Integer.=,58 : T 2>exit SparseMultivariatePolynomial.=,32 : true 1>exit SparseMultivariatePolynomial.=,32 : true 1>exit Fraction.*,64 : ((0 . 1) 0 . 1) 1>exit Expression.coerce,61 : 1
1<enter Expression.denom,101 : arg1 = 1 1>exit Expression.denom,101 : 1 1<enter SparseMultivariatePolynomial.=,32 : arg1 = 1 arg2 = 1 2<enter SparseMultivariatePolynomial.=,32 : arg1 = 1 arg2 = 1 1<enter Integer.=,58 : 1\1 1>exit Integer.=,58 : T 2>exit SparseMultivariatePolynomial.=,32 : true 1>exit SparseMultivariatePolynomial.=,32 : true 1<enter Expression.numer,99 : arg1 = 1 1>exit Expression.numer,99 : 1 1<enter SparseMultivariatePolynomial.retractIfCan,180 : arg1 = 1 2<enter SparseMultivariatePolynomial.retractIfCan,180 : arg1 = 1 2>exit SparseMultivariatePolynomial.retractIfCan,180 : 1 1>exit SparseMultivariatePolynomial.retractIfCan,180 : 1 1<enter Integer.coerce,32 : 1 1<enter OutputForm.outputForm,24 : 1 1>exit OutputForm.outputForm,24 : 1 1>exit Integer.coerce,32 : 1

\label{eq4}1(4)
Type: Expression(Integer)

fricas
2/3::FRAC INT
1<enter Fraction.coerce,10 : 3 1>exit Fraction.coerce,10 : (3 . 1) 1<enter Fraction.coerce,10 : 2 1>exit Fraction.coerce,10 : (2 . 1) 1<enter Fraction./,127 : (2 . 1)\(3 . 1) 1<enter Fraction.zero?,13 : (3 . 1) 1<enter Integer.zero?,18 : 3 1>exit Integer.zero?,18 : NIL 1>exit Fraction.zero?,13 : NIL 1<enter Fraction.recip,54 : (3 . 1) 1<enter Integer.zero?,18 : 3 1>exit Integer.zero?,18 : NIL 1<enter Integer.zero?,18 : 1 1>exit Integer.zero?,18 : NIL 1<enter Integer.=,58 : 3\1 1>exit Integer.=,58 : NIL 1<enter Integer.unitNormal,89 : 3 1>exit Integer.unitNormal,89 : #(1 3 1) 1<enter Integer.zero?,18 : 3 1>exit Integer.zero?,18 : NIL 1<enter Integer.*,66 : 1\1 1>exit Integer.*,66 : 1 1>exit Fraction.recip,54 : (0 1 . 3) 1<enter Fraction.*,61 : (2 . 1)\(1 . 3) 1<enter Fraction.zero?,13 : (2 . 1) 1<enter Integer.zero?,18 : 2 1>exit Integer.zero?,18 : NIL 1>exit Fraction.zero?,13 : NIL 1<enter Fraction.zero?,13 : (1 . 3) 1<enter Integer.zero?,18 : 1 1>exit Integer.zero?,18 : NIL 1>exit Fraction.zero?,13 : NIL 1<enter Fraction.=,21 : (2 . 1)\(1 . 1) 1<enter Integer.=,58 : 2\1 1>exit Integer.=,58 : NIL 1>exit Fraction.=,21 : NIL 1<enter Fraction.=,21 : (1 . 3)\(1 . 1) 1<enter Integer.=,58 : 1\1 1>exit Integer.=,58 : T 1<enter Integer.=,58 : 3\1 1>exit Integer.=,58 : NIL 1>exit Fraction.=,21 : NIL 1<enter Integer.=,58 : 3\1 1>exit Integer.=,58 : NIL 1<enter Integer.gcd,87 : 2\3 1>exit Integer.gcd,87 : 1 1<enter Integer.one?,19 : 1 1>exit Integer.one?,19 : T 1<enter Integer.=,58 : 1\1 1>exit Integer.=,58 : T 1<enter Integer.*,66 : 2\1 1>exit Integer.*,66 : 2 1<enter Integer.*,66 : 3\1 1>exit Integer.*,66 : 3 1<enter Integer.zero?,18 : 2 1>exit Integer.zero?,18 : NIL 1<enter Integer.=,58 : 3\1 1>exit Integer.=,58 : NIL 1<enter Integer.unitNormal,89 : 3 1>exit Integer.unitNormal,89 : #(1 3 1) 1<enter Integer.zero?,18 : 3 1>exit Integer.zero?,18 : NIL 1<enter Integer.*,66 : 2\1 1>exit Integer.*,66 : 2 1>exit Fraction.*,61 : (2 . 3) 1>exit Fraction./,127 : (2 . 3)
1<enter Integer.=,58 : 3\1 1>exit Integer.=,58 : NIL 1<enter Integer.coerce,32 : 2 1<enter OutputForm.outputForm,24 : 2 1>exit OutputForm.outputForm,24 : 2 1>exit Integer.coerce,32 : 2 1<enter Integer.coerce,32 : 3 1<enter OutputForm.outputForm,24 : 3 1>exit OutputForm.outputForm,24 : 3 1>exit Integer.coerce,32 : 3 1<enter OutputForm./,100 : 2\3 1>exit OutputForm./,100 : (/ 2 3) 1<enter Integer.=,58 : 2\2 1>exit Integer.=,58 : T 1<enter OutputForm.outputForm,26 : OVER 1>exit OutputForm.outputForm,26 : OVER

\label{eq5}\frac{2}{3}(5)
Type: Fraction(Integer)

For a preliminary analysis, see SandBox Trace Analysed.




  Subject:   Be Bold !!
  ( 15 subscribers )  
Please rate this page: