<diagram program="umletino" version="15.0.0"><zoom_level>5</zoom_level><help_text>Class diagram of the hippogym package</help_text><element><id>UMLClass</id><coordinates><x>17</x><y>133</y><w>105</w><h>95</h></coordinates><panel_attributes>HippoGym
--
+project_id: Long
-users: List[User]
-communicator: Communicator
-recoder: Recorder
-trial_config: TrialConfig
--
+deploy(s3:)
--
Responsibilities
-- Handle experiment as whole
-- Deployement for production</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>227</x><y>173</y><w>105</w><h>95</h></coordinates><panel_attributes>TrialConfig
--
-steps: Tuple[TrialStep]
-sequence: Tuple[TrialStepOp]
--
+sample(seed:int): Trial
--
Responsibilities
-- Template for Trials
-- Generate trials from seed</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>497</x><y>163</y><w>105</w><h>45</h></coordinates><panel_attributes>Sequence
--
-steps: Tuple[TrialStepOp]
--
--
Responsibilities
-- Group a sequence of steps</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>367</x><y>188</y><w>105</w><h>45</h></coordinates><panel_attributes>TrialStepOp
--
-steps: Tuple[TrialStep]
--
--
Responsibilities
-- Operation between TrialSteps</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>467</x><y>183</y><w>40</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;60;30;60;30;10;60;10</additional_attributes></element><element><id>UMLClass</id><coordinates><x>497</x><y>218</y><w>105</w><h>45</h></coordinates><panel_attributes>Split
--
-steps: Tuple[TrialStepOp]
--
--
Responsibilities
-- Split between steps</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>467</x><y>208</y><w>40</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;10;30;10;30;60;60;60</additional_attributes></element><element><id>Relation</id><coordinates><x>327</x><y>188</y><w>50</w><h>20</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;&lt;-</panel_attributes><additional_attributes>10;20;50;20;50;10;80;10</additional_attributes></element><element><id>Relation</id><coordinates><x>117</x><y>173</y><w>120</w><h>15</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;&lt;-</panel_attributes><additional_attributes>10;10;220;10</additional_attributes></element><element><id>UMLClass</id><coordinates><x>622</x><y>143</y><w>150</w><h>50</h></coordinates><panel_attributes>RandomSequence
--
-steps: Tuple[TrialStepOp]
--
sample(seed:int): Sequence
--
Responsibilities
-- Randomize the order of a sequence of steps
</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>622</x><y>198</y><w>150</w><h>50</h></coordinates><panel_attributes>RandomSplit
--
-steps: Tuple[TrialStepOp]
--
sample(seed:int): Split
--
Responsibilities
-- Randomize the split between steps</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>597</x><y>163</y><w>35</w><h>15</h></coordinates><panel_attributes>lt=&lt;.</panel_attributes><additional_attributes>10;10;50;10</additional_attributes></element><element><id>Relation</id><coordinates><x>597</x><y>218</y><w>35</w><h>15</h></coordinates><panel_attributes>lt=&lt;.</panel_attributes><additional_attributes>10;10;50;10</additional_attributes></element><element><id>Relation</id><coordinates><x>197</x><y>183</y><w>40</w><h>135</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-</panel_attributes><additional_attributes>60;10;10;10;10;250</additional_attributes></element><element><id>UMLClass</id><coordinates><x>387</x><y>278</y><w>130</w><h>70</h></coordinates><panel_attributes>Trial
--
-steps: Tuple[TrialStep]
-user_id : str
-seed: int
--
+run()
--
Responsibilities
-- Order TrialSteps in experiment for a user</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>327</x><y>203</y><w>70</w><h>90</h></coordinates><panel_attributes>lt=.&gt;</panel_attributes><additional_attributes>10;10;40;10;40;160;120;160</additional_attributes></element><element><id>Relation</id><coordinates><x>232</x><y>288</y><w>165</w><h>35</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-</panel_attributes><additional_attributes>310;10;80;10;80;50;10;50</additional_attributes></element><element><id>UMLClass</id><coordinates><x>622</x><y>258</y><w>150</w><h>50</h></coordinates><panel_attributes>SurveySplit
--
-steps: Tuple[TrialStepOp]
--
filter(user_data:SurveyResult): Split
--
Responsibilities
-- Split between steps depending on survey result</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>597</x><y>218</y><w>35</w><h>75</h></coordinates><panel_attributes>lt=&lt;.</panel_attributes><additional_attributes>10;10;30;10;30;130;50;130</additional_attributes></element><element><id>UMLClass</id><coordinates><x>67</x><y>348</y><w>105</w><h>45</h></coordinates><panel_attributes>HtmlStep
--
-html_content: str
--
--
Responsibilities
-- Show a static page to user</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>192</x><y>348</y><w>105</w><h>85</h></coordinates><panel_attributes>InteractiveStep
--
-ui_elements: Tuple[UIElement]
--
+start()
+pause()
+resume()
+end()
+run()
--
Responsibilities
-- Let the player interact
with UI elements</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>132</x><y>308</y><w>105</w><h>15</h></coordinates><panel_attributes>/TrialStep/
</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>182</x><y>318</y><w>75</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;10;10;40;130;40;130;60</additional_attributes></element><element><id>Relation</id><coordinates><x>117</x><y>318</y><w>80</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>140;10;140;40;10;40;10;60</additional_attributes></element><element><id>UMLClass</id><coordinates><x>807</x><y>358</y><w>120</w><h>75</h></coordinates><panel_attributes>UIElement
--
-messages_queue: Queue
-message_handler: MessageHandler
--

