|
|
last edited 10 years ago by test1 |
1 2 3 | ||
Editor: test1
Time: 2014/05/13 16:31:33 GMT+0 |
||
Note: |
added:
From test1 Tue May 13 16:31:33 +0000 2014
From: test1
Date: Tue, 13 May 2014 16:31:33 +0000
Subject:
Message-ID: <20140513163133+0000@axiom-wiki.newsynthesis.org>
Status: open => closed
Vladimir Bondarenko wrote:
(1) -> )set message autoload on
for i in 1..1 repeat print(sin(i) :: Complex Float)
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/EXPR.fasl for domain Expression
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/KERNEL.fasl for domain Kernel
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/SCACHE.fasl for package SortedCache
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/VOID.fasl for domain Void
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/A1AGG-.fasl for domain OneDimensionalArrayAggregate&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/MAGCDT3.fasl for domain ModularAlgebraicGcdTools3
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/MAGCD.fasl for package ModularAlgebraicGcd
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/MEVAL2.fasl for domain ModularEvaluation2
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/MAGCDT4.fasl for domain ModularAlgebraicGcdTools4
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FAKEPOL.fasl for domain FakePolynomial
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/MAGCD2.fasl for package ModularAlgebraicGcd2
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/AN.fasl for domain AlgebraicNumber
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FLOAT.fasl for domain Float
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/COMPLEX.fasl for domain Complex
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/DFLOAT.fasl for domain DoubleFloat
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/COMPCAT-.fasl for domain ComplexCategory&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FPS-.fasl for domain FloatingPointSystem&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/RNS-.fasl for domain RealNumberSystem&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FIELD-.fasl for domain Field&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/EUCDOM-.fasl for domain EuclideanDomain&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/UFD-.fasl for domain UniqueFactorizationDomain&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/GCDDOM-.fasl for domain GcdDomain&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ORDRING-.fasl for domain OrderedRing&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/DIVRING-.fasl for domain DivisionRing&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/DIFRING-.fasl for domain DifferentialRing&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ALGEBRA-.fasl for domain Algebra&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ENTIRER-.fasl for domain EntireRing&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/NAALG-.fasl for domain NonAssociativeAlgebra&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/RNG-.fasl for domain Rng&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/MODULE-.fasl for domain Module&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/NARING-.fasl for domain NonAssociativeRing&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/INS-.fasl for domain IntegerNumberSystem&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/PFECAT-.fasl for domain PolynomialFactorizationExplicit&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/PRINT.fasl for package PrintPackage
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/QFCAT-.fasl for domain QuotientFieldCategory&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/DIFEXT-.fasl for domain DifferentialExtension&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FLINEXP-.fasl for domain FullyLinearlyExplicitOver&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/EF.fasl for package ElementaryFunction
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/COMMONOP.fasl for package CommonOperators
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/BOP.fasl for domain BasicOperator
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ALAGG-.fasl for domain AssociationListAggregate&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/TBAGG-.fasl for domain TableAggregate&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/LSAGG-.fasl for domain ListAggregate&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/STAGG-.fasl for domain StreamAggregate&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/SEX.fasl for domain SExpression
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/KDAGG-.fasl for domain KeyedDictionary&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/DIAGG-.fasl for domain Dictionary&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ACFS-.fasl for domain AlgebraicallyClosedFunctionSpace&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FS-.fasl for domain FunctionSpace&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ACF-.fasl for domain AlgebraicallyClosedField&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/PDRING-.fasl for domain PartialDifferentialRing&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/NARNG-.fasl for domain NonAssociativeRng&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ABELGRP-.fasl for domain AbelianGroup&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ES-.fasl for domain ExpressionSpace&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/BOP1.fasl for package BasicOperatorFunctions1
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ORDSET-.fasl for domain OrderedSet&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/MAGMAWU-.fasl for domain MagmaWithUnit&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/NASRNG-.fasl for domain NonAssociativeSemiRng&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ABELMON-.fasl for domain AbelianMonoid&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/MAGMA-.fasl for domain Magma&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ABELSG-.fasl for domain AbelianSemiGroup&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/HASHABL-.fasl for domain Hashable&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/SETCAT-.fasl for domain SetCategory&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/BASTYPE-.fasl for domain BasicType&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/RETRACT-.fasl for domain RetractableTo&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/OM-.fasl for domain OpenMath&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/PORDER-.fasl for domain PartialOrder&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FRETRCT-.fasl for domain FullyRetractableTo&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/EVALAB-.fasl for domain Evalable&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/TRANFUN-.fasl for domain TranscendentalFunctionCategory&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/IEVALAB-.fasl for domain InnerEvalable&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/TRIGCAT-.fasl for domain TrigonometricFunctionCategory&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ATRIG-.fasl for domain ArcTrigonometricFunctionCategory&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/HYPCAT-.fasl for domain HyperbolicFunctionCategory&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ELEMFUN-.fasl for domain ElementaryFunctionCategory&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/RADCAT-.fasl for domain RadicalCategory&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/AF.fasl for package AlgebraicFunction
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/LOGIC-.fasl for domain Logic&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ELAGG-.fasl for domain ExtensibleLinearAggregate&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/URAGG-.fasl for domain UnaryRecursiveAggregate&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/SEXOF.fasl for domain SExpressionOf
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/POLYCATQ.fasl for package PolynomialCategoryQuotientFunctions
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/LNAGG-.fasl for domain LinearAggregate&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/POLYROOT.fasl for package PolynomialRoots
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/INTFACT.fasl for package IntegerFactorizationPackage
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/IROOT.fasl for package IntegerRoots
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FACTFUNC.fasl for package FactoredFunctions
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/POLYCAT-.fasl for domain PolynomialCategory&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/GPOLCAT-.fasl for domain MaybeSkewPolynomialCategory&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FAMR-.fasl for domain FiniteAbelianMonoidRing&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/AMR-.fasl for domain AbelianMonoidRing&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FMCAT-.fasl for domain FreeModuleCategory&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/PGCD.fasl for package PolynomialGcdPackage
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/NUMERIC.fasl for package Numeric
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/EXPR2.fasl for package ExpressionFunctions2
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FS2.fasl for package FunctionSpaceFunctions2
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/POLYLIFT.fasl for package PolynomialCategoryLifting
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/ES2.fasl for package ExpressionSpaceFunctions2
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/MONOGEN-.fasl for domain MonogenicAlgebra&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FRAMALG-.fasl for domain FramedAlgebra&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FINRALG-.fasl for domain FiniteRankAlgebra&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/SRAGG-.fasl for domain StringAggregate&
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/UNISEG.fasl for domain UniversalSegment
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/SEG.fasl for domain Segment
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/OFTOOL.fasl for package OutputFormTools 0.8414709848_0789650665
Note that neither Float nor Complex is loaded in (1), only in (2). More surprisingly, UniversalSegment? is also not loaded in (1). (it does not matter if the segment is 1..1 or 1..3).
for i in 1..3 repeat print(sin(i)::Complex Float)
0.8414709848_0789650665 0.9092974268_256816954 0.1411200080_598672221
for i in 1..3 repeat print(a:=sin(i)::Complex Float)
0.8414709848_0789650665 0.9092974268_256816954 0.1411200080_598672221
Hmm, we need to understand this a bit more:
for i in 1..1 repeat print(a:=sin(i)::Complex Float)
0.8414709848_0789650665
for i in 1..1 repeat print(a:=(sin(i)::Complex Float))
0.8414709848_0789650665
all give:
0.8414709848 0789650665
At least that is a work-around.
But
for i in 1..1 repeat print((a:=sin(i))::Complex Float)
0.8414709848_0789650665
for i in 1..1 repeat (a:=sin(i); print(a::Complex Float))
0.8414709848_0789650665
Gives:
sin(1)
print is from PrintPackage?, which calls print from OutputForm?, which calls mathprint$Lisp
but the problem lies in print inside a loop (any type, not just a for-loop). The problem seems to be an interpreter problem in parsing. This is confirmed partly by the following transcript. When trying to code this as a package for the compiler, it is not easy to figure out the sequence of functions to use to coerce sin(i) from EXPR INT to Complex Float. I finally found one way, but it may not be what the interpreter is doing:
--%Printest )abbrev package PRINTEST Printest Printest: T==C where EXPR ==> Expression INT ==> Integer CF ==> Complex Float T == with foo:PositiveInteger->Void C == add import EXPR INT foo(k)== for i in 1..k repeat a:=sin(i::INT::Float::CF::EXPR CF)$(EXPR CF) print(retract(a)$(EXPR CF)@CF::OutputForm)
Of course it makes no difference whether a:= is eliminated or not. And this works correctly. So my tentative conclusion is that the interpreter is "lazy" in (1) to try to figure out this rather involved coercion sequence (Hey, I got it to EXPR INT and I have no idea how to go further to Complex Float, I think it is good enough ...:-), but in (2), it is somehow forced to work harder (Now you want to save the result and I have to type the variable a, ok, ...). Is it a bug? Don't know. There are limitations to the interpreter.
Tim: Do you know if there is a system limitation on the level of coercion the interpreter will try before quitting? Can this be reset?
This example shows why a large percent of time (my low estimate is 70% and my high is 90%) writing compiled code is spent on coercion.
Now, there is still the question: why does this happen only inside a loop? Can one tell more from the way the libraries are loaded (see attached print.out)? Notice in print.out, even after foo(3) is executed, (2) still needs to load another bunch of libraries. Why?
William
The comments below turned out to be in error:
for i in 1..1 repeat print(sqrt(i) :: Complex Float)
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FRMOD-.fasl for domain FramedModule& 1.0
for i in 1..1 repeat print(exp(i) :: Complex Float)
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/MATRIX.fasl for domain Matrix
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/IIARRAY2.fasl for domain InnerIndexedTwoDimensionalArray
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/MATCAT-.fasl for domain MatrixCategory& 2.7182818284_590452354
for i in 1..1 repeat print(log(i) :: Complex Float)
0.0
for i in 1..1 repeat print(atan(i) :: Complex Float)
0.7853981633_9744830961
I'd say that it's a bug. A workaround (not a fix...) is to say
for i in 1..1 repeat print(sqrt(i) @ Complex Float)
Loading /usr/local/lib/fricas/target/x86_64-linux-gnu/algebra/FEVALAB-.fasl for domain FullyEvalableOver& 1.0
It is quite clear that Axioms behaviour will be the same for all operators (defined in op.spad).
Tracing the call with
)set message bottom on
Your user access level is compiler and this set option is therefore not available. See the )set userlevel command for more information. for i in 1..3 repeat print((sin(i))::Complex Float)
0.8414709848_0789650665 0.9092974268_256816954 0.1411200080_598672221
which looks quite strange: Axiom is looking for a function print with argument of type Complex Float, but the thing it prints is not of this type...
the bug with sin is still open
Name:#29 for i in 1..1 repeatprint(sin(i) :: Complex Float)
=> #29 for i in 1..1 repeat print(sin(i) :: Complex Float)
Status: open => closed