Difference between revisions of "Sage in WeBWorK"

From WeBWorK_wiki
Jump to navigation Jump to search
 
(40 intermediate revisions by 3 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
+
For use within WebWork, a special "single-cell" version of Sage is located at http://sagecell.sagemath.org
  +
<nowiki>
  +
## Template for calling Sage from within a WebWork pg file
   
## First Homework Problem File for
 
  +
## BEGIN_DESCRIPTION
## Calculus
 
  +
## Sample problem embedding Sage in WW
## Partial Derivatives
 
  +
## END_DESCRIPTION
## Unit 1
 
##
 
   
 
DOCUMENT();
 
DOCUMENT();
Line 13: Line 11:
 
loadMacros(
 
loadMacros(
 
"PGstandard.pl",
 
"PGstandard.pl",
"PGchoicemacros.pl",
 
 
"MathObjects.pl",
 
"MathObjects.pl",
  +
"sage.pl"
 
);
 
);
 
Context()->strings->add(none=>{});
 
   
 
TEXT(beginproblem());
 
TEXT(beginproblem());
   
$x0 = non_zero_random(-2,2,1);
 
  +
Context("Numeric");
$y0 = non_zero_random(-2,2,1);
 
   
$f0 = ($x0**3-$y0**3)/($x0**2+$y0**2+1);
 
  +
####### Answers to check by WeBWorK go in the list below.
   
TEXT(<<EOF);
 
  +
$ansList = List("(pi)");
<div id="singlecell-test"><script type="text/code">
 
   
  +
####### Possible Upper WeBWorK text
   
######### Sage code pasted starting here ##########
 
  +
Context()->texStrings;
  +
BEGIN_TEXT
   
var('x,y,t,s')
 
  +
This is where WeBWorK problem text above the sage cell goes.
   
#
 
  +
END_TEXT
  +
Context()->normalStrings;
   
M=x*y
 
  +
#### Sage Cell Server
N=-y
 
  +
#### Paste your code below fixing @ and $
 
  +
#### Store any answers to send back as a list using the function below.
@interact(layout=dict(left= [['x0'],['y0'],['delx'],['dely']],
 
  +
#### making certain that is tabbed over correctly
bottom=[['xx'],['yy']]))
 
def _( x0 = input_box(0,width=5,label='$x_0$'),
 
y0 = input_box(0,width=5,label='$y_0$'),
 
delx = input_box(1,width=5,label='$\Delta{x}$'),
 
dely = input_box(1,width=5,label='$\Delta{y}$'),
 
xx = range_slider(-5, 5, 1, default=(-2,2), label='x Range'),
 
yy = range_slider(-5, 5, 1, default=(-1,3), label='y Range')):
 
 
G = plot_vector_field((M,N),(x,xx[0],xx[1]),(y,yy[0],yy[1]),aspect_ratio=true)
 
G += arrow((x0,y0),(x0+delx,y0+dely))
 
show(G)
 
   
  +
$SageCode = <<SAGE_CODE;
   
############## End of Sage Code ######################
 
  +
var('a')
  +
a = pi
  +
record_answer((a))
   
  +
SAGE_CODE
   
</script></div>
 
  +
Sage(
  +
SageCode=>$SageCode,
  +
AutoEvaluateCell=>'true'
  +
);
   
<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">
 
  +
####### WeBWorK text display following the Sage cell
$(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>
 
EOF
 
 
############### Below is the normal WebWork pg stuff #####################
 
   
 
Context()->texStrings;
 
Context()->texStrings;
 
BEGIN_TEXT
 
BEGIN_TEXT
Using the contour plot below, determine the range value of the illustrated function at \( ($x0,$y0) \).
 
$BR $BR
 
\( f($x0,$y0) = \)\{ ans_rule(15) \}
 
$PAR
 
END_TEXT
 
Context()->normalStrings;
 
   
  +
When you are comfortable with the coefficients that you have chosen, press
  +
the submit button below.
   
# need to add reasonable approximation error of about 0.1 or so.
 
  +
END_TEXT
ANS( Compute($f0)->cmp() );
 
  +
Context()->normalStrings;
   
  +
######### Answer Evaluation
   
  +
$showPartialCorrectAnswers = 1;
  +
NAMED_ANS( sageAnswer => $ansList->cmp );
   
 
ENDDOCUMENT(); # This should be the last executable line in the problem.
 
ENDDOCUMENT(); # This should be the last executable line in the problem.
+
  +
</nowiki>
   
  +
The example shows how to pass perl variables from the problem initialization into the sage block.
   
To pass perl variables to the sage block if you need to from the problem initialization use:
 
  +
:: TEXT(<<SAGE_CODE);
   
:: TEXT(<<EOF);
 
  +
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
   
where <<EOF allows interpolation
 
  +
If you are not passing any variables, use:
   
otherwise use:
 
  +
:: TEXT(<<'SAGE_CODE');
   
:: TEXT(<<'EOF');
 
  +
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.
   
where 'EOF' tells perl not to interpolate variables
 
  +
== See Also ==
  +
* [[Sage Embedding]]
   
15:17aubreyja_yes
 
  +
[[Category:Developers]]

Latest revision as of 11: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.

See Also