(* Content-type: application/mathematica *)

(*** Wolfram Notebook File ***)
(* http://www.wolfram.com/nb *)

(* CreatedBy='Mathematica 7.0' *)

(*CacheID: 234*)
(* Internal cache information:
NotebookFileLineBreakTest
NotebookFileLineBreakTest
NotebookDataPosition[       145,          7]
NotebookDataLength[     44547,       1205]
NotebookOptionsPosition[     40403,       1080]
NotebookOutlinePosition[     41158,       1106]
CellTagsIndexPosition[     41115,       1103]
WindowFrame->Normal*)

(* Beginning of Notebook Content *)
Notebook[{
Cell[TextData[StyleBox["In this example we use the package IntroToSymmetry.m \
to work out the point group of the nonlinear Schr\[ODoubleDot]edinger \
equation\n\niWt+Wxx+W*Abs[W^2]=0. \n \nwhere i=Sqrt[-1]. This equation \
describes weakly nonlinear behavior in a wide variety of physical systems \
from light propagation to water waves. It is convenient to treat the two \
equations for the real and imaginary parts of W. Let \n\n\
W[x,t]=U[x,t]+iV[x,t].\n\nSo we consider\n\nUt+Vxx+V*U^2+V^3=0,\n\
Vt-Uxx-U^3-U*V^2=0.",
 FontSize->18,
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}},
 FontSize->14],

Cell["Clear all symbols in the current context.", "Text",
 CellChangeTimes->{{3.4715644485587473`*^9, 3.47156448605101*^9}}],

Cell[BoxData[
 RowBox[{"ClearAll", "[", 
  RowBox[{"Evaluate", "[", 
   RowBox[{
    RowBox[{"Context", "[", "]"}], "<>", "\"\<*\>\""}], "]"}], "]"}]], "Input"],

Cell[TextData[{
 StyleBox["First read in the package which is located in User Home \
Folder/Library/",
  FontWeight->"Plain"],
 StyleBox["Mathematica",
  FontWeight->"Plain",
  FontSlant->"Italic"],
 StyleBox["/Applications/SymmetryAnalysis.",
  FontWeight->"Plain"]
}], "Text",
 CellChangeTimes->{{3.472046215957556*^9, 3.472046255573135*^9}, {
  3.472046289795615*^9, 3.472046308115048*^9}, {3.4720466725423717`*^9, 
  3.472046673357225*^9}},
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["Needs[\"SymmetryAnalysis`IntroToSymmetry`\"]", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[TextData[StyleBox["Enter the list of independent variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"independentvariables", "=", 
   RowBox[{"{", 
    RowBox[{"\"\<x\>\"", ",", "\"\<y\>\""}], "}"}]}], ";"}]], "Input"],

Cell[TextData[StyleBox["Enter the list of dependent variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"dependentvariables", "=", 
   RowBox[{"{", 
    RowBox[{"\"\<u\>\"", ",", "\"\<v\>\""}], "}"}]}], ";"}]], "Input"],

Cell[TextData[StyleBox["Enter the list of function and/or constant names that \
need to be preserved when the equations are expressed in terms of generic \
variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"frozennames", "=", 
   RowBox[{"{", "}"}]}], ";"}]], "Input"],

Cell[TextData[StyleBox["Enter the maximum derivative order of the \ninput \
equation(s).",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"p", "=", "2"}], ";"}]], "Input"],

