psychopy 2024.2.4__py3-none-any.whl → 2025.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of psychopy might be problematic. Click here for more details.

Files changed (903) hide show
  1. psychopy/CHANGELOG.txt +208 -4
  2. psychopy/LICENSE.txt +1 -1
  3. psychopy/VERSION +1 -1
  4. psychopy/__init__.py +10 -7
  5. psychopy/alerts/__init__.py +1 -1
  6. psychopy/alerts/_alerts.py +53 -17
  7. psychopy/alerts/_errorHandler.py +3 -4
  8. psychopy/alerts/alertsCatalogue/3210.yaml +27 -0
  9. psychopy/alerts/alertsCatalogue/3610.yaml +19 -0
  10. psychopy/alerts/alertsCatalogue/4130.yaml +19 -0
  11. psychopy/alerts/alertsCatalogue/alertCategories.yaml +8 -1
  12. psychopy/alerts/alertsCatalogue/alertmsg.py +1 -1
  13. psychopy/alerts/alerttools.py +0 -16
  14. psychopy/app/Resources/betasplash.png +0 -0
  15. psychopy/app/Resources/betasplash@2x.png +0 -0
  16. psychopy/app/Resources/classic/case.png +0 -0
  17. psychopy/app/Resources/classic/case@2x.png +0 -0
  18. psychopy/app/Resources/classic/fileaudio.png +0 -0
  19. psychopy/app/Resources/classic/fileaudio@2x.png +0 -0
  20. psychopy/app/Resources/classic/filecss.png +0 -0
  21. psychopy/app/Resources/classic/filecss@2x.png +0 -0
  22. psychopy/app/Resources/classic/filecsv.png +0 -0
  23. psychopy/app/Resources/classic/filecsv@2x.png +0 -0
  24. psychopy/app/Resources/classic/filedesign.png +0 -0
  25. psychopy/app/Resources/classic/filedesign@2x.png +0 -0
  26. psychopy/app/Resources/classic/filefont.png +0 -0
  27. psychopy/app/Resources/classic/filefont@2x.png +0 -0
  28. psychopy/app/Resources/classic/filegit.png +0 -0
  29. psychopy/app/Resources/classic/filegit@2x.png +0 -0
  30. psychopy/app/Resources/classic/filehtml.png +0 -0
  31. psychopy/app/Resources/classic/filehtml@2x.png +0 -0
  32. psychopy/app/Resources/classic/fileimage.png +0 -0
  33. psychopy/app/Resources/classic/fileimage@2x.png +0 -0
  34. psychopy/app/Resources/classic/fileinfo.png +0 -0
  35. psychopy/app/Resources/classic/fileinfo@2x.png +0 -0
  36. psychopy/app/Resources/classic/filejs.png +0 -0
  37. psychopy/app/Resources/classic/filejs@2x.png +0 -0
  38. psychopy/app/Resources/classic/filejson.png +0 -0
  39. psychopy/app/Resources/classic/filejson@2x.png +0 -0
  40. psychopy/app/Resources/classic/filepkg.png +0 -0
  41. psychopy/app/Resources/classic/filepkg@2x.png +0 -0
  42. psychopy/app/Resources/classic/filepsyexp.png +0 -0
  43. psychopy/app/Resources/classic/filepsyexp@2x.png +0 -0
  44. psychopy/app/Resources/classic/filepy.png +0 -0
  45. psychopy/app/Resources/classic/filepy@2x.png +0 -0
  46. psychopy/app/Resources/classic/filetxt.png +0 -0
  47. psychopy/app/Resources/classic/filetxt@2x.png +0 -0
  48. psychopy/app/Resources/classic/fileunknown.png +0 -0
  49. psychopy/app/Resources/classic/fileunknown@2x.png +0 -0
  50. psychopy/app/Resources/classic/filevideo.png +0 -0
  51. psychopy/app/Resources/classic/filevideo@2x.png +0 -0
  52. psychopy/app/Resources/classic/find.png +0 -0
  53. psychopy/app/Resources/classic/find@2x.png +0 -0
  54. psychopy/app/Resources/classic/loop.png +0 -0
  55. psychopy/app/Resources/classic/loop@2x.png +0 -0
  56. psychopy/app/Resources/classic/regex.png +0 -0
  57. psychopy/app/Resources/classic/regex@2x.png +0 -0
  58. psychopy/app/Resources/dark/case.png +0 -0
  59. psychopy/app/Resources/dark/case@2x.png +0 -0
  60. psychopy/app/Resources/dark/fileaudio.png +0 -0
  61. psychopy/app/Resources/dark/fileaudio@2x.png +0 -0
  62. psychopy/app/Resources/dark/filecss.png +0 -0
  63. psychopy/app/Resources/dark/filecss@2x.png +0 -0
  64. psychopy/app/Resources/dark/filecsv.png +0 -0
  65. psychopy/app/Resources/dark/filecsv@2x.png +0 -0
  66. psychopy/app/Resources/dark/filedesign.png +0 -0
  67. psychopy/app/Resources/dark/filedesign@2x.png +0 -0
  68. psychopy/app/Resources/dark/filefont.png +0 -0
  69. psychopy/app/Resources/dark/filefont@2x.png +0 -0
  70. psychopy/app/Resources/dark/filegit.png +0 -0
  71. psychopy/app/Resources/dark/filegit@2x.png +0 -0
  72. psychopy/app/Resources/dark/filehtml.png +0 -0
  73. psychopy/app/Resources/dark/filehtml@2x.png +0 -0
  74. psychopy/app/Resources/dark/fileimage.png +0 -0
  75. psychopy/app/Resources/dark/fileimage@2x.png +0 -0
  76. psychopy/app/Resources/dark/fileinfo.png +0 -0
  77. psychopy/app/Resources/dark/fileinfo@2x.png +0 -0
  78. psychopy/app/Resources/dark/filejs.png +0 -0
  79. psychopy/app/Resources/dark/filejs@2x.png +0 -0
  80. psychopy/app/Resources/dark/filejson.png +0 -0
  81. psychopy/app/Resources/dark/filejson@2x.png +0 -0
  82. psychopy/app/Resources/dark/filepkg.png +0 -0
  83. psychopy/app/Resources/dark/filepkg@2x.png +0 -0
  84. psychopy/app/Resources/dark/filepsyexp.png +0 -0
  85. psychopy/app/Resources/dark/filepsyexp@2x.png +0 -0
  86. psychopy/app/Resources/dark/filepy.png +0 -0
  87. psychopy/app/Resources/dark/filepy@2x.png +0 -0
  88. psychopy/app/Resources/dark/filetxt.png +0 -0
  89. psychopy/app/Resources/dark/filetxt@2x.png +0 -0
  90. psychopy/app/Resources/dark/fileunknown.png +0 -0
  91. psychopy/app/Resources/dark/fileunknown@2x.png +0 -0
  92. psychopy/app/Resources/dark/filevideo.png +0 -0
  93. psychopy/app/Resources/dark/filevideo@2x.png +0 -0
  94. psychopy/app/Resources/dark/find.png +0 -0
  95. psychopy/app/Resources/dark/find@2x.png +0 -0
  96. psychopy/app/Resources/dark/loop.png +0 -0
  97. psychopy/app/Resources/dark/loop@2x.png +0 -0
  98. psychopy/app/Resources/dark/regex.png +0 -0
  99. psychopy/app/Resources/dark/regex@2x.png +0 -0
  100. psychopy/app/Resources/light/case.png +0 -0
  101. psychopy/app/Resources/light/case@2x.png +0 -0
  102. psychopy/app/Resources/light/fileaudio.png +0 -0
  103. psychopy/app/Resources/light/fileaudio@2x.png +0 -0
  104. psychopy/app/Resources/light/filecss.png +0 -0
  105. psychopy/app/Resources/light/filecss@2x.png +0 -0
  106. psychopy/app/Resources/light/filecsv.png +0 -0
  107. psychopy/app/Resources/light/filecsv@2x.png +0 -0
  108. psychopy/app/Resources/light/filedesign.png +0 -0
  109. psychopy/app/Resources/light/filedesign@2x.png +0 -0
  110. psychopy/app/Resources/light/filefont.png +0 -0
  111. psychopy/app/Resources/light/filefont@2x.png +0 -0
  112. psychopy/app/Resources/light/filegit.png +0 -0
  113. psychopy/app/Resources/light/filegit@2x.png +0 -0
  114. psychopy/app/Resources/light/filehtml.png +0 -0
  115. psychopy/app/Resources/light/filehtml@2x.png +0 -0
  116. psychopy/app/Resources/light/fileimage.png +0 -0
  117. psychopy/app/Resources/light/fileimage@2x.png +0 -0
  118. psychopy/app/Resources/light/fileinfo.png +0 -0
  119. psychopy/app/Resources/light/fileinfo@2x.png +0 -0
  120. psychopy/app/Resources/light/filejs.png +0 -0
  121. psychopy/app/Resources/light/filejs@2x.png +0 -0
  122. psychopy/app/Resources/light/filejson.png +0 -0
  123. psychopy/app/Resources/light/filejson@2x.png +0 -0
  124. psychopy/app/Resources/light/filepkg.png +0 -0
  125. psychopy/app/Resources/light/filepkg@2x.png +0 -0
  126. psychopy/app/Resources/light/filepsyexp.png +0 -0
  127. psychopy/app/Resources/light/filepsyexp@2x.png +0 -0
  128. psychopy/app/Resources/light/filepy.png +0 -0
  129. psychopy/app/Resources/light/filepy@2x.png +0 -0
  130. psychopy/app/Resources/light/filetxt.png +0 -0
  131. psychopy/app/Resources/light/filetxt@2x.png +0 -0
  132. psychopy/app/Resources/light/fileunknown.png +0 -0
  133. psychopy/app/Resources/light/fileunknown@2x.png +0 -0
  134. psychopy/app/Resources/light/filevideo.png +0 -0
  135. psychopy/app/Resources/light/filevideo@2x.png +0 -0
  136. psychopy/app/Resources/light/find.png +0 -0
  137. psychopy/app/Resources/light/find@2x.png +0 -0
  138. psychopy/app/Resources/light/loop.png +0 -0
  139. psychopy/app/Resources/light/loop@2x.png +0 -0
  140. psychopy/app/Resources/light/regex.png +0 -0
  141. psychopy/app/Resources/light/regex@2x.png +0 -0
  142. psychopy/app/Resources/routine_templates/Basic.psyexp +0 -1
  143. psychopy/app/Resources/routine_templates/Misc.psyexp +0 -1
  144. psychopy/app/Resources/routine_templates/Online.psyexp +0 -2
  145. psychopy/app/Resources/routine_templates/Trials.psyexp +0 -1
  146. psychopy/app/Resources/splash.png +0 -0
  147. psychopy/app/Resources/splash@2x.png +0 -0
  148. psychopy/app/__init__.py +49 -8
  149. psychopy/app/__main__.py +3 -0
  150. psychopy/app/_psychopyApp.py +134 -125
  151. psychopy/app/builder/builder.py +42 -22
  152. psychopy/app/builder/dialogs/__init__.py +44 -11
  153. psychopy/app/builder/dialogs/dlgsCode.py +1 -1
  154. psychopy/app/builder/dialogs/dlgsConditions.py +1 -1
  155. psychopy/app/builder/dialogs/findDlg.py +106 -20
  156. psychopy/app/builder/dialogs/paramCtrls.py +42 -1
  157. psychopy/app/builder/validators.py +1 -1
  158. psychopy/app/coder/codeEditorBase.py +8 -8
  159. psychopy/app/coder/coder.py +32 -29
  160. psychopy/app/coder/fileBrowser.py +68 -22
  161. psychopy/app/coder/folding.py +1 -1
  162. psychopy/app/coder/psychoParser.py +1 -1
  163. psychopy/app/coder/repl.py +1 -1
  164. psychopy/app/coder/sourceTree.py +1 -1
  165. psychopy/app/connections/__init__.py +1 -1
  166. psychopy/app/connections/news.py +1 -1
  167. psychopy/app/connections/sendusage.py +1 -1
  168. psychopy/app/connections/updates.py +1 -1
  169. psychopy/app/console.py +1 -1
  170. psychopy/app/errorDlg.py +1 -1
  171. psychopy/app/frametracker.py +1 -1
  172. psychopy/app/idle.py +1 -1
  173. psychopy/app/jobs.py +5 -2
  174. psychopy/app/linuxconfig/__init__.py +1 -1
  175. psychopy/app/locale/ar_001/LC_MESSAGE/messages.mo +0 -0
  176. psychopy/app/locale/ar_001/LC_MESSAGE/messages.po +1514 -3259
  177. psychopy/app/locale/cs_CZ/LC_MESSAGE/messages.mo +0 -0
  178. psychopy/app/locale/da_DK/LC_MESSAGE/messages.mo +0 -0
  179. psychopy/app/locale/de_DE/LC_MESSAGE/messages.mo +0 -0
  180. psychopy/app/locale/de_DE/LC_MESSAGE/messages.po +3 -3
  181. psychopy/app/locale/el_GR/LC_MESSAGE/messages.mo +0 -0
  182. psychopy/app/locale/en_NZ/LC_MESSAGE/messages.mo +0 -0
  183. psychopy/app/locale/en_US/LC_MESSAGE/messages.mo +0 -0
  184. psychopy/app/locale/es_CO/LC_MESSAGE/messages.mo +0 -0
  185. psychopy/app/locale/es_CO/LC_MESSAGE/messages.po +4 -4
  186. psychopy/app/locale/es_ES/LC_MESSAGE/messages.mo +0 -0
  187. psychopy/app/locale/es_ES/LC_MESSAGE/messages.po +4 -4
  188. psychopy/app/locale/es_US/LC_MESSAGE/messages.mo +0 -0
  189. psychopy/app/locale/es_US/LC_MESSAGE/messages.po +4 -4
  190. psychopy/app/locale/et_EE/LC_MESSAGE/messages.mo +0 -0
  191. psychopy/app/locale/et_EE/LC_MESSAGE/messages.po +2 -2
  192. psychopy/app/locale/fa_IR/LC_MESSAGE/messages.mo +0 -0
  193. psychopy/app/locale/fa_IR/LC_MESSAGE/messages.po +1 -1
  194. psychopy/app/locale/fi_FI/LC_MESSAGE/messages.mo +0 -0
  195. psychopy/app/locale/fr_FR/LC_MESSAGE/messages.mo +0 -0
  196. psychopy/app/locale/fr_FR/LC_MESSAGE/messages.po +2 -2
  197. psychopy/app/locale/he_IL/LC_MESSAGE/messages.mo +0 -0
  198. psychopy/app/locale/he_IL/LC_MESSAGE/messages.po +2 -2
  199. psychopy/app/locale/hi_IN/LC_MESSAGE/messages.mo +0 -0
  200. psychopy/app/locale/hi_IN/LC_MESSAGE/messages.po +2 -2
  201. psychopy/app/locale/hu_HU/LC_MESSAGE/messages.mo +0 -0
  202. psychopy/app/locale/it_IT/LC_MESSAGE/messages.mo +0 -0
  203. psychopy/app/locale/it_IT/LC_MESSAGE/messages.po +2 -2
  204. psychopy/app/locale/ja_JP/LC_MESSAGE/messages.mo +0 -0
  205. psychopy/app/locale/ja_JP/LC_MESSAGE/messages.po +3421 -2396
  206. psychopy/app/locale/ko_KR/LC_MESSAGE/messages.mo +0 -0
  207. psychopy/app/locale/ms_MY/LC_MESSAGE/messages.mo +0 -0
  208. psychopy/app/locale/ms_MY/LC_MESSAGE/messages.po +2 -2
  209. psychopy/app/locale/nl_NL/LC_MESSAGE/messages.mo +0 -0
  210. psychopy/app/locale/nn_NO/LC_MESSAGE/messages.mo +0 -0
  211. psychopy/app/locale/pl_PL/LC_MESSAGE/messages.mo +0 -0
  212. psychopy/app/locale/pt_PT/LC_MESSAGE/messages.mo +0 -0
  213. psychopy/app/locale/pt_PT/LC_MESSAGE/messages.po +4 -4
  214. psychopy/app/locale/ro_RO/LC_MESSAGE/messages.mo +0 -0
  215. psychopy/app/locale/ru_RU/LC_MESSAGE/messages.mo +0 -0
  216. psychopy/app/locale/sv_SE/LC_MESSAGE/messages.mo +0 -0
  217. psychopy/app/locale/sv_SE/LC_MESSAGE/messages.po +2 -2
  218. psychopy/app/locale/tr_TR/LC_MESSAGE/messages.mo +0 -0
  219. psychopy/app/locale/tr_TR/LC_MESSAGE/messages.po +2 -2
  220. psychopy/app/locale/zh_CN/LC_MESSAGE/messages.mo +0 -0
  221. psychopy/app/locale/zh_CN/LC_MESSAGE/messages.po +3 -3
  222. psychopy/app/locale/zh_TW/LC_MESSAGE/messages.mo +0 -0
  223. psychopy/app/locale/zh_TW/LC_MESSAGE/messages.po +2 -2
  224. psychopy/app/{builder/localizedStrings.py → localizedStrings.py} +173 -26
  225. psychopy/app/pavlovia_ui/__init__.py +1 -1
  226. psychopy/app/pavlovia_ui/_base.py +1 -1
  227. psychopy/app/pavlovia_ui/functions.py +1 -1
  228. psychopy/app/pavlovia_ui/menu.py +1 -1
  229. psychopy/app/pavlovia_ui/project.py +1 -1
  230. psychopy/app/pavlovia_ui/search.py +1 -1
  231. psychopy/app/pavlovia_ui/sync.py +1 -1
  232. psychopy/app/pavlovia_ui/user.py +1 -1
  233. psychopy/app/plugin_manager/dialog.py +34 -96
  234. psychopy/app/plugin_manager/packages.py +10 -14
  235. psychopy/app/plugin_manager/plugins.py +64 -4
  236. psychopy/app/preferencesDlg.py +12 -37
  237. psychopy/app/psychopyApp.py +130 -44
  238. psychopy/app/ribbon.py +1 -0
  239. psychopy/app/runner/runner.py +37 -15
  240. psychopy/app/runner/scriptProcess.py +11 -6
  241. psychopy/app/stdout/stdOutRich.py +9 -2
  242. psychopy/app/themes/fonts.py +1 -1
  243. psychopy/app/themes/icons.py +2 -38
  244. psychopy/app/ui/__init__.py +1 -1
  245. psychopy/app/utils.py +3 -3
  246. psychopy/assets/default.mp3 +0 -0
  247. psychopy/assets/fonts/NotoSans-Bold.ttf +0 -0
  248. psychopy/assets/fonts/NotoSans-BoldItalic.ttf +0 -0
  249. psychopy/assets/fonts/NotoSans-Italic.ttf +0 -0
  250. psychopy/assets/fonts/NotoSans-Regular.ttf +0 -0
  251. psychopy/assets/voicekeyThresholdStim.wav +0 -0
  252. psychopy/clock.py +4 -1
  253. psychopy/colors.py +2 -0
  254. psychopy/core.py +1 -1
  255. psychopy/data/base.py +1 -1
  256. psychopy/data/experiment.py +151 -46
  257. psychopy/data/routine.py +27 -1
  258. psychopy/data/staircase.py +2 -1
  259. psychopy/data/trial.py +62 -14
  260. psychopy/data/utils.py +1 -1
  261. psychopy/demos/builder/Design Templates/branchedExperiment/branchedExperiment.psyexp +333 -218
  262. psychopy/demos/builder/Design Templates/psychophysicsStaircase/psychophysicsStaircase.psyexp +261 -239
  263. psychopy/demos/builder/Design Templates/psychophysicsStairsInterleaved/psychophysicsStaircaseInterleaved.psyexp +319 -180
  264. psychopy/demos/builder/Design Templates/randomisedBlocks/randomisedBlocks.psyexp +204 -116
  265. psychopy/demos/builder/Experiments/BART/assets/background.jpg +0 -0
  266. psychopy/demos/builder/Experiments/BART/assets/blueBalloon.png +0 -0
  267. psychopy/demos/builder/Experiments/BART/assets/greenBalloon.png +0 -0
  268. psychopy/demos/builder/Experiments/BART/assets/redBalloon.png +0 -0
  269. psychopy/demos/builder/Experiments/BART/bart.psyexp +779 -866
  270. psychopy/demos/builder/Experiments/BigFiveInventory/BFI.psyexp +242 -180
  271. psychopy/demos/builder/Experiments/GoNoGo/gng.psyexp +419 -406
  272. psychopy/demos/builder/Experiments/dragAndDrop/README.md +2 -37
  273. psychopy/demos/builder/Experiments/dragAndDrop/drag_and_drop.psyexp +460 -1204
  274. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/blank_grid.png +0 -0
  275. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/make_shapes.psyexp +221 -0
  276. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/readme.md +4 -0
  277. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_1.png +0 -0
  278. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_10.png +0 -0
  279. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_2.png +0 -0
  280. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_3.png +0 -0
  281. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_4.png +0 -0
  282. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_5.png +0 -0
  283. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_6.png +0 -0
  284. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_7.png +0 -0
  285. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_8.png +0 -0
  286. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_9.png +0 -0
  287. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solutions.xlsx +0 -0
  288. psychopy/demos/builder/Experiments/mentalRotation/MentalRotation.psyexp +583 -542
  289. psychopy/demos/builder/Experiments/navon/NavonTask.psyexp +458 -427
  290. psychopy/demos/builder/Experiments/sternberg/sternberg.psyexp +588 -550
  291. psychopy/demos/builder/Experiments/stroop/stroop.psyexp +303 -207
  292. psychopy/demos/builder/Experiments/stroopExtended/stroop.psyexp +390 -215
  293. psychopy/demos/builder/Experiments/stroopExtended/stroopReverse.psyexp +390 -215
  294. psychopy/demos/builder/Experiments/stroopVoice/stroopVoice.psyexp +357 -331
  295. psychopy/demos/builder/Feature Demos/buttonBox/buttonBoxDemo.psyexp +3 -2
  296. psychopy/demos/builder/Feature Demos/counterbalance/counterbalance.psyexp +287 -277
  297. psychopy/demos/builder/Feature Demos/gratings/gratings.psyexp +370 -320
  298. psychopy/demos/builder/Feature Demos/noise/noise.psyexp +452 -399
  299. psychopy/demos/builder/Feature Demos/panorama/panorama.psyexp +168 -133
  300. psychopy/demos/builder/Feature Demos/pilotMode/pilotMode.psyexp +4 -3
  301. psychopy/demos/builder/Feature Demos/progress/progressBar.psyexp +420 -392
  302. psychopy/demos/builder/Feature Demos/sliders/sliders.psyexp +917 -871
  303. psychopy/demos/builder/Feature Demos/visualValidator/readme.md +7 -0
  304. psychopy/demos/builder/Feature Demos/visualValidator/visualValidator.psyexp +200 -0
  305. psychopy/demos/builder/Hardware/EEG_parallel_component/EEG_triggers_parallel_comp.psyexp +25 -9
  306. psychopy/demos/builder/Hardware/EEG_serial_code/EEG_triggers_serial_code.psyexp +372 -361
  307. psychopy/demos/builder/Hardware/EEG_serial_component/EEG_triggers_serial_comp.psyexp +25 -9
  308. psychopy/demos/builder/Hardware/EGI_netstation/stroop.psyexp +320 -235
  309. psychopy/demos/builder/Hardware/Eyetracking_visual_search/visualSearch.psyexp +790 -651
  310. psychopy/demos/builder/Hardware/camera/camera.psyexp +326 -246
  311. psychopy/demos/builder/Hardware/eyetracking/eyetracking.psyexp +432 -327
  312. psychopy/demos/builder/Hardware/eyetracking_custom_cal/eyetracking_custom_cal.psyexp +440 -321
  313. psychopy/demos/builder/Hardware/fMRI/fMRI_demo.psyexp +190 -181
  314. psychopy/demos/builder/Hardware/lab_streaming_layer/lsl_triggers_demo.psyexp +323 -312
  315. psychopy/demos/builder/Hardware/lab_streaming_layer/lsl_triggers_demo_legacy.psyexp +360 -0
  316. psychopy/demos/builder/{Feature Demos/eyetracking/eyetracking.xml → Hardware/lab_streaming_layer/lsl_triggers_demo_legacy_legacy.psyexp} +154 -140
  317. psychopy/demos/builder/Hardware/lab_streaming_layer_legacy/lsl_triggers_demo_legacy.psyexp +329 -273
  318. psychopy/demos/builder/Hardware/lab_streaming_layer_legacy/lsl_triggers_demo_legacy_legacy.psyexp +360 -0
  319. psychopy/demos/builder/Hardware/lab_streaming_layer_legacy/lsl_triggers_demo_legacy_legacy_legacy.psyexp +312 -0
  320. psychopy/demos/builder/Hardware/microphone/microphone.psyexp +450 -404
  321. psychopy/demos/builder/Hardware/pump/pump.psyexp +593 -329
  322. psychopy/demos/builder/Helper Tools/achorVSalignment/FlowCircular-Regular.ttf +0 -0
  323. psychopy/demos/builder/Helper Tools/achorVSalignment/anchorAlignment.psyexp +336 -274
  324. psychopy/demos/builder/Helper Tools/clockFace/clockFace.psyexp +200 -149
  325. psychopy/demos/builder/Helper Tools/colors/colors.psyexp +300 -279
  326. psychopy/demos/builder/Helper Tools/drawPolygon/drawPolygon.psyexp +677 -564
  327. psychopy/demos/builder/Helper Tools/keyNameFinder/keyNameFinder.psyexp +214 -158
  328. psychopy/demos/builder/Helper Tools/spatialUnits/unitDemo.psyexp +195 -146
  329. psychopy/demos/coder/experiment control/runtimeInfo.py +1 -1
  330. psychopy/devices/__init__.py +1 -1
  331. psychopy/event.py +1 -1
  332. psychopy/exceptions.py +1 -1
  333. psychopy/experiment/__init__.py +1 -1
  334. psychopy/experiment/_experiment.py +62 -16
  335. psychopy/experiment/components/__init__.py +1 -6
  336. psychopy/experiment/components/_base.py +44 -19
  337. psychopy/experiment/components/aperture/__init__.py +1 -1
  338. psychopy/experiment/components/brush/__init__.py +2 -2
  339. psychopy/experiment/components/button/__init__.py +24 -28
  340. psychopy/experiment/components/camera/__init__.py +38 -39
  341. psychopy/experiment/components/code/__init__.py +1 -1
  342. psychopy/experiment/components/dots/__init__.py +1 -1
  343. psychopy/experiment/components/eyetracker_record/__init__.py +7 -3
  344. psychopy/experiment/components/form/__init__.py +3 -3
  345. psychopy/experiment/components/grating/__init__.py +1 -1
  346. psychopy/experiment/components/image/__init__.py +1 -1
  347. psychopy/experiment/components/joyButtons/__init__.py +2 -2
  348. psychopy/experiment/components/joyButtons/virtualJoyButtons.py +1 -1
  349. psychopy/experiment/components/joystick/__init__.py +3 -3
  350. psychopy/experiment/components/joystick/virtualJoystick.py +1 -1
  351. psychopy/experiment/components/keyboard/__init__.py +98 -122
  352. psychopy/experiment/components/microphone/__init__.py +54 -98
  353. psychopy/experiment/components/mouse/__init__.py +92 -93
  354. psychopy/experiment/components/movie/__init__.py +28 -50
  355. psychopy/experiment/components/parallelOut/__init__.py +3 -3
  356. psychopy/experiment/components/polygon/__init__.py +2 -3
  357. psychopy/experiment/components/roi/__init__.py +2 -2
  358. psychopy/experiment/components/routineSettings/__init__.py +2 -0
  359. psychopy/experiment/components/serialOut/__init__.py +7 -7
  360. psychopy/experiment/components/settings/__init__.py +317 -313
  361. psychopy/experiment/components/settings/eyetracking.py +108 -0
  362. psychopy/experiment/components/slider/__init__.py +5 -5
  363. psychopy/experiment/components/sound/__init__.py +168 -78
  364. psychopy/experiment/components/soundsensor/__init__.py +361 -0
  365. psychopy/experiment/components/soundsensor/classic/soundsensor.png +0 -0
  366. psychopy/experiment/components/soundsensor/classic/soundsensor@2x.png +0 -0
  367. psychopy/experiment/components/soundsensor/dark/soundsensor.png +0 -0
  368. psychopy/experiment/components/soundsensor/dark/soundsensor@2x.png +0 -0
  369. psychopy/experiment/components/soundsensor/light/soundsensor.png +0 -0
  370. psychopy/experiment/components/soundsensor/light/soundsensor@2x.png +0 -0
  371. psychopy/experiment/components/static/__init__.py +59 -33
  372. psychopy/experiment/components/text/__init__.py +2 -6
  373. psychopy/experiment/components/textbox/__init__.py +3 -7
  374. psychopy/experiment/components/unknown/__init__.py +2 -0
  375. psychopy/experiment/components/unknownPlugin/__init__.py +2 -0
  376. psychopy/experiment/exports.py +1 -1
  377. psychopy/experiment/flow.py +2 -2
  378. psychopy/experiment/localization.py +1 -1
  379. psychopy/experiment/loops.py +43 -10
  380. psychopy/experiment/params.py +6 -4
  381. psychopy/experiment/plugins.py +8 -1
  382. psychopy/experiment/py2js.py +1 -1
  383. psychopy/experiment/py2js_transpiler.py +1 -1
  384. psychopy/experiment/routines/__init__.py +1 -1
  385. psychopy/experiment/routines/_base.py +23 -24
  386. psychopy/experiment/routines/audioValidator/__init__.py +343 -0
  387. psychopy/experiment/routines/audioValidator/classic/audio_validator.png +0 -0
  388. psychopy/experiment/routines/audioValidator/classic/audio_validator@2x.png +0 -0
  389. psychopy/experiment/routines/audioValidator/dark/audio_validator.png +0 -0
  390. psychopy/experiment/routines/audioValidator/dark/audio_validator@2x.png +0 -0
  391. psychopy/experiment/routines/audioValidator/light/audio_validator.png +0 -0
  392. psychopy/experiment/routines/audioValidator/light/audio_validator@2x.png +0 -0
  393. psychopy/experiment/routines/eyetracker_calibrate/__init__.py +76 -17
  394. psychopy/experiment/routines/eyetracker_validate/__init__.py +1 -1
  395. psychopy/experiment/routines/unknown/__init__.py +2 -0
  396. psychopy/experiment/routines/{photodiodeValidator → visualValidator}/__init__.py +89 -120
  397. psychopy/experiment/routines/visualValidator/classic/visual_validator.png +0 -0
  398. psychopy/experiment/routines/visualValidator/classic/visual_validator@2x.png +0 -0
  399. psychopy/experiment/routines/visualValidator/dark/visual_validator.png +0 -0
  400. psychopy/experiment/routines/visualValidator/dark/visual_validator@2x.png +0 -0
  401. psychopy/experiment/routines/visualValidator/light/visual_validator.png +0 -0
  402. psychopy/experiment/routines/visualValidator/light/visual_validator@2x.png +0 -0
  403. psychopy/experiment/utils.py +1 -1
  404. psychopy/gui/__init__.py +1 -1
  405. psychopy/gui/qtgui.py +15 -6
  406. psychopy/gui/wxgui.py +1 -1
  407. psychopy/hardware/__init__.py +0 -1
  408. psychopy/hardware/base.py +147 -16
  409. psychopy/hardware/bbtk/__init__.py +10 -16
  410. psychopy/hardware/brainproducts.py +7 -13
  411. psychopy/hardware/button.py +21 -2
  412. psychopy/hardware/buttonbox/__init__.py +1 -1
  413. psychopy/hardware/camera/__init__.py +16 -3
  414. psychopy/hardware/cedrus.py +5 -16
  415. psychopy/hardware/crs/__init__.py +1 -1
  416. psychopy/hardware/crs/bits.py +36 -33
  417. psychopy/hardware/crs/colorcal.py +8 -11
  418. psychopy/hardware/crs/optical.py +7 -10
  419. psychopy/hardware/crs/shaders.py +18 -5
  420. psychopy/hardware/emotiv.py +1 -1
  421. psychopy/hardware/emulator.py +11 -5
  422. psychopy/hardware/exceptions.py +86 -0
  423. psychopy/hardware/forp.py +18 -23
  424. psychopy/hardware/gammasci.py +8 -3
  425. psychopy/hardware/iolab.py +8 -19
  426. psychopy/hardware/joystick/__init__.py +865 -266
  427. psychopy/hardware/joystick/_base.py +251 -0
  428. psychopy/hardware/joystick/backend_glfw.py +306 -0
  429. psychopy/hardware/joystick/backend_pyglet.py +309 -0
  430. psychopy/hardware/joystick/mappings.py +287 -0
  431. psychopy/hardware/keyboard.py +4 -2
  432. psychopy/hardware/labhackers.py +1 -1
  433. psychopy/hardware/labjacks.py +9 -13
  434. psychopy/hardware/{photodiode.py → lightsensor.py} +146 -203
  435. psychopy/hardware/listener.py +9 -8
  436. psychopy/hardware/manager.py +24 -35
  437. psychopy/hardware/microphone.py +534 -154
  438. psychopy/hardware/minolta.py +14 -4
  439. psychopy/hardware/mouse/__init__.py +1 -1
  440. psychopy/hardware/photometer/__init__.py +2 -2
  441. psychopy/hardware/pr.py +14 -4
  442. psychopy/hardware/qmix.py +18 -27
  443. psychopy/hardware/serialdevice.py +43 -12
  444. psychopy/hardware/soundsensor.py +473 -0
  445. psychopy/hardware/spatial/__init__.py +231 -0
  446. psychopy/hardware/speaker.py +298 -36
  447. psychopy/hardware/triggerbox/__init__.py +1 -1
  448. psychopy/hardware/triggerbox/base.py +1 -1
  449. psychopy/hardware/triggerbox/parallel.py +1 -1
  450. psychopy/info.py +1 -1
  451. psychopy/iohub/client/__init__.py +17 -0
  452. psychopy/iohub/client/keyboard.py +5 -0
  453. psychopy/iohub/devices/eyetracker/__init__.py +10 -18
  454. psychopy/iohub/devices/eyetracker/calibration/procedure.py +15 -33
  455. psychopy/iohub/devices/eyetracker/hw/pupil_labs/neon/__init__.py +1 -0
  456. psychopy/iohub/devices/mouse/linux2.py +6 -1
  457. psychopy/iohub/devices/mouse/win32.py +5 -0
  458. psychopy/layout.py +1 -1
  459. psychopy/liaison.py +91 -39
  460. psychopy/locale_setup.py +11 -1
  461. psychopy/localization/__init__.py +1 -1
  462. psychopy/localization/_localization.py +1 -1
  463. psychopy/localization/messages.pot +2 -2
  464. psychopy/logging.py +14 -12
  465. psychopy/microphone.py +4 -3
  466. psychopy/misc.py +1 -1
  467. psychopy/monitors/MonitorCenter.py +3 -3
  468. psychopy/monitors/__init__.py +1 -1
  469. psychopy/monitors/calibData.py +1 -1
  470. psychopy/monitors/calibTools.py +3 -2
  471. psychopy/platform_specific/__init__.py +1 -1
  472. psychopy/platform_specific/darwin.py +1 -1
  473. psychopy/platform_specific/linux.py +1 -1
  474. psychopy/platform_specific/win32.py +1 -1
  475. psychopy/plugins/__init__.py +26 -17
  476. psychopy/plugins/util.py +65 -0
  477. psychopy/preferences/Darwin.spec +11 -3
  478. psychopy/preferences/FreeBSD.spec +11 -3
  479. psychopy/preferences/Linux.spec +11 -3
  480. psychopy/preferences/Windows.spec +11 -3
  481. psychopy/preferences/__init__.py +1 -1
  482. psychopy/preferences/baseNoArch.spec +11 -3
  483. psychopy/preferences/hints.py +78 -61
  484. psychopy/preferences/preferences.py +82 -13
  485. psychopy/projects/__init__.py +1 -1
  486. psychopy/projects/pavlovia.py +29 -13
  487. psychopy/scripts/psyexpCompile.py +1 -1
  488. psychopy/session.py +81 -8
  489. psychopy/sound/__init__.py +25 -10
  490. psychopy/sound/_base.py +134 -34
  491. psychopy/sound/audioclip.py +38 -15
  492. psychopy/sound/audiodevice.py +1 -1
  493. psychopy/sound/backend_ptb.py +53 -321
  494. psychopy/sound/backend_pygame.py +7 -3
  495. psychopy/sound/backend_pyo.py +53 -22
  496. psychopy/sound/backend_pysound.py +10 -27
  497. psychopy/sound/backend_sounddevice.py +33 -21
  498. psychopy/sound/exceptions.py +1 -1
  499. psychopy/sound/microphone.py +83 -5
  500. psychopy/sound/transcribe.py +3 -3
  501. psychopy/tests/data/test_basic_run.py +1 -0
  502. psychopy/tests/data/test_loaded_namespace/test_counterbalance.psyexp +142 -0
  503. psychopy/tests/data/test_loaded_namespace/test_custom_missing.psyexp +129 -0
  504. psychopy/tests/data/test_loaded_namespace/test_missing_counterbalance.psyexp +116 -0
  505. psychopy/tests/data/test_loaded_namespace/test_mix_exp.psyexp +181 -0
  506. psychopy/tests/data/test_loaded_namespace/test_mix_missing.psyexp +140 -0
  507. psychopy/tests/data/test_loaded_namespace/test_mix_name_calibration.psyexp +164 -0
  508. psychopy/tests/data/test_sounds/default_16000.wav +0 -0
  509. psychopy/tests/data/test_sounds/default_192000.wav +0 -0
  510. psychopy/tests/data/test_sounds/default_22050.wav +0 -0
  511. psychopy/tests/data/test_sounds/default_32000.wav +0 -0
  512. psychopy/tests/data/test_sounds/default_44100.wav +0 -0
  513. psychopy/tests/data/test_sounds/default_48000.wav +0 -0
  514. psychopy/tests/data/test_sounds/default_8000.wav +0 -0
  515. psychopy/tests/data/test_sounds/default_96000.wav +0 -0
  516. psychopy/tests/test_alerts/test_alerttools.py +2 -1
  517. psychopy/tests/test_app/test_command_line.py +65 -0
  518. psychopy/tests/test_data/test_TrialHandler2.py +18 -7
  519. psychopy/tests/test_demos/test_builder_demos.py +1 -1
  520. psychopy/tests/test_experiment/needs_wx/componsTemplate.txt +5238 -4188
  521. psychopy/tests/test_experiment/needs_wx/test_components.py +1 -1
  522. psychopy/tests/test_experiment/test_components/test_RoutineSettingsComponent.py +16 -0
  523. psychopy/tests/test_experiment/test_components/test_all_components.py +1 -1
  524. psychopy/tests/test_experiment/test_components/test_base_components.py +26 -17
  525. psychopy/tests/test_experiment/test_experiment.py +96 -0
  526. psychopy/tests/test_experiment/test_loops.py +12 -4
  527. psychopy/tests/test_experiment/test_params.py +17 -4
  528. psychopy/tests/test_experiment/test_routines/test_PhotodiodeValidationRoutine.py +2 -2
  529. psychopy/tests/test_hardware/test_photodiode.py +66 -0
  530. psychopy/tests/test_liaison/test_Liaison.py +4 -4
  531. psychopy/tests/test_misc/test_clock.py +2 -0
  532. psychopy/tests/test_misc/test_color.py +2 -0
  533. psychopy/tests/test_misc/test_event.py +1 -0
  534. psychopy/tests/test_plugins/test_plugin_stubs.py +125 -0
  535. psychopy/tests/test_sound/test_sound.py +111 -40
  536. psychopy/tests/test_tools/test_colorspacetools.py +24 -23
  537. psychopy/tests/test_tools/test_mathtools.py +9 -9
  538. psychopy/tests/test_tools/test_viewtools.py +101 -0
  539. psychopy/tests/test_validators/__init__.py +0 -0
  540. psychopy/tests/test_validators/test_voicekeyValidator.py +95 -0
  541. psychopy/tests/test_visual/test_all_stimuli.py +2 -2
  542. psychopy/tests/test_visual/test_basevisual.py +37 -7
  543. psychopy/tests/test_visual/test_button.py +2 -2
  544. psychopy/tests/test_visual/test_circle.py +10 -2
  545. psychopy/tests/test_visual/test_dots.py +1 -1
  546. psychopy/tests/test_visual/test_form.py +13 -13
  547. psychopy/tests/test_visual/test_gamma.py +3 -3
  548. psychopy/tests/test_visual/test_image.py +2 -2
  549. psychopy/tests/test_visual/test_progress.py +2 -2
  550. psychopy/tests/test_visual/test_roi.py +8 -2
  551. psychopy/tests/test_visual/test_shape.py +2 -2
  552. psychopy/tests/test_visual/test_slider.py +2 -2
  553. psychopy/tests/test_visual/test_target.py +2 -2
  554. psychopy/tests/test_visual/test_textbox.py +6 -8
  555. psychopy/tests/test_visual/test_winScalePos.py +6 -5
  556. psychopy/tests/test_visual/test_window.py +17 -0
  557. psychopy/tests/utils.py +51 -1
  558. psychopy/tools/__init__.py +1 -1
  559. psychopy/tools/arraytools.py +2 -2
  560. psychopy/tools/attributetools.py +52 -1
  561. psychopy/tools/audiotools.py +4 -1
  562. psychopy/tools/colorspacetools.py +6 -4
  563. psychopy/tools/coordinatetools.py +1 -1
  564. psychopy/tools/fileerrortools.py +21 -9
  565. psychopy/tools/filetools.py +2 -2
  566. psychopy/tools/fontmanager.py +47 -28
  567. psychopy/tools/gltools.py +2964 -558
  568. psychopy/tools/imagetools.py +1 -1
  569. psychopy/tools/mathtools.py +997 -127
  570. psychopy/tools/monitorunittools.py +7 -1
  571. psychopy/tools/movietools.py +1 -2
  572. psychopy/tools/pkgtools.py +157 -127
  573. psychopy/tools/plottools.py +1 -1
  574. psychopy/tools/rifttools.py +1 -1
  575. psychopy/tools/stereotools.py +1 -1
  576. psychopy/tools/stimulustools.py +172 -2
  577. psychopy/tools/stringtools.py +22 -2
  578. psychopy/tools/systemtools.py +1 -1
  579. psychopy/tools/typetools.py +1 -1
  580. psychopy/tools/unittools.py +1 -1
  581. psychopy/tools/versionchooser.py +3 -1
  582. psychopy/tools/viewtools.py +54 -70
  583. psychopy/tools/wizard.py +2 -2
  584. psychopy/validation/__init__.py +6 -0
  585. psychopy/validation/audio.py +74 -0
  586. psychopy/validation/visual.py +115 -0
  587. psychopy/visual/__init__.py +1 -4
  588. psychopy/visual/aperture.py +9 -6
  589. psychopy/visual/backends/__init__.py +1 -1
  590. psychopy/visual/backends/_base.py +1 -1
  591. psychopy/visual/backends/gamma.py +1 -1
  592. psychopy/visual/backends/glfwbackend.py +8 -12
  593. psychopy/visual/backends/pygamebackend.py +1 -1
  594. psychopy/visual/backends/pygletbackend.py +32 -11
  595. psychopy/visual/basevisual.py +93 -13
  596. psychopy/visual/brush.py +1 -1
  597. psychopy/visual/bufferimage.py +90 -10
  598. psychopy/visual/button.py +1 -1
  599. psychopy/visual/circle.py +12 -20
  600. psychopy/visual/custommouse.py +1 -1
  601. psychopy/visual/dot.py +80 -14
  602. psychopy/visual/elementarray.py +84 -10
  603. psychopy/visual/filters.py +1 -1
  604. psychopy/visual/form.py +43 -28
  605. psychopy/visual/grating.py +105 -25
  606. psychopy/visual/helpers.py +1 -1
  607. psychopy/visual/image.py +98 -20
  608. psychopy/visual/line.py +15 -25
  609. psychopy/visual/movie.py +1 -1
  610. psychopy/visual/movie2.py +4 -3
  611. psychopy/visual/movie3.py +4 -3
  612. psychopy/visual/movies/__init__.py +1 -1
  613. psychopy/visual/movies/frame.py +1 -1
  614. psychopy/visual/movies/metadata.py +1 -1
  615. psychopy/visual/movies/players/__init__.py +1 -1
  616. psychopy/visual/movies/players/_base.py +1 -1
  617. psychopy/visual/movies/players/ffpyplayer_player.py +2 -3
  618. psychopy/visual/nnlvs.py +9 -6
  619. psychopy/visual/noise.py +4 -16
  620. psychopy/visual/patch.py +4 -3
  621. psychopy/visual/pie.py +3 -14
  622. psychopy/visual/polygon.py +21 -28
  623. psychopy/visual/radial.py +4 -18
  624. psychopy/visual/ratingscale.py +4 -3
  625. psychopy/visual/rect.py +16 -25
  626. psychopy/visual/rift.py +8 -2
  627. psychopy/visual/secondorder.py +4 -16
  628. psychopy/visual/shaders.py +620 -286
  629. psychopy/visual/shape.py +281 -90
  630. psychopy/visual/simpleimage.py +1 -1
  631. psychopy/visual/slider.py +78 -25
  632. psychopy/visual/stim3d.py +5 -608
  633. psychopy/visual/text.py +13 -3
  634. psychopy/visual/textbox2/textbox2.py +188 -56
  635. psychopy/visual/vlcmoviestim.py +1 -1
  636. psychopy/visual/window.py +373 -200
  637. psychopy/web.py +1 -1
  638. {psychopy-2024.2.4.dist-info → psychopy-2025.1.0.dist-info}/METADATA +9 -9
  639. {psychopy-2024.2.4.dist-info → psychopy-2025.1.0.dist-info}/RECORD +653 -660
  640. psychopy/.DS_Store +0 -0
  641. psychopy/__init__.py.orig +0 -65
  642. psychopy/app/.DS_Store +0 -0
  643. psychopy/app/Resources/.DS_Store +0 -0
  644. psychopy/app/Resources/classic/filecsv16.png +0 -0
  645. psychopy/app/Resources/classic/fileimage16.png +0 -0
  646. psychopy/app/Resources/classic/fileunknown16.png +0 -0
  647. psychopy/app/Resources/dark/filecsv16.png +0 -0
  648. psychopy/app/Resources/dark/filecsv16@2x.png +0 -0
  649. psychopy/app/Resources/dark/fileimage16.png +0 -0
  650. psychopy/app/Resources/dark/fileimage16@2x.png +0 -0
  651. psychopy/app/Resources/dark/fileunknown16.png +0 -0
  652. psychopy/app/Resources/dark/fileunknown16@2x.png +0 -0
  653. psychopy/app/Resources/fonts/OpenSans-Bold.ttf +0 -0
  654. psychopy/app/Resources/fonts/OpenSans-BoldItalic.ttf +0 -0
  655. psychopy/app/Resources/fonts/OpenSans-ExtraBold.ttf +0 -0
  656. psychopy/app/Resources/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
  657. psychopy/app/Resources/fonts/OpenSans-Italic.ttf +0 -0
  658. psychopy/app/Resources/fonts/OpenSans-Light.ttf +0 -0
  659. psychopy/app/Resources/fonts/OpenSans-LightItalic.ttf +0 -0
  660. psychopy/app/Resources/fonts/OpenSans-Regular.ttf +0 -0
  661. psychopy/app/Resources/fonts/OpenSans-SemiBold.ttf +0 -0
  662. psychopy/app/Resources/fonts/OpenSans-SemiBoldItalic.ttf +0 -0
  663. psychopy/app/Resources/light/filecsv16.png +0 -0
  664. psychopy/app/Resources/light/filecsv16@2x.png +0 -0
  665. psychopy/app/Resources/light/fileimage16.png +0 -0
  666. psychopy/app/Resources/light/fileimage16@2x.png +0 -0
  667. psychopy/app/Resources/light/fileunknown16.png +0 -0
  668. psychopy/app/Resources/light/fileunknown16@2x.png +0 -0
  669. psychopy/app/Resources/psychopySplash.png +0 -0
  670. psychopy/app/Resources/psychopySplash@2x.png +0 -0
  671. psychopy/app/builder/builder.py.orig +0 -3932
  672. psychopy/app/builder/dialogs/__init__.py.orig +0 -1679
  673. psychopy/app/builder/dialogs/paramCtrls.py.orig +0 -713
  674. psychopy/app/colorpicker/__init__.py.orig +0 -411
  675. psychopy/app/locale/zh_CN/LC_MESSAGE/zh_CN.mo +0 -0
  676. psychopy/app/locale/zh_CN/LC_MESSAGE/zh_CN.po +0 -6127
  677. psychopy/app/locale/zh_CN/LC_MESSAGE/zh_CN_allFlagged.mo +0 -0
  678. psychopy/app/locale/zh_CN/LC_MESSAGE/zh_CN_allFlagged.po +0 -7366
  679. psychopy/core.py.orig +0 -169
  680. psychopy/demos/builder/.DS_Store +0 -0
  681. psychopy/demos/builder/Design Templates/randomisedBlocks/html/index.html +0 -23
  682. psychopy/demos/builder/Design Templates/randomisedBlocks/html/randomisedBlocks-legacy-browsers.js +0 -423
  683. psychopy/demos/builder/Design Templates/randomisedBlocks/html/randomisedBlocks.js +0 -427
  684. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/chooseBlock.xlsx +0 -0
  685. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/facesBlock.xlsx +0 -0
  686. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/housesBlock.xlsx +0 -0
  687. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/face01.jpg +0 -0
  688. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/face02.jpg +0 -0
  689. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/face03.jpg +0 -0
  690. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/house01.jpg +0 -0
  691. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/house02.jpg +0 -0
  692. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/house03.jpg +0 -0
  693. psychopy/demos/builder/Design Templates/randomisedBlocks/randomisedBlocks.py +0 -330
  694. psychopy/demos/builder/Design Templates/randomisedBlocks/randomisedBlocks_lastrun.py +0 -330
  695. psychopy/demos/builder/Experiments/.DS_Store +0 -0
  696. psychopy/demos/builder/Experiments/dragAndDrop/archived_conditions.xlsx +0 -0
  697. psychopy/demos/builder/Experiments/dragAndDrop/draw grid stim.py +0 -61
  698. psychopy/demos/builder/Experiments/dragAndDrop/shapeMaker.psyexp +0 -91
  699. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_1.png +0 -0
  700. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_10.png +0 -0
  701. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_2.png +0 -0
  702. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_3.png +0 -0
  703. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_4.png +0 -0
  704. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_5.png +0 -0
  705. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_6.png +0 -0
  706. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_7.png +0 -0
  707. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_8.png +0 -0
  708. psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_9.png +0 -0
  709. psychopy/demos/builder/Experiments/dragAndDrop/updated_conditions.xlsx +0 -0
  710. psychopy/demos/builder/Feature Demos/eyetracking/eyetracking.xsd +0 -120
  711. psychopy/demos/builder/Tools/.DS_Store +0 -0
  712. psychopy/demos/builder/Tools/gammaCalibration/.DS_Store +0 -0
  713. psychopy/demos/builder/Tools/gammaCalibration/data/.DS_Store +0 -0
  714. psychopy/demos/builder/Tools/gammaCalibration/data/_gamma_correction_visual_2022-05-18_14h18.29.439.csv +0 -38
  715. psychopy/demos/builder/Tools/gammaCalibration/data/_gamma_correction_visual_2022-05-18_14h18.29.439.log +0 -3418
  716. psychopy/demos/builder/Tools/gammaCalibration/data/_gamma_correction_visual_2022-05-18_14h18.29.439.psydat +0 -0
  717. psychopy/demos/builder/Tools/gammaCalibration/data/x1_gamma_correction_visual_2022-05-17_13h59.42.928.csv +0 -2
  718. psychopy/demos/builder/Tools/gammaCalibration/data/x1_gamma_correction_visual_2022-05-17_13h59.42.928.log +0 -15
  719. psychopy/demos/builder/Tools/gammaCalibration/data/x1_gamma_correction_visual_2022-05-17_13h59.42.928.psydat +0 -0
  720. psychopy/demos/builder/Tools/gammaCalibration/gamma_correction_visual.psyexp +0 -323
  721. psychopy/demos/builder/Tools/gammaCalibration/gamma_correction_visual.py +0 -562
  722. psychopy/demos/builder/Tools/gammaCalibration/gamma_correction_visual_lastrun.py +0 -562
  723. psychopy/demos/builder/Tools/gammaCalibration/questStairs.xlsx +0 -0
  724. psychopy/demos/builder/Tools/gammaCalibration/resources/low_contrast.png +0 -0
  725. psychopy/demos/builder/Tools/gammaCalibration/resources/make_2nd_order_tex.py +0 -59
  726. psychopy/demos/builder/Tools/gammaCalibration/resources/second_order_tex.png +0 -0
  727. psychopy/demos/coder/.DS_Store +0 -0
  728. psychopy/demos/coder/experiment control/info_gamma.pickle +0 -0
  729. psychopy/demos/coder/iohub/.iohpid +0 -1
  730. psychopy/demos/coder/iohub/eyetracking/.iohpid +0 -1
  731. psychopy/demos/coder/iohub/wintab/.DS_Store +0 -0
  732. psychopy/demos/coder/stimuli/.DS_Store +0 -0
  733. psychopy/demos/coder/stimuli/radialGratingContracting.py +0 -29
  734. psychopy/experiment/_experiment.py.orig +0 -1032
  735. psychopy/experiment/components/.DS_Store +0 -0
  736. psychopy/experiment/components/_base.py.orig +0 -823
  737. psychopy/experiment/components/form/.DS_Store +0 -0
  738. psychopy/experiment/components/microphone/__init__.py.orig +0 -490
  739. psychopy/experiment/components/settings/__init__.py.orig +0 -1337
  740. psychopy/experiment/components/textbox/__init__.py.orig +0 -310
  741. psychopy/experiment/components/webcam/.DS_Store +0 -0
  742. psychopy/experiment/components/webcam/light/.DS_Store +0 -0
  743. psychopy/experiment/loops.py.orig +0 -829
  744. psychopy/experiment/params.py.orig +0 -408
  745. psychopy/experiment/routine.py.orig +0 -503
  746. psychopy/experiment/routines/photodiodeValidator/classic/photodiode_validator.png +0 -0
  747. psychopy/experiment/routines/photodiodeValidator/classic/photodiode_validator@2x.png +0 -0
  748. psychopy/experiment/routines/photodiodeValidator/dark/photodiode_validator.png +0 -0
  749. psychopy/experiment/routines/photodiodeValidator/dark/photodiode_validator@2x.png +0 -0
  750. psychopy/experiment/routines/photodiodeValidator/light/photodiode_validator.png +0 -0
  751. psychopy/experiment/routines/photodiodeValidator/light/photodiode_validator@2x.png +0 -0
  752. psychopy/hardware/.DS_Store +0 -0
  753. psychopy/hardware/brainproducts.py.orig +0 -680
  754. psychopy/hardware/iolab.py.orig +0 -238
  755. psychopy/hardware/serialport.py +0 -51
  756. psychopy/iohub/datastore/__init__.py.orig +0 -443
  757. psychopy/iohub/datastore/util.py.orig +0 -692
  758. psychopy/iohub/devices/mouse/darwin.py.orig +0 -427
  759. psychopy/iohub/devices/mouse/linux2.py.orig +0 -198
  760. psychopy/preferences/.DS_Store +0 -0
  761. psychopy/projects/pavlovia.py.orig +0 -1295
  762. psychopy/tests/.DS_Store +0 -0
  763. psychopy/tests/data/.DS_Store +0 -0
  764. psychopy/tests/data/TestCircle_fill_local.png +0 -0
  765. psychopy/tests/data/__test.png +0 -0
  766. psychopy/tests/data/aperture1_normHexbackground_local.png +0 -0
  767. psychopy/tests/data/aperture1_norm_local.png +0 -0
  768. psychopy/tests/data/aperture2_normHexbackground_local.png +0 -0
  769. psychopy/tests/data/beatandrcos_height_local.png +0 -0
  770. psychopy/tests/data/beatandrcos_normAddBlend_local.png +0 -0
  771. psychopy/tests/data/beatandrcos_normHexbackground_local.png +0 -0
  772. psychopy/tests/data/beatandrcos_norm_local.png +0 -0
  773. psychopy/tests/data/beatandrcos_stencil_local.png +0 -0
  774. psychopy/tests/data/blend_add_height_local.png +0 -0
  775. psychopy/tests/data/blend_add_normAddBlend_local.png +0 -0
  776. psychopy/tests/data/blend_add_normHexbackground_local.png +0 -0
  777. psychopy/tests/data/blend_add_normNoShade_local.png +0 -0
  778. psychopy/tests/data/blend_add_norm_local.png +0 -0
  779. psychopy/tests/data/blend_add_stencil_local.png +0 -0
  780. psychopy/tests/data/bufferimg_gabor_height_local.png +0 -0
  781. psychopy/tests/data/bufferimg_gabor_normAddBlend_local.png +0 -0
  782. psychopy/tests/data/bufferimg_gabor_normHexbackground_local.png +0 -0
  783. psychopy/tests/data/bufferimg_gabor_normNoShade_local.png +0 -0
  784. psychopy/tests/data/bufferimg_gabor_norm_local.png +0 -0
  785. psychopy/tests/data/bufferimg_gabor_stencil_local.png +0 -0
  786. psychopy/tests/data/circleHex_height_local.png +0 -0
  787. psychopy/tests/data/circleHex_normAddBlend_local.png +0 -0
  788. psychopy/tests/data/circleHex_normHexbackground_local.png +0 -0
  789. psychopy/tests/data/circleHex_normNoShade_local.png +0 -0
  790. psychopy/tests/data/circleHex_norm_local.png +0 -0
  791. psychopy/tests/data/circleHex_stencil_local.png +0 -0
  792. psychopy/tests/data/color_comparison_local.png +0 -0
  793. psychopy/tests/data/corrFullRandom_local.csv +0 -16
  794. psychopy/tests/data/corrFullRandom_local.tsv +0 -6
  795. psychopy/tests/data/correctScript/.DS_Store +0 -0
  796. psychopy/tests/data/dots_height_local.png +0 -0
  797. psychopy/tests/data/dots_normAddBlend_local.png +0 -0
  798. psychopy/tests/data/dots_normHexbackground_local.png +0 -0
  799. psychopy/tests/data/dots_normNoShade_local.png +0 -0
  800. psychopy/tests/data/dots_norm_local.png +0 -0
  801. psychopy/tests/data/dots_stencil_local.png +0 -0
  802. psychopy/tests/data/elarray1_height_local.png +0 -0
  803. psychopy/tests/data/elarray1_normAddBlend_local.png +0 -0
  804. psychopy/tests/data/elarray1_normHexbackground_local.png +0 -0
  805. psychopy/tests/data/elarray1_norm_local.png +0 -0
  806. psychopy/tests/data/elarray1_stencil_local.png +0 -0
  807. psychopy/tests/data/envelopeandrcos_height_local.png +0 -0
  808. psychopy/tests/data/envelopeandrcos_normAddBlend_local.png +0 -0
  809. psychopy/tests/data/envelopeandrcos_normHexbackground_local.png +0 -0
  810. psychopy/tests/data/envelopeandrcos_norm_local.png +0 -0
  811. psychopy/tests/data/envelopeandrcos_stencil_local.png +0 -0
  812. psychopy/tests/data/envelopepowerandrcos_height_local.png +0 -0
  813. psychopy/tests/data/envelopepowerandrcos_normAddBlend_local.png +0 -0
  814. psychopy/tests/data/envelopepowerandrcos_normHexbackground_local.png +0 -0
  815. psychopy/tests/data/envelopepowerandrcos_norm_local.png +0 -0
  816. psychopy/tests/data/envelopepowerandrcos_stencil_local.png +0 -0
  817. psychopy/tests/data/gabor1_height_local.png +0 -0
  818. psychopy/tests/data/gabor1_normAddBlend_local.png +0 -0
  819. psychopy/tests/data/gabor1_normHexbackground_local.png +0 -0
  820. psychopy/tests/data/gabor1_normNoShade_local.png +0 -0
  821. psychopy/tests/data/gabor1_norm_local.png +0 -0
  822. psychopy/tests/data/gabor1_stencil_local.png +0 -0
  823. psychopy/tests/data/greyscale_normHexbackground_local.png +0 -0
  824. psychopy/tests/data/imageAndGauss_height_local.png +0 -0
  825. psychopy/tests/data/imageAndGauss_normAddBlend_local.png +0 -0
  826. psychopy/tests/data/imageAndGauss_normHexbackground_local.png +0 -0
  827. psychopy/tests/data/imageAndGauss_normNoShade_local.png +0 -0
  828. psychopy/tests/data/imageAndGauss_norm_local.png +0 -0
  829. psychopy/tests/data/imageAndGauss_stencil_local.png +0 -0
  830. psychopy/tests/data/movFrame1_stencil_local.png +0 -0
  831. psychopy/tests/data/noiseAndRcos_height_local.png +0 -0
  832. psychopy/tests/data/noiseAndRcos_normAddBlend_local.png +0 -0
  833. psychopy/tests/data/noiseAndRcos_normHexbackground_local.png +0 -0
  834. psychopy/tests/data/noiseAndRcos_normNoShade_local.png +0 -0
  835. psychopy/tests/data/noiseAndRcos_norm_local.png +0 -0
  836. psychopy/tests/data/noiseAndRcos_stencil_local.png +0 -0
  837. psychopy/tests/data/noiseFiltersAndRcos_height_local.png +0 -0
  838. psychopy/tests/data/noiseFiltersAndRcos_normAddBlend_local.png +0 -0
  839. psychopy/tests/data/noiseFiltersAndRcos_normHexbackground_local.png +0 -0
  840. psychopy/tests/data/noiseFiltersAndRcos_normNoShade_local.png +0 -0
  841. psychopy/tests/data/noiseFiltersAndRcos_norm_local.png +0 -0
  842. psychopy/tests/data/noiseFiltersAndRcos_stencil_local.png +0 -0
  843. psychopy/tests/data/numpyImage_height_local.png +0 -0
  844. psychopy/tests/data/numpyImage_normAddBlend_local.png +0 -0
  845. psychopy/tests/data/numpyImage_normHexbackground_local.png +0 -0
  846. psychopy/tests/data/numpyImage_normNoShade_local.png +0 -0
  847. psychopy/tests/data/numpyImage_norm_local.png +0 -0
  848. psychopy/tests/data/numpyImage_stencil_local.png +0 -0
  849. psychopy/tests/data/shape2_1_normAddBlend_local.png +0 -0
  850. psychopy/tests/data/shape2_1_normHexbackground_local.png +0 -0
  851. psychopy/tests/data/shape2_1_normNoShade_local.png +0 -0
  852. psychopy/tests/data/shape2_1_norm_local.png +0 -0
  853. psychopy/tests/data/shape2_1_stencil_local.png +0 -0
  854. psychopy/tests/data/testLoopsBlocks.psyexp_local.py +0 -328
  855. psychopy/tests/data/text1_height_local.png +0 -0
  856. psychopy/tests/data/text1_normAddBlend_local.png +0 -0
  857. psychopy/tests/data/text1_normHexbackground_local.png +0 -0
  858. psychopy/tests/data/text1_norm_local.png +0 -0
  859. psychopy/tests/data/text1_stencil_local.png +0 -0
  860. psychopy/tests/data/text2_height.png +0 -0
  861. psychopy/tests/data/text2_normAddBlend.png +0 -0
  862. psychopy/tests/data/text2_normHexbackground.png +0 -0
  863. psychopy/tests/data/text2_stencil.png +0 -0
  864. psychopy/tests/data/wedge1_height_local.png +0 -0
  865. psychopy/tests/data/wedge1_normAddBlend_local.png +0 -0
  866. psychopy/tests/data/wedge1_normHexbackground_local.png +0 -0
  867. psychopy/tests/data/wedge1_normNoShade_local.png +0 -0
  868. psychopy/tests/data/wedge1_norm_local.png +0 -0
  869. psychopy/tests/data/wedge1_stencil_local.png +0 -0
  870. psychopy/tests/test_app/.DS_Store +0 -0
  871. psychopy/tests/test_app/test_builder/.DS_Store +0 -0
  872. psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.csv +0 -9
  873. psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.log +0 -177
  874. psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.psydat +0 -0
  875. psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.xlsx +0 -0
  876. psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.csv +0 -9
  877. psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.log +0 -168
  878. psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.psydat +0 -0
  879. psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.xlsx +0 -0
  880. psychopy/tests/test_data/.DS_Store +0 -0
  881. psychopy/tests/test_hardware/test_CRS_BitsSharp.py +0 -67
  882. psychopy/tests/test_hardware/test_CRS_BitsSharp.py.orig +0 -68
  883. psychopy/tests/test_hardware/test_CRS_bitsShaders.py +0 -110
  884. psychopy/tests/test_visual/test_image.py.orig +0 -219
  885. psychopy/visual/basevisual.py.orig +0 -1723
  886. psychopy/visual/form.py.orig +0 -1181
  887. psychopy/visual/text.py.orig +0 -752
  888. psychopy/visual/textbox2/textbox2.py.orig +0 -1315
  889. psychopy/visual/windowwarp.py.orig +0 -463
  890. /psychopy/{app/cortex.log → alerts/alertsCatalogue/3600.yaml} +0 -0
  891. /psychopy/{app/Resources → assets}/fonts/Arvo-Bold.ttf +0 -0
  892. /psychopy/{app/Resources → assets}/fonts/Arvo-BoldItalic.ttf +0 -0
  893. /psychopy/{app/Resources → assets}/fonts/Arvo-Italic.ttf +0 -0
  894. /psychopy/{app/Resources → assets}/fonts/Arvo-Regular.ttf +0 -0
  895. /psychopy/{app/Resources → assets}/fonts/DejaVuSerif.ttf +0 -0
  896. /psychopy/{app/Resources → assets}/fonts/IndieFlower-Regular.ttf +0 -0
  897. /psychopy/{app/Resources → assets}/fonts/JetBrainsMono-Italic-VariableFont_wght.ttf +0 -0
  898. /psychopy/{app/Resources → assets}/fonts/JetBrainsMono-VariableFont_wght.ttf +0 -0
  899. /psychopy/demos/builder/Experiments/{GoNoGo → goNoGo}/readme.md +0 -0
  900. /psychopy/{demos/builder/Tools/gammaCalibration/readme.md → tests/test_plugins/__init__.py} +0 -0
  901. {psychopy-2024.2.4.dist-info → psychopy-2025.1.0.dist-info}/WHEEL +0 -0
  902. {psychopy-2024.2.4.dist-info → psychopy-2025.1.0.dist-info}/entry_points.txt +0 -0
  903. {psychopy-2024.2.4.dist-info → psychopy-2025.1.0.dist-info}/licenses/LICENSE +0 -0
