AskSage

From WeBWorK_wiki
Revision as of 11:06, 21 June 2013 by Aubreyja (talk | contribs) (Created page with "<h2>Using the Sage Cell Server</h2> <!-- Header for these sections -- no modification needed --> <!-- 300px|thumb|right|Click to enlarge --> ...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Using the Sage Cell Server


This PG code shows how to embed a call to the Sage Cell Server from within a problem.

Problem Techniques Index

PG problem file Explanation
loadMacros(
  "PGstandard.pl",
  "MathObjects.pl",
);

No additional macros are needed to use the AskSage() function, but as of now it is part of the development version of pg and not part of the current WeBWorK release.

###############################################
##
##  pg initializations and regular WeBWorK code


Context("Matrix");

my $rows = random(3,4);
my $columns = random(4,5);
my $rank = random(2,3);

The WeBWorK set up for the problem is the same.


$SageCode1=<<END;
print random_matrix(QQ,$rows,$columns,algorithm='echelonizable',rank=$rank).rows()
END


$SageCode2 =<<END;
print matrix(QQ,$sageReply).rref().rows()
END

$SageCode = <<END;

denotes the beginning of a block of Sage python code. This will be paired at the end with and ending END which must be left-justified. This portion will create a perl scalar variable $SageCode which contains the sage code.

$sageReply = AskSage($SageCode,{seed=>$problemSeed});
$M = Matrix($sageReply);

$sageReply2 = AskSage($SageCode2);
$ans = Matrix($sageReply2);

Calling AskSage():

The first argument to AskSage() must be sage code. After that, you may optionally send a seed value to sage's set_random_seed() function and/or send a url pointing to a sage cell web-service handler. If no url is sent, then AskSage() uses as a default url => 'https://sagecell.sagemath.org/service'.

Notice that we convert sage's replies to a MathObjects so that we can take advantage of WeBWorK's built in answer checking, display capbilities, etc.

Context()->texStrings;
BEGIN_TEXT

Row reduce \( $M \) $BR
\{ $ans->ans_array\}
END_TEXT
Context()->normalStrings;
ANS($ans->cmp());
ENDDOCUMENT();

Now we display the problem and check the answer as in a typical WeBWorK problem.

Templates by Subject Area


Problem Techniques Index