Cell[TextData[StyleBox["The maximum derivative order that the infinitesimals \
are assumed to depend on is specified by the input parameter r. This \
parameter is only nonzero when the user is looking for Lie contact groups or \
Lie-Backlund groups. For the usual case where one is searching for point \
groups set r=0.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"r", "=", "0"}], ";"}]], "Input"],

Cell[TextData[StyleBox["When searching for Lie-Backlund groups ie. r=1 or \
greater one can, without loss of generality, leave the independent variables \
untransformed. The corresponding infinitesimals (the xse's) are set to zero \
by setting xseon=0. If one is searching for point groups then set xseon=1. \
The choice xseon=1 is also an option when looking for Lie-Backlund groups and \
this can be useful when looking for contact symmetries.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"xseon", "=", "1"}], ";"}]], "Input"],

Cell[TextData[StyleBox["When searching for Lie-Backlund groups it is \
necessary to differentiate the input equations with respect to all \
independent variables producing derivatives of order p+r. \nThese higher \
order differential consequences are appended to the set of rules applied to \
the invariance condition. This process is carried out automatically when \
internalrules=1. For point groups the equation or equation system is the only \
rule or set of rules needed and one sets internalrules=0.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"internalrules", "=", "0"}], ";"}]], "Input"],

Cell["\<\
Construct the array of rules to be applied to the invariance condition.\
\>", "Text"],

Cell["\<\
rulesarray=
{\"D[u[x,y],y]->-D[v[x,y],x,x]-u[x,y]^2*v[x,y]-v[x,y]^3\",
\"D[v[x,y],y]->D[u[x,y],x,x]+u[x,y]^3+u[x,y]*v[x,y]^2\"};\
\>", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["\<\
Enter the momentum equation as a string. The variables are as follows\
\>", "Text"],

Cell["\<\
inputequation1=
\"D[u[x,y],y]+D[v[x,y],x,x]+u[x,y]^2*v[x,y]+v[x,y]^3\";\
\>", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["\<\
Enter the pressure equation as a string. The variables are as follows\
\>", "Text"],

Cell["\<\
inputequation2=
\"D[v[x,y],y]-D[u[x,y],x,x]-u[x,y]^3-u[x,y]*v[x,y]^2\";\
\>", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["\<\
Now work out the determining equations of the Lie point group which leaves \
equation1 invariant.  The Mathematica function Timing outputs the time \
required for the FindDeterminingEquations function to execute.\
\>", "Text"],

Cell[CellGroupData[{

Cell["\<\
Timing[FindDeterminingEquations[
independentvariables,dependentvariables,frozennames,p,r,xseon,
inputequation1,rulesarray,internalrules]]\
\>", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 InterpretationBox["\<\"The function FindDetermining Equations has begun, the \
memory in use = \\!\\(58020888\\), the time used = \\!\\(248.071502`\\)\"\>",
  StringForm[
  "The function FindDetermining Equations has begun, the memory in use = ``, \
the time used = ``", 58020888, 248.071502],
  Editable->False]], "Print",
 CellChangeTimes->{3.469473014861601*^9, 3.471566767346225*^9, 
  3.4837482142127323`*^9}],

Cell[BoxData["\<\"The function FindDeterminingEquations is nearly complete. \
The invariance condition has been created with all rules applied. The final \
step in the generation of the determining equations is to sum together terms \
in the table of invariance condition terms (called infinitesimaltable) that \
are multiplied by the same combination of products of free y derivatives. The \
result is the table infinitesimaltablesums corresponding to matching \
y-derivative expressions. If the invariance condition is long as it often is \
this process could take a long time since it requires sorting through the \
table infinitesimaltable once for each possible combination of y derivative \
products. This is the rate limiting step in the function \
FindDeterminingEquations.Virtually all other steps are quite fast including \
the generation of the extended derivatives of the infinitesimals.\"\>"], \
"Print",
 CellChangeTimes->{3.469473014861601*^9, 3.471566767346225*^9, 
  3.4837482143077793`*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The determining equations have been expressed in \
terms of z-variables, the length of zdeterminingequations = \\!\\(22\\), the \
byte count of zdeterminingequations = \\!\\(4640\\), the memory in use = \
\\!\\(53264184\\), the time used = \\!\\(248.219443`\\)\"\>",
  StringForm[
  "The determining equations have been expressed in terms of z-variables, the \
length of zdeterminingequations = ``, the byte count of zdeterminingequations \
= ``, the memory in use = ``, the time used = ``", 22, 4640, 53264184, 
   248.219443],
  Editable->False]], "Print",
 CellChangeTimes->{3.469473014861601*^9, 3.471566767346225*^9, 
  3.483748214337586*^9}],

Cell[BoxData[
 InterpretationBox["\<\"FindDeterminingEquations is done. The memory in use = \
\\!\\(53265592\\), the time used = \\!\\(248.219723`\\)\"\>",
  StringForm[
  "FindDeterminingEquations is done. The memory in use = ``, the time used = \
``", 53265592, 248.219723],
  Editable->False]], "Print",
 CellChangeTimes->{3.469473014861601*^9, 3.471566767346225*^9, 
  3.483748214338667*^9}],

Cell[BoxData["\<\"FindDeterminingEquations has finished executing. You can \
look at the output in the table zdeterminingequations. Each entry in this \
table is a determining equation in string format expressed in terms of \
z-variables. Rules for converting between z-variables and conventional \
variables are contained in the table ztableofrules. To view the determining \
equations in terms of conventional variables use the command \
ToExpression[zdeterminingequations]/.ztableofrules. There are two other items \
the user may wish to look at; the equation converted to generic \
(x1,x2,...,y1,y2,...) variables is designated equationgenericvariables and \
the various derivatives of the equation that appear in the invariance \
condition can be viewed in the table invarconditiontable. Rules for \
converting between z-variables and generic variables are contained in the \
table ztableofrulesxy.\"\>"], "Print",
 CellChangeTimes->{3.469473014861601*^9, 3.471566767346225*^9, 
  3.48374821433951*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0.14902299999999968`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.4694730150221853`*^9, 3.4715667674879*^9, 
  3.483748214341104*^9}]
}, Open  ]],

Cell["The determining equations of equation1.", "Text"],

Cell["zdeterminingequations1=zdeterminingequations;", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["\<\
Now work out the determining equations of the Lie point group which leaves \
equation2 invariant.\
\>", "Text"],

Cell[CellGroupData[{

Cell["\<\
Timing[FindDeterminingEquations[
independentvariables,dependentvariables,frozennames,p,r,xseon,
inputequation2,rulesarray,internalrules]]\
\>", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 InterpretationBox["\<\"The function FindDetermining Equations has begun, the \
memory in use = \\!\\(53207584\\), the time used = \
\\!\\(248.22142000000002`\\)\"\>",
  StringForm[
  "The function FindDetermining Equations has begun, the memory in use = ``, \
the time used = ``", 53207584, 248.22142000000002`],
  Editable->False]], "Print",
 CellChangeTimes->{3.46947301507871*^9, 3.471566767544669*^9, 
  3.483748214396492*^9}],

Cell[BoxData["\<\"The function FindDeterminingEquations is nearly complete. \
The invariance condition has been created with all rules applied. The final \
step in the generation of the determining equations is to sum together terms \
in the table of invariance condition terms (called infinitesimaltable) that \
are multiplied by the same combination of products of free y derivatives. The \
result is the table infinitesimaltablesums corresponding to matching \
y-derivative expressions. If the invariance condition is long as it often is \
this process could take a long time since it requires sorting through the \
table infinitesimaltable once for each possible combination of y derivative \
products. This is the rate limiting step in the function \
FindDeterminingEquations.Virtually all other steps are quite fast including \
the generation of the extended derivatives of the infinitesimals.\"\>"], \
"Print",
 CellChangeTimes->{3.46947301507871*^9, 3.471566767544669*^9, 
  3.483748214498567*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The determining equations have been expressed in \
terms of z-variables, the length of zdeterminingequations = \\!\\(22\\), the \
byte count of zdeterminingequations = \\!\\(4640\\), the memory in use = \
\\!\\(53258360\\), the time used = \\!\\(248.364991`\\)\"\>",
  StringForm[
  "The determining equations have been expressed in terms of z-variables, the \
length of zdeterminingequations = ``, the byte count of zdeterminingequations \
= ``, the memory in use = ``, the time used = ``", 22, 4640, 53258360, 
   248.364991],
  Editable->False]], "Print",
 CellChangeTimes->{3.46947301507871*^9, 3.471566767544669*^9, 
  3.4837482145341043`*^9}],

Cell[BoxData[
 InterpretationBox["\<\"FindDeterminingEquations is done. The memory in use = \
\\!\\(53259096\\), the time used = \\!\\(248.36526700000002`\\)\"\>",
  StringForm[
  "FindDeterminingEquations is done. The memory in use = ``, the time used = \
``", 53259096, 248.36526700000002`],
  Editable->False]], "Print",
 CellChangeTimes->{3.46947301507871*^9, 3.471566767544669*^9, 
  3.483748214535202*^9}],

Cell[BoxData["\<\"FindDeterminingEquations has finished executing. You can \
look at the output in the table zdeterminingequations. Each entry in this \
table is a determining equation in string format expressed in terms of \
z-variables. Rules for converting between z-variables and conventional \
variables are contained in the table ztableofrules. To view the determining \
equations in terms of conventional variables use the command \
ToExpression[zdeterminingequations]/.ztableofrules. There are two other items \
the user may wish to look at; the equation converted to generic \
(x1,x2,...,y1,y2,...) variables is designated equationgenericvariables and \
the various derivatives of the equation that appear in the invariance \
condition can be viewed in the table invarconditiontable. Rules for \
converting between z-variables and generic variables are contained in the \
table ztableofrulesxy.\"\>"], "Print",
 CellChangeTimes->{3.46947301507871*^9, 3.471566767544669*^9, 
  3.483748214536057*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0.14468500000003814`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.4694730152358913`*^9, 3.471566767708144*^9, 
  3.483748214537696*^9}]
}, Open  ]],

Cell["The determiningequations of equation2.", "Text"],

Cell["zdeterminingequations2=zdeterminingequations;", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["Now collect all the determining equations together.", "Text"],

Cell["\<\
zdeterminingequations3=
Join[zdeterminingequations1,
zdeterminingequations2];\
\>", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["How many determining equations are there altogether?", "Text"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Length", "[", "zdeterminingequations3", "]"}]], "Input"],

Cell[BoxData["44"], "Output",
 CellChangeTimes->{3.469473015346386*^9, 3.471566767812215*^9, 
  3.4837482146138477`*^9}]
}, Open  ]],

Cell["\<\
Now solve the determining equations in terms of multivariable polynomials. \
The Mathematica function Solve uses Gaussian elimination to solve a large \
number of linear equations for the polynomial coefficients. The time roughly \
follows

time/timeref=((number of equations)/(number of equationsref))^n

where the exponent is between 2.4 and 2.7. The Mathematica  function Timing \
outputs the time required for the SolveDeterminingEquations function to \
execute.\
\>", "Text"],

Cell[CellGroupData[{

Cell["\<\
Timing[SolveDeterminingEquations[
independentvariables,dependentvariables,r,xseon,zdeterminingequations3,order=\
3]]\
\>", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 InterpretationBox["\<\"The variable powertablelength is the number of terms \
required for each multivariate polynomial used for the infinitesimals. This \
number is determined by the choice of polynomial order and the number of \
zvariables. The time needed to solve the determining equations increases as \
powertable increases. powertablelength = \\!\\(35\\)\"\>",
  StringForm[
  "The variable powertablelength is the number of terms required for each \
multivariate polynomial used for the infinitesimals. This number is \
determined by the choice of polynomial order and the number of zvariables. \
The time needed to solve the determining equations increases as powertable \
increases. powertablelength = ``", 35],
  Editable->False]], "Print",
 CellChangeTimes->{3.469473015523747*^9, 3.4715667678498898`*^9, 
  3.483748214655592*^9}],

Cell[BoxData["\<\"The polynomial expansions have been substituted into the \
determining equations. It is now time to collect the coefficients of various \
powers of zvariables into a table called table of coefficientsall. This step \
uses the function CoefficientList and is a fairly time consuming procedure.\"\
\>"], "Print",
 CellChangeTimes->{3.469473015523747*^9, 3.4715667678498898`*^9, 
  3.4837482147432413`*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(53722536\\), The time = \\!\
\\(248.49417100000002`\\)\"\>",
  StringForm[
  "The memory in use = ``, The time = ``", 53722536, 248.49417100000002`],
  Editable->False]], "Print",
 CellChangeTimes->{3.469473015523747*^9, 3.4715667678498898`*^9, 
  3.483748214744372*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The number of unknown polynomial coefficients = \
\\!\\(140\\)\"\>",
  StringForm["The number of unknown polynomial coefficients = ``", 140],
  Editable->False]], "Print",
 CellChangeTimes->{3.469473015523747*^9, 3.4715667678498898`*^9, 
  3.483748214777603*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The number of equations for the polynomial \
coefficients = \\!\\(547\\)\"\>",
  StringForm[
  "The number of equations for the polynomial coefficients = ``", 547],
  Editable->False]], "Print",
 CellChangeTimes->{3.469473015523747*^9, 3.4715667678498898`*^9, 
  3.483748214778502*^9}],

Cell[BoxData["\<\"Now it we are ready to use the function Solve to find the \
nonzero polynomial coefficients corresponding to the symmetries of the input \
equation(s). This can take a while.\"\>"], "Print",
 CellChangeTimes->{3.469473015523747*^9, 3.4715667678498898`*^9, 
  3.4837482147793016`*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(48482024\\), The time = \\!\
\\(248.528113`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 48482024, 248.528113],
  Editable->False]], "Print",
 CellChangeTimes->{3.469473015523747*^9, 3.4715667678498898`*^9, 
  3.483748214780305*^9}],

Cell[BoxData["\<\"Solve has finished.\"\>"], "Print",
 CellChangeTimes->{3.469473015523747*^9, 3.4715667678498898`*^9, 
  3.483748214818853*^9}],

Cell[BoxData["\<\"The function SolveDeterminingEquations is finished \
executing.\"\>"], "Print",
 CellChangeTimes->{3.469473015523747*^9, 3.4715667678498898`*^9, 
  3.483748214820189*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(48425848\\), The time = \\!\
\\(248.544473`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 48425848, 248.544473],
  Editable->False]], "Print",
 CellChangeTimes->{3.469473015523747*^9, 3.4715667678498898`*^9, 
  3.483748214821335*^9}],

Cell[BoxData["\<\"You can look at the output in the tables xsefunctions and \
etafunctions. Each entry in these tables is an infinitesimal function in \
string format expressed in terms of z-variables and the group parameters. The \
output can also be viewed with the group parameters stripped away by looking \
at the table infinitesimalgroups. In either case you may wish to convert the \
z-variables to conventional variables using the table ztableofrules. \
\\n\\nKeep in mind that this function only finds solutions of the determining \
equations that are of polynomial form. The determining equations may admit \
solutions that involve transcendental functions and/or integrals. Note that \
arbitrary functions may appear in the infinitesimals and that these can be \
detected by running the package function SolveDeterminingEquations for \
several polynomial orders. If terms of ever increasing order appear, then an \
arbitrary function is indicated.\"\>"], "Print",
 CellChangeTimes->{3.469473015523747*^9, 3.4715667678498898`*^9, 
  3.483748214822456*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0.17854900000000384`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.4694730155548267`*^9, 3.471566768303936*^9, 
  3.4837482148247967`*^9}]
}, Open  ]],

Cell["\<\
Here are the infinitesimal transformation functions for the independent \
variables.\
\>", "Text"],

Cell[CellGroupData[{

Cell["xsefunctions", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"\<\"xse1[z1_, z2_, z3_, z4_]=a10 - b220*z1 + 2*b211*z2\"\>", 
   ",", "\<\"xse2[z1_, z2_, z3_, z4_]=a20 - 2*b220*z2\"\>"}], "}"}]], "Output",\

 CellChangeTimes->{3.4694730156648207`*^9, 3.4715667684469643`*^9, 
  3.483748214868608*^9}]
}, Open  ]],

