Maxima identifier census
The Maxima identifier census is a new part of STACK starting from version 4.3 the point of this census is to keep track of new Maxima features and their presence in versions of Maxima. Basically, we can use some function and flag if and only if its present in a reasonable number of recent Maxima versions and we drop STACKs support of older versions.
In addition to helping developers identify features that are not necessarily available in relevant Maxima versions the census data is also used to build the security-map i.e. a list of identifiers that should not be modified, accessed or called by students or teachers. The same list also describes safe identifiers so that we can identify situations where function names are used as variables or common constants are being redefined.
The census and security files
Currently, the data can be found from JSON files under /stack/cas/
the census
in its raw form is in base-identifier-map.json
and the security-map is In
security-map.json
. The census file lists identifiers and their usage types
and the versions of Maxima those usages have been present in the documentation.
The security file gives meta-data about selected identifiers, that meta-data
typically consists of keys like function
, operator
, or variable
that have
values of s
, f
, and ?
first one meaning that students can use that
identifier in that way and the second one meaning that no one can use that in
that way the last one signals that the identifier is not yet forbidden and that
teachers may allow students to use it if they so wish. Other meta-data tends to
focus on classification e.g. functions that can be used to apply or map other
function on values have their own meta-data flag mapfunction
.
Updating the files
The process of updating the census file is as follows:
-
Acquire the source code of the new Maxima version you want to include in the census. For example 'maxima-5.42.0.tar.gz' and unpack it somewhere.
cd /tmp/ mkdir maximatemp cd maximatemp tar xvf ~/Downloads/maxima-5.42.0.tar.gz
-
Extract the identifiers from the documentation that comes with that source, and store them to a file.
cd /tmp/maximatemp/maxima-5.42.0/doc/info grep '^ \-\- .*: .*' -shI * | grep -v 'an error. To debug' > /tmp/maximatemp/identifiers-5.42.0.txt
-
Use STACKs update script to read in that file. Make sure that you give the correct version number.
cd $MOODLE php question/type/stack/cli/maximaidentifierupdater.php --version=5.42.0 --data=/tmp/maximatemp/identifiers-5.42.0.txt
-
Also call the update script for the security map. The script will read the data updated in the previous step and include any new identifiers to the security map. Calling, this script should also be done if you manually modify the security-map as the script ensure that the map is in alphabetical order and indented in the expected way.
cd $MOODLE php question/type/stack/cli/maximasecuritymapupdater.php
-
Remember to commit the changes to those JSON files to the GIT.