(* Content-type: application/vnd.wolfram.mathematica *) (*** Wolfram Notebook File ***) (* http://www.wolfram.com/nb *) (* CreatedBy='Mathematica 11.3' *) (*CacheID: 234*) (* Internal cache information: NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 158, 7] NotebookDataLength[ 42637, 1208] NotebookOptionsPosition[ 35819, 1049] NotebookOutlinePosition[ 36143, 1065] CellTagsIndexPosition[ 36100, 1062] WindowFrame->Normal*) (* Beginning of Notebook Content *) Notebook[{ Cell[CellGroupData[{ Cell["Basic Examples", "Subsection", CellID->2615373], Cell[TextData[{ "Retrieve the ", Cell[BoxData[ ButtonBox["ResourceFunction", BaseStyle->"Link"]], "InlineFormula"], ":" }], "Text", CellID->9472558], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"ResourceFunction", "[", "\"\\"", "]"}]], "Input", CellID->437286191], Cell[BoxData[ InterpretationBox[ FrameBox[ TemplateBox[{GraphicsBox[{ RGBColor[0.9882352941176471, 0.4, 0.25098039215686274`], Thickness[ Dynamic[ If[CurrentValue["CellStyleName"] === "Input", 0.2, 0.1]]], CircleBox[{0, 0}]}, ImageSize -> 10, BaselinePosition -> Scaled[0.05], ImagePadding -> 1],TemplateBox[{3}, "Spacer1"],StyleBox[ "\"GetKeyValuePattern\"", FontColor -> RGBColor[0.2784313725490196, 0.2784313725490196, 0.2784313725490196], ShowAutoStyles -> False, ShowStringCharacters -> False, FontSize -> 0.78 Inherited, FontFamily -> "Roboto", Selectable -> True, FontWeight -> Dynamic[ If[CurrentValue["CellStyleName"] === "Input", "DemiBold", Plain]], StripOnInput -> False]}, "Row", DisplayFunction->(PaneBox[ RowBox[{ TemplateSlotSequence[1, "\[InvisibleSpace]"]}], BaselinePosition -> Center]& ), InterpretationFunction->(RowBox[{"Row", "[", RowBox[{ RowBox[{"{", TemplateSlotSequence[1, ","], "}"}], ",", RowBox[{"BaselinePosition", "\[Rule]", "Center"}]}], "]"}]& )], Selectable -> False, Background->RGBColor[ 0.9686274509803922, 0.9686274509803922, 0.9686274509803922], ContentPadding->False, FrameMargins->{{3, 4}, {0, -2}}, FrameStyle->Directive[ AbsoluteThickness[1], RGBColor[0.8627450980392157, 0.8627450980392157, 0.8627450980392157]], RoundingRadius->3, StripOnInput->False], ResourceFunction["GetKeyValuePattern"], BoxID -> "GetKeyValuePattern"]], "Output", CellID->321173561] }, Open ]], Cell[TextData[{ "Get a suitable ", Cell[BoxData[ ButtonBox["KeyValuePattern", BaseStyle->"Link"]], "InlineFormula"], " from an example ", Cell[BoxData[ ButtonBox["Association", BaseStyle->"Link"]], "InlineFormula"], ":" }], "Text", CellChangeTimes->{{3.7482856763253365`*^9, 3.7482856947777834`*^9}}, CellID->329918097], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ InterpretationBox[ FrameBox[ TemplateBox[{GraphicsBox[{ RGBColor[0.9882352941176471, 0.4, 0.25098039215686274`], Thickness[ Dynamic[ If[CurrentValue["CellStyleName"] === "Input", 0.2, 0.1]]], CircleBox[{0, 0}]}, ImageSize -> 10, BaselinePosition -> Scaled[0.05], ImagePadding -> 1],TemplateBox[{3}, "Spacer1"],StyleBox[ "\"GetKeyValuePattern\"", FontColor -> RGBColor[0.2784313725490196, 0.2784313725490196, 0.2784313725490196], ShowAutoStyles -> False, ShowStringCharacters -> False, FontSize -> 0.78 Inherited, FontFamily -> "Roboto", Selectable -> True, FontWeight -> Dynamic[ If[CurrentValue["CellStyleName"] === "Input", "DemiBold", Plain]], StripOnInput -> False]}, "Row", DisplayFunction->(PaneBox[ RowBox[{ TemplateSlotSequence[1, "\[InvisibleSpace]"]}], BaselinePosition -> Center]& ), InterpretationFunction->(RowBox[{"Row", "[", RowBox[{ RowBox[{"{", TemplateSlotSequence[1, ","], "}"}], ",", RowBox[{"BaselinePosition", "\[Rule]", "Center"}]}], "]"}]& )], Selectable -> False, Background->RGBColor[ 0.9686274509803922, 0.9686274509803922, 0.9686274509803922], ContentPadding->False, FrameMargins->{{3, 4}, {0, -2}}, FrameStyle->Directive[ AbsoluteThickness[1], RGBColor[0.8627450980392157, 0.8627450980392157, 0.8627450980392157]], RoundingRadius->3, StripOnInput->False], ResourceFunction["GetKeyValuePattern"], BoxID -> "GetKeyValuePattern"], "[", RowBox[{"<|", RowBox[{ RowBox[{"\"\\"", "\[Rule]", "1"}], ",", RowBox[{"\"\\"", "\[Rule]", "\"\\""}], ",", RowBox[{"\"\\"", "\[Rule]", "True"}]}], "|>"}], "]"}]], "Input", CellLabel->"In[80]:=", CellID->3343119], Cell[BoxData[ RowBox[{"KeyValuePattern", "[", RowBox[{"{", RowBox[{ RowBox[{"\<\"key1\"\>", "\[Rule]", "_Integer"}], ",", RowBox[{"\<\"key2\"\>", "\[Rule]", "_String"}], ",", RowBox[{"\<\"key3\"\>", "\[Rule]", "_Symbol"}]}], "}"}], "]"}]], "Output",\ CellChangeTimes->{3.7482856699745183`*^9}, CellLabel->"Out[80]=", CellID->158335564] }, Open ]], Cell["By default, the first level is used:", "Text", CellID->123985044], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"a", "=", RowBox[{"<|", RowBox[{ RowBox[{"\"\\"", "\[Rule]", RowBox[{"Quantity", "[", RowBox[{"1", ",", "\"\\""}], "]"}]}], ",", RowBox[{"\"\\"", "\[Rule]", "\"\\""}], ",", RowBox[{"\"\\"", "\[Rule]", RowBox[{"<|", RowBox[{ RowBox[{"\"\\"", "\[Rule]", "2.2"}], ",", RowBox[{"\"\\"", "\[Rule]", RowBox[{"<|", RowBox[{"\"\\"", "\[Rule]", "x"}], "|>"}]}]}], "|>"}]}]}], "|>"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ InterpretationBox[ FrameBox[ TemplateBox[{GraphicsBox[{ RGBColor[0.9882352941176471, 0.4, 0.25098039215686274`], Thickness[ Dynamic[ If[CurrentValue["CellStyleName"] === "Input", 0.2, 0.1]]], CircleBox[{0, 0}]}, ImageSize -> 10, BaselinePosition -> Scaled[0.05], ImagePadding -> 1],TemplateBox[{3}, "Spacer1"],StyleBox[ "\"GetKeyValuePattern\"", FontColor -> RGBColor[0.2784313725490196, 0.2784313725490196, 0.2784313725490196], ShowAutoStyles -> False, ShowStringCharacters -> False, FontSize -> 0.78 Inherited, FontFamily -> "Roboto", Selectable -> True, FontWeight -> Dynamic[ If[CurrentValue["CellStyleName"] === "Input", "DemiBold", Plain]], StripOnInput -> False]}, "Row", DisplayFunction->(PaneBox[ RowBox[{ TemplateSlotSequence[1, "\[InvisibleSpace]"]}], BaselinePosition -> Center]& ), InterpretationFunction->(RowBox[{"Row", "[", RowBox[{ RowBox[{"{", TemplateSlotSequence[1, ","], "}"}], ",", RowBox[{"BaselinePosition", "\[Rule]", "Center"}]}], "]"}]& )], Selectable -> False, Background->RGBColor[ 0.9686274509803922, 0.9686274509803922, 0.9686274509803922], ContentPadding->False, FrameMargins->{{3, 4}, {0, -2}}, FrameStyle->Directive[ AbsoluteThickness[1], RGBColor[0.8627450980392157, 0.8627450980392157, 0.8627450980392157]], RoundingRadius->3, StripOnInput->False], ResourceFunction["GetKeyValuePattern"], BoxID -> "GetKeyValuePattern"], "[", "a", "]"}]}], "Input", CellLabel->"In[81]:=", CellID->97294300], Cell[BoxData[ RowBox[{"KeyValuePattern", "[", RowBox[{"{", RowBox[{ RowBox[{"\<\"a\"\>", "\[Rule]", "_Quantity"}], ",", RowBox[{"\<\"b\"\>", "\[Rule]", "_String"}], ",", RowBox[{"\<\"c\"\>", "\[Rule]", "_Association"}]}], "}"}], "]"}]], "Output", CellChangeTimes->{3.748285701588589*^9}, CellLabel->"Out[82]=", CellID->503382387] }, Open ]], Cell["Specify a different level:", "Text", CellID->511084616], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ InterpretationBox[ FrameBox[ TemplateBox[{GraphicsBox[{ RGBColor[0.9882352941176471, 0.4, 0.25098039215686274`], Thickness[ Dynamic[ If[CurrentValue["CellStyleName"] === "Input", 0.2, 0.1]]], CircleBox[{0, 0}]}, ImageSize -> 10, BaselinePosition -> Scaled[0.05], ImagePadding -> 1],TemplateBox[{3}, "Spacer1"],StyleBox[ "\"GetKeyValuePattern\"", FontColor -> RGBColor[0.2784313725490196, 0.2784313725490196, 0.2784313725490196], ShowAutoStyles -> False, ShowStringCharacters -> False, FontSize -> 0.78 Inherited, FontFamily -> "Roboto", Selectable -> True, FontWeight -> Dynamic[ If[CurrentValue["CellStyleName"] === "Input", "DemiBold", Plain]], StripOnInput -> False]}, "Row", DisplayFunction->(PaneBox[ RowBox[{ TemplateSlotSequence[1, "\[InvisibleSpace]"]}], BaselinePosition -> Center]& ), InterpretationFunction->(RowBox[{"Row", "[", RowBox[{ RowBox[{"{", TemplateSlotSequence[1, ","], "}"}], ",", RowBox[{"BaselinePosition", "\[Rule]", "Center"}]}], "]"}]& )], Selectable -> False, Background->RGBColor[ 0.9686274509803922, 0.9686274509803922, 0.9686274509803922], ContentPadding->False, FrameMargins->{{3, 4}, {0, -2}}, FrameStyle->Directive[ AbsoluteThickness[1], RGBColor[0.8627450980392157, 0.8627450980392157, 0.8627450980392157]], RoundingRadius->3, StripOnInput->False], ResourceFunction["GetKeyValuePattern"], BoxID -> "GetKeyValuePattern"], "[", RowBox[{"a", ",", "2"}], "]"}]], "Input", CellLabel->"In[83]:=", CellID->298857782], Cell[BoxData[ RowBox[{"KeyValuePattern", "[", RowBox[{"{", RowBox[{ RowBox[{"\<\"a\"\>", "\[Rule]", "_Quantity"}], ",", RowBox[{"\<\"b\"\>", "\[Rule]", "_String"}], ",", RowBox[{"\<\"c\"\>", "\[Rule]", RowBox[{"KeyValuePattern", "[", RowBox[{"{", RowBox[{ RowBox[{"\<\"d\"\>", "\[Rule]", "_Real"}], ",", RowBox[{"\<\"e\"\>", "\[Rule]", "_Association"}]}], "}"}], "]"}]}]}], "}"}], "]"}]], "Output", CellChangeTimes->{3.7482857076034145`*^9}, CellLabel->"Out[83]=", CellID->355183226] }, Open ]], Cell["Use every level:", "Text", CellID->33318161], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ InterpretationBox[ FrameBox[ TemplateBox[{GraphicsBox[{ RGBColor[0.9882352941176471, 0.4, 0.25098039215686274`], Thickness[ Dynamic[ If[CurrentValue["CellStyleName"] === "Input", 0.2, 0.1]]], CircleBox[{0, 0}]}, ImageSize -> 10, BaselinePosition -> Scaled[0.05], ImagePadding -> 1],TemplateBox[{3}, "Spacer1"],StyleBox[ "\"GetKeyValuePattern\"", FontColor -> RGBColor[0.2784313725490196, 0.2784313725490196, 0.2784313725490196], ShowAutoStyles -> False, ShowStringCharacters -> False, FontSize -> 0.78 Inherited, FontFamily -> "Roboto", Selectable -> True, FontWeight -> Dynamic[ If[CurrentValue["CellStyleName"] === "Input", "DemiBold", Plain]], StripOnInput -> False]}, "Row", DisplayFunction->(PaneBox[ RowBox[{ TemplateSlotSequence[1, "\[InvisibleSpace]"]}], BaselinePosition -> Center]& ), InterpretationFunction->(RowBox[{"Row", "[", RowBox[{ RowBox[{"{", TemplateSlotSequence[1, ","], "}"}], ",", RowBox[{"BaselinePosition", "\[Rule]", "Center"}]}], "]"}]& )], Selectable -> False, Background->RGBColor[ 0.9686274509803922, 0.9686274509803922, 0.9686274509803922], ContentPadding->False, FrameMargins->{{3, 4}, {0, -2}}, FrameStyle->Directive[ AbsoluteThickness[1], RGBColor[0.8627450980392157, 0.8627450980392157, 0.8627450980392157]], RoundingRadius->3, StripOnInput->False], ResourceFunction["GetKeyValuePattern"], BoxID -> "GetKeyValuePattern"], "[", RowBox[{"a", ",", "Infinity"}], "]"}]], "Input", CellLabel->"In[84]:=", CellID->46300270], Cell[BoxData[ RowBox[{"KeyValuePattern", "[", RowBox[{"{", RowBox[{ RowBox[{"\<\"a\"\>", "\[Rule]", "_Quantity"}], ",", RowBox[{"\<\"b\"\>", "\[Rule]", "_String"}], ",", RowBox[{"\<\"c\"\>", "\[Rule]", RowBox[{"KeyValuePattern", "[", RowBox[{"{", RowBox[{ RowBox[{"\<\"d\"\>", "\[Rule]", "_Real"}], ",", RowBox[{"\<\"e\"\>", "\[Rule]", RowBox[{"KeyValuePattern", "[", RowBox[{"{", RowBox[{"\<\"f\"\>", "\[Rule]", "_Symbol"}], "}"}], "]"}]}]}], "}"}], "]"}]}]}], "}"}], "]"}]], "Output", CellChangeTimes->{3.7482857131152563`*^9}, CellLabel->"Out[84]=", CellID->719320842] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Options", "Subsection", CellID->12910112], Cell[CellGroupData[{ Cell["MakeBoxes", "Subsubsection", CellChangeTimes->{{3.748285756510013*^9, 3.7482857577339764`*^9}}, CellID->789175104], Cell["\<\ Get formatted output for easier copy and paste into an editor:\ \>", "Text", CellID->489945725], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ InterpretationBox[ FrameBox[ TemplateBox[{GraphicsBox[{ RGBColor[0.9882352941176471, 0.4, 0.25098039215686274`], Thickness[ Dynamic[ If[CurrentValue["CellStyleName"] === "Input", 0.2, 0.1]]], CircleBox[{0, 0}]}, ImageSize -> 10, BaselinePosition -> Scaled[0.05], ImagePadding -> 1],TemplateBox[{3}, "Spacer1"],StyleBox[ "\"GetKeyValuePattern\"", FontColor -> RGBColor[0.2784313725490196, 0.2784313725490196, 0.2784313725490196], ShowAutoStyles -> False, ShowStringCharacters -> False, FontSize -> 0.78 Inherited, FontFamily -> "Roboto", Selectable -> True, FontWeight -> Dynamic[ If[CurrentValue["CellStyleName"] === "Input", "DemiBold", Plain]], StripOnInput -> False]}, "Row", DisplayFunction->(PaneBox[ RowBox[{ TemplateSlotSequence[1, "\[InvisibleSpace]"]}], BaselinePosition -> Center]& ), InterpretationFunction->(RowBox[{"Row", "[", RowBox[{ RowBox[{"{", TemplateSlotSequence[1, ","], "}"}], ",", RowBox[{"BaselinePosition", "\[Rule]", "Center"}]}], "]"}]& )], Selectable -> False, Background->RGBColor[ 0.9686274509803922, 0.9686274509803922, 0.9686274509803922], ContentPadding->False, FrameMargins->{{3, 4}, {0, -2}}, FrameStyle->Directive[ AbsoluteThickness[1], RGBColor[0.8627450980392157, 0.8627450980392157, 0.8627450980392157]], RoundingRadius->3, StripOnInput->False], ResourceFunction["GetKeyValuePattern"], BoxID -> "GetKeyValuePattern"], "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"<|", RowBox[{ RowBox[{"\"\\"", "\[Rule]", RowBox[{"Quantity", "[", RowBox[{"1", ",", "\"\\""}], "]"}]}], ",", RowBox[{"\"\\"", "\[Rule]", "\"\\""}], ",", RowBox[{"\"\\"", "\[Rule]", RowBox[{"<|", RowBox[{ RowBox[{"\"\\"", "\[Rule]", "2.2"}], ",", RowBox[{"\"\\"", "\[Rule]", RowBox[{"<|", RowBox[{ RowBox[{"\"\\"", "\[Rule]", "x"}], ",", RowBox[{"\"\\"", "\[Rule]", RowBox[{"Range", "[", "10", "]"}]}]}], "|>"}]}]}], "|>"}]}]}], "|>"}], ",", "\[IndentingNewLine]", "Infinity", ",", "\[IndentingNewLine]", RowBox[{"\"\\"", "\[Rule]", "True"}]}], "\[IndentingNewLine]", "]"}]], "Input", CellChangeTimes->{{3.7482857810983067`*^9, 3.7482857877511168`*^9}}, CellLabel->"In[86]:=", CellID->76144485], Cell[BoxData[ RowBox[{"KeyValuePattern", "[", "\n", "\t", RowBox[{"{", "\n", "\t\t", RowBox[{ RowBox[{"\<\"a\"\>", " ", "\[Rule]", " ", "_Quantity"}], ",", " ", RowBox[{"\<\"b\"\>", " ", "\[Rule]", " ", "_String"}], ",", " ", RowBox[{"\<\"c\"\>", " ", "\[Rule]", " ", RowBox[{"KeyValuePattern", "[", "\n", "\t\t\t", RowBox[{"{", "\n", "\t\t\t\t", RowBox[{ RowBox[{"\<\"d\"\>", " ", "\[Rule]", " ", "_Real"}], ",", "\n", "\t\t\t\t", RowBox[{"\<\"e\"\>", " ", "\[Rule]", " ", RowBox[{"KeyValuePattern", "[", RowBox[{"{", RowBox[{ RowBox[{"\<\"f\"\>", " ", "\[Rule]", " ", "_Symbol"}], ",", " ", RowBox[{"\<\"g\"\>", " ", "\[Rule]", " ", "_List"}]}], "}"}], "]"}]}]}], "\n", "\t\t\t", "}"}], "\n", "\t\t", "]"}]}]}], "\n", "\t", "}"}], "\n", "]"}]], "Output", CellChangeTimes->{{3.7482857659887414`*^9, 3.748285789754057*^9}}, CellLabel->"Out[86]=", CellID->135482329] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["QuantityPatterns", "Subsubsection", CellChangeTimes->{3.7482858068285675`*^9}, CellID->426684827], Cell[TextData[{ "Create patterns using ", Cell[BoxData[ ButtonBox["Quantity", BaseStyle->"Link"]], "InlineFormula"], " units:" }], "Text", CellChangeTimes->{{3.7482858197962217`*^9, 3.748285835245771*^9}}, CellID->185619208], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"kvp", "=", RowBox[{ InterpretationBox[ FrameBox[ TemplateBox[{GraphicsBox[{ RGBColor[0.9882352941176471, 0.4, 0.25098039215686274`], Thickness[ Dynamic[ If[CurrentValue["CellStyleName"] === "Input", 0.2, 0.1]]], CircleBox[{0, 0}]}, ImageSize -> 10, BaselinePosition -> Scaled[0.05], ImagePadding -> 1],TemplateBox[{3}, "Spacer1"],StyleBox[ "\"GetKeyValuePattern\"", FontColor -> RGBColor[0.2784313725490196, 0.2784313725490196, 0.2784313725490196], ShowAutoStyles -> False, ShowStringCharacters -> False, FontSize -> 0.78 Inherited, FontFamily -> "Roboto", Selectable -> True, FontWeight -> Dynamic[ If[CurrentValue["CellStyleName"] === "Input", "DemiBold", Plain]], StripOnInput -> False]}, "Row", DisplayFunction->(PaneBox[ RowBox[{ TemplateSlotSequence[1, "\[InvisibleSpace]"]}], BaselinePosition -> Center]& ), InterpretationFunction->(RowBox[{"Row", "[", RowBox[{ RowBox[{"{", TemplateSlotSequence[1, ","], "}"}], ",", RowBox[{"BaselinePosition", "\[Rule]", "Center"}]}], "]"}]& )], Selectable -> False, Background->RGBColor[ 0.9686274509803922, 0.9686274509803922, 0.9686274509803922], ContentPadding->False, FrameMargins->{{3, 4}, {0, -2}}, FrameStyle->Directive[ AbsoluteThickness[1], RGBColor[0.8627450980392157, 0.8627450980392157, 0.8627450980392157]], RoundingRadius->3, StripOnInput->False], ResourceFunction["GetKeyValuePattern"], BoxID -> "GetKeyValuePattern"], "[", RowBox[{ RowBox[{"<|", RowBox[{"\"\\"", "\[Rule]", RowBox[{"Quantity", "[", RowBox[{"20", ",", "\"\\""}], "]"}]}], "|>"}], ",", RowBox[{"\"\\"", "\[Rule]", "True"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.74828584139158*^9, 3.748285850685312*^9}}, CellLabel->"In[87]:=", CellID->163598946], Cell[BoxData[ RowBox[{"KeyValuePattern", "[", RowBox[{"{", RowBox[{"\<\"Time\"\>", "\[Rule]", TemplateBox[{"_","\"s\"","seconds","\"Seconds\""}, "Quantity"]}], "}"}], "]"}]], "Output", CellChangeTimes->{3.7482858512212954`*^9}, CellLabel->"Out[87]=", CellID->222452341] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"MatchQ", "[", RowBox[{ RowBox[{"<|", RowBox[{"\"\\"", "\[Rule]", RowBox[{"Quantity", "[", RowBox[{"2", ",", "\"\\""}], "]"}]}], "|>"}], ",", "kvp"}], "]"}]], "Input", CellLabel->"In[88]:=", CellID->146830123], Cell[BoxData["True"], "Output", CellChangeTimes->{3.7482858613160048`*^9}, CellLabel->"Out[88]=", CellID->70043176] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"MatchQ", "[", RowBox[{ RowBox[{"<|", RowBox[{"\"\\"", "\[Rule]", RowBox[{"Quantity", "[", RowBox[{"2", ",", "\"\\""}], "]"}]}], "|>"}], ",", "kvp"}], "]"}]], "Input", CellLabel->"In[89]:=", CellID->121400972], Cell[BoxData["False"], "Output", CellChangeTimes->{3.7482858623669786`*^9}, CellLabel->"Out[89]=", CellID->291348236] }, Open ]], Cell[TextData[{ "Don't match specific ", Cell[BoxData[ ButtonBox["Quantity", BaseStyle->"Link"]], "InlineFormula"], " types:" }], "Text", CellID->601309], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"kvp", "=", RowBox[{ InterpretationBox[ FrameBox[ TemplateBox[{GraphicsBox[{ RGBColor[0.9882352941176471, 0.4, 0.25098039215686274`], Thickness[ Dynamic[ If[CurrentValue["CellStyleName"] === "Input", 0.2, 0.1]]], CircleBox[{0, 0}]}, ImageSize -> 10, BaselinePosition -> Scaled[0.05], ImagePadding -> 1],TemplateBox[{3}, "Spacer1"],StyleBox[ "\"GetKeyValuePattern\"", FontColor -> RGBColor[0.2784313725490196, 0.2784313725490196, 0.2784313725490196], ShowAutoStyles -> False, ShowStringCharacters -> False, FontSize -> 0.78 Inherited, FontFamily -> "Roboto", Selectable -> True, FontWeight -> Dynamic[ If[CurrentValue["CellStyleName"] === "Input", "DemiBold", Plain]], StripOnInput -> False]}, "Row", DisplayFunction->(PaneBox[ RowBox[{ TemplateSlotSequence[1, "\[InvisibleSpace]"]}], BaselinePosition -> Center]& ), InterpretationFunction->(RowBox[{"Row", "[", RowBox[{ RowBox[{"{", TemplateSlotSequence[1, ","], "}"}], ",", RowBox[{"BaselinePosition", "\[Rule]", "Center"}]}], "]"}]& )], Selectable -> False, Background->RGBColor[ 0.9686274509803922, 0.9686274509803922, 0.9686274509803922], ContentPadding->False, FrameMargins->{{3, 4}, {0, -2}}, FrameStyle->Directive[ AbsoluteThickness[1], RGBColor[0.8627450980392157, 0.8627450980392157, 0.8627450980392157]], RoundingRadius->3, StripOnInput->False], ResourceFunction["GetKeyValuePattern"], BoxID -> "GetKeyValuePattern"], "[", RowBox[{ RowBox[{"<|", RowBox[{"\"\\"", "\[Rule]", RowBox[{"Quantity", "[", RowBox[{"20", ",", "\"\\""}], "]"}]}], "|>"}], ",", RowBox[{"\"\\"", "\[Rule]", "False"}]}], "]"}]}]], "Input", CellLabel->"In[90]:=", CellID->4960599], Cell[BoxData[ RowBox[{"KeyValuePattern", "[", RowBox[{"{", RowBox[{"\<\"Time\"\>", "\[Rule]", "_Quantity"}], "}"}], "]"}]], "Output", CellChangeTimes->{3.748285867120843*^9}, CellLabel->"Out[90]=", CellID->189152121] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"MatchQ", "[", RowBox[{ RowBox[{"<|", RowBox[{"\"\\"", "\[Rule]", RowBox[{"Quantity", "[", RowBox[{"2", ",", "\"\\""}], "]"}]}], "|>"}], ",", "kvp"}], "]"}]], "Input", CellLabel->"In[91]:=", CellID->88185915], Cell[BoxData["True"], "Output", CellChangeTimes->{3.7482858692327805`*^9}, CellLabel->"Out[91]=", CellID->64116019] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"MatchQ", "[", RowBox[{ RowBox[{"<|", RowBox[{"\"\\"", "\[Rule]", RowBox[{"Quantity", "[", RowBox[{"2", ",", "\"\\""}], "]"}]}], "|>"}], ",", "kvp"}], "]"}]], "Input", CellLabel->"In[92]:=", CellID->439676092], Cell[BoxData["True"], "Output", CellChangeTimes->{3.748285870173768*^9}, CellLabel->"Out[92]=", CellID->420717546] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Applications", "Subsection", CellID->261463108], Cell["\<\ Create a function that returns data from the cloud while making sure the \ structure of the data matches a sample:\ \>", "Text", CellID->345977704], Cell[BoxData[ RowBox[{ RowBox[{"obj", "=", RowBox[{"CloudDeploy", "[", RowBox[{ RowBox[{"Delayed", "[", RowBox[{ RowBox[{"<|", RowBox[{ RowBox[{"\"\\"", "\[Rule]", "$RequesterWolframID"}], ",", RowBox[{"\"\\"", "\[Rule]", RowBox[{"<|", RowBox[{ RowBox[{"\"\\"", "\[Rule]", "Now"}], ",", RowBox[{"\"\\"", "\[Rule]", RowBox[{"UnitConvert", "[", RowBox[{ RowBox[{"DateDifference", "[", RowBox[{"Now", ",", RowBox[{"DayRound", "[", RowBox[{"Now", ",", " ", "\"\\""}], "]"}]}], "]"}], ",", "\"\\""}], "]"}]}]}], "|>"}]}]}], "|>"}], ",", "\"\\""}], "]"}], ",", RowBox[{"Permissions", "\[Rule]", "\"\\""}]}], "]"}]}], ";"}]], "Input", CellLabel->"In[93]:=", CellID->561233317], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"sample", "=", RowBox[{"URLExecute", "[", RowBox[{"obj", ",", RowBox[{"{", "}"}], ",", "\"\\""}], "]"}]}]], "Input", CellChangeTimes->{{3.74828588798624*^9, 3.748285890054182*^9}}, CellLabel->"In[94]:=", CellID->1493405], Cell[BoxData[ RowBox[{"\[LeftAssociation]", RowBox[{ RowBox[{"\<\"ID\"\>", "\[Rule]", "\<\"richardh@wolfram.com\"\>"}], ",", RowBox[{"\<\"Data\"\>", "\[Rule]", RowBox[{"\[LeftAssociation]", RowBox[{ RowBox[{"\<\"Timestamp\"\>", "\[Rule]", TemplateBox[{RowBox[{"\"Thu 11 Oct 2018 17:31:33\"", StyleBox[ RowBox[{"\"GMT\"", "\[InvisibleSpace]", StyleBox[ RowBox[{"-", "5.`"}], NumberMarks -> False, StripOnInput -> False]}], FontColor -> GrayLevel[0.5]]}], RowBox[{"DateObject", "[", RowBox[{ RowBox[{"{", RowBox[{ "2018", ",", "10", ",", "11", ",", "17", ",", "31", ",", "33.324672`8.275340863697632"}], "}"}], ",", "\"Instant\"", ",", "\"Gregorian\"", ",", RowBox[{"-", "5.`"}]}], "]"}]}, "DateObject", Editable->False]}], ",", RowBox[{"\<\"TimeRemaining\"\>", "\[Rule]", TemplateBox[{"30.474076476626923`","\"h\"","hours","\"Hours\""}, "Quantity"]}]}], "\[RightAssociation]"}]}]}], "\[RightAssociation]"}]], "Output", CellChangeTimes->{3.7482858923631144`*^9}, CellLabel->"Out[94]=", CellID->538872800] }, Open ]], Cell["\<\ Now we'll create a pattern to test against for all responses from the server:\ \ \>", "Text", CellID->511828481], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"$expectedPattern", "=", RowBox[{ InterpretationBox[ FrameBox[ TemplateBox[{GraphicsBox[{ RGBColor[0.9882352941176471, 0.4, 0.25098039215686274`], Thickness[ Dynamic[ If[CurrentValue["CellStyleName"] === "Input", 0.2, 0.1]]], CircleBox[{0, 0}]}, ImageSize -> 10, BaselinePosition -> Scaled[0.05], ImagePadding -> 1],TemplateBox[{3}, "Spacer1"],StyleBox[ "\"GetKeyValuePattern\"", FontColor -> RGBColor[0.2784313725490196, 0.2784313725490196, 0.2784313725490196], ShowAutoStyles -> False, ShowStringCharacters -> False, FontSize -> 0.78 Inherited, FontFamily -> "Roboto", Selectable -> True, FontWeight -> Dynamic[ If[CurrentValue["CellStyleName"] === "Input", "DemiBold", Plain]], StripOnInput -> False]}, "Row", DisplayFunction->(PaneBox[ RowBox[{ TemplateSlotSequence[1, "\[InvisibleSpace]"]}], BaselinePosition -> Center]& ), InterpretationFunction->(RowBox[{"Row", "[", RowBox[{ RowBox[{"{", TemplateSlotSequence[1, ","], "}"}], ",", RowBox[{"BaselinePosition", "\[Rule]", "Center"}]}], "]"}]& )], Selectable -> False, Background->RGBColor[ 0.9686274509803922, 0.9686274509803922, 0.9686274509803922], ContentPadding->False, FrameMargins->{{3, 4}, {0, -2}}, FrameStyle->Directive[ AbsoluteThickness[1], RGBColor[0.8627450980392157, 0.8627450980392157, 0.8627450980392157]], RoundingRadius->3, StripOnInput->False], ResourceFunction["GetKeyValuePattern"], BoxID -> "GetKeyValuePattern"], "[", RowBox[{"sample", ",", "Infinity", ",", RowBox[{"\"\\"", "\[Rule]", "True"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.7482858970230074`*^9, 3.7482859080806875`*^9}}, CellLabel->"In[96]:=", CellID->11552338], Cell[BoxData[ RowBox[{"KeyValuePattern", "[", RowBox[{"{", RowBox[{ RowBox[{"\<\"Data\"\>", "\[Rule]", RowBox[{"KeyValuePattern", "[", RowBox[{"{", RowBox[{ RowBox[{"\<\"TimeRemaining\"\>", "\[Rule]", TemplateBox[{"_","\"h\"","hours","\"Hours\""}, "Quantity"]}], ",", RowBox[{"\<\"Timestamp\"\>", "\[Rule]", "_DateObject"}]}], "}"}], "]"}]}], ",", RowBox[{"\<\"ID\"\>", "\[Rule]", "_String"}]}], "}"}], "]"}]], "Output", CellChangeTimes->{{3.7482858993099337`*^9, 3.748285908924639*^9}}, CellLabel->"Out[96]=", CellID->846176818] }, Open ]], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"myCloudInfo", "[", "]"}], ":=", RowBox[{"Replace", "[", RowBox[{ RowBox[{"URLExecute", "[", "obj", "]"}], ",", RowBox[{ RowBox[{"Except", "[", "$expectedPattern", "]"}], "\[RuleDelayed]", RowBox[{"Failure", "[", RowBox[{"\"\\"", ",", RowBox[{"<|", RowBox[{ "\"\\"", "\[RuleDelayed]", "\"\\""}], "|>"}]}], "]"}]}]}], "]"}]}], ";"}]], "Input", CellLabel->"In[97]:=", CellID->321770204], Cell[TextData[{ "Under normal circumstances, the function just returns the output from the \ deployed ", Cell[BoxData[ ButtonBox["CloudObject", BaseStyle->"Link"]], "InlineFormula"], ":" }], "Text", CellID->73383537], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"myCloudInfo", "[", "]"}]], "Input", CellLabel->"In[98]:=", CellID->198914141], Cell[BoxData[ RowBox[{"\[LeftAssociation]", RowBox[{ RowBox[{"\<\"ID\"\>", "\[Rule]", "\<\"richardh@wolfram.com\"\>"}], ",", RowBox[{"\<\"Data\"\>", "\[Rule]", RowBox[{"\[LeftAssociation]", RowBox[{ RowBox[{"\<\"Timestamp\"\>", "\[Rule]", TemplateBox[{RowBox[{"\"Thu 11 Oct 2018 17:32:02\"", StyleBox[ RowBox[{"\"GMT\"", "\[InvisibleSpace]", StyleBox[ RowBox[{"-", "5.`"}], NumberMarks -> False, StripOnInput -> False]}], FontColor -> GrayLevel[0.5]]}], RowBox[{"DateObject", "[", RowBox[{ RowBox[{"{", RowBox[{ "2018", ",", "10", ",", "11", ",", "17", ",", "32", ",", "2.181013`7.091233242827461"}], "}"}], ",", "\"Instant\"", ",", "\"Gregorian\"", ",", RowBox[{"-", "5.`"}]}], "]"}]}, "DateObject", Editable->False]}], ",", RowBox[{"\<\"TimeRemaining\"\>", "\[Rule]", TemplateBox[{"30.466060826910866`","\"h\"","hours","\"Hours\""}, "Quantity"]}]}], "\[RightAssociation]"}]}]}], "\[RightAssociation]"}]], "Output", CellChangeTimes->{3.7482859213192844`*^9}, CellLabel->"Out[98]=", CellID->576942997] }, Open ]], Cell["\<\ Now if we encounter data types that we didn't plan for, we can have error \ handling:\ \>", "Text", CellID->136075083], Cell[BoxData[ RowBox[{ RowBox[{"CloudDisconnect", "[", "]"}], ";"}]], "Input", CellLabel->"In[99]:=", CellID->159379616], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"myCloudInfo", "[", "]"}]], "Input", CellLabel->"In[100]:=", CellID->409846346], Cell[BoxData[ InterpretationBox[ RowBox[{ TagBox["Failure", "SummaryHead"], "[", DynamicModuleBox[{Typeset`open$$ = False, Typeset`embedState$$ = "Ready"}, TemplateBox[{PaneSelectorBox[{False -> GridBox[{{ FrameBox[ StyleBox["\"\[WarningSign]\"", Directive["Message", 35], StripOnInput -> False], ContentPadding -> False, FrameStyle -> None, FrameMargins -> {{0, 0}, {0, 0}}, StripOnInput -> False], GridBox[{{ RowBox[{ TagBox[ TemplateBox[{"\"MessageTemplate\"", "\": \""}, "RowDefault"], "SummaryItemAnnotation"], "\[InvisibleSpace]", TagBox[ "\"Recieved unexpected data from the server.\"", "SummaryItem"]}]}, { RowBox[{ TagBox[ TemplateBox[{"\"Tag\"", "\": \""}, "RowDefault"], "SummaryItemAnnotation"], "\[InvisibleSpace]", TagBox["\"UnrecognizedData\"", "SummaryItem"]}]}}, GridBoxAlignment -> { "Columns" -> {{Left}}, "Rows" -> {{Automatic}}}, AutoDelete -> False, GridBoxItemSize -> { "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, GridBoxSpacings -> {"Columns" -> {{2}}, "Rows" -> {{Automatic}}}, BaseStyle -> { ShowStringCharacters -> False, NumberMarks -> False, PrintPrecision -> 3, ShowSyntaxStyles -> False}]}}, GridBoxAlignment -> {"Rows" -> {{Top}}}, AutoDelete -> False, GridBoxItemSize -> { "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, BaselinePosition -> {1, 1}], True -> GridBox[{{ FrameBox[ StyleBox["\"\[WarningSign]\"", Directive["Message", 35], StripOnInput -> False], ContentPadding -> False, FrameStyle -> None, FrameMargins -> {{0, 0}, {0, 0}}, StripOnInput -> False], GridBox[{{ RowBox[{ TagBox[ TemplateBox[{"\"MessageTemplate\"", "\": \""}, "RowDefault"], "SummaryItemAnnotation"], "\[InvisibleSpace]", TagBox[ "\"Recieved unexpected data from the server.\"", "SummaryItem"]}]}, { RowBox[{ TagBox[ TemplateBox[{"\"Tag\"", "\": \""}, "RowDefault"], "SummaryItemAnnotation"], "\[InvisibleSpace]", TagBox["\"UnrecognizedData\"", "SummaryItem"]}]}}, GridBoxAlignment -> { "Columns" -> {{Left}}, "Rows" -> {{Automatic}}}, AutoDelete -> False, GridBoxItemSize -> { "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, GridBoxSpacings -> {"Columns" -> {{2}}, "Rows" -> {{Automatic}}}, BaseStyle -> { ShowStringCharacters -> False, NumberMarks -> False, PrintPrecision -> 3, ShowSyntaxStyles -> False}]}}, GridBoxAlignment -> {"Rows" -> {{Top}}}, AutoDelete -> False, GridBoxItemSize -> { "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, BaselinePosition -> {1, 1}]}, Dynamic[Typeset`open$$], ImageSize -> Automatic]}, "SummaryPanel"], DynamicModuleValues:>{}], "]"}], Failure["UnrecognizedData", Association[ "MessageTemplate" :> "Recieved unexpected data from the server."]], Editable->False, SelectWithContents->True, Selectable->False]], "Output", CellChangeTimes->{3.748285931622015*^9}, CellLabel->"Out[100]=", CellID->382579] }, Open ]] }, Open ]] }, WindowSize->Automatic, WindowMargins->Automatic, Visible->False, FrontEndVersion->"11.3 for Linux x86 (64-bit) (March 6, 2018)", StyleDefinitions->"Default.nb" ] (* End of Notebook Content *) (* Internal cache information *) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[CellGroupData[{ Cell[580, 22, 54, 1, 70, "Subsection",ExpressionUUID->"fdae6105-f4c1-4a5f-87a6-b41813b37a09", CellID->2615373], Cell[637, 25, 157, 7, 70, "Text",ExpressionUUID->"957a942d-dcc2-40f2-8290-c4fea416d875", CellID->9472558], Cell[CellGroupData[{ Cell[819, 36, 117, 3, 70, "Input",ExpressionUUID->"9621a225-25f0-4c91-ae2d-84f3984699fe", CellID->437286191], Cell[939, 41, 1614, 39, 70, "Output",ExpressionUUID->"19723501-7b75-4ba0-b733-39ee9cba4398", CellID->321173561] }, Open ]], Cell[2568, 83, 336, 12, 70, "Text",ExpressionUUID->"dc8db247-6bbd-4787-ad82-fb84b30b8fd3", CellID->329918097], Cell[CellGroupData[{ Cell[2929, 99, 1906, 46, 70, "Input",ExpressionUUID->"74822798-68c5-43de-894e-0af7c3c40876", CellID->3343119], Cell[4838, 147, 361, 10, 70, "Output",ExpressionUUID->"60d51df6-8052-4098-bfcb-093613152713", CellID->158335564] }, Open ]], Cell[5214, 160, 72, 1, 70, "Text",ExpressionUUID->"6fdab45c-b95f-43b8-9341-c857e31fb00e", CellID->123985044], Cell[CellGroupData[{ Cell[5311, 165, 2278, 57, 70, "Input",ExpressionUUID->"52f44151-a76f-4bf6-9991-203938a4bee8", CellID->97294300], Cell[7592, 224, 357, 10, 70, "Output",ExpressionUUID->"d96fdaec-f5f5-49d1-9069-ac5467d1841d", CellID->503382387] }, Open ]], Cell[7964, 237, 62, 1, 70, "Text",ExpressionUUID->"ed6d0950-c77b-4101-b03e-8b6c26821b1b", CellID->511084616], Cell[CellGroupData[{ Cell[8051, 242, 1725, 42, 70, "Input",ExpressionUUID->"957dfa32-1a87-4e70-8075-e58822a72e70", CellID->298857782], Cell[9779, 286, 550, 15, 70, "Output",ExpressionUUID->"1c9e65e3-436a-4867-8639-8d2bedb19bb6", CellID->355183226] }, Open ]], Cell[10344, 304, 51, 1, 70, "Text",ExpressionUUID->"e1b0e652-a4b7-4319-be09-2f13dbed9c54", CellID->33318161], Cell[CellGroupData[{ Cell[10420, 309, 1731, 42, 70, "Input",ExpressionUUID->"0f8cc921-9543-40a3-b8fa-15ca5301a0f6", CellID->46300270], Cell[12154, 353, 675, 18, 70, "Output",ExpressionUUID->"80a9b5e3-ae67-4533-b4fa-652eb35f4e3a", CellID->719320842] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[12878, 377, 48, 1, 70, "Subsection",ExpressionUUID->"6e8852ad-085b-449c-a67b-dd37943c8f9f", CellID->12910112], Cell[CellGroupData[{ Cell[12951, 382, 122, 2, 70, "Subsubsection",ExpressionUUID->"a666df12-1f0c-4e3a-995e-ee959e773d0b", CellID->789175104], Cell[13076, 386, 106, 3, 70, "Text",ExpressionUUID->"f865372a-ffb6-4dda-aa1f-9a440cd3b492", CellID->489945725], Cell[CellGroupData[{ Cell[13207, 393, 2587, 63, 70, "Input",ExpressionUUID->"907a0652-fed5-422f-b2dc-35ecc6ef44a7", CellID->76144485], Cell[15797, 458, 1010, 22, 70, "Output",ExpressionUUID->"eba6cb35-a243-492d-8336-ab5c73c218ba", CellID->135482329] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[16856, 486, 105, 2, 70, "Subsubsection",ExpressionUUID->"0207c93a-0f05-4ec8-adf5-a80044d1f568", CellID->426684827], Cell[16964, 490, 234, 8, 70, "Text",ExpressionUUID->"c1c45dbb-5a72-4c09-91b9-57b5a09e647e", CellID->185619208], Cell[CellGroupData[{ Cell[17223, 502, 2067, 50, 70, "Input",ExpressionUUID->"6a54ef18-1d93-4f7e-9b7c-8d6fee8138db", CellID->163598946], Cell[19293, 554, 290, 8, 70, "Output",ExpressionUUID->"fde5c215-573a-4e6b-9049-b0e2f82cb45d", CellID->222452341] }, Open ]], Cell[CellGroupData[{ Cell[19620, 567, 278, 9, 70, "Input",ExpressionUUID->"b196d1a3-72d4-4584-80a7-c7ade8bb373b", CellID->146830123], Cell[19901, 578, 118, 3, 70, "Output",ExpressionUUID->"c44a8fd5-9d56-49d7-8f2e-b0080c146191", CellID->70043176] }, Open ]], Cell[CellGroupData[{ Cell[20056, 586, 276, 9, 70, "Input",ExpressionUUID->"cfcb65de-d3df-41ff-b3dc-f2a9f20f27f7", CellID->121400972], Cell[20335, 597, 120, 3, 70, "Output",ExpressionUUID->"cbe91041-b4c3-4de1-8e8c-2738b0877b9b", CellID->291348236] }, Open ]], Cell[20470, 603, 162, 7, 70, "Text",ExpressionUUID->"de671400-7c91-4895-8109-23728ab06203", CellID->601309], Cell[CellGroupData[{ Cell[20657, 614, 2001, 49, 70, "Input",ExpressionUUID->"22ccecf9-0c80-49a9-9cbf-2ce7537430d4", CellID->4960599], Cell[22661, 665, 227, 6, 70, "Output",ExpressionUUID->"d2f43354-7032-4c08-ba3a-9dd23c5647c4", CellID->189152121] }, Open ]], Cell[CellGroupData[{ Cell[22925, 676, 277, 9, 70, "Input",ExpressionUUID->"1f6e214d-8e51-408c-a89b-e3f1f72203ca", CellID->88185915], Cell[23205, 687, 118, 3, 70, "Output",ExpressionUUID->"08068dea-9393-4e79-b5c2-2ae2d0a94ebe", CellID->64116019] }, Open ]], Cell[CellGroupData[{ Cell[23360, 695, 276, 9, 70, "Input",ExpressionUUID->"38436f98-941f-474b-99b1-82060bc827a3", CellID->439676092], Cell[23639, 706, 117, 3, 70, "Output",ExpressionUUID->"43f5166b-48ad-4996-841b-d4ccfa84796f", CellID->420717546] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[23817, 716, 54, 1, 70, "Subsection",ExpressionUUID->"baf74138-8ec1-4791-995f-c3f04d02e3de", CellID->261463108], Cell[23874, 719, 158, 4, 70, "Text",ExpressionUUID->"aa2be79d-7d35-447b-8fde-75757aa67474", CellID->345977704], Cell[24035, 725, 982, 26, 70, "Input",ExpressionUUID->"715f1b21-2514-47f7-996c-5251fd75692b", CellID->561233317], Cell[CellGroupData[{ Cell[25042, 755, 263, 7, 70, "Input",ExpressionUUID->"a1f1ab46-31f1-4b76-8b8a-ea2d3a338df5", CellID->1493405], Cell[25308, 764, 1281, 31, 70, "Output",ExpressionUUID->"26e3b5fe-3e29-4f60-8f7f-ca2f8080f6a9", CellID->538872800] }, Open ]], Cell[26604, 798, 123, 4, 70, "Text",ExpressionUUID->"90d4db45-7a70-4a59-bf4e-6499c511ba6b", CellID->511828481], Cell[CellGroupData[{ Cell[26752, 806, 1954, 46, 70, "Input",ExpressionUUID->"17cb314b-9b1b-4469-933b-57ad5d296d02", CellID->11552338], Cell[28709, 854, 614, 16, 70, "Output",ExpressionUUID->"b6af9336-2c43-4ea9-96da-4ee572658c51", CellID->846176818] }, Open ]], Cell[29338, 873, 601, 17, 70, "Input",ExpressionUUID->"7d930427-68e9-4649-a52f-c2e96576adf6", CellID->321770204], Cell[29942, 892, 225, 8, 70, "Text",ExpressionUUID->"6a1001b2-ed61-4ecc-a77f-3a6d32122aaf", CellID->73383537], Cell[CellGroupData[{ Cell[30192, 904, 103, 3, 70, "Input",ExpressionUUID->"9371367c-8e05-4067-aba6-4c9d4632a840", CellID->198914141], Cell[30298, 909, 1280, 31, 70, "Output",ExpressionUUID->"2941ad6d-5212-4bd6-9880-e02cb9a09528", CellID->576942997] }, Open ]], Cell[31593, 943, 129, 4, 70, "Text",ExpressionUUID->"55786424-a02d-4144-9d1f-58782bbf563d", CellID->136075083], Cell[31725, 949, 125, 4, 70, "Input",ExpressionUUID->"5d246e52-76c6-4a73-be5f-7a40a5ff3376", CellID->159379616], Cell[CellGroupData[{ Cell[31875, 957, 104, 3, 70, "Input",ExpressionUUID->"7b9b168e-79eb-4279-be98-36a042451360", CellID->409846346], Cell[31982, 962, 3809, 83, 70, "Output",ExpressionUUID->"6f41ccfe-06f8-4de3-b0eb-9ab8f1b1fb27", CellID->382579] }, Open ]] }, Open ]] } ] *) (* End of internal cache information *)