--
Responsibilities
-- Represent a dynamic element that 
the user can see and interact with</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>527</x><y>473</y><w>120</w><h>85</h></coordinates><panel_attributes>FrameWindow
--
+width: int
+height: int
--
--
Responsibilities
-- Display clickable frames in
a window to the user</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>922</x><y>473</y><w>120</w><h>85</h></coordinates><panel_attributes>TextBox
--
+text: str
+width: int
+height: int
+buttons: str
-messages_queue: Queue
-message_handler: MessageHandler
--
--
Responsibilities
-- Display an editable text box to the user</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>787</x><y>473</y><w>120</w><h>85</h></coordinates><panel_attributes>InfoPanel
--
+ text: str
+ items: List[str]
+ key_value: Dict[str, str]
--
--
Responsibilities
-- Display information to the user</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>1052</x><y>473</y><w>120</w><h>85</h></coordinates><panel_attributes>Grid
--
+tiles: List[List[Tile]]
-rows: int
-columns: int
--
--
Responsibilities
-- Display an interactive grid to the user</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>862</x><y>428</y><w>260</w><h>55</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;10;10;60;500;60;500;90</additional_attributes></element><element><id>Relation</id><coordinates><x>862</x><y>428</y><w>130</w><h>55</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;10;10;60;240;60;240;90</additional_attributes></element><element><id>Relation</id><coordinates><x>842</x><y>428</y><w>35</w><h>55</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>50;10;50;60;10;60;10;90</additional_attributes></element><element><id>Relation</id><coordinates><x>707</x><y>428</y><w>170</w><h>55</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>320;10;320;60;10;60;10;90</additional_attributes></element><element><id>UMLClass</id><coordinates><x>657</x><y>473</y><w>120</w><h>85</h></coordinates><panel_attributes>ControlPanel
--
+buttons: Tuple[Button]
+sliders: Tuple[Slider]
--
--
Responsibilities
-- Display a pannel with buttons and 
sliders the user can interact with</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>587</x><y>428</y><w>290</w><h>55</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>560;10;560;60;10;60;10;90</additional_attributes></element><element><id>UMLClass</id><coordinates><x>467</x><y>568</y><w>50</w><h>15</h></coordinates><panel_attributes>/MessageHandler/
</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>487</x><y>378</y><w>330</w><h>200</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;&lt;-</panel_attributes><additional_attributes>640;10;10;10;10;380</additional_attributes></element><element><id>UMLClass</id><coordinates><x>657</x><y>593</y><w>120</w><h>70</h></coordinates><panel_attributes>ControlPanelMessageHander
--
-messages_queue: Queue
--
--
Responsibilities
-- Handle messages from buttons and 
sliders</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>527</x><y>593</y><w>120</w><h>70</h></coordinates><panel_attributes>FrameWindowMessageHander
--
-messages_queue: Queue
--
--
Responsibilities
-- Handle mouse events and resizing
of the FrameWindow.</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>922</x><y>593</y><w>120</w><h>70</h></coordinates><panel_attributes>TextBoxMessageHander
--
-messages_queue: Queue
--
--
Responsibilities
-- Handle messages from buttons</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>1052</x><y>593</y><w>120</w><h>70</h></coordinates><panel_attributes>GridMessageHander
--
-messages_queue: Queue
--
--
Responsibilities
-- Handle messages from tiles 
interactions</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>512</x><y>568</y><w>630</w><h>35</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;10;1240;10;1240;50</additional_attributes></element><element><id>Relation</id><coordinates><x>512</x><y>568</y><w>500</w><h>35</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;10;980;10;980;50</additional_attributes></element><element><id>Relation</id><coordinates><x>512</x><y>568</y><w>385</w><h>35</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;10;750;10;440;10;440;50</additional_attributes></element><element><id>Relation</id><coordinates><x>512</x><y>568</y><w>385</w><h>35</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;10;750;10;200;10;200;50</additional_attributes></element><element><id>Relation</id><coordinates><x>582</x><y>553</y><w>15</w><h>50</h></coordinates><panel_attributes>lt=&lt;.</panel_attributes><additional_attributes>10;10;10;80</additional_attributes></element><element><id>Relation</id><coordinates><x>712</x><y>553</y><w>15</w><h>50</h></coordinates><panel_attributes>lt=&lt;.</panel_attributes><additional_attributes>10;10;10;80</additional_attributes></element><element><id>Relation</id><coordinates><x>977</x><y>553</y><w>15</w><h>50</h></coordinates><panel_attributes>lt=&lt;.</panel_attributes><additional_attributes>10;10;10;80</additional_attributes></element><element><id>Relation</id><coordinates><x>1107</x><y>553</y><w>15</w><h>50</h></coordinates><panel_attributes>lt=&lt;.</panel_attributes><additional_attributes>10;10;10;80</additional_attributes></element><element><id>UMLClass</id><coordinates><x>157</x><y>48</y><w>130</w><h>70</h></coordinates><panel_attributes>Recoder
--
-uploader: Optional[Uploader]
--
+record()
+write()
+upload()
--
Responsibilities
-- Record Trials data and upload it</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>307</x><y>58</y><w>130</w><h>70</h></coordinates><panel_attributes>Uploader
--
-s3: boto3.Resource
-bucket: str
-key : str
--
+run()
--
Responsibilities
-- Upload data to cloud infrastructure</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>282</x><y>58</y><w>35</w><h>15</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;&lt;-</panel_attributes><additional_attributes>10;10;50;10</additional_attributes></element><element><id>Relation</id><coordinates><x>117</x><y>48</y><w>50</w><h>135</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;&lt;-</panel_attributes><additional_attributes>10;250;50;250;50;10;80;10</additional_attributes></element><element><id>Relation</id><coordinates><x>292</x><y>358</y><w>525</w><h>15</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-</panel_attributes><additional_attributes>10;10;1030;10</additional_attributes></element><element><id>UMLClass</id><coordinates><x>192</x><y>458</y><w>105</w><h>90</h></coordinates><panel_attributes>GymStep
--
-ui_elements: Tuple[UIElement]
--
+run()
--
Responsibilities
-- Let the player interact
with a gym environment
(and possibly an agent)</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>242</x><y>428</y><w>15</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;10;10;60</additional_attributes></element></diagram>