Cell["and for the dependent variables.", "Text"],

Cell[CellGroupData[{

Cell["etafunctions", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"\<\"eta1[z1_, z2_, z3_, z4_]=b220*z3 - b210*z4 - b211*z1*z4\"\>", 
   ",", "\<\"eta2[z1_, z2_, z3_, z4_]=b210*z3 + b211*z1*z3 + b220*z4\"\>"}], 
  "}"}]], "Output",
 CellChangeTimes->{3.4694730157039137`*^9, 3.471566768497814*^9, 
  3.483748214997417*^9}]
}, Open  ]],

Cell[BoxData[
 RowBox[{
  RowBox[{"infinitesimalgroupsxy", "=", 
   RowBox[{"infinitesimalgroups", "/.", 
    RowBox[{"{", 
     RowBox[{
      RowBox[{"z1", "\[Rule]", "x"}], ",", 
      RowBox[{"z2", "\[Rule]", "t"}], ",", 
      RowBox[{"z3", "\[Rule]", "u"}], ",", 
      RowBox[{"z4", "\[Rule]", "v"}]}], "}"}]}]}], ";"}]], "Input"],

Cell["\<\
Check the groups. xse's are on the left, eta's are on the right.\
\>", "Text"],

Cell[BoxData[
 RowBox[{"Column", "[", "infinitesimalgroupsxy", "]"}]], "Input"],

Cell[BoxData[
 TagBox[GridBox[{
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{"1", ",", "0"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"0", ",", "0"}], "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{"0", ",", "1"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"0", ",", "0"}], "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{"0", ",", "0"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{
         RowBox[{"-", "v"}], ",", "u"}], "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{
         RowBox[{"2", " ", "t"}], ",", "0"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{
         RowBox[{
          RowBox[{"-", "v"}], " ", "x"}], ",", 
         RowBox[{"u", " ", "x"}]}], "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{
         RowBox[{"-", "x"}], ",", 
         RowBox[{
          RowBox[{"-", "2"}], " ", "t"}]}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"u", ",", "v"}], "}"}]}], "}"}]}
   },
   GridBoxAlignment->{"Columns" -> {{Left}}},
   GridBoxItemSize->{"Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}],
  "Column"]], "Output",
 CellChangeTimes->{3.4694730157818623`*^9, 3.47156676859687*^9, 
  3.483748215047871*^9}],

