Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master' into merge-upstream-in…
Browse files Browse the repository at this point in the history
…to-catalyst-stable-mc
  • Loading branch information
golenkovm committed Mar 13, 2024
2 parents 881352c + 4a47d12 commit d6e78a0
Show file tree
Hide file tree
Showing 22 changed files with 108 additions and 46 deletions.
20 changes: 10 additions & 10 deletions doc/en/AbInitio/Authoring_quick_start_1.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ The authoring quick start guide shows you how to write STACK questions. Part 1
We assume the following:

1. You have access to a course with STACK installed.
2. You are familiar with simple \(\LaTeX\) formatting for mathematics. Some basic examples are provided in the [CASText](/Authoring/CASText.md) documentation.
2. You are familiar with simple \(\LaTeX\) formatting for mathematics. Some basic examples are provided in the [CASText](../Authoring/CASText.md) documentation.

## Creating a minimal STACK question

Go to your Course, navigate to the [question bank](/Moodle/Question_bank.md) and create a new question with the "STACK" question type.
Go to your Course, navigate to the [question bank](../Moodle/Question_bank.md) and create a new question with the "STACK" question type.

There are lots of fields, but only a few are compulsory:

Expand All @@ -23,7 +23,7 @@ There are lots of fields, but only a few are compulsory:
3. The teacher's "model answer" (inside "Input: ans1" on a default question),
4. A test of "correctness".

By default a new question automatically has one [input](/Authoring/Inputs.md), and one algorithm to test correctness of the answer.
By default a new question automatically has one [input](../Authoring/Inputs.md), and one algorithm to test correctness of the answer.

### Question name ###

Expand All @@ -47,7 +47,7 @@ Notes:

## Input: ans1

Scroll down: there will be an [inputs](/Authoring/Inputs.md) section of the editing form. Click on the header `Input: ans1` to reveal the relevant settings.
Scroll down: there will be an [inputs](../Authoring/Inputs.md) section of the editing form. Click on the header `Input: ans1` to reveal the relevant settings.

For a minimal question, we must specify the _model answer_. Let this be

Expand All @@ -57,16 +57,16 @@ Notes

1. The student's response is stored in the answer variable `ans1`.
2. The model answer must be a syntactically valid expression in CAS (Maxima) syntax, not LaTeX. This means multiplication must be explicitly specified, using `*`.
3. [Inputs](/Authoring/Inputs.md) can have a variety of types selected by the _Input type_ drop-down menu. The _Algebraic input_ is the default, and what we need here.
3. [Inputs](../Authoring/Inputs.md) can have a variety of types selected by the _Input type_ drop-down menu. The _Algebraic input_ is the default, and what we need here.
4. A question can have many inputs for multiple parts. These are discussed later in a later part.

## Assessing correctness of a response - the Potential Response Tree (PRT)

Next we have to decide if the student's answer is correct.

To grade the student's response, we need to determine its mathematical properties using an algorithm known as a [potential response tree](/Authoring/Potential_response_trees.md).
To grade the student's response, we need to determine its mathematical properties using an algorithm known as a [potential response tree](../Authoring/Potential_response_trees.md).

By default, a new question contains one [potential response tree](/Authoring/Potential_response_trees.md) called `prt1`. Feedback generated by the tree replaces the tag `[[feedback:prt1]]` at the appropriate time.
By default, a new question contains one [potential response tree](../Authoring/Potential_response_trees.md) called `prt1`. Feedback generated by the tree replaces the tag `[[feedback:prt1]]` at the appropriate time.

### Configuring a potential response node

Expand All @@ -79,8 +79,8 @@ A potential response tree is a non-empty acyclic directed graph of _potential re
Each branch can then

