Difference between revisions of "Sage in WeBWorK"
(10 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
Sage is an open source, online symbolic mathematical system. Details on Sage can be found at http://www.sagemath.org . |
Sage is an open source, online symbolic mathematical system. Details on Sage can be found at http://www.sagemath.org . |
||
− | For use within WebWork, a special "single-cell" version of Sage is located at http://sagemath.org |
+ | For use within WebWork, a special "single-cell" version of Sage is located at http://sagecell.sagemath.org |
<nowiki> |
<nowiki> |
||
## Template for calling Sage from within a WebWork pg file |
## Template for calling Sage from within a WebWork pg file |
||
+ | |||
+ | ## BEGIN_DESCRIPTION |
||
+ | ## Sample problem embedding Sage in WW |
||
+ | ## END_DESCRIPTION |
||
DOCUMENT(); |
DOCUMENT(); |
||
Line 9: | Line 13: | ||
loadMacros( |
loadMacros( |
||
"PGstandard.pl", |
"PGstandard.pl", |
||
− | "PGchoicemacros.pl", |
||
"MathObjects.pl", |
"MathObjects.pl", |
||
+ | "sage.pl" |
||
); |
); |
||
TEXT(beginproblem()); |
TEXT(beginproblem()); |
||
− | # Regular WebWork setup |
||
+ | Context("Numeric"); |
||
− | $funct = Compute("x**4"); |
||
+ | ####### Answers to check by WeBWorK go in the list below. |
||
− | $funct_diff = $funct->D('x'); |
||
− | TEXT(<<SAGE_CODE); |
||
+ | $ansList = List("(pi)"); |
||
− | <div id="singlecell-test"> |
||
− | <script type="text/code"> |
||
− | var('x') |
||
+ | ####### Possible Upper WeBWorK text |
||
− | ~~@interact |
||
− | def _(f = ($funct)): |
||
− | df = diff(f,x,1) |
||
− | html('\( f \prime (x) = %s \)'%str(latex(df)) ) |
||
− | </script> |
||
+ | Context()->texStrings; |
||
− | </div> |
||
+ | BEGIN_TEXT |
||
− | SAGE_CODE |
||
+ | This is where WeBWorK problem text above the sage cell goes. |
||
− | TEXT(<<'SAGE_SCRIPT'); |
||
+ | END_TEXT |
||
+ | Context()->normalStrings; |
||
− | <script type="text/javascript" src="http://sagemath.org:5467/static/jquery-1.5.min.js"></script> |
||
+ | #### Sage Cell Server |
||
− | <script type="text/javascript" src="http://sagemath.org:5467/embedded_singlecell.js"></script> |
||
+ | #### Paste your code below fixing @ and $ |
||
− | <script type="text/javascript"> |
||
+ | #### Store any answers to send back as a list using the function below. |
||
+ | #### making certain that is tabbed over correctly |
||
− | $(function() { // load only when the page is loaded |
||
+ | $SageCode = <<SAGE_CODE; |
||
− | var makecells = function() { |
||
− | singlecell.makeSinglecell({ |
||
− | inputLocation: "#singlecell-test", |
||
− | editor: "codemirror", |
||
− | hide: ["editor","computationID","files","messages","sageMode"], |
||
− | evalButtonText: "Start/Restart", |
||
− | replaceOutput: true}); |
||
− | } |
||
− | singlecell.init(makecells); // load Single Cell libraries and then |
||
+ | var('a') |
||
− | // initialize Single Cell instances |
||
+ | a = pi |
||
+ | record_answer((a)) |
||
− | }); |
||
+ | SAGE_CODE |
||
− | </script> |
||
− | SAGE_SCRIPT |
||
+ | Sage( |
||
− | # Continue pg file as normal |
||
+ | SageCode=>$SageCode, |
||
+ | AutoEvaluateCell=>'true' |
||
+ | ); |
||
+ | |||
+ | ####### WeBWorK text display following the Sage cell |
||
+ | |||
+ | Context()->texStrings; |
||
BEGIN_TEXT |
BEGIN_TEXT |
||
− | $PAR |
||
− | Using Sage above, determine the derivative of \[ f(x) = $funct \]. |
||
− | $PAR |
||
− | \(f '(x) = \) \{ ans_rule(20) \} |
||
− | END_TEXT |
||
+ | When you are comfortable with the coefficients that you have chosen, press |
||
+ | the submit button below. |
||
+ | |||
+ | END_TEXT |
||
Context()->normalStrings; |
Context()->normalStrings; |
||
− | ANS($funct_diff->cmp() ); |
||
+ | ######### Answer Evaluation |
||
+ | $showPartialCorrectAnswers = 1; |
||
+ | NAMED_ANS( sageAnswer => $ansList->cmp ); |
||
− | ENDDOCUMENT(); |
+ | ENDDOCUMENT(); # This should be the last executable line in the problem. |
− | + | ||
− | |||
</nowiki> |
</nowiki> |
||
− | + | The example shows how to pass perl variables from the problem initialization into the sage block. |
|
:: TEXT(<<SAGE_CODE); |
:: TEXT(<<SAGE_CODE); |
||
− | where << SAGE_CODE without single quotes allows interpolation. |
||
+ | where << SAGE_CODE without single quotes is necessary. However, the Sage code will not execute if no variables are actually passed in. Since $ and @ within the Sage code are now interpreted by perl, all latex delimiters should be converted from $ signs to \ ( and \ ) pairs. Additionally, any @interact needs to be escaped and written as ~~@interact |
||
− | This will not work correctly if no variables are actually passed in. Since perl variables within the Sage code are now interpreted as perl variables, all latex delimiters need to be converted from $ signs to \( and \) pairs. |
||
− | Also, any @interact needs to be escaped and written as ~~@interact |
||
− | If you are not passing any variables |
+ | If you are not passing any variables, use: |
:: TEXT(<<'SAGE_CODE'); |
:: TEXT(<<'SAGE_CODE'); |
||
− | where <<'SAGE_CODE' tells perl not to interpret variables. |
+ | where <<'SAGE_CODE' tells perl not to interpret variables. Sage code can then be pasted in verbatim without any need to convert formatting or escaping other characters. |
+ | |||
+ | == See Also == |
||
+ | * [[Sage Embedding]] |
||
+ | |||
[[Category:Developers]] |
[[Category:Developers]] |
Latest revision as of 10:42, 24 June 2013
Sage is an open source, online symbolic mathematical system. Details on Sage can be found at http://www.sagemath.org .
For use within WebWork, a special "single-cell" version of Sage is located at http://sagecell.sagemath.org
## Template for calling Sage from within a WebWork pg file ## BEGIN_DESCRIPTION ## Sample problem embedding Sage in WW ## END_DESCRIPTION DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "sage.pl" ); TEXT(beginproblem()); Context("Numeric"); ####### Answers to check by WeBWorK go in the list below. $ansList = List("(pi)"); ####### Possible Upper WeBWorK text Context()->texStrings; BEGIN_TEXT This is where WeBWorK problem text above the sage cell goes. END_TEXT Context()->normalStrings; #### Sage Cell Server #### Paste your code below fixing @ and $ #### Store any answers to send back as a list using the function below. #### making certain that is tabbed over correctly $SageCode = <<SAGE_CODE; var('a') a = pi record_answer((a)) SAGE_CODE Sage( SageCode=>$SageCode, AutoEvaluateCell=>'true' ); ####### WeBWorK text display following the Sage cell Context()->texStrings; BEGIN_TEXT When you are comfortable with the coefficients that you have chosen, press the submit button below. END_TEXT Context()->normalStrings; ######### Answer Evaluation $showPartialCorrectAnswers = 1; NAMED_ANS( sageAnswer => $ansList->cmp ); ENDDOCUMENT(); # This should be the last executable line in the problem.
The example shows how to pass perl variables from the problem initialization into the sage block.
- TEXT(<<SAGE_CODE);
where << SAGE_CODE without single quotes is necessary. However, the Sage code will not execute if no variables are actually passed in. Since $ and @ within the Sage code are now interpreted by perl, all latex delimiters should be converted from $ signs to \ ( and \ ) pairs. Additionally, any @interact needs to be escaped and written as ~~@interact
If you are not passing any variables, use:
- TEXT(<<'SAGE_CODE');
where <<'SAGE_CODE' tells perl not to interpret variables. Sage code can then be pasted in verbatim without any need to convert formatting or escaping other characters.