git clone https://github.com/axiom/daly should give you the last known public version.
Camm has a public copy at https://www.nongnu.org/axiom/axiom-website/faq.html If you look at axiom/src/input you will find *.pamphlet test files. They are really just *.tex (as are all .pamphlet files) You can also find various tests against other published collections which I call the "Computer Algebra Test Suite" (CATS), with the intention of collecting and testing against other public collections https://www.nongnu.org/axiom/axiom-website/CATS/index.html (see chapter 5 of bookvol8.1 related to pasta for fun examples) https://www.nongnu.org/axiom/axiom-website/bookvol8.1.pdf On Fri, Jun 20, 2025 at 4:16 PM Grégory Vanuxem <g.vanu...@gmail.com> wrote: > Hello Tim, *, > > Thanks for your response, but frankly speaking, I do not know how to > find your code. I tried to download Axiom, it is not easy. > I just found axiom_20210105dp1.tar.gz but apparently, right now, Camm > has done some improvements to find better/recent source code. > > I have to try it. > > - Greg > > PS/ sorry for the delay > > > > > Le dim. 15 juin 2025 à 19:49, Tim Daly <axiom...@gmail.com> a écrit : > > > > Greg, > > > > I used the ++(letter) and --(letter) form for various things. > > > > ++X is used for algebra examples as shown above > > > > These lines are output from )d op foo showing the user how to construct > valid > > input to the function foo. This is useful because it is hard to guess > how to > > contruct input of the required type. Since there are many functions with > the same > > name there will be many examples, each associated with one function. > > > > In input files (src/input) they are decorated with > > --S n of m which gives the number of the test, e.g. 5 of 23 > indicating starting a new test > > --R which gives the expected result (usually many --R > lines) > > --I which tells the test comparison to ignore that > line (e.g. when gensyms occur) > > --E n which ends the test n > > This allows the test to run ignoring the --(number) decoration and > output the result. > > Then a program runs over the output (which includes the -- comments) and > > does a text comparison of the expected result --R with the actual > result. For example > > > > -- factorization of polynomials over finite fields > > --S 5 of 21 > > u:UP(x,PF(19)) :=3*x^4+2*x^2+15*x+18 > > --R > > --R > > --R 4 2 > > --R (5) 3x + 2x + 15x + 18 > > --R Type: > UnivariatePolynomial(x,PrimeField(19)) > > --E 5 > > > > --S 6 of 21 > > factor u > > --R > > --R > > --R 3 2 > > --R (6) 3(x + 18)(x + x + 8x + 13) > > --R Type: > Factored(UnivariatePolynomial(x,PrimeField(19))) > > --E 6 > > > > Creating new tests amounts to running an expression then decorating the > output with --R lines > > surrounded by the --S and --E boundaries. Creating tests is a simple > text edit. Failing tests are > > indentified by file and test number showing both the computed and > expected results. > > > > --U is an external URL marker used to link to a paper that contains the > algorithm. > > For example, about Groebner Basis: > > > > --U > https://www.amazon.com/Computational-Algebraic-Geometry-Groebner-Basis/dp/3659435856 > > > > --P was intended to jump to the PDF output in the literate program so a > user could directly > > access the function sources in the correct domain along with the > literate explanation. > > > > In general since ++ and -- comments are ignored the ++(letter) and > --(letter) make it easy > > to add information that does not need compiler support. > > > > Tim > > > > ++ > > > > On Sun, Jun 15, 2025 at 12:44 PM Grégory Vanuxem <g.vanu...@gmail.com> > wrote: > >> > >> I have deleted my mails, sorry. But something like: > >> > >> 7) -> jlDocumentation mod <TAB> <TAB> > >> modTree modifyPointData modularFactor > >> modularLambda moduleSum > >> mod_exp modpeval modularGcdPrimitive > >> modular_compose moduloP > >> modifyPoint modpreduction modularInvariantJ module > >> modulus > >> > >> (7) -> jlDocumentation moduleSum > >> > >> moduleSum(m1, m2) returns the sum of two modules in the framed > >> algebra F. Each module mi is represented as fol > >> lows: F is a framed algebra with R-module basis w1, w2, ..., wn and > >> mi is a record [basis, basisDen, basisInv] > >> . If basis is the matrix (aij, i = 1..n, j = 1..n), then a basis v1, > >> ..., vn for mi is given by vi = (1/basisD > >> en) * sum(aij * wj, j = 1..n), i.e. the ith row of 'basis' contains > >> the coordinates of the ith basis vector. S > >> imilarly, the ith row of the matrix basisInv contains the > >> coordinates of wi with respect to the basis v1, ..., > >> vn: if basisInv is the matrix (bij, i = 1..n, j = 1..n), then wi = > >> sum(bij * vj, j = 1..n). From: IntegralBas > >> isTools > >> > >> > >> > >> Type: Void > >> (7) -> jlDocumentation mod <TAB><TAB> > >> modTree modifyPointData modularFactor > >> modularLambda moduleSum > >> mod_exp modpeval modularGcdPrimitive > >> modular_compose moduloP > >> modifyPoint modpreduction modularInvariantJ module > >> modulus > >> (7) -> jlDocumentation modpreduction > >> > >> > >> modpreduction(r, p) reduces a rational function r modulo prime p. > >> From: PolynomialEvaluationUtilities > >> > >> > >> modpreduction(p, q) reduces all coefficients of p modulo q. From: > >> ModularEvaluationCategory > >> > >> > >> modpreduction(pol, p) reduces polynomial pol modulo prime p. From: > >> PolynomialEvaluationUtilities > >> > >> > >> > >> Type: Void > >> > >> That uses a regular expressions system, sorry, strings are very bad > >> handled in panAxiom. But just that's would be very handy. > >> > >> BTW: Timothy, your 'X' is already implemented in HyperTex with: > >> > >> ++ For example, using JLMatrix(JLObjFloat64): > >> ++ \example{M:=nrand(4,4);} > >> ++ \example{jlApply("svd", M::JLMatrix(JLObjFloat64)).S} > >> ++ should be "equivalent" to svdvals(M) > >> > >> Maybe I do not understand your 'X'. > >> > >> BTW2: All my reconnaissance, of course, Tim. > >> > >> Cheers, > >> > >> Greg > >> > >> > >> > >> Le jeu. 12 juin 2025 à 12:32, Tim Daly <axiom...@gmail.com> a écrit : > >> > > >> > Taking the idea from Ralf it seems that there could be a "hyperdoc" > domain > >> > that implements all of the functions necessary to create user > documentation > >> > with both text output and HTML output forms. From that domain it > should > >> > be possible to re-create Hyperdoc in a browser. > >> > > >> > > >> > > >> > On Thursday, June 12, 2025 at 6:29:38 AM UTC-4 Tim Daly wrote: > >> >> > >> >> Within algebra documentation for a function there are ++ and -- > comments > >> >> The ++ comments are intended as documentation. > >> >> > >> >> I have extended the meaning of ++ comments by appending a single > letter. > >> >> For example in the 'map' function from 'StreamFunction3' you'll see > >> >> > >> >> map : ((A,B) -> C,ST A,ST B) -> ST C > >> >> ++ map(f,st1,st2) returns the stream whose elements are the > >> >> ++ function f applied to the corresponding elements of st1 and > st2. > >> >> ++ \spad{map(f,[x0,x1,x2,..],[y0,y1,y2,..]) = > [f(x0,y0),f(x1,y1),..]}. > >> >> ++ > >> >> ++S > >> >> ++X m:=[i for i in 1..]::Stream(Integer) > >> >> ++X n:=[i for i in 1..]::Stream(Integer) > >> >> ++X f(i:Integer,j:Integer):Integer == i+j > >> >> ++X map(f,m,n) > >> >> > >> >> The ++X comments are part of the output shown during display > functions, e.g. > >> >> > >> >> )d op map > >> >> > >> >> will show the ++X comments as "examples" of how to use the function. > >> >> > >> >> There is also the 'ApplicationProgramInterface' which allows > user-level access > >> >> to various data structures: > >> >> > >> >> )abbrev package API ApplicationProgramInterface > >> >> ++ Author: Timothy Daly, Martin Rubey > >> >> ++ Date Created: 3 March 2009 > >> >> ++ Date Last Updated: 24 March 2012 > >> >> ++ Description: > >> >> ++ This package contains useful functions that expose Axiom system > internals > >> >> > >> >> ApplicationProgramInterface() : SIG == CODE where > >> >> > >> >> SIG ==> with > >> >> > >> >> getDomains : Symbol -> Set Symbol > >> >> ++ getDomains(s) takes a category and returns the list of > domains > >> >> ++ that have that category > >> >> ++ > >> >> ++X getDomains 'IndexedAggregate > >> >> > >> >> getAncestors : Symbol -> Set Symbol > >> >> ++ getAncestors(s) takes a category and returns the list of > domains > >> >> ++ that have that category as ancestors > >> >> ++ > >> >> ++X getAncestors 'IndexedAggregate > >> >> > >> >> credits : () -> Void > >> >> ++ credits() prints a list of people who contributed to Axiom > >> >> ++ > >> >> ++X credits() > >> >> > >> >> summary : () -> Void > >> >> ++ summary() prints a short list of useful console commands > >> >> ++ > >> >> ++X summary() > >> >> > >> >> reportInstantiations : Boolean -> Void > >> >> ++ reportInstantiations(bool) is a debugging tool to show > >> >> ++ instantiation information > >> >> ++ > >> >> ++X reportInstantiations(true) > >> >> ++X 1 > >> >> ++X reportInstantiations(false) > >> >> > >> >> CODE ==> add > >> >> > >> >> getDomains(cat:Symbol):Set(Symbol) == > >> >> set [symbol car first destruct a _ > >> >> for a in (destruct > domainsOf(cat,NIL$Lisp)$Lisp)::List(SExpression)] > >> >> > >> >> getAncestors(cat:Symbol):Set(Symbol) == > >> >> set [symbol car first destruct a _ > >> >> for a in (destruct > ancestorsOf(cat,NIL$Lisp)$Lisp)::List(SExpression)] > >> >> > >> >> credits() == ( credits()$Lisp ; void() ) > >> >> > >> >> summary() == ( summary()$Lisp ; void() ) > >> >> > >> >> reportInstantiations(b:Boolean): Void == > >> >> REPORTINSTANTIATIONS(b)$Lisp > >> >> void > >> >> > >> >> > >> >> > >> >> > >> >> On Thu, Jun 12, 2025 at 5:06 AM Grégory Vanuxem <g.va...@gmail.com> > wrote: > >> >>> > >> >>> Hello, > >> >>> > >> >>> > >> >>> Le mer. 11 juin 2025 à 20:59, 'Ralf Hemmecke' via FriCAS - computer > >> >>> algebra system <fricas...@googlegroups.com> a écrit : > >> >>> > > >> >>> > Hi Waldek, > >> >>> > > >> >>> > as you know, I would like to let HyperDoc die. > >> >>> > But, maybe that sound too extreme for what I actually mean. > >> >>> > And I agree to some extend to your plan for a new hyperdoc. > >> >>> > > >> >>> > Let me explain my wishes. > >> >>> > > >> >>> > FriCAS should have an interface (in LISP or SPAD) that let's > >> >>> > SPAD or external programs get information about > >> >>> > categories/domains/packages/documentation. > >> >>> > From such an interface it should be easy to generate any output > format > >> >>> > be it html, rst or pdf. > >> >>> > >> >>> +1 > >> >>> > >> >>> For what I am interested in right now, is displaying '++' > >> >>> documentation in text form, and. readable directly in the > interpreter > >> >>> console. > >> >>> From what I have read in api.spad and api2.spad the implementations > >> >>> are tightly related the reST and HTML formats and I would like > >> >>> plain/text format also. I do not want to use a Regex style > replacement > >> >>> method as it requires Julia or cl-ppcre and/or, for my concern, > >> >>> cl-ppcre-unicode. Looking at api2 for example there is code to > return > >> >>> TexTree as a SEX expression. There is a TeXTree to HTML converter > >> >>> which outputs the conversion in a file, no routine from what I have > >> >>> seen that converts it to a String. I will eventually code something > in > >> >>> this regard. Maybe Waldek, you have already done this privately? > >> >>> Having a generic parser would be a very good idea, I think. > Gathering > >> >>> the two parser implementations. > >> >>> > >> >>> > >> >>> jlDocumentation(op) == > >> >>> ops := getDatabase("o")$OperationsQuery > >> >>> docs := elt(ops,equation('name, op)$QueryEquation) > >> >>> elts : DataList(String) := elt(docs,'doc) > >> >>> for i in 1 .. #elts repeat > >> >>> output((elts.i)::OutputForm)$OutputPackage > >> >>> -- PPRINT(jlEvalString(concat(["replace(raw_"", > >> >>> > >> >>> "\spad{svd(m)} computes the singular value decomposition > \spad{SVD} of \spad{ > >> >>> m} such that \spad{SVD}.\spad{U} * diagonalMatrix(\spad{sv}) * > \spad{SVD}.\sp > >> >>> ad{Vt} = \spad{m}." > >> >>> "\spad{svd(m)} computes the singular value decomposition > \spad{SVD} of \spad{ > >> >>> m} such that \spad{SVD}.\spad{U} * diagonalMatrix(\spad{sv}) * > \spad{SVD}.\sp > >> >>> ad{Vt} = \spad{m}." > >> >>> "\spad{svd(m)} computes the singular value decomposition > \spad{SVD} of \spad{ > >> >>> m} such that \spad{SVD}.\spad{U} * diagonalMatrix(\spad{sv}) * > \spad{SVD}.\sp > >> >>> ad{Vt} = \spad{m}." > >> >>> "\spad{svd(m)} computes the singular value decomposition > \spad{SVD} of \spad{ > >> >>> m} such that \spad{SVD}.\spad{U} * diagonalMatrix(\spad{sv}) * > \spad{SVD}.\sp > >> >>> ad{Vt} = \spad{m}." > >> >>> "\spad{svd(m)} computes the singular value decomposition of the > matrix \spad{ > >> >>> m}." > >> >>> > Type: Void > >> >>> > >> >>> And regexing/replacing, completely irrelevant for me, some Tex-like > >> >>> construct I would like to obtain something like: > >> >>> (25) -> jlDocumentation "svd" > >> >>> > >> >>> "svd(m) computes the singular value decomposition SVD of m such that > >> >>> SVD.U * diagonalMatrix(sv) * SVD.Vt = m." > >> >>> "svd(m) computes the singular value decomposition SVD of m such that > >> >>> SVD.U * diagonalMatrix(sv) * SVD.Vt = m." > >> >>> "svd(m) computes the singular value decomposition SVD of m such that > >> >>> SVD.U * diagonalMatrix(sv) * SVD.Vt = m." > >> >>> "svd(m) computes the singular value decomposition SVD of m such that > >> >>> SVD.U * diagonalMatrix(sv) * SVD.Vt = m." > >> >>> "svd(m) computes the singular value decomposition of the matrix m." > >> >>> Type: > >> >>> Void > >> >>> > >> >>> or: > >> >>> > >> >>> (26) -> jlDocumentation "string" > >> >>> > >> >>> "string(f) gives string corresponding to f. Valid only when > string?(f) is true" > >> >>> "string(i) returns the decimal representation of i as a string." > >> >>> "string(s) returns s as an element of Str. Error: if s is not an > atom > >> >>> that also belongs to Str." > >> >>> "string(jt) returns the string representation of jt." > >> >>> "string(x) stringifies x." > >> >>> "string(s) converts the symbol s to a string. Error: if the symbol > is > >> >>> subscripted." > >> >>> > >> >>> (27) -> jlDocumentation "str" > >> >>> > Type: Void > >> >>> > >> >>> But with more information (conditional exports, origins etc.) and > >> >>> more options. Probably as a system command? > >> >>> )display doc string as an example. > >> >>> > >> >>> Just my two cents. > >> >>> > >> >>> - Greg > >> >>> > >> >>> -- > >> >>> You received this message because you are subscribed to a topic in > the Google Groups "FriCAS - computer algebra system" group. > >> >>> To unsubscribe from this topic, visit > https://groups.google.com/d/topic/fricas-devel/mb_O0196RMQ/unsubscribe. > >> >>> To unsubscribe from this group and all its topics, send an email to > fricas-devel...@googlegroups.com. > >> >>> To view this discussion visit > https://groups.google.com/d/msgid/fricas-devel/CAHnU2dY5SH52A0U56a8kSqSBO%2BFX0Lzsq%3Dw6hzBCfcuBd20m8Q%40mail.gmail.com > . > >> > > >> > -- > >> > You received this message because you are subscribed to the Google > Groups "FriCAS - computer algebra system" group. > >> > To unsubscribe from this group and stop receiving emails from it, > send an email to fricas-devel+unsubscr...@googlegroups.com. > >> > To view this discussion visit > https://groups.google.com/d/msgid/fricas-devel/d2b4d3a4-ce9e-4483-9d10-83f4add78e06n%40googlegroups.com > . > >> > >> -- > >> You received this message because you are subscribed to a topic in the > Google Groups "FriCAS - computer algebra system" group. > >> To unsubscribe from this topic, visit > https://groups.google.com/d/topic/fricas-devel/mb_O0196RMQ/unsubscribe. > >> To unsubscribe from this group and all its topics, send an email to > fricas-devel+unsubscr...@googlegroups.com. > >> To view this discussion visit > https://groups.google.com/d/msgid/fricas-devel/CAHnU2dYuiju2PAUO3GyADN1TXYBsaYE-MYKrUsCA-ZL9_g_4kg%40mail.gmail.com > . > > > > -- > > You received this message because you are subscribed to the Google > Groups "FriCAS - computer algebra system" group. > > To unsubscribe from this group and stop receiving emails from it, send > an email to fricas-devel+unsubscr...@googlegroups.com. > > To view this discussion visit > https://groups.google.com/d/msgid/fricas-devel/CAJn5L%3DKecxUfnoxp1sLEQOnY06s3RSrWejf2C%3DrzPCnZ%2BbdP7A%40mail.gmail.com > . > > -- > You received this message because you are subscribed to a topic in the > Google Groups "FriCAS - computer algebra system" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/fricas-devel/mb_O0196RMQ/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > fricas-devel+unsubscr...@googlegroups.com. > To view this discussion visit > https://groups.google.com/d/msgid/fricas-devel/CAHnU2datEvCjyDs2qb%3D-PTxfHkOfPvmPF9NJpVDYVwt-gCMtXw%40mail.gmail.com > . > -- You received this message because you are subscribed to the Google Groups "FriCAS - computer algebra system" group. To unsubscribe from this group and stop receiving emails from it, send an email to fricas-devel+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/fricas-devel/CAJn5L%3DLn3pG%3Dkd671WLZ3w_fz%3Ds5KEWO%3DgMS5c2a3Lv_BUb2%3Dg%40mail.gmail.com.