Sage in WeBWorK

From WeBWorK_wiki
Revision as of 10:10, 15 June 2012 by Malcolm (talk | contribs) (Update sage cell server address and sage cell server script language)
Jump to navigation Jump to search

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://aleph.sagemath.org

## Template for calling Sage from within a WebWork pg file

DOCUMENT();

loadMacros(
"PGstandard.pl",
"PGchoicemacros.pl",
"MathObjects.pl",
);

TEXT(beginproblem());

# Regular WebWork setup

$funct  = Compute("x**4");
$funct_diff = $funct->D('x');

TEXT(<<SAGE_CODE);
<div id="singlecell-test">
<script type="application/sage">

var('x')
~~@interact
def _(f = ($funct)):
    df = diff(f,x,1)
    html('\( f \prime (x) = %s \)'%str(latex(df)) )

</script>
</div>

SAGE_CODE

TEXT(<<'SAGE_SCRIPT');

<script type="text/javascript" src="http://aleph.sagemath.org/static/jquery-1.5.min.js"></script>
<script type="text/javascript" src="http://aleph.sagemath.org/embedded_singlecell.js"></script>
<script type="text/javascript">

$(function() { // load only when the page is loaded
  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
                              // initialize Single Cell instances
  });
</script>

SAGE_SCRIPT
# Continue pg file as normal

BEGIN_TEXT
$PAR
Using Sage above, determine the derivative of \[ f(x) = $funct \].
$PAR
\(f '(x) = \) \{ ans_rule(20) \}
END_TEXT

Context()->normalStrings;

ANS($funct_diff->cmp() );

ENDDOCUMENT();       
 

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.