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
psychopy/core.py.orig
DELETED
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
|
|
4
|
-
"""Basic functions, including timing, rush (imported), quit
|
|
5
|
-
"""
|
|
6
|
-
# Part of the PsychoPy library
|
|
7
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2021 Open Science Tools Ltd.
|
|
8
|
-
# Distributed under the terms of the GNU General Public License (GPL).
|
|
9
|
-
|
|
10
|
-
import sys
|
|
11
|
-
import threading
|
|
12
|
-
import subprocess
|
|
13
|
-
import shlex
|
|
14
|
-
import locale
|
|
15
|
-
|
|
16
|
-
# some things are imported just to be accessible within core's namespace
|
|
17
|
-
from psychopy.clock import (MonotonicClock, Clock, CountdownTimer,
|
|
18
|
-
wait, monotonicClock, getAbsTime,
|
|
19
|
-
StaticPeriod) # pylint: disable=W0611
|
|
20
|
-
|
|
21
|
-
# always safe to call rush, even if its not going to do anything for a
|
|
22
|
-
# particular OS
|
|
23
|
-
from psychopy.platform_specific import rush # pylint: disable=W0611
|
|
24
|
-
from psychopy import logging
|
|
25
|
-
<<<<<<< HEAD
|
|
26
|
-
from psychopy.constants import STARTED, NOT_STARTED, FINISHED
|
|
27
|
-
=======
|
|
28
|
-
from psychopy.constants import STARTED, NOT_STARTED, FINISHED, PY3
|
|
29
|
-
from psychopy.iohub.client import ioHubConnection
|
|
30
|
-
>>>>>>> c06fff3cf5e2f418f6db297fd47819041a00c07d
|
|
31
|
-
|
|
32
|
-
try:
|
|
33
|
-
import pyglet
|
|
34
|
-
havePyglet = True
|
|
35
|
-
# may not want to check, to preserve terminal window focus
|
|
36
|
-
checkPygletDuringWait = True
|
|
37
|
-
except ImportError:
|
|
38
|
-
havePyglet = False
|
|
39
|
-
checkPygletDuringWait = False
|
|
40
|
-
|
|
41
|
-
try:
|
|
42
|
-
import glfw
|
|
43
|
-
haveGLFW = True
|
|
44
|
-
except ImportError:
|
|
45
|
-
haveGLFW = False
|
|
46
|
-
|
|
47
|
-
runningThreads = [] # just for backwards compatibility?
|
|
48
|
-
openWindows = [] # visual.Window updates this, event.py and clock.py use it
|
|
49
|
-
|
|
50
|
-
# Set getTime in core to == the monotonicClock instance created in the
|
|
51
|
-
# clockModule.
|
|
52
|
-
# The logging module sets the defaultClock to == clock.monotonicClock,
|
|
53
|
-
# so by default the core.getTime() and logging.defaultClock.getTime()
|
|
54
|
-
# functions return the 'same' timebase.
|
|
55
|
-
#
|
|
56
|
-
# This way 'all' OSs have a core.getTime() timebase that starts at 0.0 when
|
|
57
|
-
# the experiment is launched, instead of it being this way on Windows only
|
|
58
|
-
# (which was also a descripancy between OS's when win32 was using time.clock).
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def getTime(applyZero = True):
|
|
62
|
-
"""Get the current time since psychopy.core was loaded.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
Version Notes: Note that prior to PsychoPy 1.77.00 the behaviour of
|
|
67
|
-
getTime() was platform dependent (on OSX and linux it was equivalent to
|
|
68
|
-
:func:`psychopy.core.getAbsTime`
|
|
69
|
-
whereas on windows it returned time since loading of the module, as now)
|
|
70
|
-
"""
|
|
71
|
-
return monotonicClock.getTime(applyZero)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
def quit():
|
|
75
|
-
"""Close everything and exit nicely (ending the experiment)
|
|
76
|
-
"""
|
|
77
|
-
# pygame.quit() # safe even if pygame was never initialised
|
|
78
|
-
logging.flush()
|
|
79
|
-
|
|
80
|
-
# properly shutdown ioHub server
|
|
81
|
-
if ioHubConnection.ACTIVE_CONNECTION:
|
|
82
|
-
ioHubConnection.ACTIVE_CONNECTION.quit()
|
|
83
|
-
|
|
84
|
-
for thisThread in threading.enumerate():
|
|
85
|
-
if hasattr(thisThread, 'stop') and hasattr(thisThread, 'running'):
|
|
86
|
-
# this is one of our event threads - kill it and wait for success
|
|
87
|
-
thisThread.stop()
|
|
88
|
-
while thisThread.running == 0:
|
|
89
|
-
pass # wait until it has properly finished polling
|
|
90
|
-
|
|
91
|
-
sys.exit(0) # quits the python session entirely
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
def shellCall(shellCmd, stdin='', stderr=False, env=None, encoding=None):
|
|
95
|
-
"""Call a single system command with arguments, return its stdout.
|
|
96
|
-
Returns stdout, stderr if stderr is True.
|
|
97
|
-
Handles simple pipes, passing stdin to shellCmd (pipes are untested
|
|
98
|
-
on windows) can accept string or list as the first argument
|
|
99
|
-
|
|
100
|
-
Parameters
|
|
101
|
-
----------
|
|
102
|
-
shellCmd : str, or iterable
|
|
103
|
-
The command to execute, and its respective arguments.
|
|
104
|
-
|
|
105
|
-
stdin : str, or None
|
|
106
|
-
Input to pass to the command.
|
|
107
|
-
|
|
108
|
-
stderr : bool
|
|
109
|
-
Whether to return the standard error output once execution is finished.
|
|
110
|
-
|
|
111
|
-
env : dict
|
|
112
|
-
The environment variables to set during execution.
|
|
113
|
-
|
|
114
|
-
encoding : str
|
|
115
|
-
The encoding to use for communication with the executed command.
|
|
116
|
-
This argument will be ignored on Python 2.7.
|
|
117
|
-
|
|
118
|
-
Notes
|
|
119
|
-
-----
|
|
120
|
-
We use ``subprocess.Popen`` to execute the command and establish
|
|
121
|
-
`stdin` and `stdout` pipes.
|
|
122
|
-
Python 2.7 always opens the pipes in text mode; however,
|
|
123
|
-
Python 3 defaults to binary mode, unless an encoding is specified.
|
|
124
|
-
To unify pipe communication across Python 2 and 3, we now provide an
|
|
125
|
-
`encoding` parameter, enforcing `utf-8` text mode by default.
|
|
126
|
-
This parameter is present from Python 3.6 onwards; using an older
|
|
127
|
-
Python 3 version will raise an exception. The parameter will be ignored
|
|
128
|
-
when running Python 2.7.
|
|
129
|
-
|
|
130
|
-
"""
|
|
131
|
-
if encoding is None:
|
|
132
|
-
encoding = locale.getpreferredencoding()
|
|
133
|
-
|
|
134
|
-
if type(shellCmd) == str:
|
|
135
|
-
# safely split into cmd+list-of-args, no pipes here
|
|
136
|
-
shellCmdList = shlex.split(shellCmd)
|
|
137
|
-
elif type(shellCmd) == bytes:
|
|
138
|
-
# safely split into cmd+list-of-args, no pipes here
|
|
139
|
-
shellCmdList = shlex.split(shellCmd.decode('utf-8'))
|
|
140
|
-
elif type(shellCmd) in (list, tuple): # handles whitespace in filenames
|
|
141
|
-
shellCmdList = shellCmd
|
|
142
|
-
else:
|
|
143
|
-
msg = 'shellCmd requires a string or iterable.'
|
|
144
|
-
raise TypeError(msg)
|
|
145
|
-
|
|
146
|
-
cmdObjects = []
|
|
147
|
-
for obj in shellCmdList:
|
|
148
|
-
if type(obj) != bytes:
|
|
149
|
-
cmdObjects.append(obj)
|
|
150
|
-
else:
|
|
151
|
-
cmdObjects.append(obj.decode('utf-8'))
|
|
152
|
-
|
|
153
|
-
# the `encoding` parameter results in unicode coming back
|
|
154
|
-
if sys.version_info.minor >= 6:
|
|
155
|
-
proc = subprocess.Popen(cmdObjects, stdin=subprocess.PIPE,
|
|
156
|
-
stdout=subprocess.PIPE,
|
|
157
|
-
stderr=subprocess.PIPE,
|
|
158
|
-
encoding=encoding, env=env)
|
|
159
|
-
else:
|
|
160
|
-
msg = 'shellCall() requires Python 2.7, or 3.6 and newer.'
|
|
161
|
-
raise RuntimeError(msg)
|
|
162
|
-
|
|
163
|
-
stdoutData, stderrData = proc.communicate(stdin)
|
|
164
|
-
|
|
165
|
-
del proc
|
|
166
|
-
if stderr:
|
|
167
|
-
return stdoutData.strip(), stderrData.strip()
|
|
168
|
-
else:
|
|
169
|
-
return stdoutData.strip()
|
psychopy/demos/builder/.DS_Store
DELETED
|
Binary file
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html>
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="user-scalable=no">
|
|
6
|
-
<title>randomisedBlocks [PsychoPy]</title>
|
|
7
|
-
<!-- styles -->
|
|
8
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jquery-ui-dist@1.12.1/jquery-ui.min.css">
|
|
9
|
-
<link rel="stylesheet" href="./lib/psychojs-2022.2.0.css">
|
|
10
|
-
</head>
|
|
11
|
-
<body>
|
|
12
|
-
<div id="root"></div>
|
|
13
|
-
<!-- external libraries -->
|
|
14
|
-
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
|
|
15
|
-
<script src="https://cdn.jsdelivr.net/npm/jquery-ui-dist@1.12.1/jquery-ui.min.js"></script>
|
|
16
|
-
<script src="https://cdn.jsdelivr.net/npm/preloadjs@1.0.1/lib/preloadjs.min.js"></script>
|
|
17
|
-
<!-- experiment -->
|
|
18
|
-
<script src="./randomisedBlocks.js" type="module"></script>
|
|
19
|
-
<!-- legacy browsers -->
|
|
20
|
-
<script src="./lib/psychojs-2022.2.0.iife.js" nomodule></script>
|
|
21
|
-
<script src="./randomisedBlocks-legacy-browsers.js" nomodule></script>
|
|
22
|
-
</body>
|
|
23
|
-
</html>
|
psychopy/demos/builder/Design Templates/randomisedBlocks/html/randomisedBlocks-legacy-browsers.js
DELETED
|
@@ -1,423 +0,0 @@
|
|
|
1
|
-
/*************************
|
|
2
|
-
* Randomisedblocks Test *
|
|
3
|
-
*************************/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
// store info about the experiment session:
|
|
7
|
-
let expName = 'randomisedBlocks'; // from the Builder filename that created this script
|
|
8
|
-
let expInfo = {'session': '001', 'participant': `subj${(Math.random() * 100000)}`};
|
|
9
|
-
|
|
10
|
-
// Start code blocks for 'Before Experiment'
|
|
11
|
-
// init psychoJS:
|
|
12
|
-
const psychoJS = new PsychoJS({
|
|
13
|
-
debug: true
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
// open window:
|
|
17
|
-
psychoJS.openWindow({
|
|
18
|
-
fullscr: true,
|
|
19
|
-
color: new util.Color([0, 0, 0]),
|
|
20
|
-
units: 'height',
|
|
21
|
-
waitBlanking: true
|
|
22
|
-
});
|
|
23
|
-
// schedule the experiment:
|
|
24
|
-
psychoJS.schedule(psychoJS.gui.DlgFromDict({
|
|
25
|
-
dictionary: expInfo,
|
|
26
|
-
title: expName
|
|
27
|
-
}));
|
|
28
|
-
|
|
29
|
-
const flowScheduler = new Scheduler(psychoJS);
|
|
30
|
-
const dialogCancelScheduler = new Scheduler(psychoJS);
|
|
31
|
-
psychoJS.scheduleCondition(function() { return (psychoJS.gui.dialogComponent.button === 'OK'); }, flowScheduler, dialogCancelScheduler);
|
|
32
|
-
|
|
33
|
-
// flowScheduler gets run if the participants presses OK
|
|
34
|
-
flowScheduler.add(updateInfo); // add timeStamp
|
|
35
|
-
flowScheduler.add(experimentInit);
|
|
36
|
-
const blocksLoopScheduler = new Scheduler(psychoJS);
|
|
37
|
-
flowScheduler.add(blocksLoopBegin(blocksLoopScheduler));
|
|
38
|
-
flowScheduler.add(blocksLoopScheduler);
|
|
39
|
-
flowScheduler.add(blocksLoopEnd);
|
|
40
|
-
flowScheduler.add(quitPsychoJS, '', true);
|
|
41
|
-
|
|
42
|
-
// quit if user presses Cancel in dialog box:
|
|
43
|
-
dialogCancelScheduler.add(quitPsychoJS, '', false);
|
|
44
|
-
|
|
45
|
-
psychoJS.start({
|
|
46
|
-
expName: expName,
|
|
47
|
-
expInfo: expInfo,
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
psychoJS.experimentLogger.setLevel(core.Logger.ServerLevel.EXP);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
var frameDur;
|
|
54
|
-
async function updateInfo() {
|
|
55
|
-
expInfo['date'] = util.MonotonicClock.getDateStr(); // add a simple timestamp
|
|
56
|
-
expInfo['expName'] = expName;
|
|
57
|
-
expInfo['psychopyVersion'] = '2022.2.0dev3';
|
|
58
|
-
expInfo['OS'] = window.navigator.platform;
|
|
59
|
-
|
|
60
|
-
psychoJS.experiment.dataFileName = (("." + "/") + `data/${expInfo["participant"]}_${expName}_${expInfo["date"]}`);
|
|
61
|
-
|
|
62
|
-
// store frame rate of monitor if we can measure it successfully
|
|
63
|
-
expInfo['frameRate'] = psychoJS.window.getActualFrameRate();
|
|
64
|
-
if (typeof expInfo['frameRate'] !== 'undefined')
|
|
65
|
-
frameDur = 1.0 / Math.round(expInfo['frameRate']);
|
|
66
|
-
else
|
|
67
|
-
frameDur = 1.0 / 60.0; // couldn't get a reliable measure so guess
|
|
68
|
-
|
|
69
|
-
// add info from the URL:
|
|
70
|
-
util.addInfoFromUrl(expInfo);
|
|
71
|
-
|
|
72
|
-
return Scheduler.Event.NEXT;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
var readyMessageClock;
|
|
77
|
-
var textbox;
|
|
78
|
-
var trialClock;
|
|
79
|
-
var image;
|
|
80
|
-
var globalClock;
|
|
81
|
-
var routineTimer;
|
|
82
|
-
async function experimentInit() {
|
|
83
|
-
// Initialize components for Routine "readyMessage"
|
|
84
|
-
readyMessageClock = new util.Clock();
|
|
85
|
-
textbox = new visual.TextBox({
|
|
86
|
-
win: psychoJS.window,
|
|
87
|
-
name: 'textbox',
|
|
88
|
-
text: '',
|
|
89
|
-
font: 'Open Sans',
|
|
90
|
-
pos: [0, 0], letterHeight: 0.05,
|
|
91
|
-
size: [0.4, 0.4], units: undefined,
|
|
92
|
-
color: 'white', colorSpace: 'rgb',
|
|
93
|
-
fillColor: undefined, borderColor: undefined,
|
|
94
|
-
bold: false, italic: false,
|
|
95
|
-
opacity: 1.0,
|
|
96
|
-
padding: undefined,
|
|
97
|
-
editable: false,
|
|
98
|
-
multiline: true,
|
|
99
|
-
anchor: 'center',
|
|
100
|
-
depth: 0.0
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
// Initialize components for Routine "trial"
|
|
104
|
-
trialClock = new util.Clock();
|
|
105
|
-
image = new visual.ImageStim({
|
|
106
|
-
win : psychoJS.window,
|
|
107
|
-
name : 'image', units : 'height',
|
|
108
|
-
image : undefined, mask : undefined,
|
|
109
|
-
ori : 0, pos : [0, 0], size : [0.5, 0.5],
|
|
110
|
-
color : new util.Color([1, 1, 1]), opacity : 1,
|
|
111
|
-
flipHoriz : false, flipVert : false,
|
|
112
|
-
texRes : 128, interpolate : true, depth : 0.0
|
|
113
|
-
});
|
|
114
|
-
// Create some handy timers
|
|
115
|
-
globalClock = new util.Clock(); // to track the time since experiment started
|
|
116
|
-
routineTimer = new util.CountdownTimer(); // to track time remaining of each (non-slip) routine
|
|
117
|
-
|
|
118
|
-
return Scheduler.Event.NEXT;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
var blocks;
|
|
123
|
-
var currentLoop;
|
|
124
|
-
function blocksLoopBegin(blocksLoopScheduler, snapshot) {
|
|
125
|
-
return async function() {
|
|
126
|
-
TrialHandler.fromSnapshot(snapshot); // update internal variables (.thisN etc) of the loop
|
|
127
|
-
|
|
128
|
-
// set up handler to look after randomisation of conditions etc
|
|
129
|
-
blocks = new TrialHandler({
|
|
130
|
-
psychoJS: psychoJS,
|
|
131
|
-
nReps: 2, method: TrialHandler.Method.RANDOM,
|
|
132
|
-
extraInfo: expInfo, originPath: undefined,
|
|
133
|
-
trialList: 'chooseBlock.xlsx',
|
|
134
|
-
seed: undefined, name: 'blocks'
|
|
135
|
-
});
|
|
136
|
-
psychoJS.experiment.addLoop(blocks); // add the loop to the experiment
|
|
137
|
-
currentLoop = blocks; // we're now the current loop
|
|
138
|
-
|
|
139
|
-
// Schedule all the trials in the trialList:
|
|
140
|
-
blocks.forEach(function() {
|
|
141
|
-
const snapshot = blocks.getSnapshot();
|
|
142
|
-
|
|
143
|
-
blocksLoopScheduler.add(importConditions(snapshot));
|
|
144
|
-
blocksLoopScheduler.add(readyMessageRoutineBegin(snapshot));
|
|
145
|
-
blocksLoopScheduler.add(readyMessageRoutineEachFrame());
|
|
146
|
-
blocksLoopScheduler.add(readyMessageRoutineEnd());
|
|
147
|
-
const trialsLoopScheduler = new Scheduler(psychoJS);
|
|
148
|
-
blocksLoopScheduler.add(trialsLoopBegin(trialsLoopScheduler, snapshot));
|
|
149
|
-
blocksLoopScheduler.add(trialsLoopScheduler);
|
|
150
|
-
blocksLoopScheduler.add(trialsLoopEnd);
|
|
151
|
-
blocksLoopScheduler.add(endLoopIteration(blocksLoopScheduler, snapshot));
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
return Scheduler.Event.NEXT;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
var trials;
|
|
160
|
-
function trialsLoopBegin(trialsLoopScheduler, snapshot) {
|
|
161
|
-
return async function() {
|
|
162
|
-
TrialHandler.fromSnapshot(snapshot); // update internal variables (.thisN etc) of the loop
|
|
163
|
-
|
|
164
|
-
// set up handler to look after randomisation of conditions etc
|
|
165
|
-
trials = new TrialHandler({
|
|
166
|
-
psychoJS: psychoJS,
|
|
167
|
-
nReps: 1, method: TrialHandler.Method.RANDOM,
|
|
168
|
-
extraInfo: expInfo, originPath: undefined,
|
|
169
|
-
trialList: condsFile,
|
|
170
|
-
seed: undefined, name: 'trials'
|
|
171
|
-
});
|
|
172
|
-
psychoJS.experiment.addLoop(trials); // add the loop to the experiment
|
|
173
|
-
currentLoop = trials; // we're now the current loop
|
|
174
|
-
|
|
175
|
-
// Schedule all the trials in the trialList:
|
|
176
|
-
trials.forEach(function() {
|
|
177
|
-
const snapshot = trials.getSnapshot();
|
|
178
|
-
|
|
179
|
-
trialsLoopScheduler.add(importConditions(snapshot));
|
|
180
|
-
trialsLoopScheduler.add(trialRoutineBegin(snapshot));
|
|
181
|
-
trialsLoopScheduler.add(trialRoutineEachFrame());
|
|
182
|
-
trialsLoopScheduler.add(trialRoutineEnd());
|
|
183
|
-
trialsLoopScheduler.add(endLoopIteration(trialsLoopScheduler, snapshot));
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
return Scheduler.Event.NEXT;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
async function trialsLoopEnd() {
|
|
192
|
-
psychoJS.experiment.removeLoop(trials);
|
|
193
|
-
|
|
194
|
-
return Scheduler.Event.NEXT;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
async function blocksLoopEnd() {
|
|
199
|
-
psychoJS.experiment.removeLoop(blocks);
|
|
200
|
-
|
|
201
|
-
return Scheduler.Event.NEXT;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
var t;
|
|
206
|
-
var frameN;
|
|
207
|
-
var continueRoutine;
|
|
208
|
-
var readyMessageComponents;
|
|
209
|
-
function readyMessageRoutineBegin(snapshot) {
|
|
210
|
-
return async function () {
|
|
211
|
-
TrialHandler.fromSnapshot(snapshot); // ensure that .thisN vals are up to date
|
|
212
|
-
|
|
213
|
-
//--- Prepare to start Routine 'readyMessage' ---
|
|
214
|
-
t = 0;
|
|
215
|
-
readyMessageClock.reset(); // clock
|
|
216
|
-
frameN = -1;
|
|
217
|
-
continueRoutine = true; // until we're told otherwise
|
|
218
|
-
routineTimer.add(1.000000);
|
|
219
|
-
// update component parameters for each repeat
|
|
220
|
-
textbox.setText(readyMsg);
|
|
221
|
-
// keep track of which components have finished
|
|
222
|
-
readyMessageComponents = [];
|
|
223
|
-
readyMessageComponents.push(textbox);
|
|
224
|
-
|
|
225
|
-
readyMessageComponents.forEach( function(thisComponent) {
|
|
226
|
-
if ('status' in thisComponent)
|
|
227
|
-
thisComponent.status = PsychoJS.Status.NOT_STARTED;
|
|
228
|
-
});
|
|
229
|
-
return Scheduler.Event.NEXT;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
var frameRemains;
|
|
235
|
-
function readyMessageRoutineEachFrame() {
|
|
236
|
-
return async function () {
|
|
237
|
-
//--- Loop for each frame of Routine 'readyMessage' ---
|
|
238
|
-
// get current time
|
|
239
|
-
t = readyMessageClock.getTime();
|
|
240
|
-
frameN = frameN + 1;// number of completed frames (so 0 is the first frame)
|
|
241
|
-
// update/draw components on each frame
|
|
242
|
-
|
|
243
|
-
// *textbox* updates
|
|
244
|
-
if (t >= 0.0 && textbox.status === PsychoJS.Status.NOT_STARTED) {
|
|
245
|
-
// keep track of start time/frame for later
|
|
246
|
-
textbox.tStart = t; // (not accounting for frame time here)
|
|
247
|
-
textbox.frameNStart = frameN; // exact frame index
|
|
248
|
-
|
|
249
|
-
textbox.setAutoDraw(true);
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
frameRemains = 0.0 + 1.0 - psychoJS.window.monitorFramePeriod * 0.75; // most of one frame period left
|
|
253
|
-
if (textbox.status === PsychoJS.Status.STARTED && t >= frameRemains) {
|
|
254
|
-
textbox.setAutoDraw(false);
|
|
255
|
-
}
|
|
256
|
-
// check for quit (typically the Esc key)
|
|
257
|
-
if (psychoJS.experiment.experimentEnded || psychoJS.eventManager.getKeys({keyList:['escape']}).length > 0) {
|
|
258
|
-
return quitPsychoJS('The [Escape] key was pressed. Goodbye!', false);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
// check if the Routine should terminate
|
|
262
|
-
if (!continueRoutine) { // a component has requested a forced-end of Routine
|
|
263
|
-
return Scheduler.Event.NEXT;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
continueRoutine = false; // reverts to True if at least one component still running
|
|
267
|
-
readyMessageComponents.forEach( function(thisComponent) {
|
|
268
|
-
if ('status' in thisComponent && thisComponent.status !== PsychoJS.Status.FINISHED) {
|
|
269
|
-
continueRoutine = true;
|
|
270
|
-
}
|
|
271
|
-
});
|
|
272
|
-
|
|
273
|
-
// refresh the screen if continuing
|
|
274
|
-
if (continueRoutine && routineTimer.getTime() > 0) {
|
|
275
|
-
return Scheduler.Event.FLIP_REPEAT;
|
|
276
|
-
} else {
|
|
277
|
-
return Scheduler.Event.NEXT;
|
|
278
|
-
}
|
|
279
|
-
};
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
function readyMessageRoutineEnd() {
|
|
284
|
-
return async function () {
|
|
285
|
-
//--- Ending Routine 'readyMessage' ---
|
|
286
|
-
readyMessageComponents.forEach( function(thisComponent) {
|
|
287
|
-
if (typeof thisComponent.setAutoDraw === 'function') {
|
|
288
|
-
thisComponent.setAutoDraw(false);
|
|
289
|
-
}
|
|
290
|
-
});
|
|
291
|
-
return Scheduler.Event.NEXT;
|
|
292
|
-
};
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
var trialComponents;
|
|
297
|
-
function trialRoutineBegin(snapshot) {
|
|
298
|
-
return async function () {
|
|
299
|
-
TrialHandler.fromSnapshot(snapshot); // ensure that .thisN vals are up to date
|
|
300
|
-
|
|
301
|
-
//--- Prepare to start Routine 'trial' ---
|
|
302
|
-
t = 0;
|
|
303
|
-
trialClock.reset(); // clock
|
|
304
|
-
frameN = -1;
|
|
305
|
-
continueRoutine = true; // until we're told otherwise
|
|
306
|
-
routineTimer.add(1.500000);
|
|
307
|
-
// update component parameters for each repeat
|
|
308
|
-
image.setImage(stimFile);
|
|
309
|
-
// keep track of which components have finished
|
|
310
|
-
trialComponents = [];
|
|
311
|
-
trialComponents.push(image);
|
|
312
|
-
|
|
313
|
-
trialComponents.forEach( function(thisComponent) {
|
|
314
|
-
if ('status' in thisComponent)
|
|
315
|
-
thisComponent.status = PsychoJS.Status.NOT_STARTED;
|
|
316
|
-
});
|
|
317
|
-
return Scheduler.Event.NEXT;
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
function trialRoutineEachFrame() {
|
|
323
|
-
return async function () {
|
|
324
|
-
//--- Loop for each frame of Routine 'trial' ---
|
|
325
|
-
// get current time
|
|
326
|
-
t = trialClock.getTime();
|
|
327
|
-
frameN = frameN + 1;// number of completed frames (so 0 is the first frame)
|
|
328
|
-
// update/draw components on each frame
|
|
329
|
-
|
|
330
|
-
// *image* updates
|
|
331
|
-
if (t >= 0.5 && image.status === PsychoJS.Status.NOT_STARTED) {
|
|
332
|
-
// keep track of start time/frame for later
|
|
333
|
-
image.tStart = t; // (not accounting for frame time here)
|
|
334
|
-
image.frameNStart = frameN; // exact frame index
|
|
335
|
-
|
|
336
|
-
image.setAutoDraw(true);
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
frameRemains = 0.5 + 1.0 - psychoJS.window.monitorFramePeriod * 0.75; // most of one frame period left
|
|
340
|
-
if (image.status === PsychoJS.Status.STARTED && t >= frameRemains) {
|
|
341
|
-
image.setAutoDraw(false);
|
|
342
|
-
}
|
|
343
|
-
// check for quit (typically the Esc key)
|
|
344
|
-
if (psychoJS.experiment.experimentEnded || psychoJS.eventManager.getKeys({keyList:['escape']}).length > 0) {
|
|
345
|
-
return quitPsychoJS('The [Escape] key was pressed. Goodbye!', false);
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
// check if the Routine should terminate
|
|
349
|
-
if (!continueRoutine) { // a component has requested a forced-end of Routine
|
|
350
|
-
return Scheduler.Event.NEXT;
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
continueRoutine = false; // reverts to True if at least one component still running
|
|
354
|
-
trialComponents.forEach( function(thisComponent) {
|
|
355
|
-
if ('status' in thisComponent && thisComponent.status !== PsychoJS.Status.FINISHED) {
|
|
356
|
-
continueRoutine = true;
|
|
357
|
-
}
|
|
358
|
-
});
|
|
359
|
-
|
|
360
|
-
// refresh the screen if continuing
|
|
361
|
-
if (continueRoutine && routineTimer.getTime() > 0) {
|
|
362
|
-
return Scheduler.Event.FLIP_REPEAT;
|
|
363
|
-
} else {
|
|
364
|
-
return Scheduler.Event.NEXT;
|
|
365
|
-
}
|
|
366
|
-
};
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
function trialRoutineEnd() {
|
|
371
|
-
return async function () {
|
|
372
|
-
//--- Ending Routine 'trial' ---
|
|
373
|
-
trialComponents.forEach( function(thisComponent) {
|
|
374
|
-
if (typeof thisComponent.setAutoDraw === 'function') {
|
|
375
|
-
thisComponent.setAutoDraw(false);
|
|
376
|
-
}
|
|
377
|
-
});
|
|
378
|
-
return Scheduler.Event.NEXT;
|
|
379
|
-
};
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
function endLoopIteration(scheduler, snapshot) {
|
|
384
|
-
// ------Prepare for next entry------
|
|
385
|
-
return async function () {
|
|
386
|
-
if (typeof snapshot !== 'undefined') {
|
|
387
|
-
// ------Check if user ended loop early------
|
|
388
|
-
if (snapshot.finished) {
|
|
389
|
-
// Check for and save orphaned data
|
|
390
|
-
if (psychoJS.experiment.isEntryEmpty()) {
|
|
391
|
-
psychoJS.experiment.nextEntry(snapshot);
|
|
392
|
-
}
|
|
393
|
-
scheduler.stop();
|
|
394
|
-
} else {
|
|
395
|
-
const thisTrial = snapshot.getCurrentTrial();
|
|
396
|
-
if (typeof thisTrial === 'undefined' || !('isTrials' in thisTrial) || thisTrial.isTrials) {
|
|
397
|
-
psychoJS.experiment.nextEntry(snapshot);
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
return Scheduler.Event.NEXT;
|
|
401
|
-
}
|
|
402
|
-
};
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
function importConditions(currentLoop) {
|
|
407
|
-
return async function () {
|
|
408
|
-
psychoJS.importAttributes(currentLoop.getCurrentTrial());
|
|
409
|
-
return Scheduler.Event.NEXT;
|
|
410
|
-
};
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
async function quitPsychoJS(message, isCompleted) {
|
|
415
|
-
// Check for and save orphaned data
|
|
416
|
-
if (psychoJS.experiment.isEntryEmpty()) {
|
|
417
|
-
psychoJS.experiment.nextEntry();
|
|
418
|
-
}
|
|
419
|
-
psychoJS.window.close();
|
|
420
|
-
psychoJS.quit({message: message, isCompleted: isCompleted});
|
|
421
|
-
|
|
422
|
-
return Scheduler.Event.QUIT;
|
|
423
|
-
}
|