@@ -8,25 +8,37 @@ These are optional components that can be obtained by installing the
8
8
 
9
9
  """
10
10
 
11
- import psychopy.logging as logging
12
- from .exceptions import DependencyError
13
-
14
- try:
15
- from psychopy_sounddevice import (
16
- SoundDeviceSound,
17
- init,
18
- getDevices,
19
- getStreamLabel
20
- )
21
- except (ModuleNotFoundError, ImportError):
22
- logging.error(
23
- "Support for the `sounddevice` audio backend is not available this "
24
- "session. Please install `psychopy-sounddevice` and restart the "
25
- "session to enable support.")
26
- except (NameError, DependencyError):
27
- logging.error(
28
- "Error encountered while loading `psychopy-sounddevice`. Check logs "
29
- "for more information.")
30
-
31
- if __name__ == "__main__":
11
+
12
+ from psychopy.plugins import PluginStub
13
+
14
+
15
+ class SoundDeviceSound(
16
+ PluginStub,
17
+ plugin="psychopy-sounddevice",
18
+ docsHome="https://github.com/psychopy/psychopy-sounddevice",
19
+ ):
20
+ pass
21
+
22
+
23
+ class init(
24
+ PluginStub,
25
+ plugin="psychopy-sounddevice",
26
+ docsHome="https://github.com/psychopy/psychopy-sounddevice",
27
+ ):
28
+ pass
29
+
30
+
31
+ class getDevices(
32
+ PluginStub,
33
+ plugin="psychopy-sounddevice",
34
+ docsHome="https://github.com/psychopy/psychopy-sounddevice",
35
+ ):
36
+ pass
37
+
38
+
39
+ class getStreamLabel(
40
+ PluginStub,
41
+ plugin="psychopy-sounddevice",
42
+ docsHome="https://github.com/psychopy/psychopy-sounddevice",
43
+ ):
32
44
  pass
@@ -7,7 +7,7 @@
7
7
  from ..exceptions import SoundFormatError, DependencyError
8
8
 
9
9
  # Part of the PsychoPy library
10
- # Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2024 Open Science Tools Ltd.
10
+ # Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
11
11
  # Distributed under the terms of the GNU General Public License (GPL).
12
12
 
13
13
  __all__ = [
@@ -5,14 +5,16 @@
5
5
  """