* Assign/update the score,
* Assign formative [feedback](/Authoring/Feedback.md) to the student,
* Leave an [answer note](/Authoring/Potential_response_trees.md#Answer_note) for statistical [reporting](/Authoring/Reporting.md) purposes,
* Assign formative [feedback](../Authoring/Feedback.md) to the student,
* Leave an [answer note](../Authoring/Potential_response_trees.md#Answer_note) for statistical [reporting](../Authoring/Reporting.md) purposes,
* Continue to the next potential response node, or end the process with `[stop]`.

Let us configure the first node to determine if the student has differentiated correctly.
Expand Down Expand Up @@ -128,7 +128,7 @@ First is "validation", and normally servers have "instant validation" enabled.

The second stage executes when a valid expression is entered, and this evaluates the potential response tree to assess the student's answer.

This two-stage process is a unique and essential feature of STACK. There are lots of options for validation to help the student. For example, in the above, all example expressions have strict syntax. Here we used expressions like `3*(x-1)^2`, with `*` symbols to denote multiplication. You could choose to let students type in expressions like `3(x-1)^2` and accept implied multiplication. Note, however, that teacher input will always have to be strict to avoid ambiguity. Documentation on these options is given in the [inputs](/Authoring/Inputs.md) section.
This two-stage process is a unique and essential feature of STACK. There are lots of options for validation to help the student. For example, in the above, all example expressions have strict syntax. Here we used expressions like `3*(x-1)^2`, with `*` symbols to denote multiplication. You could choose to let students type in expressions like `3(x-1)^2` and accept implied multiplication. Note, however, that teacher input will always have to be strict to avoid ambiguity. Documentation on these options is given in the [inputs](../Authoring/Inputs.md) section.

# Next step #

Expand Down
4 changes: 2 additions & 2 deletions doc/en/AbInitio/Authoring_quick_start_2.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Let us focus on the problem of finding \(\int 3(x-1)^{-4} \mathrm{d}x\). Create

### Using question variables

The next steps would be to add question text, and then to add the teacher's answer `-1*(x-1)^(-3)+c` to the `model answer` field and the `potential response tree`. However, the expression and model answer will normally be referred to more than once, so it is usually easiest to assign them to "question variables" using the optional [question variables](/Authoring/Variables.md#Question_variables) field.
The next steps would be to add question text, and then to add the teacher's answer `-1*(x-1)^(-3)+c` to the `model answer` field and the `potential response tree`. However, the expression and model answer will normally be referred to more than once, so it is usually easiest to assign them to "question variables" using the optional [question variables](../Authoring/Variables.md#Question_variables) field.

Add the following to the question variables

Expand All @@ -38,7 +38,7 @@ Now it will be a lot faster to fill out the rest of the question. Add the follow
Find \(\int{@exp@} \mathrm{d}x\)
[[input:ans1]] [[validation:ans1]]

Notice that we have defined a local variable `exp`, and used the value of this in the Question text. There is a difference between mathematics enclosed between `\(..\)` symbols and `{@..@}` symbols. All the text-based fields in the question, including feedback, are [CAS text](/Authoring/CASText.md). This is HTML into which mathematics can be inserted. LaTeX is placed between `\(..\)`s, and CAS expressions (including your variables) between matching `{@..@}` symbols. The CAS expressions are evaluated in the context of the question variables and displayed as LaTeX.
Notice that we have defined a local variable `exp`, and used the value of this in the Question text. There is a difference between mathematics enclosed between `\(..\)` symbols and `{@..@}` symbols. All the text-based fields in the question, including feedback, are [CAS text](../Authoring/CASText.md). This is HTML into which mathematics can be inserted. LaTeX is placed between `\(..\)`s, and CAS expressions (including your variables) between matching `{@..@}` symbols. The CAS expressions are evaluated in the context of the question variables and displayed as LaTeX.

Since we have used `{@exp@}` here, the user will not see a \(exp\) on the screen when the question is instantiated, but the _displayed value_ of `exp`: \(\frac{3}{(x-1)^{-4}}\)

Expand Down
6 changes: 3 additions & 3 deletions doc/en/AbInitio/Authoring_quick_start_3.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Try previewing this question and typing in `-1*(x-1)^(-3)+c`. The system should

## Answer test: Int

We will need to edit the potential response tree to use a better [answer test](/Authoring/Answer_Tests/Calculus.md). Return to the page "Editing a STACK question". Find your potential response tree settings, click on the drop-down menu where we selected `AlgEquiv` and select `Int` from the list. Type `x` (the variable) into the Test options setting. Now press the `[Save changes and continue editing]` button and once more click the preview button. We have just selected a special [answer test](/Authoring/Answer_Tests/Calculus.md) for dealing with integration questions.
We will need to edit the potential response tree to use a better [answer test](../Authoring/Answer_Tests/Calculus.md). Return to the page "Editing a STACK question". Find your potential response tree settings, click on the drop-down menu where we selected `AlgEquiv` and select `Int` from the list. Type `x` (the variable) into the Test options setting. Now press the `[Save changes and continue editing]` button and once more click the preview button. We have just selected a special [answer test](../Authoring/Answer_Tests/Calculus.md) for dealing with integration questions.

The _Int_ answer test will accept any variable name for the constant of integration. For example, try typing in `-(x-1)^(-3)+k`. The system should accept this as correct. It will also give standard feedback if the student forgets a constant of integration or accidentally differentiates instead. To try this, type `-12*(x-1)^(-5)`. If you don't want students to see the automatic feedback, select the _Quiet_ option in the potential response node.

Expand All @@ -38,7 +38,7 @@ For each mistake we think students might make, we can create an answer test. For

![Adding a new node](../../content/add_new_node.png)

Go to the potential response tree and click `[Add another node]` . Then under Node 1's `True` branch change `Next` to `Node 2`. If we enter Node 2, we know the student has the correct answer and just need to establish if it is factored or not. To establish this we need to use the [FacForm answer test](/Authoring/Answer_Tests/index.md). This tests both that SAns and TAns are equivalent, and that SAns is factored. In this case we already know that the student's answer is equivalent to the teacher's answer (using *Int*'s better tailored algorithm). Hence we can just test the student's answer against itself.
Go to the potential response tree and click `[Add another node]` . Then under Node 1's `True` branch change `Next` to `Node 2`. If we enter Node 2, we know the student has the correct answer and just need to establish if it is factored or not. To establish this we need to use the [FacForm answer test](../Authoring/Answer_Tests/index.md). This tests both that SAns and TAns are equivalent, and that SAns is factored. In this case we already know that the student's answer is equivalent to the teacher's answer (using *Int*'s better tailored algorithm). Hence we can just test the student's answer against itself.

