Tools for CSE courses

Using formulas

Table of contents

1. Notes

2. Examples

The final grade can be calculated from assignment weights (see Creating a new assignment) or by formula.
To calculate by formula, add an entry to file factory.
An entry consists of two fields:
  • The first is the formula name (with an optional trailing colon). A leading asterix indicates that the formula is compulsory. See Final grades
  • The second is a ruby formula whose variables are assignment names and formula names. If assignments are weighted, the special variable targil can also be used. The special variables*  num_grades, num_exempt and num_exs and exempt can also be used. If there is an exam, formula final (and only formula final) should also use variable exam.
An entry can be continued onto an additional line either by terminating the line with a backslash or by prefixing the additional line with whitespace.
The value calculated by a formula can be overridden for particular students by creating file <formula name>.override, e.g. final1.override, with entries for just those students.
*Special variables:  num_grades - Number of non-exam items with grade or exempt;  num_exempt - Number of exempt items;  num_exs - Number of non-exam items with grade or exempt whose name begins with ex


  • Of course, a formula can use only formula names that have been defined in earlier entries
  • Formula final, if it exists, must be the last entry
  • The special functions avg, max and avgmax are available. avg and max take no arguments and avgmax's single argument is the number of scores to average over
  • num_grades is the number of non-exam grades (including exempts); num_exs is the number of grades for assignments whose name begins with ex followed by a digit (including exempts); and num_exempt is the number of exempts
  • The following variable name is reserved and should not be used: grade


final: 0.2 * ![ex1, ex2, ex3, ex4].avgmax(3) + 0.8 * exam
ex123: (ex1 + ex2 + ex3) / 3
final: magen =  ![ex123, ex4, exam].max;
      (37.5 * ex123 + 2.5 * ex2 + 50 * exam + 10 * magen) / 100
final: num_exs < 5 ? nil : ![ex1,ex2,ex3,ex4,ex5,ex6].avg