Cell["Check the infinitesimals in the determining equations.", "Text",
 CellChangeTimes->{{3.471145395559845*^9, 3.471145429404257*^9}}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Simplify", "[", 
  RowBox[{"ToExpression", "[", "zdeterminingequations", "]"}], "]"}]], "Input",\

 CellChangeTimes->{{3.471145481019026*^9, 3.4711455173104143`*^9}, 
   3.471146122753789*^9, {3.47154140257237*^9, 3.471541418863482*^9}, {
   3.4715667761993*^9, 3.4715667786858253`*^9}}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
  "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", 
   ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", 
   "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", 
   ",", "True", ",", "True", ",", "True", ",", "True", ",", "True"}], 
  "}"}]], "Output",
 CellChangeTimes->{{3.471566768668359*^9, 3.4715667796222754`*^9}, 
   3.4837482150884247`*^9}]
}, Open  ]],

Cell["\<\
This is the five-dimensional Lie algebra of the nonlinear \
Schr\[ODoubleDot]dinger equation. Create the commutator table.\
\>", "Text"],

Cell[BoxData[
 RowBox[{"MakeCommutatorTable", "[", "\[IndentingNewLine]", 
  RowBox[{
  "independentvariables", ",", "dependentvariables", ",", 
   "infinitesimalgroupsxy"}], "]"}]], "Input"],

