Difference between revisions of "AskSage"
Geoff Goehle (talk | contribs) |
m (Insert link to Sage_Embedding page) |
||
(6 intermediate revisions by 3 users not shown) | |||
Line 7: | Line 7: | ||
<p style="background-color:#f9f9f9;border:black solid 1px;padding:3px;"> |
<p style="background-color:#f9f9f9;border:black solid 1px;padding:3px;"> |
||
− | This PG code shows how to embed a call to the Sage Cell Server from within a problem. |
+ | This PG code shows how to embed a call to the Sage Cell Server from within a problem. See [[Sage Embedding]] for including Sage graphics and interactive components. |
</p> |
</p> |
||
Line 27: | Line 27: | ||
<pre> |
<pre> |
||
+ | DOCUMENT(); |
||
loadMacros( |
loadMacros( |
||
"PGstandard.pl", |
"PGstandard.pl", |
||
Line 36: | Line 37: | ||
<td style="background-color:#ccffcc;padding:7px;"> |
<td style="background-color:#ccffcc;padding:7px;"> |
||
− | <p> No additional macros are needed to use the <code>AskSage()</code> function |
+ | <p> No additional macros are needed to use the <code>AskSage()</code> function. Works in WeBWorK version 2.12, possibly also in earlier versions. |
</p> |
</p> |
||
</td> |
</td> |
||
Line 70: | Line 71: | ||
$SageCode1=<<END; |
$SageCode1=<<END; |
||
− | print |
+ | print(random_matrix(QQ,$rows,$columns,algorithm='echelonizable',rank=$rank).rows()) |
END |
END |
||
− | $SageCode2 =<<END; |
||
+ | |||
− | print matrix(QQ,$sageReply1).rref().rows() |
||
− | END |
||
</pre> |
</pre> |
||
Line 96: | Line 95: | ||
<td style="background-color:#ffdddd;border:black 1px dashed;"> |
<td style="background-color:#ffdddd;border:black 1px dashed;"> |
||
<pre> |
<pre> |
||
− | $sageReply1 = AskSage($SageCode1,{ |
+ | $sageReply1 = AskSage($SageCode1,{accepted_tos=>true,seed=>$problemSeed}); |
$M = Matrix($sageReply1); |
$M = Matrix($sageReply1); |
||
− | $sageReply2 = AskSage($SageCode2,{accept_tos=>true}); |
||
+ | if (sageReturnedFail($sageReply1) ) { |
||
+ | $sageReply1 = "[1]"; # default value for $M; |
||
+ | } |
||
+ | |||
+ | $SageCode2 =<<END; |
||
+ | print( matrix(QQ,$sageReply1).rref().rows() ) |
||
+ | END |
||
+ | |||
+ | $sageReply2 = AskSage($SageCode2,{accepted_tos=>true}); |
||
+ | |||
+ | if (sageReturnedFail($sageReply2) ) { |
||
+ | $sageReply2 = "[5]"; # default value for $ans; |
||
+ | } |
||
+ | |||
$ans = Matrix($sageReply2); |
$ans = Matrix($sageReply2); |
||
+ | |||
</pre> |
</pre> |
||
Line 114: | Line 127: | ||
</p> |
</p> |
||
<p> |
<p> |
||
− | Notice that we convert sage's replies to a MathObjects so that we can take advantage of WeBWorK's built in answer checking, display |
+ | Notice that we convert sage's replies to a MathObjects so that we can take advantage of WeBWorK's built in answer checking, display capabilities, etc. |
</p> |
</p> |
||
+ | The <code>sageReturnedFail($sageReply)</code> function is true if Sage was unable to process the script and returned a notification of failure in its |
||
+ | reply otherwise it is false. Using this with the <code>if</code> statement allows you to insert a dummy value for <code>$sageReply</code> to suppress further error messages if the |
||
+ | sage script fails. In this case we supplied a one by one matrix. It also would allow you to print a more informative error message. |
||
</td> |
</td> |
||
</tr> |
</tr> |
Latest revision as of 17:13, 16 September 2021
Using the Sage Cell Server
This PG code shows how to embed a call to the Sage Cell Server from within a problem. See Sage Embedding for including Sage graphics and interactive components.
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", ); |
No additional macros are needed to use the |
############################################### ## ## 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 |
$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 |
$sageReply1 = AskSage($SageCode1,{accepted_tos=>true,seed=>$problemSeed}); $M = Matrix($sageReply1); if (sageReturnedFail($sageReply1) ) { $sageReply1 = "[1]"; # default value for $M; } $SageCode2 =<<END; print( matrix(QQ,$sageReply1).rref().rows() ) END $sageReply2 = AskSage($SageCode2,{accepted_tos=>true}); if (sageReturnedFail($sageReply2) ) { $sageReply2 = "[5]"; # default value for $ans; } $ans = Matrix($sageReply2); |
Calling
The first argument to AskSage() must be sage code. After that, you must send your acceptance of the Sage Cell Terms of Service. Please do read the Sage Cell TOS and think about it quietly for a moment before proceeding. If you accept the TOS, you may also optionally send along with your acceptance a Notice that we convert sage's replies to a MathObjects so that we can take advantage of WeBWorK's built in answer checking, display capabilities, etc. The |
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. |