# AskSage

Jump to: navigation, search

## Using the Sage Cell Server

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

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,\$sageReply1).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.

```\$sageReply1 = AskSage(\$SageCode1,{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.