Cell[BoxData["\<\"MakeCommutatorTable has finished executing. You can look at \
the output in the table commutatortable. To present the output in the most \
readable form you may want view it as a matrix using \
MatrixForm[commutatortable]. Occasionally the entries in the commutatortable \
will have terms that cancel. To get rid of these terms use the function \
Simplify before viewing the table.\"\>"], "Print",
 CellChangeTimes->{3.469473015821404*^9, 3.4715667687295094`*^9, 
  3.483748215118935*^9}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"MatrixForm", "[", "commutatortable", "]"}]], "Input"],

Cell[BoxData[
 TagBox[
  RowBox[{"(", "\[NoBreak]", GridBox[{
     {
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {
          RowBox[{"-", "v"}], "u"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {
          RowBox[{"-", "1"}], "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}]},
     {
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}]},
     {
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}]},
     {
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"v", 
          RowBox[{"-", "u"}]}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {
          RowBox[{
           RowBox[{"-", "2"}], " ", "t"}], "0"},
         {
          RowBox[{
           RowBox[{"-", "v"}], " ", "x"}], 
          RowBox[{"u", " ", "x"}]}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}]},
     {
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"1", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {
          RowBox[{"2", " ", "t"}], "0"},
         {
          RowBox[{"v", " ", "x"}], 
          RowBox[{
           RowBox[{"-", "u"}], " ", "x"}]}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0", "0"},
         {"0", "0"}
        },
        GridBoxAlignment->{
         "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
          "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
        GridBoxSpacings->{"Columns" -> {
            Offset[0.27999999999999997`], {
             Offset[0.7]}, 
            Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, 
          "Rows" -> {
            Offset[0.2], {
             Offset[0.4]}, 
            Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}]}
    },
    GridBoxAlignment->{
     "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, 
      "RowsIndexed" -> {}},
    GridBoxSpacings->{"Columns" -> {
        Offset[0.27999999999999997`], {
         Offset[0.7]}, 
        Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
        Offset[0.2], {
         Offset[0.4]}, 
        Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}],
  Function[BoxForm`e$, 
   MatrixForm[BoxForm`e$]]]], "Output",
 CellChangeTimes->{3.4694730158587217`*^9, 3.471566768799673*^9, 
  3.483748215158696*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"MaxMemoryUsed", "[", " ", "]"}]], "Input"],