6
6
 
7
7
  # Part of the PsychoPy library
8
- # Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2024 Open Science Tools Ltd.
8
+ # Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
9
9
  # Distributed under the terms of the GNU General Public License (GPL).
10
10
 
11
11
  __all__ = ['Microphone']
12
12
 
13
13
  from pathlib import Path
14
+ from psychopy import logging
14
15
  from psychopy.constants import NOT_STARTED
15
16
  from psychopy.hardware import DeviceManager
17
+ from psychopy.tools.attributetools import logAttrib
16
18
 
17
19
 
18
20
  class Microphone:
@@ -24,11 +26,13 @@ class Microphone:
24
26
  streamBufferSecs=2.0,
25
27
  maxRecordingSize=24000,
26
28
  policyWhenFull='warn',
27
- audioLatencyMode=None,
29
+ exclusive=False,
28
30
  audioRunMode=0,
29
31
  name="mic",
30
32
  recordingFolder=Path.home(),
31
33
  recordingExt="wav",
34
+ # legacy
35
+ audioLatencyMode=None,
32
36
  ):
33
37
  # store name
34
38
  self.name = name
@@ -53,9 +57,11 @@ class Microphone:
53
57
  streamBufferSecs=streamBufferSecs,
54
58
  maxRecordingSize=maxRecordingSize,