Update the form so that Node 2 has

Expand All @@ -59,7 +59,7 @@ FacForm gives automatic feedback, but if you want to write your own you can set
Your answer is not factored. Well done for getting the correct answer, but remember that there is no need to expand out the brackets.
```

You can continue to expand your potential response tree, checking for as many common mistakes as you would like to. See the [documentation](/Authoring/Answer_Tests/index.md) for information on more answer tests.
You can continue to expand your potential response tree, checking for as many common mistakes as you would like to. See the [documentation](../Authoring/Answer_Tests/index.md) for information on more answer tests.

## Adding general feedback

Expand Down
2 changes: 1 addition & 1 deletion doc/en/AbInitio/Authoring_quick_start_4.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ ta: int(exp,x)+c;

We defined two local variables `exp` and `ta`, and used these values in other places such as the question text, input and potential response tree.

We are now in a position to generate a random question. To do this, modify the [question variables](/Authoring/Variables.md#Question_variables) to be
We are now in a position to generate a random question. To do this, modify the [question variables](../Authoring/Variables.md#Question_variables) to be

```
a1 : 1+rand(6);
Expand Down
2 changes: 1 addition & 1 deletion doc/en/AbInitio/Authoring_quick_start_5.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ We are testing that if we multiply by \(-nn+1\) instead of dividing, we should b

You will see that not all deployed versions pass all tests, and if you click on a variant that failed a test, you will see why! Essentially, when \(nn=2\), \(-nn+1=-1\) multiplication and division are equivalent. Essentially, these random variants are "easier" than the others. This illustrates another key use of question tests - ensuring that all variants are the same difficulty and test the knowledge they are supposed to. In light of this, you may want to change `nn` again to ` 3+rand(4)` . Now all variants should pass all question tests.

Quality control is essential, and more information is given in the page on [testing](/Authoring/Testing.md).
Quality control is essential, and more information is given in the page on [testing](../Authoring/Testing.md).

## Aside: forbidden words

Expand Down
12 changes: 6 additions & 6 deletions doc/en/AbInitio/Authoring_quick_start_8.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,10 @@ You should now be able to work with quizzes in Moodle.

This concludes the authoring quick start guide. The STACK documentation is comprehensive, and there are many things you might want to look at next. For example, you can