Cell[BoxData["5681607608"], "Output",
 CellChangeTimes->{3.469473015900687*^9, 3.471566768868834*^9, 
  3.483748215190268*^9}]
}, Open  ]]
},
WindowToolbars->{},
CellGrouping->Manual,
WindowSize->{990, 855},
WindowMargins->{{99, Automatic}, {Automatic, 29}},
PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}},
ShowCellLabel->True,
ShowCellTags->False,
RenderingOptions->{"ObjectDithering"->True,
"RasterDithering"->False},
MacintoshSystemPageSetup -> \
"0080001804P000000_82@?okonh34`9B;@<5:0?l00;m009H0UP0000068dB`0B`\n\
02d5X5k/02H80@4101P00BL?00400@00000000000000P0010000020D00000000\n\
0000000000000000000004T400002004",
FrontEndVersion->"7.0 for Mac OS X x86 (32-bit) (February 18, 2009)",
StyleDefinitions->"Default.nb"
]
(* End of Notebook Content *)

(* Internal cache information *)
(*CellTagsOutline
CellTagsIndex->{}
*)
(*CellTagsIndex
CellTagsIndex->{}
*)
(*NotebookFileOutline
Notebook[{
Cell[545, 20, 616, 11, 305, "Text"],
Cell[1164, 33, 124, 1, 26, "Text"],
Cell[1291, 36, 160, 4, 27, "Input"],
Cell[1454, 42, 476, 13, 26, "Text"],
Cell[1933, 57, 93, 1, 27, "Input"],
Cell[2029, 60, 130, 2, 26, "Text"],
Cell[2162, 64, 151, 4, 27, "Input"],
Cell[2316, 70, 128, 2, 26, "Text"],
Cell[2447, 74, 149, 4, 27, "Input"],
Cell[2599, 80, 232, 4, 26, "Text"],
Cell[2834, 86, 96, 3, 27, "Input"],
Cell[2933, 91, 154, 3, 41, "Text"],
Cell[3090, 96, 67, 2, 27, "Input"],
Cell[3160, 100, 385, 6, 41, "Text"],
Cell[3548, 108, 67, 2, 27, "Input"],
Cell[3618, 112, 511, 7, 56, "Text"],
Cell[4132, 121, 71, 2, 27, "Input"],
Cell[4206, 125, 571, 8, 56, "Text"],
Cell[4780, 135, 79, 2, 27, "Input"],
Cell[4862, 139, 95, 2, 26, "Text"],
Cell[4960, 143, 185, 5, 53, "Input"],
Cell[5148, 150, 93, 2, 26, "Text"],
Cell[5244, 154, 128, 4, 40, "Input"],
Cell[5375, 160, 93, 2, 26, "Text"],
Cell[5471, 164, 128, 4, 40, "Input"],
Cell[5602, 170, 236, 4, 41, "Text"],
Cell[CellGroupData[{
Cell[5863, 178, 194, 5, 53, "Input"],
Cell[6060, 185, 429, 8, 20, "Print"],
Cell[6492, 195, 1008, 14, 126, "Print"],
Cell[7503, 211, 685, 12, 36, "Print"],
Cell[8191, 225, 395, 8, 20, "Print"],
Cell[8589, 235, 1007, 14, 126, "Print"],
Cell[9599, 251, 184, 4, 27, "Output"]
}, Open  ]],
Cell[9798, 258, 55, 0, 26, "Text"],
Cell[9856, 260, 94, 1, 27, "Input"],
Cell[9953, 263, 121, 3, 26, "Text"],
Cell[CellGroupData[{
Cell[10099, 270, 194, 5, 53, "Input"],
Cell[10296, 277, 445, 9, 20, "Print"],
Cell[10744, 288, 1005, 14, 126, "Print"],
Cell[11752, 304, 686, 12, 36, "Print"],
Cell[12441, 318, 411, 8, 20, "Print"],
Cell[12855, 328, 1007, 14, 126, "Print"],
Cell[13865, 344, 186, 4, 27, "Output"]
}, Open  ]],
Cell[14066, 351, 54, 0, 26, "Text"],
Cell[14123, 353, 94, 1, 27, "Input"],
Cell[14220, 356, 67, 0, 26, "Text"],
Cell[14290, 358, 134, 5, 53, "Input"],
Cell[14427, 365, 68, 0, 26, "Text"],
Cell[CellGroupData[{
Cell[14520, 369, 80, 1, 27, "Input"],
Cell[14603, 372, 120, 2, 27, "Output"]
}, Open  ]],
Cell[14738, 377, 490, 11, 101, "Text"],
Cell[CellGroupData[{
Cell[15253, 392, 173, 5, 40, "Input"],
Cell[15429, 399, 857, 14, 51, "Print"],
Cell[16289, 415, 421, 6, 51, "Print"],
Cell[16713, 423, 334, 7, 20, "Print"],
Cell[17050, 432, 300, 6, 20, "Print"],
Cell[17353, 440, 323, 7, 20, "Print"],
Cell[17679, 449, 301, 4, 36, "Print"],
Cell[17983, 455, 314, 6, 20, "Print"],
Cell[18300, 463, 144, 2, 20, "Print"],
Cell[18447, 467, 188, 3, 20, "Print"],
Cell[18638, 472, 314, 6, 20, "Print"],
Cell[18955, 480, 1065, 14, 156, "Print"],
Cell[20023, 496, 188, 4, 27, "Output"]
}, Open  ]],
Cell[20226, 503, 108, 3, 26, "Text"],
Cell[CellGroupData[{
Cell[20359, 510, 61, 1, 27, "Input"],
Cell[20423, 513, 276, 6, 27, "Output"]
}, Open  ]],
Cell[20714, 522, 48, 0, 26, "Text"],
Cell[CellGroupData[{
Cell[20787, 526, 61, 1, 27, "Input"],
Cell[20851, 529, 295, 6, 27, "Output"]
}, Open  ]],
Cell[21161, 538, 337, 9, 27, "Input"],
Cell[21501, 549, 88, 2, 26, "Text"],
Cell[21592, 553, 79, 1, 27, "Input"],
Cell[21674, 556, 1384, 50, 93, "Output"],
Cell[23061, 608, 136, 1, 26, "Text"],
Cell[CellGroupData[{
Cell[23222, 613, 311, 6, 27, "Input"],
Cell[23536, 621, 453, 9, 43, "Output"]
}, Open  ]],
Cell[24004, 633, 146, 3, 26, "Text"],
Cell[24153, 638, 191, 4, 43, "Input"],
Cell[24347, 644, 506, 7, 66, "Print"],
Cell[CellGroupData[{
Cell[24878, 655, 77, 1, 27, "Input"],
Cell[24958, 658, 15197, 409, 189, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[40192, 1072, 66, 1, 27, "Input"],
Cell[40261, 1075, 126, 2, 27, "Output"]
}, Open  ]]
}
]
*)

(* End of internal cache information *)