55
59
  policyWhenFull=policyWhenFull,
56
- audioLatencyMode=audioLatencyMode,
60
+ exclusive=exclusive,
57
61
  audioRunMode=audioRunMode
58
62
  )
63
+ # set policy when full (in case device already existed)
64
+ self.device.policyWhenFull = policyWhenFull
59
65
  # setup clips and transcripts dicts
60
66
  self.clips = {}
61
67
  self.lastClip = None
@@ -66,6 +72,66 @@ class Microphone:
66
72
 
67
73
  def __del__(self):
68
74
  self.saveClips()
75
+
76
+ @property
77
+ def maxRecordingSize(self):
78
+ """
79
+ Until a file is saved, the audio data from a Microphone needs to be stored in RAM. To avoid
80
+ a memory leak, we limit the amount which can be stored by a single Microphone object. The
81
+ `maxRecordingSize` parameter defines what this limit is.
82
+
83
+ Parameters
84
+ ----------
85
+ value : int
86
+ How much data (in kb) to allow, default is 24mb (so 24,000kb)
87
+ """
88
+ return self.device.maxRecordingSize
89
+
90
+ @maxRecordingSize.setter
91
+ def maxRecordingSize(self, value):
92
+ # set size
93
+ self.device.maxRecordingSize = value
94
+
95
+ def setMaxRecordingSize(self, value):
96
+ self.maxRecordingSize = value
97
+ # log
98
+ logAttrib(
99
+ obj=self, log=True, attrib="maxRecordingSize", value=value
100
+ )
101
+ setMaxRecordingSize.__doc__ == maxRecordingSize.__doc__
102
+
103
+ # the Builder param has a different name
104
+ setMaxSize = setMaxRecordingSize
105
+
106
+ @property
107
+ def policyWhenFull(self):
108
+ """
109
+ Until a file is saved, the audio data from a Microphone needs to be stored in RAM. To avoid
110
+ a memory leak, we limit the amount which can be stored by a single Microphone object. The
111
+ `policyWhenFull` parameter tells the Microphone what to do when it's reached that limit.
112
+
113
+ Parameters
114
+ ----------
115
+ value : str
116
+ One of:
117
+ - "ignore": When full, just don't record any new samples
118
+ - "warn": Same as ignore, but will log a warning
119
+ - "error": When full, will raise an error
120
+ - "rolling": When full, clears the start of the buffer to make room for new samples
121
+ """
122
+ return self.device.policyWhenFull
123
+
124
+ @policyWhenFull.setter
125
+ def policyWhenFull(self, value):
126
+ return self.device.policyWhenFull
127
+
128
+ def setPolicyWhenFull(self, value):
129
+ self.policyWhenFull = value
130
+ # log
131
+ logAttrib(
132
+ obj=self, log=True, attrib="policyWhenFull", value=value
133
+ )
134
+ setPolicyWhenFull.__doc__ = policyWhenFull.__doc__
69
135
 
