Approved by <agc>.
Backwards-incompatible changes:
* removed package jtroot3 (superseded by bfallroots)
* internal symbols of specint replaced by more descriptive names:
%f --> hypergeometric
%e --> elliptic_ec
%kelliptic --> elliptic_kc
%p[a,b,c] --> jacobi_p
%p[a,b] --> assoc_legendre_p
%p[a] --> legendre_p
%q[a,b] --> assoc_legendre_q
%q[a] --> legendre_q
hstruve --> struve_h
lstruve --> struve_l
%d --> parabolic_cylinder_d
%m --> whittaker_m
%w --> whittaker_w
%ei --> expintegral_ei
%h[n,x] --> hankel_1 and hankel_2
%he --> hermite
New items in core:
* general mechanism for functions to distribute over operators
(distribute_over declaration)
Other revisions:
* improved Laplace transforms of special functions
* assume database:
The inferences between the declarations of variables as integer,
real, complex, .. have been cut out. The constant %i is declared
to be imaginary. The constants %pi, %e, %gamma, %phi are declared
to be real.
The database handles expressions with constants more completely.
Facts like assume(x < %pi/2) are now handled correctly.
The sign of sums of constant expressions is determined more
correctly.
Askinteger take into account more facts from the database.
* improvements of special functions:
More functionality for the Hankel 1 and 2 functions:
Expansion for a half integral order has been implemented.
More consistent numerical evaluation of Bessel and Hankel functions.
More general integrals for Bessel functions and implementation of
integrals for the Airy functions.
Gamma function accepts a Taylor expansion as an argument.
Implementation of Struve H and L functions:
Numerical evaluation for real and complex numbers in float and
bigfloat precision. Handling of specific values. Derivatives of the
functions and expansion for a half integral order is implemented.
Adding mirror symmetry for the Airy functions.
Improving the limits of the log and factorial functions.
* package fft: revised for greater speed
* package to_poly_solver: improvements
* regularize error and warning messages, and translate via gettext (ongoing)
* bug fixes and other improvements in plotting code
* bug fixes in translator
Bug fixes:
2906049: integration failure with option integrate_use_rootsof :true
2901855: limit(sqrt(x),x,minf) not fully evaluated
2886564: conjugate(atan2(y,x)) not simplified
2882408: solve_rat_ineq returns false answers
2876387: ode2 asks if sqrt(3) is an integer
2876284: nicedummies of subscripted
2876277: hgfred([3/2,-2],[5/2],-x) not fully simplified
2873057: incorrect version is reported in manual front page
2872605: abs_integrate bug
2872505: Assume database inconsistent after reset()
2847387: hgfred([3/2,-b],[5/2],-1) bogus
2843705: limit of psi[i]
2842198: next_prime speed improvement
2842060: unsimplified result from integrate
2841504: Limit of the factorial function - 4 problems
2840566: defint fails to determine if one of its limit is real
2836339: unsimplified negation
2835634: logcontract broken
2835098: SIGN-PREP strangeness
2834336: ratsimp vs facsum
2824360: missing bug reporting node in manual's detailed menu
2808568: Reserved words that aren't reserved
2802006: integrate(1/(sqrt(x)+1), x, 0, 1);
2770575: rtestsum test 226
2636628: solve_rat_ineq doesnt find all soloutions
2609426: integrate(cos(a)/sqrt((tan(a))^2+1), a,-%pi/2,%pi/2);
2148461: docs for factor refer to "the field of integers"
2018842: unsimplified result from jacobi_p
1977146: radexpand does not work as explained in documentation
1725951: unsimplified boolean
1646397: listofvars includes true
1551310: mod and floor should distribute over matrix and list
1038624: askinteger ignores asksign database
840360: qunit(4) internal errors
831163: part(x) should give warning
816797: limit(%i*log(a),a,0) nounform (%i*und problem)
788892: zeroa handled inconsistently
752067: Can't untrace ?meval
706455: Should powerseries do Laurent expansions?
652470: Pickapart error (due to MEMSIMILAR)
640332: Need to specdisrep more systematically
627759: Ratdisrep of aggregates
changes:
-Fix negative exponential detection
-Only disable trailing zeroes option in basic mode
-Disable ambiguous multiplication with Eulers number, e.g. "2e" as this
makes exponential numbers confusing
Changes since previous release:
Compiler
- The compiler now treats ^ as alias for **.
- The compiler now rejects ambiguous left hand sides of
definitions where parameter types are left out for
inference. Previously, the compiler would pick the first
signature from some mostly random order, with a warning.
- For categories with default implementations, the compiler
can be directed to compile only the purely category part
(exports), or only the default implementations (category
packages).
- The compiler now supports a Foreign Function Interface. In
particular, signatures for external entities may be declared
at capsule level. Currently, only ISO C functions are
supported, but future releases may support ISO C++ and other
mainstream languages.
- The parsing of signature for operators has been improved.
Previously, operator names needed to be quoted in signature.
That is not longer needed. For instance, previously, one had
to write (at category level)
"*": (%,%) -> %
_/_\: (%,%) -> %
_not: % -> %
With this release of OpenAxiom and onward, one can simply write
*: (%,%) -> %
/\: (%,%) -> %
not: % -> %
which is much simpler to read, write, and much more regular.
- The compiler now supports is-case pattern matching. The new
pattern matching syntax is useful for structuring retractions,
and also for domain recovery from expressions of type Any.
- The compiler now supports the loop control transfer operator
iterate in repeat loops - previously, the construct was
accepted only in scripts (not libraries). That discrepency is
now ended.
Interpreter
- Declared variable with no specified values are now handled
as if symbolic value with a specified type.
- The interpreter now parses a disjunctive expression
involving the 'is' operator the obvious way. E.g. Now
T is Integer or T has Ring
is now understood as
(T is Integer) or (T has Ring)
- The interpreter now handles existentially quantified or
universally quantified expressions
Algebra
The following types have been added to OpenAxiom-1.3.0
- The domain Boolean and category BitAggregate no longer
export the operation ^ for logical negation. Use the
operator not which is the canonical and documented operator.
- The domain InputForm now has a new exported signature
parseString: String -> %
for parsing expressions given as string.
- The domain Boolean now belongs to the category
OrderedFinite.
- The domain KleeneTrivalentLogic is added. It implements
Stephen Kleene's 3-valued propositional logic.
- For file orinted I/O, new domains have been added:
+ IOMode: This domains defines three constants to indicate
the direction of file I/O operations.
+ InputBinaryFile: This domains implements the basic input
operations on binary files.
+ OutputBinaryFile: This domains implements the basic
output operations on binary files.
- The domain BinaryFile has been replaced by three specific domains:
+ InputBinaryFile: datatype for input file open in binary mode;
+ OutputBinaryFile: datatype for output file open in binary mode;
+ InputOutputBinaryFile: datatype for input and output file open
in binary mode.
- Three new categories are introduced, related to conversions:
+ CoercibleFrom: This category is the mirror image of the
standard category CoercibleTo.
+ HomotopicTo: This category is the symmetrization of the
category CoercibleTo.
+ ConvertibleFrom: This category is the mirror image of
ConvertibleTo.
- Previous releases defined instantiations of the domain
constructor Expression as satisfying the category OrderedSet.
That was both confusing and incorrect in conjunction with
other algebraic structures. From now on, Expression(T) no
longer satisfies OrderedSet.
- Three new categories have been added:
+ LeftLinearSet
+ RightLinearSet
+ LinearSet
The category AbelianGroup extends LeftLinearSet Integer.
The parameterized category constructor LeftModule extends
LeftLinearSet. Similarly, the category RightModule extends
RightLinearSet.
- The domain Any has been reworked. In particular, the
operation domainOf, objectOf, and showTypeInOutput have been
removed. Equality of two objects of domain Any is equality
according to the underlying domain, if that domain belongs to
the category BasicType; otherwise, it is equality of storage
locations.
Runtime System
The Lisp backend now uses type information derived from exports
and domain representation for code generation purposes.
Notable changes (compared to version 1.0.7) include:
- Improved version of guessing package. It can now handle
much larger problems than before. Added ability to guess
functional substitution (Mahler) equations.
- Experimental support for build using CMU CL.
- Various speed improvements including faster indexing for two
dimensional arrays.
- By default FriCAS build tries to use SBCL.
- Building no longer require patch.
Bug fixes, in particular:
- correct definition of random() for matrices
- conditionals in .input files work again
- Spad compiler now recognizes more types as equal
- fixed problem with pattern-matching quote
Changes from version 2.4.1 to version 2.4.2:
- Security fix in formatted output functions (buffer overflow).
- Formatted output functions: 6 is now the default value for
empty precision field with %Rf.
- Better portability of configure script.
- Detection of intmax_t and uintmax_t types.
- Improved documentation: mpfr_get_z_exp, mpfr_strtofr, mpfr_get_str and
formatted output functions.
- Improved message in case of assertion failure.
- Test coverage: 97.0% lines of code.
- Updated tcmp_ld test to really test the long double.
- Some documentation files are installed in $docdir.
- Removed mpfr_init_cache (unused and undocumented function).
- Fixed the way $CC / $CFLAGS are got from gmp.h (__GMP_CC / __GMP_CFLAGS).
- Bug fixes.
- Also note that GCC 4.4.0 (only this obsolete version) does not build
MPFR 2.4.2 correctly; this is detected by "make check" (failures in
tget_z and tpow_all).
* Package help is now converted from Rd by the R-based converters
that were first introduced in 2.9.0.
* HTML help is now generated dynamically using an HTTP server
running in the R process and listening on the loopback interface.
* polygon(), pdf() and postscript() now have a parameter
'fillOddEven' (default FALSE), which controls the mode used for
polygon fills of self-intersecting shapes.
* New debugonce() function; further,
getOption("deparse.max.lines") is now observed when debugging.
* plot() methods for "stepfun" and hence "ecdf" no longer plot
points by default for n >= 1000.
* [g]sub(*, perl=TRUE) now also supports '\E' in order to *end*
\U and \L case changes, thanks to a patch from Bill Dunlap.
* factor(), `levels<-`(), etc, now ensure that the resulting factor
levels are unique (as was always the implied intention). Factors
with duplicated levels are still constructible by low-level means,
but are now declared illegal.
* New print() (S3) method for class "function", also used for
auto-printing. Further, .Primitive functions now print and
auto-print identically.
* The print() and toLatex() methods for class "sessionInfo" now
show the locale in a nicer format and have arguments to
suppress locale information.
* In addition to previously only round(), there are other 'Math'
group (S3) methods for 'difftime', such as floor(), signif(), abs(), etc.
* For completeness, old.packages() and available.packages() allow
'type' to be specified (you could always specify 'available'
or 'contriburl').
* More...