(*********************************************************************** Mathematica-Compatible Notebook This notebook can be used on any computer system with Mathematica 4.0, MathReader 4.0, or any compatible application. The data for the notebook starts with the line containing stars above. To get the notebook into a Mathematica-compatible application, do one of the following: * Save the data starting with the line of stars above into a file with a name ending in .nb, then open the file inside the application; * Copy the data starting with the line of stars above to the clipboard, then use the Paste menu command inside the application. Data for notebooks contains only printable 7-bit ASCII and can be sent directly in email or through ftp in text mode. Newlines can be CR, LF or CRLF (Unix, Macintosh or MS-DOS style). NOTE: If you modify the data for this notebook not in a Mathematica- compatible application, you must delete the line below containing the word CacheID, otherwise Mathematica-compatible applications may try to use invalid cache data. For more information on notebooks and Mathematica-compatible applications, contact Wolfram Research: web: http://www.wolfram.com email: info@wolfram.com phone: +1-217-398-0700 (U.S.) Notebook reader applications are available free of charge from Wolfram Research. ***********************************************************************) (*CacheID: 232*) (*NotebookFileLineBreakTest NotebookFileLineBreakTest*) (*NotebookOptionsPosition[ 20303, 695]*) (*NotebookOutlinePosition[ 21211, 724]*) (* CellTagsIndexPosition[ 21167, 720]*) (*WindowFrame->Normal*) Notebook[{ Cell[CellGroupData[{ Cell["Contexts and Packages", "Title"], Cell[CellGroupData[{ Cell["\<\ Bernd Thaller Institute of Mathematics University of Graz Austria\ \>", "Subsubsection"], Cell["\<\ You should start a new kernel session before evaluating the \ commands in this notebook.\ \>", "Text"] }, Open ]], Cell[CellGroupData[{ Cell["Contexts: Summary", "Section"], Cell["Let us first collect the basic facts about contexts:", "Text"], Cell["\<\ The full name of any symbol is of the form \"context`short\". The \ contextname can in turn consist of several contexts, e.g., c1`c2`c3`. Usually \ it is sufficient to specify names in their short form.\ \>", "Text"], Cell[TextData[{ "At any time in a Mathematica session there is a currently active context \ and a currently active context path. They can be checked with the commands ", StyleBox["$Context", "Output"], " and ", StyleBox["$ContextPath", "Output"], ". In a new session, Global` is the active context and the context path is \ {\"Global`\",\"System`\"}." }], "Text"], Cell[TextData[{ "The context and the context path determine how ", StyleBox["Mathematica", FontSlant->"Italic"], " parses input expressions. If ", StyleBox["Mathematica", FontSlant->"Italic"], " encounters a short name in an input cell, then ", StyleBox["Mathematica", FontSlant->"Italic"], " checks, if that symbol has been defined in the active context. If it is \ not there, then ", StyleBox["Mathematica", FontSlant->"Italic"], " searches the context path until it encounters the symbol. If the symbol \ is also defined in a second context, then this definition is shadowed by the \ first definition. If the symbol is in none of the contexts, then it is \ created in the active context." }], "Text"], Cell["\<\ Clear[symbol] serves to remove the definitions associated with a \ symbol, but does not remove the symbol itself.\ \>", "Text"], Cell["Remove[symbol] removes the symbol from the system.", "Text"], Cell["\<\ Begin[\"context`\"] makes context` the currently active context \ without changing the context path. End[] resets the context to the previously \ active context.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["The BeginPackage command", "Section"], Cell[TextData[{ "At the beginning of the ", StyleBox["Mathematica", FontSlant->"Italic"], " session, we are in the context Global`. All new symbols are created \ within this context. Let us create a symbol g" }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(g\ = \ 5\)], "Input"], Cell[BoxData[ \(5\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(\(?g\)\)], "Input"], Cell[BoxData[ \("Global`g"\)], "Print"], Cell[BoxData[ InterpretationBox[GridBox[{ {GridBox[{ {\(g = 5\)} }, GridBaseline->{Baseline, {1, 1}}, ColumnWidths->0.999, ColumnAlignments->{Left}]} }, GridBaseline->{Baseline, {1, 1}}, ColumnAlignments->{Left}], Definition[ g], Editable->False]], "Print"] }, Open ]], Cell["\<\ Instead of using Begin[context], you can switch to another context \ also with the following command.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(BeginPackage["\"]\)], "Input"], Cell[BoxData[ \("d`"\)], "Output"] }, Open ]], Cell["Like Begin, this changes the active context:", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \($Context\)], "Input"], Cell[BoxData[ \("d`"\)], "Output"] }, Open ]], Cell["\<\ Unlike Begin, the BeginPackage command also changes the active \ context path:\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \($ContextPath\)], "Input"], Cell[BoxData[ \({"d`", "System`"}\)], "Output"] }, Open ]], Cell[TextData[{ "Now you can define symbols that don't conflict with the symbols in the \ global context. The built-in ", StyleBox["Mathematica", FontSlant->"Italic"], " functions (which are in the context System`) are still available." }], "Text"], Cell[BoxData[{ \(\(f[0]\ := \ 1;\)\), "\[IndentingNewLine]", \(f[n_?IntegerQ]\ := \ n\ *\ f[n - 1] /; n > 0\)}], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(f[10]\)], "Input"], Cell[BoxData[ \(3628800\)], "Output"] }, Open ]], Cell["We can also redefine g in this context:", "Text"], Cell[BoxData[ \(\(g\ = \ 7;\)\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(\(?g\)\)], "Input"], Cell[BoxData[ \("d`g"\)], "Print"], Cell[BoxData[ InterpretationBox[GridBox[{ {GridBox[{ {\(g = 7\)} }, GridBaseline->{Baseline, {1, 1}}, ColumnWidths->0.999, ColumnAlignments->{Left}]} }, GridBaseline->{Baseline, {1, 1}}, ColumnAlignments->{Left}], Definition[ g], Editable->False]], "Print"] }, Open ]], Cell["\<\ The symbol g defined in the global context is only available by \ specifying its full name.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Global`g\)], "Input"], Cell[BoxData[ \(5\)], "Output"] }, Open ]], Cell["\<\ Note that the context Global` is not on the context path and \ therefore it is not searched automatically. But the context Global` still \ exists, as you can see by calling Contexts[].\ \>", "Text"], Cell["You can leave the context d` with EndPackage[]:", "Text"], Cell[BoxData[ \(EndPackage[]\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \({$Context, \ $ContextPath}\)], "Input"], Cell[BoxData[ \({"Global`", {"d`", "Global`", "System`"}}\)], "Output"] }, Open ]], Cell[TextData[{ "We see from this 1) that we are back to the original context Global`, and \ 2) that the context path has been changed. Now the context path has the \ context name d` prepended, which means that all symbols defined in the \ context d` are still available to the ", StyleBox["Mathematica", FontSlant->"Italic"], " session." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(f[6]\)], "Input"], Cell[BoxData[ \(720\)], "Output"] }, Open ]], Cell["\<\ The symbol g has been already defined before in the global context. \ This earlier definition now shadows the definition made in d`, because the \ currently active context is searched first for a definition of g:\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(g\)], "Input"], Cell[BoxData[ \(5\)], "Output"] }, Open ]], Cell["\<\ The definition made in the context d` can only be used with the \ full name:\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(d`g\)], "Input"], Cell[BoxData[ \(7\)], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Packages", "Section"], Cell["\<\ Packages are useful collections of Mathematica commands. It must be \ easy to load a package and to use the commands by their short names. The \ basic structure of a package is the following\ \>", "Text"], Cell[BoxData[ \(BeginPackage["\"]\)], "Input", Evaluatable->False], Cell[BoxData[ \( ... \)], "Input", Evaluatable->False], Cell[BoxData[ \(EndPackage[]\)], "Input", Evaluatable->False], Cell["\<\ The context of the symbols (constants, commands, functions..) of \ the package is defined with the BeginPackage command. With EndPackage this \ context is added to the context search path as described in the previous \ section.\ \>", "Text"], Cell["The package is loaded by the user with a command of the form", "Text"], Cell[BoxData[ \(\(\(<<\)\(packagecontext`\)\(\ \)\( (*\ or : \ Get["\"]\ *) \)\)\)], "Input", Evaluatable->False], Cell["or", "Text"], Cell[BoxData[ \(Needs["\"]\)], "Input", Evaluatable->False], Cell[TextData[{ "The package loading commands are platform independent. Hence there must be \ well defined ways to name the context and to place the package file so that \ ", StyleBox["Mathematica", FontSlant->"Italic"], " can find them by their context name." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["The naming of packages", "Section"], Cell[TextData[{ "On Windows PCs and on Macintosh systems, self-made packages are usually \ stored in the AddOns/Applications subdirectory of the ", StyleBox["Mathematica", FontSlant->"Italic"], " folder. The package file itself is a pure text file containing the \ appropriate ", StyleBox["Mathematica", FontSlant->"Italic"], " statements. The name of the package file is of the form \"filename.m\". \ We can place this file in the subfolder \"foldername\" of the \ AddOns/Applications folder. Thus the pathname of the file is something like\n\ ", StyleBox["C:\\Wolfram \ Research\\Mathematica\\AddOns\\Applications\\foldername\\filename.m\nor\n\ Macintosh HD:Mathematica 4.0 files:AddOns:Applications:foldername:filename.m", FontVariations->{"CompatibilityType"->0}] }], "Text"], Cell[TextData[{ "The convention used by ", StyleBox["Mathematica", FontSlant->"Italic"], " is to define the package context as\nfoldername`filename`\nYou can now \ load the package in a completely platform-independent way, e.g. by the \ command <"Italic"], " does nothing." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["ContextToFilename", "Section"], Cell[CellGroupData[{ Cell["?ContextToFileName", "Input"], Cell[BoxData[ \("ContextToFileName[\"context`\"] gives the string specifying the file \ name that is by convention associated with a particular context."\)], "Print"] }, Open ]], Cell["\<\ So this command translates the contextnames into the filenames \ appropriate for a special computer system.\ \>", "Text"], Cell[CellGroupData[{ Cell["ContextToFileName[\"Graphics`FilledPlot`\"]", "Input"], Cell[BoxData[ \(":Graphics:FilledPlot.m"\)], "Output"] }, Open ]], Cell["\<\ Note that this command is very restrictive with folder and file \ names containing special characters. In particular, they are not allowed to \ contain blanks.\ \>", "Text"], Cell["\<\ The command \"ContextToFileName\" is invoked automatically, \ whenever you load a package with << or with Needs. \ \>", "Text"], Cell["On[ContextToFileName]", "Input"], Cell[CellGroupData[{ Cell["< \ \!\(\":Graphics:FilledPlot.m\"\)."\)], "Message"], Cell[BoxData[ \(ContextToFileName::"trace" \(\(:\)\(\ \)\) "\!\(ContextToFileName[\"Utilities`FilterOptions`\"]\) --> \ \!\(\":Utilities:FilterOptions.m\"\)."\)], "Message"] }, Open ]], Cell["Off[ContextToFileName]", "Input"] }, Closed]], Cell[CellGroupData[{ Cell["Search path", "Section"], Cell[TextData[{ "The result of ContextToFileName is not the complete pathThis is where ", StyleBox["Mathematica", FontSlant->"Italic"], " looks for Filenames. The complete path for the package \ \"Graphics`FilledPlot`\" on my computer is \"Applications:Mathematica 4.0 \ Files:AddOns:StandardPackages:Graphics:FilledPlot.m\". ", StyleBox["Mathematica", FontSlant->"Italic"], " knows where to find the file already from \":Graphics:FilledPlot.m\", \ because the directory containing the folder Graphics is on the search path. \ The search path is defined in the variable $Path." }], "Text"], Cell[CellGroupData[{ Cell["$Path", "Input"], Cell[BoxData[ \({"System:System Folder:Preferences:Mathematica:4.0:Kernel", "System:System Folder:Preferences:Mathematica:4.0:AddOns:Autoload", "System:System Folder:Preferences:Mathematica:4.0:AddOns:Applications", ":", "Applications:Mathematica 4.0 Files:AddOns:StandardPackages", "Applications:Mathematica 4.0 Files:AddOns:StandardPackages:StartUp", "Applications:Mathematica 4.0 Files:AddOns:Autoload", "Applications:Mathematica 4.0 Files:AddOns:Applications", "Applications:Mathematica 4.0 Files:AddOns:ExtraPackages", "Applications:Mathematica 4.0 Files:SystemFiles:Graphics:Packages", "Applications:Mathematica 4.0 Files:Configuration:Kernel"}\)], "Output"] }, Open ]], Cell[TextData[{ "The list above is the list of directories where ", StyleBox["Mathematica", FontSlant->"Italic"], " looks for files. The variable $Path can be changed, if you want to add \ your own directories to the search path." }], "Text"], Cell[CellGroupData[{ Cell["$Path=Append[$Path,\"Documents:Notebooks\"]", "Input"], Cell[BoxData[ \({"System:System Folder:Preferences:Mathematica:4.0:Kernel", "System:System Folder:Preferences:Mathematica:4.0:AddOns:Autoload", "System:System Folder:Preferences:Mathematica:4.0:AddOns:Applications", ":", "Applications:Mathematica 4.0 Files:AddOns:StandardPackages", "Applications:Mathematica 4.0 Files:AddOns:StandardPackages:StartUp", "Applications:Mathematica 4.0 Files:AddOns:Autoload", "Applications:Mathematica 4.0 Files:AddOns:Applications", "Applications:Mathematica 4.0 Files:AddOns:ExtraPackages", "Applications:Mathematica 4.0 Files:SystemFiles:Graphics:Packages", "Applications:Mathematica 4.0 Files:Configuration:Kernel", "Documents:Notebooks"}\)], "Output"] }, Open ]], Cell[TextData[{ "During the development of a package, you normally don't want to store \ everything within your ", StyleBox["Mathematica", FontSlant->"Italic"], " program folder. In that case you may wish to change $Path to be able to \ load the package using <<\"context`filename`\"." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["The structure of a package", "Section"], Cell["\<\ In a package you want to define the symbols which are available to \ the user after loading the package. But you may also wish to have symbols \ which are hidden from the user. The hidden symbols are internal to the \ package (e.g., auxiliary functions, local constants, etc.). It is a generally \ accepted convention to call this context \"Private`\". Since we do not want \ to let the private context appear on the search path, we use the Begin[] .. \ End[] commands to switch to the private context within a package.\ \>", "Text"], Cell["Thus the structure of a package is as follows:", "Text"], Cell[BoxData[ \(BeginPackage["\"]\)], "Input", Evaluatable->False], Cell["\<\ Now one defines the symbols intended for export from the package. \ It is not yet necessary to attach definitions to the symbols, but the names \ of the symbols which are accessible to the user must appear in this section. \ Usually, the names are introduced by defining messages describing the usage \ of the symbol. For example, if you want to export a symbol f, you would put \ the command\ \>", "Text"], Cell[BoxData[ \(\(f::usage\ = \ "\";\)\)], "Input"], Cell["\<\ This introduces the symbol f in the context packagecontext` (which \ is added to the context path after the EndPackage command.)\ \>", "Text"], Cell[BoxData[GridBox[{ {"\<\"\\!\\(\\*StyleBox[\\\"\\\\\\\"expr\\\\\\\"\\\", \ \\\"TI\\\"]\\)\\!\\(\\*StyleBox[\\\"\\\\\\\"::\\\\\\\"\\\", \\\"MR\\\"]\\)\\!\ \\(\\*StyleBox[\\\"\\\\\\\"string\\\\\\\"\\\", \\\"TI\\\"]\\) \"\>", "\<\"\\!\ \\(\\*StyleBox[\\\"\\\\\\\"MessageName[\\\\\\\"\\\", \ \\\"MR\\\"]\\)\\!\\(\\*StyleBox[\\\"\\\\\\\"expr\\\\\\\"\\\", \ \\\"TI\\\"]\\)\\!\\(\\*StyleBox[\\\"\\\\\\\",\\\\\\\"\\\", \\\"MR\\\"]\\) \\!\ \\(\\*StyleBox[\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\"\\\", \\\"MR\\\"]\\)\\!\\(\ \\*StyleBox[\\\"\\\\\\\"string\\\\\\\"\\\", \ \\\"TI\\\"]\\)\\!\\(\\*StyleBox[\\\"\\\\\\\"\\\\\\\\\\\\\\\"]\\\\\\\"\\\", \\\ \"MR\\\"]\\) \"\>"} }, ColumnAlignments->{Left}]], "Text"], Cell[TextData[{ "The command expr", StyleBox["::", FontWeight->"Bold"], "string has the long form MessageName[expr,\"string\"]. It has the effect \ to attach a message to a symbol f. The message expr", StyleBox["::", FontWeight->"Bold"], "usage has a special property. It can be displayed by ?f. Thus it is the \ natural place for a help message which explains the usage of a symbol. As you \ probably know, help for the built-in ", StyleBox["Mathematica", FontSlant->"Italic"], " functions can also be obtained in that way." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(\(?Coth\)\)], "Input", CellLabel->"In[77]:="], Cell[BoxData[ \("Coth[z] gives the hyperbolic cotangent of z."\)], "Print", CellLabel->"From In[77]:="] }, Open ]], Cell[BoxData[ \(Begin["\"]\)], "Input", Evaluatable->False], Cell["\<\ This sets the active context to packagecontext`Private`. The \ context path is something like {\"packagecontext`\", \"System`\"}, and does \ not contain the global context. All symbols which are defined now (within the \ active context) are therefore completely internal to the package. There is no \ conflict with symbols defined before in the global context.\ \>", "Text"], Cell["\<\ This is also the place to attach definitions to the symbols to be \ exported from the package, e.g.,\ \>", "Text"], Cell[BoxData[ \(f[x_] := x^2\)], "Input", Evaluatable->False], Cell[TextData[{ "What happens here? When parsing this line of input, ", StyleBox["Mathematica", FontSlant->"Italic"], " does not find the symbol f in the active context packagecontext`Private`. \ Thus it searches the context path and finds f in the context packagecontext`. \ The definition made here is then attached to the symbol packagecontext`f." }], "Text"], Cell["Finally, we end the private context ...", "Text"], Cell[BoxData[ \(\(End[];\)\)], "Input", Evaluatable->False], Cell["\<\ ... and are now back to the previous context \"packagecontext`\".\ \ \>", "Text"], Cell[BoxData[ \(\(EndPackage[];\)\)], "Input"], Cell["\<\ This finally closes the package context, reverts to the global \ (resp. previous) context, and adds \"packagecontext`\" at the beginning of \ the context path. Hence the symbol \"packagecontext`f\" becomes available by \ its short name \"f\".\ \>", "Text"] }, Closed]] }, Open ]] }, FrontEndVersion->"4.0 for Macintosh", ScreenRectangle->{{0, 1280}, {0, 1004}}, WindowSize->{643, 498}, WindowMargins->{{18, Automatic}, {Automatic, 10}}, Magnification->1.25, StyleDefinitions -> "ArticleClassic.nb", MacintoshSystemPageSetup->"\<\ 00<0001804P000000`d26_oQon@3:`8g0dL5N`?P0080001804P000000]P2:001 0000I00000400`<30?l00BL?00400@00000000000000060801T1T00000000000 00000000004000000000000000000000\>" ] (*********************************************************************** Cached data follows. If you edit this Notebook file directly, not using Mathematica, you must remove the line containing CacheID at the top of the file. The cache data will then be recreated when you save this file from within Mathematica. ***********************************************************************) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[CellGroupData[{ Cell[1739, 51, 38, 0, 84, "Title"], Cell[CellGroupData[{ Cell[1802, 55, 98, 5, 88, "Subsubsection"], Cell[1903, 62, 112, 3, 31, "Text"] }, Open ]], Cell[CellGroupData[{ Cell[2052, 70, 36, 0, 67, "Section"], Cell[2091, 72, 68, 0, 31, "Text"], Cell[2162, 74, 226, 4, 50, "Text"], Cell[2391, 80, 373, 8, 69, "Text"], Cell[2767, 90, 737, 18, 107, "Text"], Cell[3507, 110, 137, 3, 31, "Text"], Cell[3647, 115, 66, 0, 31, "Text"], Cell[3716, 117, 185, 4, 50, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3938, 126, 43, 0, 34, "Section"], Cell[3984, 128, 230, 6, 50, "Text"], Cell[CellGroupData[{ Cell[4239, 138, 42, 1, 34, "Input"], Cell[4284, 141, 35, 1, 34, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[4356, 147, 39, 1, 34, "Input"], Cell[4398, 150, 43, 1, 28, "Print"], Cell[4444, 153, 383, 12, 28, "Print"] }, Open ]], Cell[4842, 168, 125, 3, 31, "Text"], Cell[CellGroupData[{ Cell[4992, 175, 55, 1, 34, "Input"], Cell[5050, 178, 38, 1, 34, "Output"] }, Open ]], Cell[5103, 182, 60, 0, 31, "Text"], Cell[CellGroupData[{ Cell[5188, 186, 41, 1, 34, "Input"], Cell[5232, 189, 38, 1, 34, "Output"] }, Open ]], Cell[5285, 193, 102, 3, 31, "Text"], Cell[CellGroupData[{ Cell[5412, 200, 45, 1, 34, "Input"], Cell[5460, 203, 51, 1, 34, "Output"] }, Open ]], Cell[5526, 207, 258, 6, 50, "Text"], Cell[5787, 215, 132, 2, 53, "Input"], Cell[CellGroupData[{ Cell[5944, 221, 38, 1, 34, "Input"], Cell[5985, 224, 41, 1, 34, "Output"] }, Open ]], Cell[6041, 228, 55, 0, 31, "Text"], Cell[6099, 230, 47, 1, 34, "Input"], Cell[CellGroupData[{ Cell[6171, 235, 39, 1, 34, "Input"], Cell[6213, 238, 38, 1, 28, "Print"], Cell[6254, 241, 383, 12, 28, "Print"] }, Open ]], Cell[6652, 256, 115, 3, 31, "Text"], Cell[CellGroupData[{ Cell[6792, 263, 41, 1, 34, "Input"], Cell[6836, 266, 35, 1, 34, "Output"] }, Open ]], Cell[6886, 270, 208, 4, 50, "Text"], Cell[7097, 276, 63, 0, 31, "Text"], Cell[7163, 278, 45, 1, 34, "Input"], Cell[CellGroupData[{ Cell[7233, 283, 59, 1, 34, "Input"], Cell[7295, 286, 75, 1, 34, "Output"] }, Open ]], Cell[7385, 290, 360, 8, 69, "Text"], Cell[CellGroupData[{ Cell[7770, 302, 37, 1, 34, "Input"], Cell[7810, 305, 37, 1, 34, "Output"] }, Open ]], Cell[7862, 309, 236, 4, 50, "Text"], Cell[CellGroupData[{ Cell[8123, 317, 34, 1, 34, "Input"], Cell[8160, 320, 35, 1, 34, "Output"] }, Open ]], Cell[8210, 324, 100, 3, 31, "Text"], Cell[CellGroupData[{ Cell[8335, 331, 36, 1, 34, "Input"], Cell[8374, 334, 35, 1, 34, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[8458, 341, 27, 0, 34, "Section"], Cell[8488, 343, 214, 4, 53, "Text"], Cell[8705, 349, 90, 2, 39, "Input", Evaluatable->False], Cell[8798, 353, 60, 2, 39, "Input", Evaluatable->False], Cell[8861, 357, 67, 2, 39, "Input", Evaluatable->False], Cell[8931, 361, 251, 5, 72, "Text"], Cell[9185, 368, 76, 0, 34, "Text"], Cell[9264, 370, 146, 3, 39, "Input", Evaluatable->False], Cell[9413, 375, 18, 0, 34, "Text"], Cell[9434, 377, 83, 2, 39, "Input", Evaluatable->False], Cell[9520, 381, 282, 7, 53, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[9839, 393, 41, 0, 34, "Section"], Cell[9883, 395, 808, 18, 167, "Text"], Cell[10694, 415, 292, 7, 91, "Text"], Cell[10989, 424, 415, 9, 91, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[11441, 438, 36, 0, 34, "Section"], Cell[CellGroupData[{ Cell[11502, 442, 35, 0, 33, "Input"], Cell[11540, 444, 170, 2, 47, "Print"] }, Open ]], Cell[11725, 449, 131, 3, 31, "Text"], Cell[CellGroupData[{ Cell[11881, 456, 60, 0, 33, "Input"], Cell[11944, 458, 58, 1, 34, "Output"] }, Open ]], Cell[12017, 462, 183, 4, 50, "Text"], Cell[12203, 468, 137, 3, 31, "Text"], Cell[12343, 473, 38, 0, 33, "Input"], Cell[CellGroupData[{ Cell[12406, 477, 39, 0, 33, "Input"], Cell[12448, 479, 176, 3, 42, "Message"], Cell[12627, 484, 184, 3, 42, "Message"] }, Open ]], Cell[12826, 490, 39, 0, 33, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[12902, 495, 30, 0, 34, "Section"], Cell[12935, 497, 607, 12, 107, "Text"], Cell[CellGroupData[{ Cell[13567, 513, 22, 0, 33, "Input"], Cell[13592, 515, 731, 10, 205, "Output"] }, Open ]], Cell[14338, 528, 253, 6, 50, "Text"], Cell[CellGroupData[{ Cell[14616, 538, 60, 0, 33, "Input"], Cell[14679, 540, 761, 11, 224, "Output"] }, Open ]], Cell[15455, 554, 307, 7, 50, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[15799, 566, 45, 0, 34, "Section"], Cell[15847, 568, 543, 8, 107, "Text"], Cell[16393, 578, 62, 0, 31, "Text"], Cell[16458, 580, 90, 2, 34, "Input", Evaluatable->False], Cell[16551, 584, 416, 7, 88, "Text"], Cell[16970, 593, 66, 1, 34, "Input"], Cell[17039, 596, 152, 3, 50, "Text"], Cell[17194, 601, 719, 12, 30, "Text"], Cell[17916, 615, 563, 14, 88, "Text"], Cell[CellGroupData[{ Cell[18504, 633, 67, 2, 34, "Input"], Cell[18574, 637, 109, 2, 28, "Print"] }, Open ]], Cell[18698, 642, 76, 2, 34, "Input", Evaluatable->False], Cell[18777, 646, 384, 6, 69, "Text"], Cell[19164, 654, 124, 3, 31, "Text"], Cell[19291, 659, 67, 2, 34, "Input", Evaluatable->False], Cell[19361, 663, 372, 7, 69, "Text"], Cell[19736, 672, 55, 0, 31, "Text"], Cell[19794, 674, 65, 2, 34, "Input", Evaluatable->False], Cell[19862, 678, 91, 3, 31, "Text"], Cell[19956, 683, 50, 1, 34, "Input"], Cell[20009, 686, 266, 5, 50, "Text"] }, Closed]] }, Open ]] } ] *) (*********************************************************************** End of Mathematica Notebook file. ***********************************************************************)