Difference between revisions of "Sage in WeBWorK"

From WeBWorK_wiki
Jump to navigation Jump to search
Line 76: Line 76:
 
To pass perl variables to the sage block if you need to from the problem initialization use:
 
To pass perl variables to the sage block if you need to from the problem initialization use:
   
:: TEXT(<<EOF); [[ Details on how to pass variables in to be added later ... under construction ]]
 
  +
:: TEXT(<<
   
where <<EOF allows interpolation
 
  +
SAGE_CODE
  +
  +
); [[ Details on how to pass variables in to be added later ... under construction ]]
  +
  +
where << SAGE_CODE allows interpolation
   
 
otherwise use:
 
otherwise use:
   
:: TEXT(<<'EOF');
+
:: TEXT(<<'
  +
  +
SAGE_CODE
  +
  +
');
   
where 'EOF' tells perl not to interpolate variables
+
where 'SAGE_CODE' tells perl not to interpolate variables
 
[[Category:Developers]]
 
[[Category:Developers]]

Revision as of 20:52, 4 January 2012

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:5467

## 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="text/code">

# Example Sage Python

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

# End of Sage code - Start of scripts that call the Sage single-cell server

</script></div>

   <script type="text/javascript" src="http://sagemath.org:5467/static/jquery-1.5.min.js"></script>
   <script type="text/javascript" src="http://sagemath.org:5467/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_CODE

# 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();       

 

To pass perl variables to the sage block if you need to from the problem initialization use:

TEXT(<<

SAGE_CODE

); Details on how to pass variables in to be added later ... under construction

where << SAGE_CODE allows interpolation

otherwise use:

TEXT(<<'

SAGE_CODE

');

where 'SAGE_CODE' tells perl not to interpolate variables