- learn about more [input types](/Authoring/Inputs.md),
- learn about more [answer tests](/Authoring/Answer_Tests/index.md),
- add [plots](../Plots/Plots.md) to your [CASText](/Authoring/CASText.md) fields,
- add support for [multiple languages](/Authoring/Languages.md),
- learn about using [equivalence reasoning](/Authoring/Equivalence_reasoning.md),
- read about [Curve sketching](/Topics/Curve_sketching.md).
- learn about more [input types](../Authoring/Inputs.md),
- learn about more [answer tests](../Authoring/Answer_Tests/index.md),
- add [plots](../Plots/Plots.md) to your [CASText](../Authoring/CASText.md) fields,
- add support for [multiple languages](../Authoring/Languages.md),
- learn about using [equivalence reasoning](../Authoring/Equivalence_reasoning.md),
- read about [Curve sketching](../Topics/Curve_sketching.md).
- look at more information on [Maxima](../CAS/index.md), particularly the Maxima documentation if you are not very familiar with Maxima's syntax and function names. A graphical Maxima interface like [wxMaxima](http://andrejv.github.com/wxmaxima/) can also be very helpful for finding the appropriate Maxima commands easily.
2 changes: 1 addition & 1 deletion doc/en/AbInitio/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ Those new to STACK will probably prefer to begin with the [authoring quick start

## See also

* [Authoring](/Authoring/index.md)
* [Authoring](../Authoring/index.md)
4 changes: 2 additions & 2 deletions doc/en/Authoring/JSXGraph.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,9 +187,9 @@ You should check the sample questions about JSXGraph binding for examples of the

Starting from version 4.3 there are three functions for dealing with pairs of points. Basically, if you want to represent vectors, lines or circles or anything that can be defined with just two points. `stack_jxg.bind_point_dual(inputRef, point1, point2)` will store the positions of the points into a single input as a list of lists, `stack_jxg.bind_point_relative(inputRef, point1, point2)` will also generate a list but in it the second point is represented relative to the first, and finally `stack_jxg.bind_point_direction(inputRef, point1, point2)` will provide the first point as coordinates and the second point as an angle and distance from the first.

Starting from 4.4 there is only one new bind function `stack_jxg.bind_list_of(inputRef, list)` which takes a list of points and/or sliders and stores it into a single input. It only works if he size or order of the list does not change during page loads, however the list can change its shape for variants of the question. The primary use target for this are the vertices of polygons, but one can probably come up with something else as well, it does work as a quick and dirty way of storing the whole graph state if the graph can be defined just by points and sliders.
Starting from 4.4 there is only one new bind function `stack_jxg.bind_list_of(inputRef, list)` which takes a list of points and/or sliders and stores it into a single input. It only works if the size or order of the list does not change during page loads, however the list can change its shape for variants of the question. The primary use target for this are the vertices of polygons, but one can probably come up with something else as well, it does work as a quick and dirty way of storing the whole graph state if the graph can be defined just by points and sliders.

There are also two new functions realted to dealing with groups of objects and matching inputs. For situations where the answer consists of multiple elements and it is possible that not all get moved one can use `stack_jxg.define_group(list)` which takes a list of points and/or sliders and makes it so that touching any one of them will trigger them all to be considered as touched and thus generates inputs. There is also `stack_jxg.starts_moved(object)` which takes a point or a slider and marks it as touched from the start, this may be of use if the graph is an optional part and the actual grading depends of other parts or if one wants to use PRT feedback as a way for describing the status of the graph and needs the objects to be transferred onto the CAS side without interaction from the student.
There are also two new functions related to dealing with groups of objects and matching inputs. For situations where the answer consists of multiple elements and it is possible that not all get moved one can use `stack_jxg.define_group(list)` which takes a list of points and/or sliders and makes it so that touching any one of them will trigger them all to be considered as touched and thus generates inputs. There is also `stack_jxg.starts_moved(object)` which takes a point or a slider and marks it as touched from the start, this may be of use if the graph is an optional part and the actual grading depends of other parts or if one wants to use PRT feedback as a way for describing the status of the graph and needs the objects to be transferred onto the CAS side without interaction from the student.

## Convenience tools for generating lists of values.

Expand Down
2 changes: 1 addition & 1 deletion doc/en/Authoring/Potential_response_trees.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Potential response trees

The potential response tree is the algorithm which establishes the mathematical properties of the student's answer and assigns outcomes. For examples of how to use this, see the entry on [improving feedback](/AbInitio/Authoring_quick_start_3.md) in the quick start guide.
The potential response tree is the algorithm which establishes the mathematical properties of the student's answer and assigns outcomes. For examples of how to use this, see the entry on [improving feedback](../AbInitio/Authoring_quick_start_3.md) in the quick start guide.

## When is the tree used? ##

Expand Down
2 changes: 1 addition & 1 deletion doc/en/Authoring/Sample_questions.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ This question creates two random matrices and asks students to multiply them tog

Given a complex number \(z=ae^{ib}\) determine \(|z^{n}|\) and \(\arg(z^{n})\). Where \(a\), \(b\) and \(n\) are randomly generated numbers.

See the [authoring quick start 7](/AbInitio/Authoring_quick_start_7.md).
See the [authoring quick start 7](../AbInitio/Authoring_quick_start_7.md).

### `test_5_cubic-spline` ###

Expand Down
2 changes: 1 addition & 1 deletion doc/en/Authoring/Tidy_Tool.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
g## Tidy Tool
# Tidy Tool

STACK potential response trees, and other parts of questions, can easily get messy. You may have one long question and delete some inputs, or duplicate a question and use it as a template but have to heavily edit it. Another example is to add nodes in an existing PRT and place these nodes between existing nodes. The numbering won't be in order and it will make it harder to follow the PRT logic.

Expand Down
Loading

0 comments on commit d6e78a0

Please sign in to comment.