70
136
  @property
71
137
  def recording(self):
@@ -138,6 +204,9 @@ class Microphone:
138
204
  def close(self):
139
205
  return self.device.close()
140
206
 
207
+ def reopen(self):
208
+ return self.device.reopen()
209
+
141
210
  def poll(self):
142
211
  return self.device.poll()
143
212
 
@@ -152,6 +221,7 @@ class Microphone:
152
221
  """
153
222
  # iterate through all clips
154
223
  for tag in self.clips:
224
+ logging.info(f"Saving {len(self.clips[tag])} audio clips with tag {tag}")
155
225
  for i, clip in enumerate(self.clips[tag]):
156
226
  # construct filename
157
227
  filename = self.getClipFilename(tag, i)
@@ -213,8 +283,16 @@ class Microphone:
213
283
  self.scripts[tag] = []
214
284
 
215
285
  # append current recording to clip list according to tag
216
- self.lastClip = self.getRecording()
217
- self.clips[tag].append(self.lastClip)
286
+ lastClip = self.getRecording()
287
+ if lastClip is not None:
288
+ self.lastClip = lastClip
289
+ self.clips[tag].append(lastClip)
290
+ else:
291
+ # if no recording, return the correct number of items
292
+ if transcribe:
293
+ return None, None
294
+ else:
295
+ return None
218
296
 
219
297
  # synonymise null values
220
298
  nullVals = (
@@ -5,7 +5,7 @@
5
5
  """
