/usr/share/axiom-20170501/src/algebra/ASP1.spad is in axiom-source 20170501-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | )abbrev domain ASP1 Asp1
++ Author: Mike Dewar, Grant Keady, Godfrey Nolan
++ Date Created: Mar 1993
++ Date Last Updated: 18 March 1994, 6 October 1994
++ References:
++ Hawk95 Two more links to NAG numerics involving CA systems
++ Kead93 Production of Argument SubPrograms in the AXIOM -- NAG link
++ Description:
++ \spadtype{Asp1} produces Fortran for Type 1 ASPs, needed for various
++ NAG routines. Type 1 ASPs take a univariate expression (in the symbol x)
++ and turn it into a Fortran Function like the following:
++
++ \tab{5}DOUBLE PRECISION FUNCTION F(X)\br
++ \tab{5}DOUBLE PRECISION X\br
++ \tab{5}F=DSIN(X)\br
++ \tab{5}RETURN\br
++ \tab{5}END
Asp1(name) : SIG == CODE where
name : Symbol
FEXPR ==> FortranExpression
FST ==> FortranScalarType
FT ==> FortranType
SYMTAB ==> SymbolTable
RSFC ==> Record(localSymbols:SymbolTable,code:List(FortranCode))
FRAC ==> Fraction
POLY ==> Polynomial
EXPR ==> Expression
INT ==> Integer
FLOAT ==> Float
SIG ==> FortranFunctionCategory with
coerce : FEXPR(['X],[],MachineFloat) -> $
++coerce(f) takes an object from the appropriate instantiation of
++\spadtype{FortranExpression} and turns it into an ASP.
CODE ==> add
-- Build Symbol Table for Rep
syms : SYMTAB := empty()$SYMTAB
declare!(X,fortranReal()$FT,syms)$SYMTAB
real : FST := "real"::FST
Rep := FortranProgram(name,[real]$Union(fst:FST,void:"void"),[X],syms)
retract(u:FRAC POLY INT):$ == (retract(u)@FEXPR(['X],[],MachineFloat))::$
retractIfCan(u:FRAC POLY INT):Union($,"failed") ==
foo : Union(FEXPR(['X],[],MachineFloat),"failed")
foo := retractIfCan(u)$FEXPR(['X],[],MachineFloat)
foo case "failed" => "failed"
foo::FEXPR(['X],[],MachineFloat)::$
retract(u:FRAC POLY FLOAT):$ == (retract(u)@FEXPR(['X],[],MachineFloat))::$
retractIfCan(u:FRAC POLY FLOAT):Union($,"failed") ==
foo : Union(FEXPR(['X],[],MachineFloat),"failed")
foo := retractIfCan(u)$FEXPR(['X],[],MachineFloat)
foo case "failed" => "failed"
foo::FEXPR(['X],[],MachineFloat)::$
retract(u:EXPR FLOAT):$ == (retract(u)@FEXPR(['X],[],MachineFloat))::$
retractIfCan(u:EXPR FLOAT):Union($,"failed") ==
foo : Union(FEXPR(['X],[],MachineFloat),"failed")
foo := retractIfCan(u)$FEXPR(['X],[],MachineFloat)
foo case "failed" => "failed"
foo::FEXPR(['X],[],MachineFloat)::$
retract(u:EXPR INT):$ == (retract(u)@FEXPR(['X],[],MachineFloat))::$
retractIfCan(u:EXPR INT):Union($,"failed") ==
foo : Union(FEXPR(['X],[],MachineFloat),"failed")
foo := retractIfCan(u)$FEXPR(['X],[],MachineFloat)
foo case "failed" => "failed"
foo::FEXPR(['X],[],MachineFloat)::$
retract(u:POLY FLOAT):$ == (retract(u)@FEXPR(['X],[],MachineFloat))::$
retractIfCan(u:POLY FLOAT):Union($,"failed") ==
foo : Union(FEXPR(['X],[],MachineFloat),"failed")
foo := retractIfCan(u)$FEXPR(['X],[],MachineFloat)
foo case "failed" => "failed"
foo::FEXPR(['X],[],MachineFloat)::$
retract(u:POLY INT):$ == (retract(u)@FEXPR(['X],[],MachineFloat))::$
retractIfCan(u:POLY INT):Union($,"failed") ==
foo : Union(FEXPR(['X],[],MachineFloat),"failed")
foo := retractIfCan(u)$FEXPR(['X],[],MachineFloat)
foo case "failed" => "failed"
foo::FEXPR(['X],[],MachineFloat)::$
coerce(u:FEXPR(['X],[],MachineFloat)):$ ==
coerce((u::Expression(MachineFloat))$FEXPR(['X],[],MachineFloat))$Rep
coerce(c:List FortranCode):$ == coerce(c)$Rep
coerce(r:RSFC):$ == coerce(r)$Rep
coerce(c:FortranCode):$ == coerce(c)$Rep
coerce(u:$):OutputForm == coerce(u)$Rep
outputAsFortran(u):Void ==
p := checkPrecision()$NAGLinkSupportPackage
outputAsFortran(u)$Rep
p => restorePrecision()$NAGLinkSupportPackage
|