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.
- psychopy/CHANGELOG.txt +208 -4
- psychopy/LICENSE.txt +1 -1
- psychopy/VERSION +1 -1
- psychopy/__init__.py +10 -7
- psychopy/alerts/__init__.py +1 -1
- psychopy/alerts/_alerts.py +53 -17
- psychopy/alerts/_errorHandler.py +3 -4
- psychopy/alerts/alertsCatalogue/3210.yaml +27 -0
- psychopy/alerts/alertsCatalogue/3610.yaml +19 -0
- psychopy/alerts/alertsCatalogue/4130.yaml +19 -0
- psychopy/alerts/alertsCatalogue/alertCategories.yaml +8 -1
- psychopy/alerts/alertsCatalogue/alertmsg.py +1 -1
- psychopy/alerts/alerttools.py +0 -16
- psychopy/app/Resources/betasplash.png +0 -0
- psychopy/app/Resources/betasplash@2x.png +0 -0
- psychopy/app/Resources/classic/case.png +0 -0
- psychopy/app/Resources/classic/case@2x.png +0 -0
- psychopy/app/Resources/classic/fileaudio.png +0 -0
- psychopy/app/Resources/classic/fileaudio@2x.png +0 -0
- psychopy/app/Resources/classic/filecss.png +0 -0
- psychopy/app/Resources/classic/filecss@2x.png +0 -0
- psychopy/app/Resources/classic/filecsv.png +0 -0
- psychopy/app/Resources/classic/filecsv@2x.png +0 -0
- psychopy/app/Resources/classic/filedesign.png +0 -0
- psychopy/app/Resources/classic/filedesign@2x.png +0 -0
- psychopy/app/Resources/classic/filefont.png +0 -0
- psychopy/app/Resources/classic/filefont@2x.png +0 -0
- psychopy/app/Resources/classic/filegit.png +0 -0
- psychopy/app/Resources/classic/filegit@2x.png +0 -0
- psychopy/app/Resources/classic/filehtml.png +0 -0
- psychopy/app/Resources/classic/filehtml@2x.png +0 -0
- psychopy/app/Resources/classic/fileimage.png +0 -0
- psychopy/app/Resources/classic/fileimage@2x.png +0 -0
- psychopy/app/Resources/classic/fileinfo.png +0 -0
- psychopy/app/Resources/classic/fileinfo@2x.png +0 -0
- psychopy/app/Resources/classic/filejs.png +0 -0
- psychopy/app/Resources/classic/filejs@2x.png +0 -0
- psychopy/app/Resources/classic/filejson.png +0 -0
- psychopy/app/Resources/classic/filejson@2x.png +0 -0
- psychopy/app/Resources/classic/filepkg.png +0 -0
- psychopy/app/Resources/classic/filepkg@2x.png +0 -0
- psychopy/app/Resources/classic/filepsyexp.png +0 -0
- psychopy/app/Resources/classic/filepsyexp@2x.png +0 -0
- psychopy/app/Resources/classic/filepy.png +0 -0
- psychopy/app/Resources/classic/filepy@2x.png +0 -0
- psychopy/app/Resources/classic/filetxt.png +0 -0
- psychopy/app/Resources/classic/filetxt@2x.png +0 -0
- psychopy/app/Resources/classic/fileunknown.png +0 -0
- psychopy/app/Resources/classic/fileunknown@2x.png +0 -0
- psychopy/app/Resources/classic/filevideo.png +0 -0
- psychopy/app/Resources/classic/filevideo@2x.png +0 -0
- psychopy/app/Resources/classic/find.png +0 -0
- psychopy/app/Resources/classic/find@2x.png +0 -0
- psychopy/app/Resources/classic/loop.png +0 -0
- psychopy/app/Resources/classic/loop@2x.png +0 -0
- psychopy/app/Resources/classic/regex.png +0 -0
- psychopy/app/Resources/classic/regex@2x.png +0 -0
- psychopy/app/Resources/dark/case.png +0 -0
- psychopy/app/Resources/dark/case@2x.png +0 -0
- psychopy/app/Resources/dark/fileaudio.png +0 -0
- psychopy/app/Resources/dark/fileaudio@2x.png +0 -0
- psychopy/app/Resources/dark/filecss.png +0 -0
- psychopy/app/Resources/dark/filecss@2x.png +0 -0
- psychopy/app/Resources/dark/filecsv.png +0 -0
- psychopy/app/Resources/dark/filecsv@2x.png +0 -0
- psychopy/app/Resources/dark/filedesign.png +0 -0
- psychopy/app/Resources/dark/filedesign@2x.png +0 -0
- psychopy/app/Resources/dark/filefont.png +0 -0
- psychopy/app/Resources/dark/filefont@2x.png +0 -0
- psychopy/app/Resources/dark/filegit.png +0 -0
- psychopy/app/Resources/dark/filegit@2x.png +0 -0
- psychopy/app/Resources/dark/filehtml.png +0 -0
- psychopy/app/Resources/dark/filehtml@2x.png +0 -0
- psychopy/app/Resources/dark/fileimage.png +0 -0
- psychopy/app/Resources/dark/fileimage@2x.png +0 -0
- psychopy/app/Resources/dark/fileinfo.png +0 -0
- psychopy/app/Resources/dark/fileinfo@2x.png +0 -0
- psychopy/app/Resources/dark/filejs.png +0 -0
- psychopy/app/Resources/dark/filejs@2x.png +0 -0
- psychopy/app/Resources/dark/filejson.png +0 -0
- psychopy/app/Resources/dark/filejson@2x.png +0 -0
- psychopy/app/Resources/dark/filepkg.png +0 -0
- psychopy/app/Resources/dark/filepkg@2x.png +0 -0
- psychopy/app/Resources/dark/filepsyexp.png +0 -0
- psychopy/app/Resources/dark/filepsyexp@2x.png +0 -0
- psychopy/app/Resources/dark/filepy.png +0 -0
- psychopy/app/Resources/dark/filepy@2x.png +0 -0
- psychopy/app/Resources/dark/filetxt.png +0 -0
- psychopy/app/Resources/dark/filetxt@2x.png +0 -0
- psychopy/app/Resources/dark/fileunknown.png +0 -0
- psychopy/app/Resources/dark/fileunknown@2x.png +0 -0
- psychopy/app/Resources/dark/filevideo.png +0 -0
- psychopy/app/Resources/dark/filevideo@2x.png +0 -0
- psychopy/app/Resources/dark/find.png +0 -0
- psychopy/app/Resources/dark/find@2x.png +0 -0
- psychopy/app/Resources/dark/loop.png +0 -0
- psychopy/app/Resources/dark/loop@2x.png +0 -0
- psychopy/app/Resources/dark/regex.png +0 -0
- psychopy/app/Resources/dark/regex@2x.png +0 -0
- psychopy/app/Resources/light/case.png +0 -0
- psychopy/app/Resources/light/case@2x.png +0 -0
- psychopy/app/Resources/light/fileaudio.png +0 -0
- psychopy/app/Resources/light/fileaudio@2x.png +0 -0
- psychopy/app/Resources/light/filecss.png +0 -0
- psychopy/app/Resources/light/filecss@2x.png +0 -0
- psychopy/app/Resources/light/filecsv.png +0 -0
- psychopy/app/Resources/light/filecsv@2x.png +0 -0
- psychopy/app/Resources/light/filedesign.png +0 -0
- psychopy/app/Resources/light/filedesign@2x.png +0 -0
- psychopy/app/Resources/light/filefont.png +0 -0
- psychopy/app/Resources/light/filefont@2x.png +0 -0
- psychopy/app/Resources/light/filegit.png +0 -0
- psychopy/app/Resources/light/filegit@2x.png +0 -0
- psychopy/app/Resources/light/filehtml.png +0 -0
- psychopy/app/Resources/light/filehtml@2x.png +0 -0
- psychopy/app/Resources/light/fileimage.png +0 -0
- psychopy/app/Resources/light/fileimage@2x.png +0 -0
- psychopy/app/Resources/light/fileinfo.png +0 -0
- psychopy/app/Resources/light/fileinfo@2x.png +0 -0
- psychopy/app/Resources/light/filejs.png +0 -0
- psychopy/app/Resources/light/filejs@2x.png +0 -0
- psychopy/app/Resources/light/filejson.png +0 -0
- psychopy/app/Resources/light/filejson@2x.png +0 -0
- psychopy/app/Resources/light/filepkg.png +0 -0
- psychopy/app/Resources/light/filepkg@2x.png +0 -0
- psychopy/app/Resources/light/filepsyexp.png +0 -0
- psychopy/app/Resources/light/filepsyexp@2x.png +0 -0
- psychopy/app/Resources/light/filepy.png +0 -0
- psychopy/app/Resources/light/filepy@2x.png +0 -0
- psychopy/app/Resources/light/filetxt.png +0 -0
- psychopy/app/Resources/light/filetxt@2x.png +0 -0
- psychopy/app/Resources/light/fileunknown.png +0 -0
- psychopy/app/Resources/light/fileunknown@2x.png +0 -0
- psychopy/app/Resources/light/filevideo.png +0 -0
- psychopy/app/Resources/light/filevideo@2x.png +0 -0
- psychopy/app/Resources/light/find.png +0 -0
- psychopy/app/Resources/light/find@2x.png +0 -0
- psychopy/app/Resources/light/loop.png +0 -0
- psychopy/app/Resources/light/loop@2x.png +0 -0
- psychopy/app/Resources/light/regex.png +0 -0
- psychopy/app/Resources/light/regex@2x.png +0 -0
- psychopy/app/Resources/routine_templates/Basic.psyexp +0 -1
- psychopy/app/Resources/routine_templates/Misc.psyexp +0 -1
- psychopy/app/Resources/routine_templates/Online.psyexp +0 -2
- psychopy/app/Resources/routine_templates/Trials.psyexp +0 -1
- psychopy/app/Resources/splash.png +0 -0
- psychopy/app/Resources/splash@2x.png +0 -0
- psychopy/app/__init__.py +49 -8
- psychopy/app/__main__.py +3 -0
- psychopy/app/_psychopyApp.py +134 -125
- psychopy/app/builder/builder.py +42 -22
- psychopy/app/builder/dialogs/__init__.py +44 -11
- psychopy/app/builder/dialogs/dlgsCode.py +1 -1
- psychopy/app/builder/dialogs/dlgsConditions.py +1 -1
- psychopy/app/builder/dialogs/findDlg.py +106 -20
- psychopy/app/builder/dialogs/paramCtrls.py +42 -1
- psychopy/app/builder/validators.py +1 -1
- psychopy/app/coder/codeEditorBase.py +8 -8
- psychopy/app/coder/coder.py +32 -29
- psychopy/app/coder/fileBrowser.py +68 -22
- psychopy/app/coder/folding.py +1 -1
- psychopy/app/coder/psychoParser.py +1 -1
- psychopy/app/coder/repl.py +1 -1
- psychopy/app/coder/sourceTree.py +1 -1
- psychopy/app/connections/__init__.py +1 -1
- psychopy/app/connections/news.py +1 -1
- psychopy/app/connections/sendusage.py +1 -1
- psychopy/app/connections/updates.py +1 -1
- psychopy/app/console.py +1 -1
- psychopy/app/errorDlg.py +1 -1
- psychopy/app/frametracker.py +1 -1
- psychopy/app/idle.py +1 -1
- psychopy/app/jobs.py +5 -2
- psychopy/app/linuxconfig/__init__.py +1 -1
- psychopy/app/locale/ar_001/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ar_001/LC_MESSAGE/messages.po +1514 -3259
- psychopy/app/locale/cs_CZ/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/da_DK/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/de_DE/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/de_DE/LC_MESSAGE/messages.po +3 -3
- psychopy/app/locale/el_GR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/en_NZ/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/en_US/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_CO/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_CO/LC_MESSAGE/messages.po +4 -4
- psychopy/app/locale/es_ES/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_ES/LC_MESSAGE/messages.po +4 -4
- psychopy/app/locale/es_US/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_US/LC_MESSAGE/messages.po +4 -4
- psychopy/app/locale/et_EE/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/et_EE/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/fa_IR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/fa_IR/LC_MESSAGE/messages.po +1 -1
- psychopy/app/locale/fi_FI/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/fr_FR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/fr_FR/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/he_IL/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/he_IL/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/hi_IN/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/hi_IN/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/hu_HU/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/it_IT/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/it_IT/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/ja_JP/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ja_JP/LC_MESSAGE/messages.po +3421 -2396
- psychopy/app/locale/ko_KR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ms_MY/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ms_MY/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/nl_NL/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/nn_NO/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/pl_PL/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/pt_PT/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/pt_PT/LC_MESSAGE/messages.po +4 -4
- psychopy/app/locale/ro_RO/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ru_RU/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/sv_SE/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/sv_SE/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/tr_TR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/tr_TR/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/zh_CN/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/zh_CN/LC_MESSAGE/messages.po +3 -3
- psychopy/app/locale/zh_TW/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/zh_TW/LC_MESSAGE/messages.po +2 -2
- psychopy/app/{builder/localizedStrings.py → localizedStrings.py} +173 -26
- psychopy/app/pavlovia_ui/__init__.py +1 -1
- psychopy/app/pavlovia_ui/_base.py +1 -1
- psychopy/app/pavlovia_ui/functions.py +1 -1
- psychopy/app/pavlovia_ui/menu.py +1 -1
- psychopy/app/pavlovia_ui/project.py +1 -1
- psychopy/app/pavlovia_ui/search.py +1 -1
- psychopy/app/pavlovia_ui/sync.py +1 -1
- psychopy/app/pavlovia_ui/user.py +1 -1
- psychopy/app/plugin_manager/dialog.py +34 -96
- psychopy/app/plugin_manager/packages.py +10 -14
- psychopy/app/plugin_manager/plugins.py +64 -4
- psychopy/app/preferencesDlg.py +12 -37
- psychopy/app/psychopyApp.py +130 -44
- psychopy/app/ribbon.py +1 -0
- psychopy/app/runner/runner.py +37 -15
- psychopy/app/runner/scriptProcess.py +11 -6
- psychopy/app/stdout/stdOutRich.py +9 -2
- psychopy/app/themes/fonts.py +1 -1
- psychopy/app/themes/icons.py +2 -38
- psychopy/app/ui/__init__.py +1 -1
- psychopy/app/utils.py +3 -3
- psychopy/assets/default.mp3 +0 -0
- psychopy/assets/fonts/NotoSans-Bold.ttf +0 -0
- psychopy/assets/fonts/NotoSans-BoldItalic.ttf +0 -0
- psychopy/assets/fonts/NotoSans-Italic.ttf +0 -0
- psychopy/assets/fonts/NotoSans-Regular.ttf +0 -0
- psychopy/assets/voicekeyThresholdStim.wav +0 -0
- psychopy/clock.py +4 -1
- psychopy/colors.py +2 -0
- psychopy/core.py +1 -1
- psychopy/data/base.py +1 -1
- psychopy/data/experiment.py +151 -46
- psychopy/data/routine.py +27 -1
- psychopy/data/staircase.py +2 -1
- psychopy/data/trial.py +62 -14
- psychopy/data/utils.py +1 -1
- psychopy/demos/builder/Design Templates/branchedExperiment/branchedExperiment.psyexp +333 -218
- psychopy/demos/builder/Design Templates/psychophysicsStaircase/psychophysicsStaircase.psyexp +261 -239
- psychopy/demos/builder/Design Templates/psychophysicsStairsInterleaved/psychophysicsStaircaseInterleaved.psyexp +319 -180
- psychopy/demos/builder/Design Templates/randomisedBlocks/randomisedBlocks.psyexp +204 -116
- psychopy/demos/builder/Experiments/BART/assets/background.jpg +0 -0
- psychopy/demos/builder/Experiments/BART/assets/blueBalloon.png +0 -0
- psychopy/demos/builder/Experiments/BART/assets/greenBalloon.png +0 -0
- psychopy/demos/builder/Experiments/BART/assets/redBalloon.png +0 -0
- psychopy/demos/builder/Experiments/BART/bart.psyexp +779 -866
- psychopy/demos/builder/Experiments/BigFiveInventory/BFI.psyexp +242 -180
- psychopy/demos/builder/Experiments/GoNoGo/gng.psyexp +419 -406
- psychopy/demos/builder/Experiments/dragAndDrop/README.md +2 -37
- psychopy/demos/builder/Experiments/dragAndDrop/drag_and_drop.psyexp +460 -1204
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/blank_grid.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/make_shapes.psyexp +221 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/readme.md +4 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_1.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_10.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_2.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_3.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_4.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_5.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_6.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_7.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_8.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_9.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solutions.xlsx +0 -0
- psychopy/demos/builder/Experiments/mentalRotation/MentalRotation.psyexp +583 -542
- psychopy/demos/builder/Experiments/navon/NavonTask.psyexp +458 -427
- psychopy/demos/builder/Experiments/sternberg/sternberg.psyexp +588 -550
- psychopy/demos/builder/Experiments/stroop/stroop.psyexp +303 -207
- psychopy/demos/builder/Experiments/stroopExtended/stroop.psyexp +390 -215
- psychopy/demos/builder/Experiments/stroopExtended/stroopReverse.psyexp +390 -215
- psychopy/demos/builder/Experiments/stroopVoice/stroopVoice.psyexp +357 -331
- psychopy/demos/builder/Feature Demos/buttonBox/buttonBoxDemo.psyexp +3 -2
- psychopy/demos/builder/Feature Demos/counterbalance/counterbalance.psyexp +287 -277
- psychopy/demos/builder/Feature Demos/gratings/gratings.psyexp +370 -320
- psychopy/demos/builder/Feature Demos/noise/noise.psyexp +452 -399
- psychopy/demos/builder/Feature Demos/panorama/panorama.psyexp +168 -133
- psychopy/demos/builder/Feature Demos/pilotMode/pilotMode.psyexp +4 -3
- psychopy/demos/builder/Feature Demos/progress/progressBar.psyexp +420 -392
- psychopy/demos/builder/Feature Demos/sliders/sliders.psyexp +917 -871
- psychopy/demos/builder/Feature Demos/visualValidator/readme.md +7 -0
- psychopy/demos/builder/Feature Demos/visualValidator/visualValidator.psyexp +200 -0
- psychopy/demos/builder/Hardware/EEG_parallel_component/EEG_triggers_parallel_comp.psyexp +25 -9
- psychopy/demos/builder/Hardware/EEG_serial_code/EEG_triggers_serial_code.psyexp +372 -361
- psychopy/demos/builder/Hardware/EEG_serial_component/EEG_triggers_serial_comp.psyexp +25 -9
- psychopy/demos/builder/Hardware/EGI_netstation/stroop.psyexp +320 -235
- psychopy/demos/builder/Hardware/Eyetracking_visual_search/visualSearch.psyexp +790 -651
- psychopy/demos/builder/Hardware/camera/camera.psyexp +326 -246
- psychopy/demos/builder/Hardware/eyetracking/eyetracking.psyexp +432 -327
- psychopy/demos/builder/Hardware/eyetracking_custom_cal/eyetracking_custom_cal.psyexp +440 -321
- psychopy/demos/builder/Hardware/fMRI/fMRI_demo.psyexp +190 -181
- psychopy/demos/builder/Hardware/lab_streaming_layer/lsl_triggers_demo.psyexp +323 -312
- psychopy/demos/builder/Hardware/lab_streaming_layer/lsl_triggers_demo_legacy.psyexp +360 -0
- psychopy/demos/builder/{Feature Demos/eyetracking/eyetracking.xml → Hardware/lab_streaming_layer/lsl_triggers_demo_legacy_legacy.psyexp} +154 -140
- psychopy/demos/builder/Hardware/lab_streaming_layer_legacy/lsl_triggers_demo_legacy.psyexp +329 -273
- psychopy/demos/builder/Hardware/lab_streaming_layer_legacy/lsl_triggers_demo_legacy_legacy.psyexp +360 -0
- psychopy/demos/builder/Hardware/lab_streaming_layer_legacy/lsl_triggers_demo_legacy_legacy_legacy.psyexp +312 -0
- psychopy/demos/builder/Hardware/microphone/microphone.psyexp +450 -404
- psychopy/demos/builder/Hardware/pump/pump.psyexp +593 -329
- psychopy/demos/builder/Helper Tools/achorVSalignment/FlowCircular-Regular.ttf +0 -0
- psychopy/demos/builder/Helper Tools/achorVSalignment/anchorAlignment.psyexp +336 -274
- psychopy/demos/builder/Helper Tools/clockFace/clockFace.psyexp +200 -149
- psychopy/demos/builder/Helper Tools/colors/colors.psyexp +300 -279
- psychopy/demos/builder/Helper Tools/drawPolygon/drawPolygon.psyexp +677 -564
- psychopy/demos/builder/Helper Tools/keyNameFinder/keyNameFinder.psyexp +214 -158
- psychopy/demos/builder/Helper Tools/spatialUnits/unitDemo.psyexp +195 -146
- psychopy/demos/coder/experiment control/runtimeInfo.py +1 -1
- psychopy/devices/__init__.py +1 -1
- psychopy/event.py +1 -1
- psychopy/exceptions.py +1 -1
- psychopy/experiment/__init__.py +1 -1
- psychopy/experiment/_experiment.py +62 -16
- psychopy/experiment/components/__init__.py +1 -6
- psychopy/experiment/components/_base.py +44 -19
- psychopy/experiment/components/aperture/__init__.py +1 -1
- psychopy/experiment/components/brush/__init__.py +2 -2
- psychopy/experiment/components/button/__init__.py +24 -28
- psychopy/experiment/components/camera/__init__.py +38 -39
- psychopy/experiment/components/code/__init__.py +1 -1
- psychopy/experiment/components/dots/__init__.py +1 -1
- psychopy/experiment/components/eyetracker_record/__init__.py +7 -3
- psychopy/experiment/components/form/__init__.py +3 -3
- psychopy/experiment/components/grating/__init__.py +1 -1
- psychopy/experiment/components/image/__init__.py +1 -1
- psychopy/experiment/components/joyButtons/__init__.py +2 -2
- psychopy/experiment/components/joyButtons/virtualJoyButtons.py +1 -1
- psychopy/experiment/components/joystick/__init__.py +3 -3
- psychopy/experiment/components/joystick/virtualJoystick.py +1 -1
- psychopy/experiment/components/keyboard/__init__.py +98 -122
- psychopy/experiment/components/microphone/__init__.py +54 -98
- psychopy/experiment/components/mouse/__init__.py +92 -93
- psychopy/experiment/components/movie/__init__.py +28 -50
- psychopy/experiment/components/parallelOut/__init__.py +3 -3
- psychopy/experiment/components/polygon/__init__.py +2 -3
- psychopy/experiment/components/roi/__init__.py +2 -2
- psychopy/experiment/components/routineSettings/__init__.py +2 -0
- psychopy/experiment/components/serialOut/__init__.py +7 -7
- psychopy/experiment/components/settings/__init__.py +317 -313
- psychopy/experiment/components/settings/eyetracking.py +108 -0
- psychopy/experiment/components/slider/__init__.py +5 -5
- psychopy/experiment/components/sound/__init__.py +168 -78
- psychopy/experiment/components/soundsensor/__init__.py +361 -0
- psychopy/experiment/components/soundsensor/classic/soundsensor.png +0 -0
- psychopy/experiment/components/soundsensor/classic/soundsensor@2x.png +0 -0
- psychopy/experiment/components/soundsensor/dark/soundsensor.png +0 -0
- psychopy/experiment/components/soundsensor/dark/soundsensor@2x.png +0 -0
- psychopy/experiment/components/soundsensor/light/soundsensor.png +0 -0
- psychopy/experiment/components/soundsensor/light/soundsensor@2x.png +0 -0
- psychopy/experiment/components/static/__init__.py +59 -33
- psychopy/experiment/components/text/__init__.py +2 -6
- psychopy/experiment/components/textbox/__init__.py +3 -7
- psychopy/experiment/components/unknown/__init__.py +2 -0
- psychopy/experiment/components/unknownPlugin/__init__.py +2 -0
- psychopy/experiment/exports.py +1 -1
- psychopy/experiment/flow.py +2 -2
- psychopy/experiment/localization.py +1 -1
- psychopy/experiment/loops.py +43 -10
- psychopy/experiment/params.py +6 -4
- psychopy/experiment/plugins.py +8 -1
- psychopy/experiment/py2js.py +1 -1
- psychopy/experiment/py2js_transpiler.py +1 -1
- psychopy/experiment/routines/__init__.py +1 -1
- psychopy/experiment/routines/_base.py +23 -24
- psychopy/experiment/routines/audioValidator/__init__.py +343 -0
- psychopy/experiment/routines/audioValidator/classic/audio_validator.png +0 -0
- psychopy/experiment/routines/audioValidator/classic/audio_validator@2x.png +0 -0
- psychopy/experiment/routines/audioValidator/dark/audio_validator.png +0 -0
- psychopy/experiment/routines/audioValidator/dark/audio_validator@2x.png +0 -0
- psychopy/experiment/routines/audioValidator/light/audio_validator.png +0 -0
- psychopy/experiment/routines/audioValidator/light/audio_validator@2x.png +0 -0
- psychopy/experiment/routines/eyetracker_calibrate/__init__.py +76 -17
- psychopy/experiment/routines/eyetracker_validate/__init__.py +1 -1
- psychopy/experiment/routines/unknown/__init__.py +2 -0
- psychopy/experiment/routines/{photodiodeValidator → visualValidator}/__init__.py +89 -120
- psychopy/experiment/routines/visualValidator/classic/visual_validator.png +0 -0
- psychopy/experiment/routines/visualValidator/classic/visual_validator@2x.png +0 -0
- psychopy/experiment/routines/visualValidator/dark/visual_validator.png +0 -0
- psychopy/experiment/routines/visualValidator/dark/visual_validator@2x.png +0 -0
- psychopy/experiment/routines/visualValidator/light/visual_validator.png +0 -0
- psychopy/experiment/routines/visualValidator/light/visual_validator@2x.png +0 -0
- psychopy/experiment/utils.py +1 -1
- psychopy/gui/__init__.py +1 -1
- psychopy/gui/qtgui.py +15 -6
- psychopy/gui/wxgui.py +1 -1
- psychopy/hardware/__init__.py +0 -1
- psychopy/hardware/base.py +147 -16
- psychopy/hardware/bbtk/__init__.py +10 -16
- psychopy/hardware/brainproducts.py +7 -13
- psychopy/hardware/button.py +21 -2
- psychopy/hardware/buttonbox/__init__.py +1 -1
- psychopy/hardware/camera/__init__.py +16 -3
- psychopy/hardware/cedrus.py +5 -16
- psychopy/hardware/crs/__init__.py +1 -1
- psychopy/hardware/crs/bits.py +36 -33
- psychopy/hardware/crs/colorcal.py +8 -11
- psychopy/hardware/crs/optical.py +7 -10
- psychopy/hardware/crs/shaders.py +18 -5
- psychopy/hardware/emotiv.py +1 -1
- psychopy/hardware/emulator.py +11 -5
- psychopy/hardware/exceptions.py +86 -0
- psychopy/hardware/forp.py +18 -23
- psychopy/hardware/gammasci.py +8 -3
- psychopy/hardware/iolab.py +8 -19
- psychopy/hardware/joystick/__init__.py +865 -266
- psychopy/hardware/joystick/_base.py +251 -0
- psychopy/hardware/joystick/backend_glfw.py +306 -0
- psychopy/hardware/joystick/backend_pyglet.py +309 -0
- psychopy/hardware/joystick/mappings.py +287 -0
- psychopy/hardware/keyboard.py +4 -2
- psychopy/hardware/labhackers.py +1 -1
- psychopy/hardware/labjacks.py +9 -13
- psychopy/hardware/{photodiode.py → lightsensor.py} +146 -203
- psychopy/hardware/listener.py +9 -8
- psychopy/hardware/manager.py +24 -35
- psychopy/hardware/microphone.py +534 -154
- psychopy/hardware/minolta.py +14 -4
- psychopy/hardware/mouse/__init__.py +1 -1
- psychopy/hardware/photometer/__init__.py +2 -2
- psychopy/hardware/pr.py +14 -4
- psychopy/hardware/qmix.py +18 -27
- psychopy/hardware/serialdevice.py +43 -12
- psychopy/hardware/soundsensor.py +473 -0
- psychopy/hardware/spatial/__init__.py +231 -0
- psychopy/hardware/speaker.py +298 -36
- psychopy/hardware/triggerbox/__init__.py +1 -1
- psychopy/hardware/triggerbox/base.py +1 -1
- psychopy/hardware/triggerbox/parallel.py +1 -1
- psychopy/info.py +1 -1
- psychopy/iohub/client/__init__.py +17 -0
- psychopy/iohub/client/keyboard.py +5 -0
- psychopy/iohub/devices/eyetracker/__init__.py +10 -18
- psychopy/iohub/devices/eyetracker/calibration/procedure.py +15 -33
- psychopy/iohub/devices/eyetracker/hw/pupil_labs/neon/__init__.py +1 -0
- psychopy/iohub/devices/mouse/linux2.py +6 -1
- psychopy/iohub/devices/mouse/win32.py +5 -0
- psychopy/layout.py +1 -1
- psychopy/liaison.py +91 -39
- psychopy/locale_setup.py +11 -1
- psychopy/localization/__init__.py +1 -1
- psychopy/localization/_localization.py +1 -1
- psychopy/localization/messages.pot +2 -2
- psychopy/logging.py +14 -12
- psychopy/microphone.py +4 -3
- psychopy/misc.py +1 -1
- psychopy/monitors/MonitorCenter.py +3 -3
- psychopy/monitors/__init__.py +1 -1
- psychopy/monitors/calibData.py +1 -1
- psychopy/monitors/calibTools.py +3 -2
- psychopy/platform_specific/__init__.py +1 -1
- psychopy/platform_specific/darwin.py +1 -1
- psychopy/platform_specific/linux.py +1 -1
- psychopy/platform_specific/win32.py +1 -1
- psychopy/plugins/__init__.py +26 -17
- psychopy/plugins/util.py +65 -0
- psychopy/preferences/Darwin.spec +11 -3
- psychopy/preferences/FreeBSD.spec +11 -3
- psychopy/preferences/Linux.spec +11 -3
- psychopy/preferences/Windows.spec +11 -3
- psychopy/preferences/__init__.py +1 -1
- psychopy/preferences/baseNoArch.spec +11 -3
- psychopy/preferences/hints.py +78 -61
- psychopy/preferences/preferences.py +82 -13
- psychopy/projects/__init__.py +1 -1
- psychopy/projects/pavlovia.py +29 -13
- psychopy/scripts/psyexpCompile.py +1 -1
- psychopy/session.py +81 -8
- psychopy/sound/__init__.py +25 -10
- psychopy/sound/_base.py +134 -34
- psychopy/sound/audioclip.py +38 -15
- psychopy/sound/audiodevice.py +1 -1
- psychopy/sound/backend_ptb.py +53 -321
- psychopy/sound/backend_pygame.py +7 -3
- psychopy/sound/backend_pyo.py +53 -22
- psychopy/sound/backend_pysound.py +10 -27
- psychopy/sound/backend_sounddevice.py +33 -21
- psychopy/sound/exceptions.py +1 -1
- psychopy/sound/microphone.py +83 -5
- psychopy/sound/transcribe.py +3 -3
- psychopy/tests/data/test_basic_run.py +1 -0
- psychopy/tests/data/test_loaded_namespace/test_counterbalance.psyexp +142 -0
- psychopy/tests/data/test_loaded_namespace/test_custom_missing.psyexp +129 -0
- psychopy/tests/data/test_loaded_namespace/test_missing_counterbalance.psyexp +116 -0
- psychopy/tests/data/test_loaded_namespace/test_mix_exp.psyexp +181 -0
- psychopy/tests/data/test_loaded_namespace/test_mix_missing.psyexp +140 -0
- psychopy/tests/data/test_loaded_namespace/test_mix_name_calibration.psyexp +164 -0
- psychopy/tests/data/test_sounds/default_16000.wav +0 -0
- psychopy/tests/data/test_sounds/default_192000.wav +0 -0
- psychopy/tests/data/test_sounds/default_22050.wav +0 -0
- psychopy/tests/data/test_sounds/default_32000.wav +0 -0
- psychopy/tests/data/test_sounds/default_44100.wav +0 -0
- psychopy/tests/data/test_sounds/default_48000.wav +0 -0
- psychopy/tests/data/test_sounds/default_8000.wav +0 -0
- psychopy/tests/data/test_sounds/default_96000.wav +0 -0
- psychopy/tests/test_alerts/test_alerttools.py +2 -1
- psychopy/tests/test_app/test_command_line.py +65 -0
- psychopy/tests/test_data/test_TrialHandler2.py +18 -7
- psychopy/tests/test_demos/test_builder_demos.py +1 -1
- psychopy/tests/test_experiment/needs_wx/componsTemplate.txt +5238 -4188
- psychopy/tests/test_experiment/needs_wx/test_components.py +1 -1
- psychopy/tests/test_experiment/test_components/test_RoutineSettingsComponent.py +16 -0
- psychopy/tests/test_experiment/test_components/test_all_components.py +1 -1
- psychopy/tests/test_experiment/test_components/test_base_components.py +26 -17
- psychopy/tests/test_experiment/test_experiment.py +96 -0
- psychopy/tests/test_experiment/test_loops.py +12 -4
- psychopy/tests/test_experiment/test_params.py +17 -4
- psychopy/tests/test_experiment/test_routines/test_PhotodiodeValidationRoutine.py +2 -2
- psychopy/tests/test_hardware/test_photodiode.py +66 -0
- psychopy/tests/test_liaison/test_Liaison.py +4 -4
- psychopy/tests/test_misc/test_clock.py +2 -0
- psychopy/tests/test_misc/test_color.py +2 -0
- psychopy/tests/test_misc/test_event.py +1 -0
- psychopy/tests/test_plugins/test_plugin_stubs.py +125 -0
- psychopy/tests/test_sound/test_sound.py +111 -40
- psychopy/tests/test_tools/test_colorspacetools.py +24 -23
- psychopy/tests/test_tools/test_mathtools.py +9 -9
- psychopy/tests/test_tools/test_viewtools.py +101 -0
- psychopy/tests/test_validators/__init__.py +0 -0
- psychopy/tests/test_validators/test_voicekeyValidator.py +95 -0
- psychopy/tests/test_visual/test_all_stimuli.py +2 -2
- psychopy/tests/test_visual/test_basevisual.py +37 -7
- psychopy/tests/test_visual/test_button.py +2 -2
- psychopy/tests/test_visual/test_circle.py +10 -2
- psychopy/tests/test_visual/test_dots.py +1 -1
- psychopy/tests/test_visual/test_form.py +13 -13
- psychopy/tests/test_visual/test_gamma.py +3 -3
- psychopy/tests/test_visual/test_image.py +2 -2
- psychopy/tests/test_visual/test_progress.py +2 -2
- psychopy/tests/test_visual/test_roi.py +8 -2
- psychopy/tests/test_visual/test_shape.py +2 -2
- psychopy/tests/test_visual/test_slider.py +2 -2
- psychopy/tests/test_visual/test_target.py +2 -2
- psychopy/tests/test_visual/test_textbox.py +6 -8
- psychopy/tests/test_visual/test_winScalePos.py +6 -5
- psychopy/tests/test_visual/test_window.py +17 -0
- psychopy/tests/utils.py +51 -1
- psychopy/tools/__init__.py +1 -1
- psychopy/tools/arraytools.py +2 -2
- psychopy/tools/attributetools.py +52 -1
- psychopy/tools/audiotools.py +4 -1
- psychopy/tools/colorspacetools.py +6 -4
- psychopy/tools/coordinatetools.py +1 -1
- psychopy/tools/fileerrortools.py +21 -9
- psychopy/tools/filetools.py +2 -2
- psychopy/tools/fontmanager.py +47 -28
- psychopy/tools/gltools.py +2964 -558
- psychopy/tools/imagetools.py +1 -1
- psychopy/tools/mathtools.py +997 -127
- psychopy/tools/monitorunittools.py +7 -1
- psychopy/tools/movietools.py +1 -2
- psychopy/tools/pkgtools.py +157 -127
- psychopy/tools/plottools.py +1 -1
- psychopy/tools/rifttools.py +1 -1
- psychopy/tools/stereotools.py +1 -1
- psychopy/tools/stimulustools.py +172 -2
- psychopy/tools/stringtools.py +22 -2
- psychopy/tools/systemtools.py +1 -1
- psychopy/tools/typetools.py +1 -1
- psychopy/tools/unittools.py +1 -1
- psychopy/tools/versionchooser.py +3 -1
- psychopy/tools/viewtools.py +54 -70
- psychopy/tools/wizard.py +2 -2
- psychopy/validation/__init__.py +6 -0
- psychopy/validation/audio.py +74 -0
- psychopy/validation/visual.py +115 -0
- psychopy/visual/__init__.py +1 -4
- psychopy/visual/aperture.py +9 -6
- psychopy/visual/backends/__init__.py +1 -1
- psychopy/visual/backends/_base.py +1 -1
- psychopy/visual/backends/gamma.py +1 -1
- psychopy/visual/backends/glfwbackend.py +8 -12
- psychopy/visual/backends/pygamebackend.py +1 -1
- psychopy/visual/backends/pygletbackend.py +32 -11
- psychopy/visual/basevisual.py +93 -13
- psychopy/visual/brush.py +1 -1
- psychopy/visual/bufferimage.py +90 -10
- psychopy/visual/button.py +1 -1
- psychopy/visual/circle.py +12 -20
- psychopy/visual/custommouse.py +1 -1
- psychopy/visual/dot.py +80 -14
- psychopy/visual/elementarray.py +84 -10
- psychopy/visual/filters.py +1 -1
- psychopy/visual/form.py +43 -28
- psychopy/visual/grating.py +105 -25
- psychopy/visual/helpers.py +1 -1
- psychopy/visual/image.py +98 -20
- psychopy/visual/line.py +15 -25
- psychopy/visual/movie.py +1 -1
- psychopy/visual/movie2.py +4 -3
- psychopy/visual/movie3.py +4 -3
- psychopy/visual/movies/__init__.py +1 -1
- psychopy/visual/movies/frame.py +1 -1
- psychopy/visual/movies/metadata.py +1 -1
- psychopy/visual/movies/players/__init__.py +1 -1
- psychopy/visual/movies/players/_base.py +1 -1
- psychopy/visual/movies/players/ffpyplayer_player.py +2 -3
- psychopy/visual/nnlvs.py +9 -6
- psychopy/visual/noise.py +4 -16
- psychopy/visual/patch.py +4 -3
- psychopy/visual/pie.py +3 -14
- psychopy/visual/polygon.py +21 -28
- psychopy/visual/radial.py +4 -18
- psychopy/visual/ratingscale.py +4 -3
- psychopy/visual/rect.py +16 -25
- psychopy/visual/rift.py +8 -2
- psychopy/visual/secondorder.py +4 -16
- psychopy/visual/shaders.py +620 -286
- psychopy/visual/shape.py +281 -90
- psychopy/visual/simpleimage.py +1 -1
- psychopy/visual/slider.py +78 -25
- psychopy/visual/stim3d.py +5 -608
- psychopy/visual/text.py +13 -3
- psychopy/visual/textbox2/textbox2.py +188 -56
- psychopy/visual/vlcmoviestim.py +1 -1
- psychopy/visual/window.py +373 -200
- psychopy/web.py +1 -1
- {psychopy-2024.2.4.dist-info → psychopy-2025.1.0.dist-info}/METADATA +9 -9
- {psychopy-2024.2.4.dist-info → psychopy-2025.1.0.dist-info}/RECORD +653 -660
- psychopy/.DS_Store +0 -0
- psychopy/__init__.py.orig +0 -65
- psychopy/app/.DS_Store +0 -0
- psychopy/app/Resources/.DS_Store +0 -0
- psychopy/app/Resources/classic/filecsv16.png +0 -0
- psychopy/app/Resources/classic/fileimage16.png +0 -0
- psychopy/app/Resources/classic/fileunknown16.png +0 -0
- psychopy/app/Resources/dark/filecsv16.png +0 -0
- psychopy/app/Resources/dark/filecsv16@2x.png +0 -0
- psychopy/app/Resources/dark/fileimage16.png +0 -0
- psychopy/app/Resources/dark/fileimage16@2x.png +0 -0
- psychopy/app/Resources/dark/fileunknown16.png +0 -0
- psychopy/app/Resources/dark/fileunknown16@2x.png +0 -0
- psychopy/app/Resources/fonts/OpenSans-Bold.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-BoldItalic.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-ExtraBold.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-Italic.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-Light.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-LightItalic.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-Regular.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-SemiBold.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-SemiBoldItalic.ttf +0 -0
- psychopy/app/Resources/light/filecsv16.png +0 -0
- psychopy/app/Resources/light/filecsv16@2x.png +0 -0
- psychopy/app/Resources/light/fileimage16.png +0 -0
- psychopy/app/Resources/light/fileimage16@2x.png +0 -0
- psychopy/app/Resources/light/fileunknown16.png +0 -0
- psychopy/app/Resources/light/fileunknown16@2x.png +0 -0
- psychopy/app/Resources/psychopySplash.png +0 -0
- psychopy/app/Resources/psychopySplash@2x.png +0 -0
- psychopy/app/builder/builder.py.orig +0 -3932
- psychopy/app/builder/dialogs/__init__.py.orig +0 -1679
- psychopy/app/builder/dialogs/paramCtrls.py.orig +0 -713
- psychopy/app/colorpicker/__init__.py.orig +0 -411
- psychopy/app/locale/zh_CN/LC_MESSAGE/zh_CN.mo +0 -0
- psychopy/app/locale/zh_CN/LC_MESSAGE/zh_CN.po +0 -6127
- psychopy/app/locale/zh_CN/LC_MESSAGE/zh_CN_allFlagged.mo +0 -0
- psychopy/app/locale/zh_CN/LC_MESSAGE/zh_CN_allFlagged.po +0 -7366
- psychopy/core.py.orig +0 -169
- psychopy/demos/builder/.DS_Store +0 -0
- psychopy/demos/builder/Design Templates/randomisedBlocks/html/index.html +0 -23
- psychopy/demos/builder/Design Templates/randomisedBlocks/html/randomisedBlocks-legacy-browsers.js +0 -423
- psychopy/demos/builder/Design Templates/randomisedBlocks/html/randomisedBlocks.js +0 -427
- psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/chooseBlock.xlsx +0 -0
- psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/facesBlock.xlsx +0 -0
- psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/housesBlock.xlsx +0 -0
- psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/face01.jpg +0 -0
- psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/face02.jpg +0 -0
- psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/face03.jpg +0 -0
- psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/house01.jpg +0 -0
- psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/house02.jpg +0 -0
- psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/house03.jpg +0 -0
- psychopy/demos/builder/Design Templates/randomisedBlocks/randomisedBlocks.py +0 -330
- psychopy/demos/builder/Design Templates/randomisedBlocks/randomisedBlocks_lastrun.py +0 -330
- psychopy/demos/builder/Experiments/.DS_Store +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/archived_conditions.xlsx +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/draw grid stim.py +0 -61
- psychopy/demos/builder/Experiments/dragAndDrop/shapeMaker.psyexp +0 -91
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_1.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_10.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_2.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_3.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_4.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_5.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_6.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_7.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_8.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_9.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/updated_conditions.xlsx +0 -0
- psychopy/demos/builder/Feature Demos/eyetracking/eyetracking.xsd +0 -120
- psychopy/demos/builder/Tools/.DS_Store +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/.DS_Store +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/data/.DS_Store +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/data/_gamma_correction_visual_2022-05-18_14h18.29.439.csv +0 -38
- psychopy/demos/builder/Tools/gammaCalibration/data/_gamma_correction_visual_2022-05-18_14h18.29.439.log +0 -3418
- psychopy/demos/builder/Tools/gammaCalibration/data/_gamma_correction_visual_2022-05-18_14h18.29.439.psydat +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/data/x1_gamma_correction_visual_2022-05-17_13h59.42.928.csv +0 -2
- psychopy/demos/builder/Tools/gammaCalibration/data/x1_gamma_correction_visual_2022-05-17_13h59.42.928.log +0 -15
- psychopy/demos/builder/Tools/gammaCalibration/data/x1_gamma_correction_visual_2022-05-17_13h59.42.928.psydat +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/gamma_correction_visual.psyexp +0 -323
- psychopy/demos/builder/Tools/gammaCalibration/gamma_correction_visual.py +0 -562
- psychopy/demos/builder/Tools/gammaCalibration/gamma_correction_visual_lastrun.py +0 -562
- psychopy/demos/builder/Tools/gammaCalibration/questStairs.xlsx +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/resources/low_contrast.png +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/resources/make_2nd_order_tex.py +0 -59
- psychopy/demos/builder/Tools/gammaCalibration/resources/second_order_tex.png +0 -0
- psychopy/demos/coder/.DS_Store +0 -0
- psychopy/demos/coder/experiment control/info_gamma.pickle +0 -0
- psychopy/demos/coder/iohub/.iohpid +0 -1
- psychopy/demos/coder/iohub/eyetracking/.iohpid +0 -1
- psychopy/demos/coder/iohub/wintab/.DS_Store +0 -0
- psychopy/demos/coder/stimuli/.DS_Store +0 -0
- psychopy/demos/coder/stimuli/radialGratingContracting.py +0 -29
- psychopy/experiment/_experiment.py.orig +0 -1032
- psychopy/experiment/components/.DS_Store +0 -0
- psychopy/experiment/components/_base.py.orig +0 -823
- psychopy/experiment/components/form/.DS_Store +0 -0
- psychopy/experiment/components/microphone/__init__.py.orig +0 -490
- psychopy/experiment/components/settings/__init__.py.orig +0 -1337
- psychopy/experiment/components/textbox/__init__.py.orig +0 -310
- psychopy/experiment/components/webcam/.DS_Store +0 -0
- psychopy/experiment/components/webcam/light/.DS_Store +0 -0
- psychopy/experiment/loops.py.orig +0 -829
- psychopy/experiment/params.py.orig +0 -408
- psychopy/experiment/routine.py.orig +0 -503
- psychopy/experiment/routines/photodiodeValidator/classic/photodiode_validator.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/classic/photodiode_validator@2x.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/dark/photodiode_validator.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/dark/photodiode_validator@2x.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/light/photodiode_validator.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/light/photodiode_validator@2x.png +0 -0
- psychopy/hardware/.DS_Store +0 -0
- psychopy/hardware/brainproducts.py.orig +0 -680
- psychopy/hardware/iolab.py.orig +0 -238
- psychopy/hardware/serialport.py +0 -51
- psychopy/iohub/datastore/__init__.py.orig +0 -443
- psychopy/iohub/datastore/util.py.orig +0 -692
- psychopy/iohub/devices/mouse/darwin.py.orig +0 -427
- psychopy/iohub/devices/mouse/linux2.py.orig +0 -198
- psychopy/preferences/.DS_Store +0 -0
- psychopy/projects/pavlovia.py.orig +0 -1295
- psychopy/tests/.DS_Store +0 -0
- psychopy/tests/data/.DS_Store +0 -0
- psychopy/tests/data/TestCircle_fill_local.png +0 -0
- psychopy/tests/data/__test.png +0 -0
- psychopy/tests/data/aperture1_normHexbackground_local.png +0 -0
- psychopy/tests/data/aperture1_norm_local.png +0 -0
- psychopy/tests/data/aperture2_normHexbackground_local.png +0 -0
- psychopy/tests/data/beatandrcos_height_local.png +0 -0
- psychopy/tests/data/beatandrcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/beatandrcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/beatandrcos_norm_local.png +0 -0
- psychopy/tests/data/beatandrcos_stencil_local.png +0 -0
- psychopy/tests/data/blend_add_height_local.png +0 -0
- psychopy/tests/data/blend_add_normAddBlend_local.png +0 -0
- psychopy/tests/data/blend_add_normHexbackground_local.png +0 -0
- psychopy/tests/data/blend_add_normNoShade_local.png +0 -0
- psychopy/tests/data/blend_add_norm_local.png +0 -0
- psychopy/tests/data/blend_add_stencil_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_height_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_normAddBlend_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_normHexbackground_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_normNoShade_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_norm_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_stencil_local.png +0 -0
- psychopy/tests/data/circleHex_height_local.png +0 -0
- psychopy/tests/data/circleHex_normAddBlend_local.png +0 -0
- psychopy/tests/data/circleHex_normHexbackground_local.png +0 -0
- psychopy/tests/data/circleHex_normNoShade_local.png +0 -0
- psychopy/tests/data/circleHex_norm_local.png +0 -0
- psychopy/tests/data/circleHex_stencil_local.png +0 -0
- psychopy/tests/data/color_comparison_local.png +0 -0
- psychopy/tests/data/corrFullRandom_local.csv +0 -16
- psychopy/tests/data/corrFullRandom_local.tsv +0 -6
- psychopy/tests/data/correctScript/.DS_Store +0 -0
- psychopy/tests/data/dots_height_local.png +0 -0
- psychopy/tests/data/dots_normAddBlend_local.png +0 -0
- psychopy/tests/data/dots_normHexbackground_local.png +0 -0
- psychopy/tests/data/dots_normNoShade_local.png +0 -0
- psychopy/tests/data/dots_norm_local.png +0 -0
- psychopy/tests/data/dots_stencil_local.png +0 -0
- psychopy/tests/data/elarray1_height_local.png +0 -0
- psychopy/tests/data/elarray1_normAddBlend_local.png +0 -0
- psychopy/tests/data/elarray1_normHexbackground_local.png +0 -0
- psychopy/tests/data/elarray1_norm_local.png +0 -0
- psychopy/tests/data/elarray1_stencil_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_height_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_norm_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_stencil_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_height_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_norm_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_stencil_local.png +0 -0
- psychopy/tests/data/gabor1_height_local.png +0 -0
- psychopy/tests/data/gabor1_normAddBlend_local.png +0 -0
- psychopy/tests/data/gabor1_normHexbackground_local.png +0 -0
- psychopy/tests/data/gabor1_normNoShade_local.png +0 -0
- psychopy/tests/data/gabor1_norm_local.png +0 -0
- psychopy/tests/data/gabor1_stencil_local.png +0 -0
- psychopy/tests/data/greyscale_normHexbackground_local.png +0 -0
- psychopy/tests/data/imageAndGauss_height_local.png +0 -0
- psychopy/tests/data/imageAndGauss_normAddBlend_local.png +0 -0
- psychopy/tests/data/imageAndGauss_normHexbackground_local.png +0 -0
- psychopy/tests/data/imageAndGauss_normNoShade_local.png +0 -0
- psychopy/tests/data/imageAndGauss_norm_local.png +0 -0
- psychopy/tests/data/imageAndGauss_stencil_local.png +0 -0
- psychopy/tests/data/movFrame1_stencil_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_height_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_normNoShade_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_norm_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_stencil_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_height_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_normNoShade_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_norm_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_stencil_local.png +0 -0
- psychopy/tests/data/numpyImage_height_local.png +0 -0
- psychopy/tests/data/numpyImage_normAddBlend_local.png +0 -0
- psychopy/tests/data/numpyImage_normHexbackground_local.png +0 -0
- psychopy/tests/data/numpyImage_normNoShade_local.png +0 -0
- psychopy/tests/data/numpyImage_norm_local.png +0 -0
- psychopy/tests/data/numpyImage_stencil_local.png +0 -0
- psychopy/tests/data/shape2_1_normAddBlend_local.png +0 -0
- psychopy/tests/data/shape2_1_normHexbackground_local.png +0 -0
- psychopy/tests/data/shape2_1_normNoShade_local.png +0 -0
- psychopy/tests/data/shape2_1_norm_local.png +0 -0
- psychopy/tests/data/shape2_1_stencil_local.png +0 -0
- psychopy/tests/data/testLoopsBlocks.psyexp_local.py +0 -328
- psychopy/tests/data/text1_height_local.png +0 -0
- psychopy/tests/data/text1_normAddBlend_local.png +0 -0
- psychopy/tests/data/text1_normHexbackground_local.png +0 -0
- psychopy/tests/data/text1_norm_local.png +0 -0
- psychopy/tests/data/text1_stencil_local.png +0 -0
- psychopy/tests/data/text2_height.png +0 -0
- psychopy/tests/data/text2_normAddBlend.png +0 -0
- psychopy/tests/data/text2_normHexbackground.png +0 -0
- psychopy/tests/data/text2_stencil.png +0 -0
- psychopy/tests/data/wedge1_height_local.png +0 -0
- psychopy/tests/data/wedge1_normAddBlend_local.png +0 -0
- psychopy/tests/data/wedge1_normHexbackground_local.png +0 -0
- psychopy/tests/data/wedge1_normNoShade_local.png +0 -0
- psychopy/tests/data/wedge1_norm_local.png +0 -0
- psychopy/tests/data/wedge1_stencil_local.png +0 -0
- psychopy/tests/test_app/.DS_Store +0 -0
- psychopy/tests/test_app/test_builder/.DS_Store +0 -0
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.csv +0 -9
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.log +0 -177
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.psydat +0 -0
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.xlsx +0 -0
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.csv +0 -9
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.log +0 -168
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.psydat +0 -0
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.xlsx +0 -0
- psychopy/tests/test_data/.DS_Store +0 -0
- psychopy/tests/test_hardware/test_CRS_BitsSharp.py +0 -67
- psychopy/tests/test_hardware/test_CRS_BitsSharp.py.orig +0 -68
- psychopy/tests/test_hardware/test_CRS_bitsShaders.py +0 -110
- psychopy/tests/test_visual/test_image.py.orig +0 -219
- psychopy/visual/basevisual.py.orig +0 -1723
- psychopy/visual/form.py.orig +0 -1181
- psychopy/visual/text.py.orig +0 -752
- psychopy/visual/textbox2/textbox2.py.orig +0 -1315
- psychopy/visual/windowwarp.py.orig +0 -463
- /psychopy/{app/cortex.log → alerts/alertsCatalogue/3600.yaml} +0 -0
- /psychopy/{app/Resources → assets}/fonts/Arvo-Bold.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/Arvo-BoldItalic.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/Arvo-Italic.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/Arvo-Regular.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/DejaVuSerif.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/IndieFlower-Regular.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/JetBrainsMono-Italic-VariableFont_wght.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/JetBrainsMono-VariableFont_wght.ttf +0 -0
- /psychopy/demos/builder/Experiments/{GoNoGo → goNoGo}/readme.md +0 -0
- /psychopy/{demos/builder/Tools/gammaCalibration/readme.md → tests/test_plugins/__init__.py} +0 -0
- {psychopy-2024.2.4.dist-info → psychopy-2025.1.0.dist-info}/WHEEL +0 -0
- {psychopy-2024.2.4.dist-info → psychopy-2025.1.0.dist-info}/entry_points.txt +0 -0
- {psychopy-2024.2.4.dist-info → psychopy-2025.1.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,503 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
|
|
4
|
-
# Part of the PsychoPy library
|
|
5
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2020 Open Science Tools Ltd.
|
|
6
|
-
# Distributed under the terms of the GNU General Public License (GPL).
|
|
7
|
-
|
|
8
|
-
"""Describes the Flow of an experiment
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
from __future__ import absolute_import, print_function
|
|
12
|
-
|
|
13
|
-
from psychopy.constants import FOREVER
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class Routine(list):
|
|
17
|
-
"""
|
|
18
|
-
A Routine determines a single sequence of events, such
|
|
19
|
-
as the presentation of trial. Multiple Routines might be
|
|
20
|
-
used to comprise an Experiment (e.g. one for presenting
|
|
21
|
-
instructions, one for trials, one for debriefing subjects).
|
|
22
|
-
|
|
23
|
-
In practice a Routine is simply a python list of Components,
|
|
24
|
-
each of which knows when it starts and stops.
|
|
25
|
-
"""
|
|
26
|
-
|
|
27
|
-
def __init__(self, name, exp, components=()):
|
|
28
|
-
super(Routine, self).__init__()
|
|
29
|
-
self.params = {'name': name}
|
|
30
|
-
self.name = name
|
|
31
|
-
self.exp = exp
|
|
32
|
-
self._clockName = None # for scripts e.g. "t = trialClock.GetTime()"
|
|
33
|
-
self.type = 'Routine'
|
|
34
|
-
list.__init__(self, list(components))
|
|
35
|
-
|
|
36
|
-
def __repr__(self):
|
|
37
|
-
_rep = "psychopy.experiment.Routine(name='%s', exp=%s, components=%s)"
|
|
38
|
-
return _rep % (self.name, self.exp, str(list(self)))
|
|
39
|
-
|
|
40
|
-
@property
|
|
41
|
-
def name(self):
|
|
42
|
-
return self.params['name']
|
|
43
|
-
|
|
44
|
-
@name.setter
|
|
45
|
-
def name(self, name):
|
|
46
|
-
self.params['name'] = name
|
|
47
|
-
|
|
48
|
-
def integrityCheck(self):
|
|
49
|
-
"""Run tests on self and on all the Components inside"""
|
|
50
|
-
for entry in self:
|
|
51
|
-
if hasattr(entry, "integrityCheck"):
|
|
52
|
-
entry.integrityCheck()
|
|
53
|
-
|
|
54
|
-
def addComponent(self, component):
|
|
55
|
-
"""Add a component to the end of the routine"""
|
|
56
|
-
self.append(component)
|
|
57
|
-
|
|
58
|
-
def removeComponent(self, component):
|
|
59
|
-
"""Remove a component from the end of the routine"""
|
|
60
|
-
name = component.params['name']
|
|
61
|
-
self.remove(component)
|
|
62
|
-
# check if the component was using any Static Components for updates
|
|
63
|
-
for thisParamName, thisParam in list(component.params.items()):
|
|
64
|
-
if (hasattr(thisParam, 'updates') and
|
|
65
|
-
thisParam.updates and
|
|
66
|
-
'during:' in thisParam.updates):
|
|
67
|
-
# remove the part that says 'during'
|
|
68
|
-
updates = thisParam.updates.split(': ')[1]
|
|
69
|
-
routine, static = updates.split('.')
|
|
70
|
-
comp = self.exp.routines[routine].getComponentFromName(static)
|
|
71
|
-
comp.remComponentUpdate(routine, name, thisParamName)
|
|
72
|
-
|
|
73
|
-
def getStatics(self):
|
|
74
|
-
"""Return a list of Static components
|
|
75
|
-
"""
|
|
76
|
-
statics = []
|
|
77
|
-
for comp in self:
|
|
78
|
-
if comp.type == 'Static':
|
|
79
|
-
statics.append(comp)
|
|
80
|
-
return statics
|
|
81
|
-
|
|
82
|
-
def writePreCode(self, buff):
|
|
83
|
-
"""This is start of the script (before window is created)
|
|
84
|
-
"""
|
|
85
|
-
for thisCompon in self:
|
|
86
|
-
# check just in case; try to ensure backwards compatibility _base
|
|
87
|
-
if hasattr(thisCompon, 'writePreCode'):
|
|
88
|
-
thisCompon.writePreCode(buff)
|
|
89
|
-
|
|
90
|
-
def writePreCodeJS(self, buff):
|
|
91
|
-
"""This is start of the script (before window is created)
|
|
92
|
-
"""
|
|
93
|
-
for thisCompon in self:
|
|
94
|
-
# check just in case; try to ensure backwards compatibility _base
|
|
95
|
-
if hasattr(thisCompon, 'writePreCodeJS'):
|
|
96
|
-
thisCompon.writePreCodeJS(buff)
|
|
97
|
-
|
|
98
|
-
def writeStartCode(self, buff):
|
|
99
|
-
"""This is start of the *experiment* (after window is created)
|
|
100
|
-
"""
|
|
101
|
-
for thisCompon in self:
|
|
102
|
-
# check just in case; try to ensure backwards compatibility _base
|
|
103
|
-
if hasattr(thisCompon, 'writeStartCode'):
|
|
104
|
-
thisCompon.writeStartCode(buff)
|
|
105
|
-
|
|
106
|
-
def writeStartCodeJS(self, buff):
|
|
107
|
-
"""This is start of the *experiment*
|
|
108
|
-
"""
|
|
109
|
-
# few components will have this
|
|
110
|
-
for thisCompon in self:
|
|
111
|
-
# check just in case; try to ensure backwards compatibility _base
|
|
112
|
-
if hasattr(thisCompon, 'writeStartCodeJS'):
|
|
113
|
-
thisCompon.writeStartCodeJS(buff)
|
|
114
|
-
|
|
115
|
-
def writeRunOnceInitCode(self, buff):
|
|
116
|
-
""" Run once init code goes at the beginning of the script (before
|
|
117
|
-
Window creation) and the code will be run only once no matter how many
|
|
118
|
-
similar components request it
|
|
119
|
-
"""
|
|
120
|
-
for thisCompon in self:
|
|
121
|
-
# check just in case; try to ensure backwards compatibility _base
|
|
122
|
-
if hasattr(thisCompon, 'writeRunOnceInitCode'):
|
|
123
|
-
thisCompon.writeRunOnceInitCode(buff)
|
|
124
|
-
|
|
125
|
-
def writeInitCode(self, buff):
|
|
126
|
-
code = '\n# Initialize components for Routine "%s"\n'
|
|
127
|
-
buff.writeIndentedLines(code % self.name)
|
|
128
|
-
self._clockName = self.name + "Clock"
|
|
129
|
-
buff.writeIndented('%s = core.Clock()\n' % self._clockName)
|
|
130
|
-
for thisCompon in self:
|
|
131
|
-
thisCompon.writeInitCode(buff)
|
|
132
|
-
|
|
133
|
-
def writeInitCodeJS(self, buff):
|
|
134
|
-
code = '// Initialize components for Routine "%s"\n'
|
|
135
|
-
buff.writeIndentedLines(code % self.name)
|
|
136
|
-
self._clockName = self.name + "Clock"
|
|
137
|
-
buff.writeIndented('%s = new util.Clock();\n' % self._clockName)
|
|
138
|
-
for thisCompon in self:
|
|
139
|
-
if hasattr(thisCompon, 'writeInitCodeJS'):
|
|
140
|
-
thisCompon.writeInitCodeJS(buff)
|
|
141
|
-
|
|
142
|
-
def writeMainCode(self, buff):
|
|
143
|
-
"""This defines the code for the frames of a single routine
|
|
144
|
-
"""
|
|
145
|
-
# create the frame loop for this routine
|
|
146
|
-
code = ('\n# ------Prepare to start Routine "%s"-------\n')
|
|
147
|
-
buff.writeIndentedLines(code % (self.name))
|
|
148
|
-
code = 'continueRoutine = True\n'
|
|
149
|
-
buff.writeIndentedLines(code)
|
|
150
|
-
|
|
151
|
-
# can we use non-slip timing?
|
|
152
|
-
maxTime, useNonSlip = self.getMaxTime()
|
|
153
|
-
if useNonSlip:
|
|
154
|
-
buff.writeIndented('routineTimer.add(%f)\n' % (maxTime))
|
|
155
|
-
|
|
156
|
-
code = "# update component parameters for each repeat\n"
|
|
157
|
-
buff.writeIndentedLines(code)
|
|
158
|
-
# This is the beginning of the routine, before the loop starts
|
|
159
|
-
for event in self:
|
|
160
|
-
event.writeRoutineStartCode(buff)
|
|
161
|
-
|
|
162
|
-
code = '# keep track of which components have finished\n'
|
|
163
|
-
buff.writeIndentedLines(code)
|
|
164
|
-
# Get list of components, but leave out Variable components, which may not support attributes
|
|
165
|
-
compStr = ', '.join([c.params['name'].val for c in self
|
|
166
|
-
if 'startType' in c.params and c.type != 'Variable'])
|
|
167
|
-
buff.writeIndented('%sComponents = [%s]\n' % (self.name, compStr))
|
|
168
|
-
|
|
169
|
-
code = ("for thisComponent in {name}Components:\n"
|
|
170
|
-
" thisComponent.tStart = None\n"
|
|
171
|
-
" thisComponent.tStop = None\n"
|
|
172
|
-
" thisComponent.tStartRefresh = None\n"
|
|
173
|
-
" thisComponent.tStopRefresh = None\n"
|
|
174
|
-
" if hasattr(thisComponent, 'status'):\n"
|
|
175
|
-
" thisComponent.status = NOT_STARTED\n"
|
|
176
|
-
"# reset timers\n"
|
|
177
|
-
't = 0\n'
|
|
178
|
-
'_timeToFirstFrame = win.getFutureFlipTime(clock="now")\n'
|
|
179
|
-
'{clockName}.reset(-_timeToFirstFrame) # t0 is time of first possible flip\n'
|
|
180
|
-
'frameN = -1\n'
|
|
181
|
-
'\n# -------Run Routine "{name}"-------\n')
|
|
182
|
-
buff.writeIndentedLines(code.format(name=self.name,
|
|
183
|
-
clockName=self._clockName))
|
|
184
|
-
if useNonSlip:
|
|
185
|
-
code = 'while continueRoutine and routineTimer.getTime() > 0:\n'
|
|
186
|
-
else:
|
|
187
|
-
code = 'while continueRoutine:\n'
|
|
188
|
-
buff.writeIndented(code)
|
|
189
|
-
|
|
190
|
-
buff.setIndentLevel(1, True)
|
|
191
|
-
# on each frame
|
|
192
|
-
code = ('# get current time\n'
|
|
193
|
-
't = {clockName}.getTime()\n'
|
|
194
|
-
'tThisFlip = win.getFutureFlipTime(clock={clockName})\n'
|
|
195
|
-
'tThisFlipGlobal = win.getFutureFlipTime(clock=None)\n'
|
|
196
|
-
'frameN = frameN + 1 # number of completed frames '
|
|
197
|
-
'(so 0 is the first frame)\n')
|
|
198
|
-
buff.writeIndentedLines(code.format(clockName=self._clockName))
|
|
199
|
-
|
|
200
|
-
# write the code for each component during frame
|
|
201
|
-
buff.writeIndentedLines('# update/draw components on each frame\n')
|
|
202
|
-
# just 'normal' components
|
|
203
|
-
for event in self:
|
|
204
|
-
if event.type == 'Static':
|
|
205
|
-
continue # we'll do those later
|
|
206
|
-
event.writeFrameCode(buff)
|
|
207
|
-
# update static component code last
|
|
208
|
-
for event in self.getStatics():
|
|
209
|
-
event.writeFrameCode(buff)
|
|
210
|
-
|
|
211
|
-
# allow subject to quit via Esc key?
|
|
212
|
-
if self.exp.settings.params['Enable Escape'].val:
|
|
213
|
-
code = ('\n# check for quit (typically the Esc key)\n'
|
|
214
|
-
'if endExpNow or defaultKeyboard.getKeys(keyList=["escape"]):\n'
|
|
215
|
-
' core.quit()\n')
|
|
216
|
-
buff.writeIndentedLines(code)
|
|
217
|
-
|
|
218
|
-
# are we done yet?
|
|
219
|
-
code = (
|
|
220
|
-
'\n# check if all components have finished\n'
|
|
221
|
-
'if not continueRoutine: # a component has requested a '
|
|
222
|
-
'forced-end of Routine\n'
|
|
223
|
-
' break\n'
|
|
224
|
-
'continueRoutine = False # will revert to True if at least '
|
|
225
|
-
'one component still running\n'
|
|
226
|
-
'for thisComponent in %sComponents:\n'
|
|
227
|
-
' if hasattr(thisComponent, "status") and '
|
|
228
|
-
'thisComponent.status != FINISHED:\n'
|
|
229
|
-
' continueRoutine = True\n'
|
|
230
|
-
' break # at least one component has not yet finished\n')
|
|
231
|
-
buff.writeIndentedLines(code % self.name)
|
|
232
|
-
|
|
233
|
-
# update screen
|
|
234
|
-
code = ('\n# refresh the screen\n'
|
|
235
|
-
"if continueRoutine: # don't flip if this routine is over "
|
|
236
|
-
"or we'll get a blank screen\n"
|
|
237
|
-
' win.flip()\n')
|
|
238
|
-
buff.writeIndentedLines(code)
|
|
239
|
-
|
|
240
|
-
# that's done decrement indent to end loop
|
|
241
|
-
buff.setIndentLevel(-1, True)
|
|
242
|
-
|
|
243
|
-
# write the code for each component for the end of the routine
|
|
244
|
-
code = ('\n# -------Ending Routine "%s"-------\n'
|
|
245
|
-
'for thisComponent in %sComponents:\n'
|
|
246
|
-
' if hasattr(thisComponent, "setAutoDraw"):\n'
|
|
247
|
-
' thisComponent.setAutoDraw(False)\n')
|
|
248
|
-
buff.writeIndentedLines(code % (self.name, self.name))
|
|
249
|
-
for event in self:
|
|
250
|
-
event.writeRoutineEndCode(buff)
|
|
251
|
-
|
|
252
|
-
# reset routineTimer at the *very end* of all non-nonSlip routines
|
|
253
|
-
if not useNonSlip:
|
|
254
|
-
code = ('# the Routine "%s" was not non-slip safe, so reset '
|
|
255
|
-
'the non-slip timer\n'
|
|
256
|
-
'routineTimer.reset()\n')
|
|
257
|
-
buff.writeIndentedLines(code % self.name)
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
def writeRoutineBeginCodeJS(self, buff, modular):
|
|
261
|
-
|
|
262
|
-
# create the frame loop for this routine
|
|
263
|
-
|
|
264
|
-
code = ("\nfunction %(name)sRoutineBegin(snapshot) {\n" % self.params)
|
|
265
|
-
buff.writeIndentedLines(code)
|
|
266
|
-
buff.setIndentLevel(1, relative=True)
|
|
267
|
-
buff.writeIndentedLines("return function () {\n")
|
|
268
|
-
buff.setIndentLevel(1, relative=True)
|
|
269
|
-
|
|
270
|
-
code = ("//------Prepare to start Routine '%(name)s'-------\n"
|
|
271
|
-
"t = 0;\n"
|
|
272
|
-
"%(name)sClock.reset(); // clock\n"
|
|
273
|
-
"frameN = -1;\n"
|
|
274
|
-
"continueRoutine = true; // until we're told otherwise\n"
|
|
275
|
-
% self.params)
|
|
276
|
-
buff.writeIndentedLines(code)
|
|
277
|
-
# can we use non-slip timing?
|
|
278
|
-
maxTime, useNonSlip = self.getMaxTime()
|
|
279
|
-
if useNonSlip:
|
|
280
|
-
buff.writeIndented('routineTimer.add(%f);\n' % (maxTime))
|
|
281
|
-
|
|
282
|
-
code = "// update component parameters for each repeat\n"
|
|
283
|
-
buff.writeIndentedLines(code)
|
|
284
|
-
# This is the beginning of the routine, before the loop starts
|
|
285
|
-
for thisCompon in self:
|
|
286
|
-
if "PsychoJS" in thisCompon.targets:
|
|
287
|
-
thisCompon.writeRoutineStartCodeJS(buff)
|
|
288
|
-
|
|
289
|
-
code = ("// keep track of which components have finished\n"
|
|
290
|
-
"%(name)sComponents = [];\n" % self.params)
|
|
291
|
-
buff.writeIndentedLines(code)
|
|
292
|
-
for thisCompon in self:
|
|
293
|
-
if (('startType' in thisCompon.params) and ("PsychoJS" in thisCompon.targets)):
|
|
294
|
-
code = ("%sComponents.push(%s);\n" % (self.name, thisCompon.params['name']))
|
|
295
|
-
buff.writeIndentedLines(code)
|
|
296
|
-
|
|
297
|
-
if modular:
|
|
298
|
-
code = ("\nfor (const thisComponent of %(name)sComponents)\n"
|
|
299
|
-
" if ('status' in thisComponent)\n"
|
|
300
|
-
" thisComponent.status = PsychoJS.Status.NOT_STARTED;\n" % self.params)
|
|
301
|
-
else:
|
|
302
|
-
code = ("\n%(name)sComponents.forEach( function(thisComponent) {\n"
|
|
303
|
-
" if ('status' in thisComponent)\n"
|
|
304
|
-
" thisComponent.status = PsychoJS.Status.NOT_STARTED;\n"
|
|
305
|
-
" });\n" % self.params)
|
|
306
|
-
buff.writeIndentedLines(code)
|
|
307
|
-
|
|
308
|
-
# are we done yet?
|
|
309
|
-
<<<<<<< HEAD
|
|
310
|
-
code = ("// check if the Routine should terminate\n"
|
|
311
|
-
"if (!continueRoutine) {"
|
|
312
|
-
" // a component has requested a forced-end of Routine\n"
|
|
313
|
-
" return Scheduler.Event.NEXT;\n"
|
|
314
|
-
"}\n")
|
|
315
|
-
=======
|
|
316
|
-
code = ("return Scheduler.Event.NEXT;\n")
|
|
317
|
-
>>>>>>> d5c7d5c77... BF: beginRoutineJS code was broekn if continueRoutine==False
|
|
318
|
-
buff.writeIndentedLines(code)
|
|
319
|
-
|
|
320
|
-
buff.setIndentLevel(-1, relative=True)
|
|
321
|
-
buff.writeIndentedLines("}\n")
|
|
322
|
-
buff.setIndentLevel(-1, relative=True)
|
|
323
|
-
buff.writeIndentedLines("}\n")
|
|
324
|
-
|
|
325
|
-
def writeEachFrameCodeJS(self, buff, modular):
|
|
326
|
-
# can we use non-slip timing?
|
|
327
|
-
maxTime, useNonSlip = self.getMaxTime()
|
|
328
|
-
|
|
329
|
-
# write code for each frame
|
|
330
|
-
|
|
331
|
-
code = ("\nfunction %(name)sRoutineEachFrame(snapshot) {\n" % self.params)
|
|
332
|
-
buff.writeIndentedLines(code)
|
|
333
|
-
buff.setIndentLevel(1, relative=True)
|
|
334
|
-
buff.writeIndentedLines("return function () {\n")
|
|
335
|
-
buff.setIndentLevel(1, relative=True)
|
|
336
|
-
|
|
337
|
-
code = ("//------Loop for each frame of Routine '%(name)s'-------\n"
|
|
338
|
-
"// get current time\n"
|
|
339
|
-
"t = %(name)sClock.getTime();\n"
|
|
340
|
-
"frameN = frameN + 1;"
|
|
341
|
-
"// number of completed frames (so 0 is the first frame)\n" % self.params)
|
|
342
|
-
buff.writeIndentedLines(code)
|
|
343
|
-
# write the code for each component during frame
|
|
344
|
-
buff.writeIndentedLines('// update/draw components on each frame\n')
|
|
345
|
-
# just 'normal' components
|
|
346
|
-
for comp in self:
|
|
347
|
-
if "PsychoJS" in comp.targets and comp.type != 'Static':
|
|
348
|
-
comp.writeFrameCodeJS(buff)
|
|
349
|
-
# update static component code last
|
|
350
|
-
for comp in self.getStatics():
|
|
351
|
-
if "PsychoJS" in comp.targets:
|
|
352
|
-
comp.writeFrameCodeJS(buff)
|
|
353
|
-
|
|
354
|
-
if self.exp.settings.params['Enable Escape'].val:
|
|
355
|
-
code = ("// check for quit (typically the Esc key)\n"
|
|
356
|
-
"if (psychoJS.experiment.experimentEnded || psychoJS.eventManager.getKeys({keyList:['escape']}).length > 0) {\n"
|
|
357
|
-
" return quitPsychoJS('The [Escape] key was pressed. Goodbye!', false);\n"
|
|
358
|
-
"}\n\n")
|
|
359
|
-
buff.writeIndentedLines(code)
|
|
360
|
-
|
|
361
|
-
# are we done yet?
|
|
362
|
-
code = ("// check if the Routine should terminate\n"
|
|
363
|
-
"if (!continueRoutine) {"
|
|
364
|
-
" // a component has requested a forced-end of Routine\n"
|
|
365
|
-
" return Scheduler.Event.NEXT;\n"
|
|
366
|
-
"}\n\n"
|
|
367
|
-
"continueRoutine = false; "
|
|
368
|
-
"// reverts to True if at least one component still running\n")
|
|
369
|
-
buff.writeIndentedLines(code)
|
|
370
|
-
|
|
371
|
-
if modular:
|
|
372
|
-
code = ("for (const thisComponent of %(name)sComponents)\n"
|
|
373
|
-
" if ('status' in thisComponent && thisComponent.status !== PsychoJS.Status.FINISHED) {\n"
|
|
374
|
-
" continueRoutine = true;\n"
|
|
375
|
-
" break;\n"
|
|
376
|
-
" }\n")
|
|
377
|
-
else:
|
|
378
|
-
code = ("%(name)sComponents.forEach( function(thisComponent) {\n"
|
|
379
|
-
" if ('status' in thisComponent && thisComponent.status !== PsychoJS.Status.FINISHED) {\n"
|
|
380
|
-
" continueRoutine = true;\n"
|
|
381
|
-
" }\n"
|
|
382
|
-
"});\n")
|
|
383
|
-
buff.writeIndentedLines(code % self.params)
|
|
384
|
-
|
|
385
|
-
buff.writeIndentedLines("\n// refresh the screen if continuing\n")
|
|
386
|
-
if useNonSlip:
|
|
387
|
-
buff.writeIndentedLines("if (continueRoutine "
|
|
388
|
-
"&& routineTimer.getTime() > 0) {")
|
|
389
|
-
else:
|
|
390
|
-
buff.writeIndentedLines("if (continueRoutine) {")
|
|
391
|
-
code = (" return Scheduler.Event.FLIP_REPEAT;\n"
|
|
392
|
-
"} else {\n"
|
|
393
|
-
" return Scheduler.Event.NEXT;\n"
|
|
394
|
-
"}\n")
|
|
395
|
-
buff.writeIndentedLines(code)
|
|
396
|
-
buff.setIndentLevel(-1, relative=True)
|
|
397
|
-
buff.writeIndentedLines("};\n")
|
|
398
|
-
buff.setIndentLevel(-1, relative=True)
|
|
399
|
-
buff.writeIndentedLines("}\n")
|
|
400
|
-
|
|
401
|
-
def writeRoutineEndCodeJS(self, buff, modular):
|
|
402
|
-
# can we use non-slip timing?
|
|
403
|
-
maxTime, useNonSlip = self.getMaxTime()
|
|
404
|
-
|
|
405
|
-
code = ("\nfunction %(name)sRoutineEnd(snapshot) {\n" % self.params)
|
|
406
|
-
buff.writeIndentedLines(code)
|
|
407
|
-
buff.setIndentLevel(1, relative=True)
|
|
408
|
-
buff.writeIndentedLines("return function () {\n")
|
|
409
|
-
buff.setIndentLevel(1, relative=True)
|
|
410
|
-
|
|
411
|
-
if modular:
|
|
412
|
-
code = ("//------Ending Routine '%(name)s'-------\n"
|
|
413
|
-
"for (const thisComponent of %(name)sComponents) {\n"
|
|
414
|
-
" if (typeof thisComponent.setAutoDraw === 'function') {\n"
|
|
415
|
-
" thisComponent.setAutoDraw(false);\n"
|
|
416
|
-
" }\n"
|
|
417
|
-
"}\n")
|
|
418
|
-
else:
|
|
419
|
-
code = ("//------Ending Routine '%(name)s'-------\n"
|
|
420
|
-
"%(name)sComponents.forEach( function(thisComponent) {\n"
|
|
421
|
-
" if (typeof thisComponent.setAutoDraw === 'function') {\n"
|
|
422
|
-
" thisComponent.setAutoDraw(false);\n"
|
|
423
|
-
" }\n"
|
|
424
|
-
"});\n")
|
|
425
|
-
buff.writeIndentedLines(code % self.params)
|
|
426
|
-
# add the EndRoutine code for each component
|
|
427
|
-
for compon in self:
|
|
428
|
-
if "PsychoJS" in compon.targets:
|
|
429
|
-
compon.writeRoutineEndCodeJS(buff)
|
|
430
|
-
|
|
431
|
-
# reset routineTimer at the *very end* of all non-nonSlip routines
|
|
432
|
-
if not useNonSlip:
|
|
433
|
-
code = ('// the Routine "%s" was not non-slip safe, so reset '
|
|
434
|
-
'the non-slip timer\n'
|
|
435
|
-
'routineTimer.reset();\n\n')
|
|
436
|
-
buff.writeIndentedLines(code % self.name)
|
|
437
|
-
|
|
438
|
-
buff.writeIndented('return Scheduler.Event.NEXT;\n')
|
|
439
|
-
buff.setIndentLevel(-1, relative=True)
|
|
440
|
-
buff.writeIndentedLines("};\n")
|
|
441
|
-
buff.setIndentLevel(-1, relative=True)
|
|
442
|
-
buff.writeIndentedLines("}\n")
|
|
443
|
-
|
|
444
|
-
def writeExperimentEndCode(self, buff):
|
|
445
|
-
"""Some components have
|
|
446
|
-
"""
|
|
447
|
-
# This is the beginning of the routine, before the loop starts
|
|
448
|
-
for component in self:
|
|
449
|
-
component.writeExperimentEndCode(buff)
|
|
450
|
-
|
|
451
|
-
def writeExperimentEndCodeJS(self, buff):
|
|
452
|
-
"""This defines the code for the frames of a single routine
|
|
453
|
-
"""
|
|
454
|
-
# This is the beginning of the routine, before the loop starts
|
|
455
|
-
for component in self:
|
|
456
|
-
if 'writeExperimentEndCodeJS' in dir(component):
|
|
457
|
-
component.writeExperimentEndCodeJS(buff)
|
|
458
|
-
|
|
459
|
-
def getType(self):
|
|
460
|
-
return 'Routine'
|
|
461
|
-
|
|
462
|
-
def getComponentFromName(self, name):
|
|
463
|
-
for comp in self:
|
|
464
|
-
if comp.params['name'].val == name:
|
|
465
|
-
return comp
|
|
466
|
-
return None
|
|
467
|
-
|
|
468
|
-
def getComponentFromType(self, type):
|
|
469
|
-
for comp in self:
|
|
470
|
-
if comp.type == type:
|
|
471
|
-
return comp
|
|
472
|
-
return None
|
|
473
|
-
|
|
474
|
-
def hasOnlyStaticComp(self):
|
|
475
|
-
return all([comp.type == 'Static' for comp in self])
|
|
476
|
-
|
|
477
|
-
def getMaxTime(self):
|
|
478
|
-
"""What the last (predetermined) stimulus time to be presented. If
|
|
479
|
-
there are no components or they have code-based times then will
|
|
480
|
-
default to 10secs
|
|
481
|
-
"""
|
|
482
|
-
maxTime = 0
|
|
483
|
-
nonSlipSafe = True # if possible
|
|
484
|
-
for component in self:
|
|
485
|
-
if 'startType' in component.params:
|
|
486
|
-
start, duration, nonSlip = component.getStartAndDuration()
|
|
487
|
-
if not nonSlip:
|
|
488
|
-
nonSlipSafe = False
|
|
489
|
-
if duration == FOREVER:
|
|
490
|
-
# only the *start* of an unlimited event should contribute
|
|
491
|
-
# to maxTime
|
|
492
|
-
duration = 1 # plus some minimal duration so it's visible
|
|
493
|
-
# now see if we have a end t value that beats the previous max
|
|
494
|
-
try:
|
|
495
|
-
# will fail if either value is not defined:
|
|
496
|
-
thisT = start + duration
|
|
497
|
-
except Exception:
|
|
498
|
-
thisT = 0
|
|
499
|
-
maxTime = max(maxTime, thisT)
|
|
500
|
-
if maxTime == 0: # if there are no components
|
|
501
|
-
maxTime = 10
|
|
502
|
-
nonSlipSafe = False
|
|
503
|
-
return maxTime, nonSlipSafe
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
psychopy/hardware/.DS_Store
DELETED
|
Binary file
|