6
6
 
7
7
  # Part of the PsychoPy library
8
- # Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2024 Open Science Tools Ltd.
8
+ # Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
9
9
  # Distributed under the terms of the GNU General Public License (GPL).
10
10
 
11
11
  __all__ = [
@@ -1222,7 +1222,7 @@ def recognizeSphinx(audioClip=None, language='en-US', expectedWords=None,
1222
1222
  onlyInitialize = audioClip is None
1223
1223
  global _pocketSphinxTranscriber
1224
1224
  if _pocketSphinxTranscriber is None:
1225
- allTranscribers = getAllTranscribers(engineKeys=True)
1225
+ allTranscribers = getAllTranscriberInterfaces(engineKeys=True)
1226
1226
  try:
1227
1227
  interface = allTranscribers['sphinx']
1228
1228
  except KeyError:
@@ -1297,7 +1297,7 @@ def recognizeGoogle(audioClip=None, language='en-US', expectedWords=None,
1297
1297
  onlyInitialize = audioClip is None
1298
1298
  global _googleCloudTranscriber
1299
1299
  if _googleCloudTranscriber is None:
1300
- allTranscribers = getAllTranscribers(engineKeys=True)
1300
+ allTranscribers = getAllTranscriberInterfaces(engineKeys=True)
1301
1301
  try:
1302
1302
  interface = allTranscribers['googleCloud']
1303
1303
  except KeyError:
@@ -0,0 +1 @@
1
+ print("SUCCESS")
@@ -0,0 +1,142 @@
1
+ <?xml version="1.0" ?>
2
+ <PsychoPy2experiment encoding="utf-8" version="2024.3.0">
3
+ <Settings>
4
+ <Param val="ptb" valType="str" updates="None" name="Audio lib"/>
5
+ <Param val="" valType="str" updates="None" name="Completed URL"/>
6
+ <Param val="auto" valType="str" updates="None" name="Data file delimiter"/>
7
+ <Param val="u'data/%s_%s_%s' % (expInfo['participant'], expName, expInfo['date'])" valType="code" updates="None" name="Data filename"/>
8
+ <Param val="True" valType="bool" updates="None" name="Enable Escape"/>
9
+ <Param val="Thank you for your patience." valType="str" updates="None" name="End Message"/>
10
+ <Param val="{'participant':'f&quot;{randint(0, 999999):06.0f}&quot;', 'session':'001'}" valType="code" updates="None" name="Experiment info"/>
11
+ <Param val="True" valType="bool" updates="None" name="Force stereo"/>
12
+ <Param val="True" valType="bool" updates="None" name="Full-screen window"/>
13
+ <Param val="" valType="str" updates="None" name="HTML path"/>
14
+ <Param val="" valType="str" updates="None" name="Incomplete URL"/>
15
+ <Param val="testMonitor" valType="str" updates="None" name="Monitor"/>
16
+ <Param val="[]" valType="list" updates="None" name="Resources"/>
17
+ <Param val="False" valType="bool" updates="None" name="Save csv file"/>
18
+ <Param val="False" valType="bool" updates="None" name="Save excel file"/>
19
+ <Param val="False" valType="bool" updates="None" name="Save hdf5 file"/>
20
+ <Param val="True" valType="bool" updates="None" name="Save log file"/>
21
+ <Param val="True" valType="bool" updates="None" name="Save psydat file"/>
22
+ <Param val="True" valType="bool" updates="None" name="Save wide csv file"/>
23
+ <Param val="1" valType="num" updates="None" name="Screen"/>
24
+ <Param val="True" valType="bool" updates="None" name="Show info dlg"/>
25
+ <Param val="False" valType="bool" updates="None" name="Show mouse"/>
26
+ <Param val="height" valType="str" updates="None" name="Units"/>
27
+ <Param val="" valType="str" updates="None" name="Use version"/>
28
+ <Param val="(1024, 768)" valType="list" updates="None" name="Window size (pixels)"/>
29
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
30
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
31
+ <Param val="avg" valType="str" updates="None" name="blendMode"/>
32
+ <Param val="float" valType="str" updates="None" name="clockFormat"/>
33
+ <Param val="{'thisRow.t': 'priority.CRITICAL', 'expName': 'priority.LOW'}" valType="dict" updates="None" name="colPriority"/>
34
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
35
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
36
+ <Param val="warning" valType="code" updates="None" name="consoleLoggingLevel"/>
37
+ <Param val="default" valType="str" updates="None" name="ecSampleRate"/>
38
+ <Param val="100.1.1.1" valType="str" updates="None" name="elAddress"/>
39
+ <Param val="FILTER_LEVEL_2" valType="str" updates="None" name="elDataFiltering"/>
40
+ <Param val="FILTER_LEVEL_OFF" valType="str" updates="None" name="elLiveFiltering"/>
41
+ <Param val="EYELINK 1000 DESKTOP" valType="str" updates="None" name="elModel"/>
42
+ <Param val="ELLIPSE_FIT" valType="str" updates="None" name="elPupilAlgorithm"/>
43
+ <Param val="PUPIL_AREA" valType="str" updates="None" name="elPupilMeasure"/>
44
+ <Param val="1000" valType="num" updates="None" name="elSampleRate"/>
45
+ <Param val="False" valType="bool" updates="None" name="elSimMode"/>
46
+ <Param val="RIGHT_EYE" valType="str" updates="None" name="elTrackEyes"/>
47
+ <Param val="PUPIL_CR_TRACKING" valType="str" updates="None" name="elTrackingMode"/>
48
+ <Param val="test_load_counterbalance" valType="str" updates="None" name="expName"/>
49
+ <Param val="" valType="str" updates="None" name="expVersion"/>
50
+ <Param val="on Sync" valType="str" updates="None" name="exportHTML"/>
51
+ <Param val="None" valType="str" updates="None" name="eyetracker"/>
52
+ <Param val="" valType="code" updates="None" name="frameRate"/>
53
+ <Param val="Attempting to measure frame rate of screen, please wait..." valType="str" updates="None" name="frameRateMsg"/>
54
+ <Param val="127.0.0.1" valType="str" updates="None" name="gpAddress"/>
55
+ <Param val="4242" valType="num" updates="None" name="gpPort"/>
56
+ <Param val="ioHub" valType="str" updates="None" name="keyboardBackend"/>
57
+ <Param val="info" valType="code" updates="None" name="logging level"/>
58
+ <Param val="True" valType="bool" updates="None" name="measureFrameRate"/>
59
+ <Param val="MIDDLE_BUTTON" valType="list" updates="None" name="mgBlink"/>
60
+ <Param val="CONTINUOUS" valType="str" updates="None" name="mgMove"/>
61
+ <Param val="0.5" valType="num" updates="None" name="mgSaccade"/>
62
+ <Param val="neon.local" valType="str" updates="None" name="plCompanionAddress"/>
63
+ <Param val="8080" valType="num" updates="None" name="plCompanionPort"/>
64
+ <Param val="0.6" valType="num" updates="None" name="plConfidenceThreshold"/>
65
+ <Param val="" valType="str" updates="None" name="plPupilCaptureRecordingLocation"/>
66
+ <Param val="127.0.0.1" valType="str" updates="None" name="plPupilRemoteAddress"/>
67
+ <Param val="50020" valType="num" updates="None" name="plPupilRemotePort"/>
68
+ <Param val="1000" valType="num" updates="None" name="plPupilRemoteTimeoutMs"/>
69
+ <Param val="False" valType="bool" updates="None" name="plPupillometryOnly"/>
70
+ <Param val="psychopy_iohub_surface" valType="str" updates="None" name="plSurfaceName"/>
71
+ <Param val="0" valType="code" updates="None" name="runMode"/>
72
+ <Param val="False" valType="bool" updates="None" name="rush"/>
73
+ <Param val="time" valType="str" updates="None" name="sortColumns"/>
74
+ <Param val="" valType="str" updates="None" name="tbLicenseFile"/>
75
+ <Param val="" valType="str" updates="None" name="tbModel"/>
76
+ <Param val="60" valType="num" updates="None" name="tbSampleRate"/>
77
+ <Param val="" valType="str" updates="None" name="tbSerialNo"/>
78
+ <Param val="pyglet" valType="str" updates="None" name="winBackend"/>
79
+ </Settings>
80
+ <Routines>
81
+ <Routine name="trial">
82
+ <RoutineSettingsComponent name="trial" plugin="None">
83
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
84
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
85
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
86
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
87
+ <Param val="" valType="str" updates="constant" name="desc"/>
88
+ <Param val="False" valType="bool" updates="None" name="disabled"/>
89
+ <Param val="" valType="code" updates="None" name="durationEstim"/>
90
+ <Param val="False" valType="code" updates="None" name="forceNonSlip"/>
91
+ <Param val="trial" valType="code" updates="None" name="name"/>
92
+ <Param val="True" valType="bool" updates="None" name="saveStartStop"/>
93
+ <Param val="" valType="code" updates="constant" name="skipIf"/>
94
+ <Param val="duration (s)" valType="str" updates="None" name="stopType"/>
95
+ <Param val="" valType="code" updates="constant" name="stopVal"/>
96
+ <Param val="False" valType="bool" updates="None" name="useWindowParams"/>
97
+ </RoutineSettingsComponent>
98
+ </Routine>
99
+ <CounterbalanceRoutine name="counterbalance">
100
+ <Param name="conditionsFile" updates="None" val="" valType="file"/>
101
+ <Param name="conditionsVariable" updates="None" val="" valType="code"/>
102
+ <Param name="disabled" updates="None" val="False" valType="bool"/>
103
+ <Param name="endExperimentOnDepletion" updates="None" val="ignore" valType="code"/>
104
+ <Param name="nGroups" updates="None" val="2" valType="code"/>
105
+ <Param name="nReps" updates="None" val="1" valType="code"/>
106
+ <Param name="nSlots" updates="None" val="10" valType="code"/>
107
+ <Param name="name" updates="None" val="counterbalance" valType="code"/>
108
+ <Param name="saveData" updates="None" val="True" valType="bool"/>
109
+ <Param name="saveRemaining" updates="None" val="True" valType="bool"/>
110
+ <Param name="specMode" updates="None" val="uniform" valType="str"/>
111
+ </CounterbalanceRoutine>
112
+ <CounterbalanceRoutine name="counterbalance_2">
113
+ <Param name="conditionsFile" updates="None" val="" valType="file"/>
114
+ <Param name="conditionsVariable" updates="None" val="" valType="code"/>
115
+ <Param name="disabled" updates="None" val="False" valType="bool"/>
116
+ <Param name="endExperimentOnDepletion" updates="None" val="ignore" valType="code"/>
117
+ <Param name="nGroups" updates="None" val="2" valType="code"/>
118
+ <Param name="nReps" updates="None" val="1" valType="code"/>
119
+ <Param name="nSlots" updates="None" val="10" valType="code"/>
120
+ <Param name="name" updates="None" val="counterbalance_2" valType="code"/>
121
+ <Param name="saveData" updates="None" val="True" valType="bool"/>
122
+ <Param name="saveRemaining" updates="None" val="True" valType="bool"/>
123
+ <Param name="specMode" updates="None" val="uniform" valType="str"/>
124
+ </CounterbalanceRoutine>
125
+ <CounterbalanceRoutine name="counterbalance_3">
126
+ <Param name="conditionsFile" updates="None" val="" valType="file"/>
127
+ <Param name="conditionsVariable" updates="None" val="" valType="code"/>
128
+ <Param name="disabled" updates="None" val="False" valType="bool"/>
129
+ <Param name="endExperimentOnDepletion" updates="None" val="ignore" valType="code"/>
130
+ <Param name="nGroups" updates="None" val="2" valType="code"/>
131
+ <Param name="nReps" updates="None" val="1" valType="code"/>
132
+ <Param name="nSlots" updates="None" val="10" valType="code"/>
133
+ <Param name="name" updates="None" val="counterbalance_3" valType="code"/>
134
+ <Param name="saveData" updates="None" val="True" valType="bool"/>
135
+ <Param name="saveRemaining" updates="None" val="True" valType="bool"/>
136
+ <Param name="specMode" updates="None" val="uniform" valType="str"/>
137
+ </CounterbalanceRoutine>
138
+ </Routines>
139
+ <Flow>
140
+ <Routine name="trial"/>
141
+ </Flow>
142
+ </PsychoPy2experiment>
@@ -0,0 +1,129 @@
1
+ <?xml version="1.0" ?>
2
+ <PsychoPy2experiment encoding="utf-8" version="2024.3.0">
3
+ <Settings>
4
+ <Param val="ptb" valType="str" updates="None" name="Audio lib"/>
5
+ <Param val="" valType="str" updates="None" name="Completed URL"/>
6
+ <Param val="auto" valType="str" updates="None" name="Data file delimiter"/>
7
+ <Param val="u'data/%s_%s_%s' % (expInfo['participant'], expName, expInfo['date'])" valType="code" updates="None" name="Data filename"/>
8
+ <Param val="True" valType="bool" updates="None" name="Enable Escape"/>
9
+ <Param val="Thank you for your patience." valType="str" updates="None" name="End Message"/>
10
+ <Param val="{'participant':'f&quot;{randint(0, 999999):06.0f}&quot;', 'session':'001'}" valType="code" updates="None" name="Experiment info"/>
11
+ <Param val="True" valType="bool" updates="None" name="Force stereo"/>
12
+ <Param val="True" valType="bool" updates="None" name="Full-screen window"/>
13
+ <Param val="" valType="str" updates="None" name="HTML path"/>
14
+ <Param val="" valType="str" updates="None" name="Incomplete URL"/>
15
+ <Param val="testMonitor" valType="str" updates="None" name="Monitor"/>
16
+ <Param val="[]" valType="list" updates="None" name="Resources"/>
17
+ <Param val="False" valType="bool" updates="None" name="Save csv file"/>
18
+ <Param val="False" valType="bool" updates="None" name="Save excel file"/>
19
+ <Param val="False" valType="bool" updates="None" name="Save hdf5 file"/>
20
+ <Param val="True" valType="bool" updates="None" name="Save log file"/>
21
+ <Param val="True" valType="bool" updates="None" name="Save psydat file"/>
22
+ <Param val="True" valType="bool" updates="None" name="Save wide csv file"/>
23
+ <Param val="1" valType="num" updates="None" name="Screen"/>
24
+ <Param val="True" valType="bool" updates="None" name="Show info dlg"/>
25
+ <Param val="False" valType="bool" updates="None" name="Show mouse"/>
26
+ <Param val="height" valType="str" updates="None" name="Units"/>
27
+ <Param val="" valType="str" updates="None" name="Use version"/>
28
+ <Param val="(1024, 768)" valType="list" updates="None" name="Window size (pixels)"/>
29
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
30
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
31
+ <Param val="avg" valType="str" updates="None" name="blendMode"/>
32
+ <Param val="float" valType="str" updates="None" name="clockFormat"/>
33
+ <Param val="{'thisRow.t': 'priority.CRITICAL', 'expName': 'priority.LOW'}" valType="dict" updates="None" name="colPriority"/>
34
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
35
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
36
+ <Param val="warning" valType="code" updates="None" name="consoleLoggingLevel"/>
37
+ <Param val="default" valType="str" updates="None" name="ecSampleRate"/>
38
+ <Param val="100.1.1.1" valType="str" updates="None" name="elAddress"/>
39
+ <Param val="FILTER_LEVEL_2" valType="str" updates="None" name="elDataFiltering"/>
40
+ <Param val="FILTER_LEVEL_OFF" valType="str" updates="None" name="elLiveFiltering"/>
41
+ <Param val="EYELINK 1000 DESKTOP" valType="str" updates="None" name="elModel"/>
42
+ <Param val="ELLIPSE_FIT" valType="str" updates="None" name="elPupilAlgorithm"/>
43
+ <Param val="PUPIL_AREA" valType="str" updates="None" name="elPupilMeasure"/>
44
+ <Param val="1000" valType="num" updates="None" name="elSampleRate"/>
45
+ <Param val="False" valType="bool" updates="None" name="elSimMode"/>
46
+ <Param val="RIGHT_EYE" valType="str" updates="None" name="elTrackEyes"/>
47
+ <Param val="PUPIL_CR_TRACKING" valType="str" updates="None" name="elTrackingMode"/>
48
+ <Param val="test_custom_mix" valType="str" updates="None" name="expName"/>
49
+ <Param val="" valType="str" updates="None" name="expVersion"/>
50
+ <Param val="on Sync" valType="str" updates="None" name="exportHTML"/>
51
+ <Param val="None" valType="str" updates="None" name="eyetracker"/>
52
+ <Param val="" valType="code" updates="None" name="frameRate"/>
53
+ <Param val="Attempting to measure frame rate of screen, please wait..." valType="str" updates="None" name="frameRateMsg"/>
54
+ <Param val="127.0.0.1" valType="str" updates="None" name="gpAddress"/>
55
+ <Param val="4242" valType="num" updates="None" name="gpPort"/>
56
+ <Param val="ioHub" valType="str" updates="None" name="keyboardBackend"/>
57
+ <Param val="info" valType="code" updates="None" name="logging level"/>
58
+ <Param val="True" valType="bool" updates="None" name="measureFrameRate"/>
59
+ <Param val="MIDDLE_BUTTON" valType="list" updates="None" name="mgBlink"/>
60
+ <Param val="CONTINUOUS" valType="str" updates="None" name="mgMove"/>
61
+ <Param val="0.5" valType="num" updates="None" name="mgSaccade"/>
62
+ <Param val="neon.local" valType="str" updates="None" name="plCompanionAddress"/>
63
+ <Param val="8080" valType="num" updates="None" name="plCompanionPort"/>
64
+ <Param val="0.6" valType="num" updates="None" name="plConfidenceThreshold"/>
65
+ <Param val="" valType="str" updates="None" name="plPupilCaptureRecordingLocation"/>
66
+ <Param val="127.0.0.1" valType="str" updates="None" name="plPupilRemoteAddress"/>
67
+ <Param val="50020" valType="num" updates="None" name="plPupilRemotePort"/>
68
+ <Param val="1000" valType="num" updates="None" name="plPupilRemoteTimeoutMs"/>
69
+ <Param val="False" valType="bool" updates="None" name="plPupillometryOnly"/>
70
+ <Param val="psychopy_iohub_surface" valType="str" updates="None" name="plSurfaceName"/>
71
+ <Param val="0" valType="code" updates="None" name="runMode"/>
72
+ <Param val="False" valType="bool" updates="None" name="rush"/>
73
+ <Param val="time" valType="str" updates="None" name="sortColumns"/>
74
+ <Param val="" valType="str" updates="None" name="tbLicenseFile"/>
75
+ <Param val="" valType="str" updates="None" name="tbModel"/>
76
+ <Param val="60" valType="num" updates="None" name="tbSampleRate"/>
77
+ <Param val="" valType="str" updates="None" name="tbSerialNo"/>
78
+ <Param val="pyglet" valType="str" updates="None" name="winBackend"/>
79
+ </Settings>
80
+ <Routines>
81
+ <Routine name="trial">
82
+ <RoutineSettingsComponent name="trial" plugin="None">
83
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
84
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
85
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
86
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
87
+ <Param val="" valType="str" updates="constant" name="desc"/>
88
+ <Param val="False" valType="bool" updates="None" name="disabled"/>
89
+ <Param val="" valType="code" updates="None" name="durationEstim"/>
90
+ <Param val="False" valType="code" updates="None" name="forceNonSlip"/>
91
+ <Param val="trial" valType="code" updates="None" name="name"/>
92
+ <Param val="True" valType="bool" updates="None" name="saveStartStop"/>
93
+ <Param val="" valType="code" updates="constant" name="skipIf"/>
94
+ <Param val="duration (s)" valType="str" updates="None" name="stopType"/>
95
+ <Param val="" valType="code" updates="constant" name="stopVal"/>
96
+ <Param val="False" valType="bool" updates="None" name="useWindowParams"/>
97
+ </RoutineSettingsComponent>
98
+ </Routine>
99
+ <CounterbalanceRoutine name="custom_2">
100
+ <Param name="conditionsFile" updates="None" val="" valType="file"/>
101
+ <Param name="conditionsVariable" updates="None" val="" valType="code"/>
102
+ <Param name="disabled" updates="None" val="False" valType="bool"/>
103
+ <Param name="endExperimentOnDepletion" updates="None" val="True" valType="code"/>
104
+ <Param name="nGroups" updates="None" val="2" valType="code"/>
105
+ <Param name="nReps" updates="None" val="1" valType="code"/>
106
+ <Param name="nSlots" updates="None" val="10" valType="code"/>
107
+ <Param name="name" updates="None" val="custom_2" valType="code"/>
108
+ <Param name="saveData" updates="None" val="True" valType="bool"/>
109
+ <Param name="saveRemaining" updates="None" val="True" valType="bool"/>
110
+ <Param name="specMode" updates="None" val="uniform" valType="str"/>
111
+ </CounterbalanceRoutine>
112
+ <CounterbalanceRoutine name="counterbalance_2">
113
+ <Param name="conditionsFile" updates="None" val="" valType="file"/>
114
+ <Param name="conditionsVariable" updates="None" val="" valType="code"/>
115
+ <Param name="disabled" updates="None" val="False" valType="bool"/>
116
+ <Param name="endExperimentOnDepletion" updates="None" val="ignore" valType="code"/>
117
+ <Param name="nGroups" updates="None" val="2" valType="code"/>
118
+ <Param name="nReps" updates="None" val="1" valType="code"/>
119
+ <Param name="nSlots" updates="None" val="10" valType="code"/>
120
+ <Param name="name" updates="None" val="counterbalance_2" valType="code"/>
121
+ <Param name="saveData" updates="None" val="True" valType="bool"/>
122
+ <Param name="saveRemaining" updates="None" val="True" valType="bool"/>
123
+ <Param name="specMode" updates="None" val="uniform" valType="str"/>
124
+ </CounterbalanceRoutine>
125
+ </Routines>
126
+ <Flow>
127
+ <Routine name="trial"/>
128
+ </Flow>
129
+ </PsychoPy2experiment>