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/CHANGELOG.txt
CHANGED
|
@@ -15,6 +15,210 @@ to run on the same PsychoPy version even where a different version is installed
|
|
|
15
15
|
That setting often even allows PsychoPy to run experiments from versions that have not yet
|
|
16
16
|
been installed! If the dependencies haven't changed it will run.
|
|
17
17
|
|
|
18
|
+
|
|
19
|
+
PsychoPy 2024.2
|
|
20
|
+
-----------------
|
|
21
|
+
|
|
22
|
+
Although there are many changes and therefore potential for some slight changes in behaviour we have focussed more this release on just making existing functionality smoother rather than adding new big fetaures.
|
|
23
|
+
|
|
24
|
+
PsychoPy 2024.2.0
|
|
25
|
+
~~~~~~~~~~~~~~~~~
|
|
26
|
+
|
|
27
|
+
**New and Improved 🎉:**
|
|
28
|
+
|
|
29
|
+
* Added "force nonslip" parameter to Routine Settings so that you can now use non-slip timing for a Routine using a variable by @TEParsons in #6603
|
|
30
|
+
* Fix opacity not applying properly to border colors by @TEParsons in #6704
|
|
31
|
+
* User can set the online end message from Builder rather than relying on JS default by @TEParsons in #6258
|
|
32
|
+
* Performance improvements for MovieStim (parituclarly noticeable for larger videos) by @aforren1 in #6449
|
|
33
|
+
* Added functions to MicrophoneDevice to continuously monitor volume by @TEParsons in #6444
|
|
34
|
+
* Added function to check whether a speaker is working by @TEParsons in #6446
|
|
35
|
+
* Builder can now set logging level for app console, independently of log file by @TEParsons in #6510
|
|
36
|
+
* Added Keyboard.getState() to get current state of a key by @TEParsons in #6537
|
|
37
|
+
* Added text-to-speech synthesis by @mdcutone in #6588
|
|
38
|
+
* Eyetracking: Various fixes to plugin- and eyetracker-detection by @TEParsons @mdcutone @EyeLogicSolutions @mh105 @KirstenWilliams
|
|
39
|
+
* Eyetracking: New support for EyeLogic Solutions eyetrackers with plugin (alongside existing Tobii, SRR, Pupil Labs, and Gazepoint support)
|
|
40
|
+
* Eyetracking: Fixes and more flexible settings for calibration routines @KirstenWilliams @mdcutone @EyeLogicSolutions @TEParsons @RebeccaHirst
|
|
41
|
+
* Eyetracking: can now save dwell times from ROI component by @RebeccaHirst in #6500
|
|
42
|
+
* If storing all valid mouse clicks, still show invalid clicks explicitly in the list as `None` (or `Null` online) e.g. [None, "foil", "target"] for 3 clicks ending in target by @TEParsons in #6516 #6548
|
|
43
|
+
* Some loops/form/counterbalance were not fetching the correct xlsx templates by @TEParsons in #6514
|
|
44
|
+
* Implement orientation parameter for TextBox2 by @TEParsons in #6513
|
|
45
|
+
* New changelog dialog on app start by @TEParsons in #6445
|
|
46
|
+
* Improved error message for iohub connection error (issue #1226) by @MarkellaEgglezou in #6354
|
|
47
|
+
* Visual stimuli now `draggable` attribute accessible from Builder by @TEParsons in #6337
|
|
48
|
+
* Improved TrialHandler2 for more flexible adding/cancelling and retrieving info about trials @TEParsons in #6425 #6408 #6590
|
|
49
|
+
* Using PhotoDiodes Components in experiments (e.g. in BBTK T-pad) #6432 #6442
|
|
50
|
+
* Provide PsychoPy experiment filename to the ioHub server by @mh105 in #6555
|
|
51
|
+
* Allow experiment to pause on the current frame by @TEParsons in #6584
|
|
52
|
+
* Allow plugins to be uninstalled via the manager by @mdcutone in #6587
|
|
53
|
+
* Store/update Routine parameters live in an object, rather than hardcoding them to the experiment file by @TEParsons in #6597
|
|
54
|
+
* Make save speech onset/offset only available to supporting transcribers by @kimDundas in #6672
|
|
55
|
+
|
|
56
|
+
**🐛 Bug Fixes:**
|
|
57
|
+
|
|
58
|
+
* Fixed error sampling microphone volume even when buffer is full by @TEParsons in #6488
|
|
59
|
+
* Fixed plugins page sometimes failed to load cached plugins file due to encoding error by @peircej in #6428
|
|
60
|
+
* Fixed the launch of PsychoPy App on conda envs without pythonw by @mh105 in #6436
|
|
61
|
+
* Allowed Static Component to update params by @TEParsons in #6462
|
|
62
|
+
* Fixed TextStim letter height wasn't settable each frame/Routine in JS by @TEParsons in #6511
|
|
63
|
+
* Fixed check for pythonw executable on macOS in psychopyApp.py by @mh105 in #6521
|
|
64
|
+
* Fixed .js file not being found when using "Use version" (removed _legacy from suffix) by @RebeccaHirst in #6515
|
|
65
|
+
* Hide dollar sign on start/stop controls when one is hidden by @TEParsons in #6528
|
|
66
|
+
* Removed unused %s string format in MenuFrame to avoid unrecognized accel key by @mh105 in #6523
|
|
67
|
+
* Remove incorrect code on removing eyetracker generated by builder by @mh105 in #6526
|
|
68
|
+
* Fixed import backend_pysound after module name change by @mh105 in #6524
|
|
69
|
+
* Caught AttributeError for sound.getDevices() when opening PreferenceDlg by @mh105 in #6522
|
|
70
|
+
* Unregister event monitors during iohub calibration by @mh105 in #6466
|
|
71
|
+
* Fixed plugin discovery algorithm not finding user package entry points correctly by @mdcutone in #6539
|
|
72
|
+
* Allow enough time for all ioHub device._close() to finish by @mh105 in #6540
|
|
73
|
+
* Use default speaker device if index is default by @mh105 in #6538
|
|
74
|
+
* Fixed eyetracker record stop/start by @TEParsons in #6545
|
|
75
|
+
* Fixed duplicate dependency install on MacOS and package installation in virtual environments by @mdcutone in #6529
|
|
76
|
+
* Fixed size and pos of Line by @TEParsons in #6543 and @mh105 in #6525
|
|
77
|
+
* Fied bug setting Sound in static period online by @TEParsons in #6546
|
|
78
|
+
* Fixed ioHub finding eyetracker configuration files by @TEParsons in #6547
|
|
79
|
+
* Fixed the issue that speaker index could jump over integers by @mh105 in #6559
|
|
80
|
+
* Fixed crash when mono is specified if the microphone device expects stereo as default by @mdcutone in #6564
|
|
81
|
+
* Fixed csv conditions file loading by @TEParsons in #6552
|
|
82
|
+
* Get correct speech onset/offset times and write them to data file by @mdcutone in #6566
|
|
83
|
+
* Fixed dict keys for setting sample filter levels by @mh105 in #6554
|
|
84
|
+
* Add default duration to eyetracker record component by @RebeccaHirst in #6599
|
|
85
|
+
* Remove second whisper option from mic transcriber backend drop down by @RebeccaHirst in #6604
|
|
86
|
+
* Fixed remove the use of currentlyRecording in EyetrackerControl by @mh105 in #6567
|
|
87
|
+
* Fixed syntax for mic max recording parameter by @RebeccaHirst in #6598
|
|
88
|
+
* Decouple setting status from triggering playback/clock resets/etc. by @TEParsons in #6562
|
|
89
|
+
* Fixed starting and stopping times for EyetrackerRecordComponent by @mh105 in #6607
|
|
90
|
+
* Don't change self.param in getStartAndDuration of et component by @mh105 in #6615
|
|
91
|
+
* Typo in JS boilerplate (True rather than true) by @wakecarter in #6625
|
|
92
|
+
* Builder: Ensure frame rate is stored. by @aforren1 in #6619
|
|
93
|
+
* Allow Sound to stop on a condition rather than just time by @TEParsons in #6631
|
|
94
|
+
* Fix `obj.contains is not a function` error in JS by @TEParsons in #6635
|
|
95
|
+
* Enable correct behavior of entry-points to load eyetrackers by @mh105 in #6610
|
|
96
|
+
* Movie component Volume inputType should be single instead of float by @mh105 in #6643
|
|
97
|
+
* Use inspect.getfile to check path of plugin entry points by @mh105 in #6660
|
|
98
|
+
* UI wasn't fully refreshing after changing theme by @TEParsons in #6673
|
|
99
|
+
* Coder GUI fixes by @aforren1 in #6678
|
|
100
|
+
* Allow keyboard allowedKeys to be set as an int by @TEParsons in #6676
|
|
101
|
+
* Enable mouse clickable from variable when running online by @RebeccaHirst in #6668
|
|
102
|
+
* Fixed crash when `clearEvents(device_label=None)` by @mdcutone in #6669
|
|
103
|
+
* Fix JS translation of `.pop()` when there's no index by @TEParsons in #6651
|
|
104
|
+
* Allow polygon outline opacity to be persistent across frames by @mdcutone in #6657
|
|
105
|
+
* Sound Component code was using the wrong set function name in JS by @TEParsons in #6649
|
|
106
|
+
* Fixed files being marked as modified as soon as opened by @TEParsons in #6679
|
|
107
|
+
* Re-add distro as a runtime dependency for linux & remove deprecated function. by @aforren1 in #6686
|
|
108
|
+
* Save mouse.corr for online studies by @RebeccaHirst in #6701
|
|
109
|
+
* Creating project from ribbon raised error by @TEParsons in #6706
|
|
110
|
+
* Plugin Components weren't recognised if experiment loaded with app by @TEParsons in #6707
|
|
111
|
+
* Original types for "UnknownPluginComponent"s were being lost after loading and saving again by @TEParsons in #6708
|
|
112
|
+
* Start/Stop controls had lost their tooltip by @TEParsons in #6711
|
|
113
|
+
* Update flow button style when switching theme by @TEParsons in #6712
|
|
114
|
+
* Conditions file wasn't updated when chosen from file browser for multistair loops by @TEParsons in #6714
|
|
115
|
+
* Save to the color cache when rendering. by @aforren1 in #6720
|
|
116
|
+
* BF/RF: Code to load Builder-relevant entry points was broken and obsolete by @TEParsons in #6717
|
|
117
|
+
* maxDurationReached in Routine Settings False should be false online by @wakecarter in #6724
|
|
118
|
+
* fix trial data writing when there are multiple key presses including None by @mh105 in #6718
|
|
119
|
+
* Fixed units for mouse gaze calibration targets (pix -> height) by @KirstenWilliams in #6443
|
|
120
|
+
* Standardise `tDown` attribute between ioHub and ptb Keyboard backends (follow ioHub behaviour) by @TEParsons in #6417
|
|
121
|
+
* Improved audio resampling method by @mdcutone in #6605
|
|
122
|
+
* Change iohub port to avoid conflicts with Whisper transcription by @mdcutone in #6661
|
|
123
|
+
* Fixed 'best match' mic settings not being used to init recording buffer by @mdcutone in #6670
|
|
124
|
+
* Prompt user to reconsider if they try to close plugin window mid-install by @TEParsons in #6705
|
|
125
|
+
|
|
126
|
+
## 📓 Docs & Demos
|
|
127
|
+
* Create hdf5_2_csv by @KirstenWilliams in #6508
|
|
128
|
+
* make a note that writeRoutineEndCode does not save onset/offset times by @mh105 in #6571
|
|
129
|
+
* Add demo for Button Box Component by @TEParsons in #6716
|
|
130
|
+
|
|
131
|
+
## Translations
|
|
132
|
+
* Arabic: new by @Ahmad-Abudoush @Ahmad-Ramy in #6634 #6638 #6636 #6674 and with DeepL by @peircej in #6641
|
|
133
|
+
* Portugese: new by @joana-quarenta in #6662 #6665 #6690
|
|
134
|
+
* Japanese: updates by @hsogo in #6654
|
|
135
|
+
* Spanish: es-co, es_es and es_us now completed by @carosamu in #6541 #6577
|
|
136
|
+
|
|
137
|
+
## New Contributors
|
|
138
|
+
* @MarkellaEgglezou made their first contribution in #6354
|
|
139
|
+
* @xjlc made their first contribution in #6570
|
|
140
|
+
* @EyeLogicSolutions made their first contribution in #6586
|
|
141
|
+
* @Ahmad-Ramy made their first contribution in #6636
|
|
142
|
+
* @mabuhayeh made their first contribution in #6638
|
|
143
|
+
* @joana-quarenta made their first contribution in #6662
|
|
144
|
+
|
|
145
|
+
**Full Changelog**: https://github.com/psychopy/psychopy/compare/2024.1.5...2024.2.0
|
|
146
|
+
|
|
147
|
+
PsychoPy 2024.2.1
|
|
148
|
+
~~~~~~~~~~~~~~~~~
|
|
149
|
+
|
|
150
|
+
**🐛 Bug Fixes:**
|
|
151
|
+
|
|
152
|
+
* TrialHandler2 was starting `thisRepsN` at 1 rather than 0 by @TEParsons in https://github.com/psychopy/psychopy/pull/6747
|
|
153
|
+
* The py3.10 standalone app failed to launch on macos-arm chips (due to broken `tables` release 0.9.2)
|
|
154
|
+
* Updated translations for Spanish variants by @carosamu in #6763 #6737
|
|
155
|
+
* Fixed a typo in Trials routine template .psyexp file by @mh105 in https://github.com/psychopy/psychopy/pull/6738
|
|
156
|
+
* Set MovieComponent.status to FINISHED when playback finishes by @mh105 in https://github.com/psychopy/psychopy/pull/6740
|
|
157
|
+
|
|
158
|
+
**Full Changelog**: https://github.com/psychopy/psychopy/compare/2024.2.0...2024.2.1
|
|
159
|
+
|
|
160
|
+
PsychoPy 2024.2.2
|
|
161
|
+
~~~~~~~~~~~~~~~~~
|
|
162
|
+
|
|
163
|
+
**🐛 Bug Fixes:**
|
|
164
|
+
|
|
165
|
+
* Fix ribbon buttons showing label on Mac by @TEParsons in #6767
|
|
166
|
+
* Builder files were marked as modified as soon as opened by @TEParsons in #6778
|
|
167
|
+
* Builder getting start/stop times when using non-slip timing by @mh105 in #6739
|
|
168
|
+
* Restore backwards-compatability to `psychopy.gui.dlg` by @TEParsons in #6792
|
|
169
|
+
* Routines were still writing their end experiment code in JS even when removed from the flow by @TEParsons in #6780
|
|
170
|
+
* Fix whisper transcriber sometimes being initialised twice (and breaking as a result) by @TEParsons in #6796
|
|
171
|
+
* DlgFromDict was erroneously adding keys when given "order" or "fixed" by @TEParsons in #6818
|
|
172
|
+
* Make output of Dlg.show backwards compatible with older versions by @TEParsons in #6809 #6792
|
|
173
|
+
* pyglet controls of macOS NSWindow with multiple screens by @mh105 in #6799
|
|
174
|
+
* Fixed detection of installed packages in standalone app for py3.10 by @mh105 in #6771
|
|
175
|
+
* Smoother output from background jobs to stdout by @mh105 in #6833
|
|
176
|
+
|
|
177
|
+
**Full Changelog**: https://github.com/psychopy/psychopy/compare/2024.2.1...2024.2.2
|
|
178
|
+
|
|
179
|
+
PsychoPy 2024.2.3
|
|
180
|
+
~~~~~~~~~~~~~~~~~
|
|
181
|
+
|
|
182
|
+
**🐛 Bug Fixes:**
|
|
183
|
+
|
|
184
|
+
* Fixed machine-specific crashing of the app on launch for MacOS by building app bundle with setuptools==70.3.0 by @peircej in https://github.com/psychopy/psychopy/pull/6901
|
|
185
|
+
* Fix routine clock resetting in JS by @TEParsons in https://github.com/psychopy/psychopy/pull/6861
|
|
186
|
+
* Fix default audio device not being found by @TEParsons in https://github.com/psychopy/psychopy/pull/6863
|
|
187
|
+
* Fix error writing Polygon initial colors in JS by @TEParsons in https://github.com/psychopy/psychopy/pull/6865
|
|
188
|
+
* ensure window focus for the first `win.flip()` with pyglet backend on Windows OS by @mh105 in https://github.com/psychopy/psychopy/pull/6874 and https://github.com/psychopy/psychopy/pull/6876
|
|
189
|
+
* fix startView across OS platforms that opens psychopyApp.py by @mh105 in https://github.com/psychopy/psychopy/pull/6869
|
|
190
|
+
* if PsychoPy version includes "postN" then strip from PsychoJS version number by @peircej in https://github.com/psychopy/psychopy/pull/6873
|
|
191
|
+
* Handle when record of last open app windows is an invalid value (e.g. from old version) by @TEParsons in https://github.com/psychopy/psychopy/pull/6885
|
|
192
|
+
* suppress pip version check in package manager by @mh105 in https://github.com/psychopy/psychopy/pull/6868
|
|
193
|
+
* Added beta sticker to Counterbalance Component icon by @TEParsons in https://github.com/psychopy/psychopy/pull/6890
|
|
194
|
+
* Counterbalance Routine conditions file chooser wasn't updating the value properly by @TEParsons in https://github.com/psychopy/psychopy/pull/6892
|
|
195
|
+
* Silence unnecessary warning about unrecognised params by @TEParsons in https://github.com/psychopy/psychopy/pull/6896
|
|
196
|
+
* moviepy and egi_pynetstation now included in standalone not as a plugin by @peircej in https://github.com/psychopy/psychopy/pull/6905
|
|
197
|
+
|
|
198
|
+
**Full Changelog**: https://github.com/psychopy/psychopy/compare/2024.2.2...2024.2.3
|
|
199
|
+
|
|
200
|
+
PsychoPy 2024.2.4
|
|
201
|
+
~~~~~~~~~~~~~~~~~
|
|
202
|
+
|
|
203
|
+
**🐛 Bug Fixes:**
|
|
204
|
+
|
|
205
|
+
* Recreate .js file on run when piloting in JS by @TEParsons in #6920
|
|
206
|
+
* App failing to start on MacOS if all windows closed on last app close by @peircej in #6926
|
|
207
|
+
* Fix nonslip timing issue in Builder-generated PsychoJS code by @TEParsons in #6921
|
|
208
|
+
|
|
209
|
+
**Full Changelog**: https://github.com/psychopy/psychopy/compare/2024.2.3...2024.2.4
|
|
210
|
+
|
|
211
|
+
PsychoPy 2024.2.5
|
|
212
|
+
~~~~~~~~~~~~~~~~~
|
|
213
|
+
|
|
214
|
+
**🐛 Bug Fixes:**
|
|
215
|
+
|
|
216
|
+
* ioHub process was not cleanly exiting and then causing a crash on subsequent attempts to run @mh105 and @mdcutone in #6949 and #6938
|
|
217
|
+
* Sending experiment to Runner was sometimes (incorrectly) toggling pilot/run mode by @TEParsons in #6945
|
|
218
|
+
* Arabic Translation_update by @Ahmad-Abudoush in #6959
|
|
219
|
+
|
|
220
|
+
**Full Changelog**: https://github.com/psychopy/psychopy/compare/2024.2.4...2024.2.5
|
|
221
|
+
|
|
18
222
|
PsychoPy 2024.1
|
|
19
223
|
-----------------
|
|
20
224
|
|
|
@@ -834,11 +1038,11 @@ PsychoPy 2021.1
|
|
|
834
1038
|
|
|
835
1039
|
The first major release of 2021 brings a lot of fixes (the dev team is focussing heavily on making the user experience more smooth at the moment).
|
|
836
1040
|
|
|
837
|
-
On top of those fixes are a number of useful additions though, like the new :ref:`
|
|
1041
|
+
On top of those fixes are a number of useful additions though, like the new :ref:`buttoncomponent`.
|
|
838
1042
|
|
|
839
1043
|
NEW:
|
|
840
1044
|
|
|
841
|
-
- Builder has a :ref:`
|
|
1045
|
+
- Builder has a :ref:`buttoncomponent` to make it easier to have clickable image/text objects
|
|
842
1046
|
- Builder: Improved layout of Component dialogs:
|
|
843
1047
|
|
|
844
1048
|
- Consistent tabs for common parameters (like pos, size, color...)
|
|
@@ -2395,7 +2599,7 @@ PsychoPy 1.78.00
|
|
|
2395
2599
|
|
|
2396
2600
|
Released: Aug 2013
|
|
2397
2601
|
|
|
2398
|
-
* ADDED: option to preload during Builder scripts using :ref:`
|
|
2602
|
+
* ADDED: option to preload during Builder scripts using :ref:`staticcomponent`, which uses :class:`~psychopy.core.StaticPeriod` class
|
|
2399
2603
|
* ADDED: Polygon Component to Builder for drawing regular polygons (including simple lines)
|
|
2400
2604
|
* ADDED: TrialHander can now fetch previous trials as well as future ones (thanks Mike MacAskill)
|
|
2401
2605
|
* ADDED: BufferImageStim accepts mask and pos params (thanks Jeremy)
|
|
@@ -2760,7 +2964,7 @@ PsychoPy 1.70.00
|
|
|
2760
2964
|
*NB This version introduces a number of changes to Builder experiment files that will prevent files from this version being opened by earlier versions of PsychoPy*
|
|
2761
2965
|
|
|
2762
2966
|
* CHANGED use of allowedKeys in Keyboard Component. You used to be able to type `ynq` to get those keys, but this was confusing when you then needed `'space'` or `'left'` etc. Now you must type 'y','n','q', which makes it more obvious how to include 'space','left','right'...
|
|
2763
|
-
* CHANGED dot algorithm in DotStim. Previously the signalDots=same/different was using the opposite to Scase et al's terminology, now they match. Also the default method for noiseDots was 'position' and this has been changed to 'direction'. The documentation explaining the algorithms has been clarified. (see :ref:`
|
|
2967
|
+
* CHANGED dot algorithm in DotStim. Previously the signalDots=same/different was using the opposite to Scase et al's terminology, now they match. Also the default method for noiseDots was 'position' and this has been changed to 'direction'. The documentation explaining the algorithms has been clarified. (see :ref:`dotscomponent`)
|
|
2764
2968
|
* CHANGED `MovieStim.playing` property to be called `MovieStim.status` (in keeping with other stimuli)
|
|
2765
2969
|
* CHANGED names:
|
|
2766
2970
|
|
psychopy/LICENSE.txt
CHANGED
psychopy/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
2025.1.0
|
psychopy/__init__.py
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
|
|
4
4
|
# Part of the PsychoPy library
|
|
5
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
5
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
6
6
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
7
7
|
|
|
8
8
|
import os
|
|
@@ -61,18 +61,18 @@ if 'installing' not in locals():
|
|
|
61
61
|
if not useDefaultSite:
|
|
62
62
|
env = os.environ.copy()
|
|
63
63
|
if 'PYTHONPATH' in env: # append entries to existing PYTHONPATH
|
|
64
|
+
_userPackages = str(prefs.paths['packages'])
|
|
65
|
+
if _userPackages not in env['PYTHONPATH']:
|
|
66
|
+
env['PYTHONPATH'] = os.pathsep.join([
|
|
67
|
+
env['PYTHONPATH'], _userPackages])
|
|
64
68
|
_userSitePackages = str(prefs.paths['userPackages'])
|
|
65
69
|
if _userSitePackages not in env['PYTHONPATH']:
|
|
66
70
|
env['PYTHONPATH'] = os.pathsep.join([
|
|
67
71
|
env['PYTHONPATH'], _userSitePackages])
|
|
68
|
-
_userPackages = str(prefs.paths['packages'])
|
|
69
|
-
if _userPackages not in env['PYTHONPATH']:
|
|
70
|
-
env['PYTHONPATH'] = os.pathsep.join([
|
|
71
|
-
env['PYTHONPATH'], _userPackages])
|
|
72
72
|
else:
|
|
73
73
|
env['PYTHONPATH'] = os.pathsep.join([
|
|
74
|
-
str(prefs.paths['
|
|
75
|
-
str(prefs.paths['
|
|
74
|
+
str(prefs.paths['packages']),
|
|
75
|
+
str(prefs.paths['userPackages'])])
|
|
76
76
|
|
|
77
77
|
# set user site packages
|
|
78
78
|
env['PYTHONUSERBASE'] = prefs.paths['packages']
|
|
@@ -87,6 +87,9 @@ if 'installing' not in locals():
|
|
|
87
87
|
env['_PIP_USE_IMPORTLIB_METADATA'] = 'True'
|
|
88
88
|
|
|
89
89
|
# update environment, pass this to sub-processes (e.g. pip)
|
|
90
|
+
# make sure all environment variables are strings, sometimes these are
|
|
91
|
+
# pass as Path() objects
|
|
92
|
+
env = {k: str(v) for k, v in env.items()}
|
|
90
93
|
os.environ.update(env)
|
|
91
94
|
|
|
92
95
|
# make sure site knows about our custom user site-packages
|
psychopy/alerts/__init__.py
CHANGED
psychopy/alerts/_alerts.py
CHANGED
|
@@ -161,26 +161,62 @@ def alert(code=None, obj=object, strFields=None, trace=None):
|
|
|
161
161
|
cat=msg.cat,
|
|
162
162
|
msg=msg.msg,
|
|
163
163
|
trace=msg.trace))
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
# code=msg.code,
|
|
172
|
-
# cat=msg.cat,
|
|
173
|
-
# msg=msg.msg,
|
|
174
|
-
# trace=msg.trace))
|
|
175
|
-
|
|
176
|
-
# if a psychopy warning instead of a file-like stderr then pass a raw str
|
|
177
|
-
if hasattr(sys.stderr, 'receiveAlert'):
|
|
164
|
+
if len(_activeAlertHandlers):
|
|
165
|
+
# if we have any active handlers, send to them
|
|
166
|
+
for handler in _activeAlertHandlers:
|
|
167
|
+
# send alert
|
|
168
|
+
handler.receiveAlert(msg)
|
|
169
|
+
elif hasattr(sys.stderr, 'receiveAlert'):
|
|
170
|
+
# if there aren't any, but stdout can receive alerts, send to stdout
|
|
178
171
|
sys.stderr.receiveAlert(msg)
|
|
179
172
|
else:
|
|
180
|
-
#
|
|
173
|
+
# otherwise, just write as a string to stdout
|
|
181
174
|
sys.stderr.write(msgAsStr)
|
|
182
|
-
|
|
183
|
-
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def isAlertHandler(handler):
|
|
178
|
+
"""
|
|
179
|
+
Is the given handler an alert handler?
|
|
180
|
+
|
|
181
|
+
Parameters
|
|
182
|
+
----------
|
|
183
|
+
handler : ScriptOutputCtrl
|
|
184
|
+
Handler to query.
|
|
185
|
+
|
|
186
|
+
Returns
|
|
187
|
+
-------
|
|
188
|
+
bool
|
|
189
|
+
True if the given handler is an alert handler.
|
|
190
|
+
"""
|
|
191
|
+
return handler in _activeAlertHandlers
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
def addAlertHandler(handler):
|
|
195
|
+
"""
|
|
196
|
+
Add a handler to the list of active alert handlers.
|
|
197
|
+
|
|
198
|
+
Parameters
|
|
199
|
+
----------
|
|
200
|
+
handler : ScriptOutputCtrl
|
|
201
|
+
Handler to add.
|
|
202
|
+
"""
|
|
203
|
+
if not isAlertHandler(handler):
|
|
204
|
+
_activeAlertHandlers.append(handler)
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
def removeAlertHandler(handler):
|
|
208
|
+
"""
|
|
209
|
+
Remove a handler from the list of active alert handlers.
|
|
210
|
+
|
|
211
|
+
Parameters
|
|
212
|
+
----------
|
|
213
|
+
handler : ScriptOutputCtrl
|
|
214
|
+
Handler to remove.
|
|
215
|
+
"""
|
|
216
|
+
if isAlertHandler(handler):
|
|
217
|
+
_activeAlertHandlers.pop(
|
|
218
|
+
_activeAlertHandlers.index(handler)
|
|
219
|
+
)
|
|
184
220
|
|
|
185
221
|
|
|
186
222
|
# Create catalog
|
psychopy/alerts/_errorHandler.py
CHANGED
|
@@ -2,11 +2,9 @@
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
|
|
4
4
|
# Part of the PsychoPy library
|
|
5
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
5
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
6
6
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
7
7
|
|
|
8
|
-
from ._alerts import _activeAlertHandlers
|
|
9
|
-
|
|
10
8
|
|
|
11
9
|
class _BaseErrorHandler:
|
|
12
10
|
"""A base class for handling PsychoPy alerts and exceptions.
|
|
@@ -17,7 +15,6 @@ class _BaseErrorHandler:
|
|
|
17
15
|
self.alerts = []
|
|
18
16
|
self.alwaysReceive = alwaysReceive
|
|
19
17
|
self.autoFlush = autoFlush
|
|
20
|
-
_activeAlertHandlers.append(self)
|
|
21
18
|
|
|
22
19
|
def write(self, toWrite):
|
|
23
20
|
"""This is needed for any Python Exceptions, which assume the stderr
|
|
@@ -46,6 +43,8 @@ class _BaseErrorHandler:
|
|
|
46
43
|
A data object containing alert information.
|
|
47
44
|
"""
|
|
48
45
|
self.alerts.append(alert)
|
|
46
|
+
if self.autoFlush:
|
|
47
|
+
self.flush()
|
|
49
48
|
|
|
50
49
|
def __del__(self):
|
|
51
50
|
self.flush()
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# The first key-value pair is used for the alerts package
|
|
2
|
+
|
|
3
|
+
code: 3210
|
|
4
|
+
cat: Audio
|
|
5
|
+
msg: Speaker {deviceName} is set to "Exclusive low latency" mode. As resampling is enabled, this mode has little benefit over "Shared low latency" mode, with some drawbacks.
|
|
6
|
+
|
|
7
|
+
# The following are typically used for online help pages, and support reStructured Text.
|
|
8
|
+
|
|
9
|
+
label: Exclusive latency mode
|
|
10
|
+
|
|
11
|
+
synopsis: |
|
|
12
|
+
Speaker is set to "Exclusive low latency" mode. As resampling is enabled, this mode has little benefit over "Shared low latency" mode, with some drawbacks.
|
|
13
|
+
|
|
14
|
+
details: |
|
|
15
|
+
"Exclusive low latency" mode differs from "Shared low latency" mode in two ways:
|
|
16
|
+
- PsychoPy will take exclusive control of the speaker, meaning that other apps won't be able to access it while your experiment is running, and may crash.
|
|
17
|
+
- Because of this exclusive control, we have more flexibility in the range of sample rates which we can play on the speaker.
|
|
18
|
+
|
|
19
|
+
However, if "resampling" is ticked, then audio is automatically resampled to match the speaker's sample rate anyway, so "Exclusive low latency" offers little benefit over "Shared low latency".
|
|
20
|
+
|
|
21
|
+
solutions: |
|
|
22
|
+
If you actively want to prevent the speaker from being used by other applications (for example, you want to make sure the participant isn't playing music in the background), then no action is required and you can ignore this alert.
|
|
23
|
+
|
|
24
|
+
If you don't want this, then you most likely want "Shared low latency" mode instead.
|
|
25
|
+
|
|
26
|
+
versions: |
|
|
27
|
+
>2025.1.0
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
code: 3610
|
|
3
|
+
cat: Validation
|
|
4
|
+
msg: Multiple Components in the same Routine are validated by {validator}, please ensure that the timing of these Components do not overlap.
|
|
5
|
+
|
|
6
|
+
# The following are typically used for online help pages, and support reStructured Text.
|
|
7
|
+
label: Multiple Components in same Routine validated by same validator
|
|
8
|
+
|
|
9
|
+
synopsis: |
|
|
10
|
+
A validator can only validate one stimulus at a time, but it looks like you have multiple stimuli in the same Routine which are validated by the same validator. This may be fine, but you will need to be sure that they don't overlap in their timing.
|
|
11
|
+
|
|
12
|
+
details: |
|
|
13
|
+
A validator can only validate one stimulus at a time, as they only respond True/False for whether there's light/sound, not distinguishing between different sources. If you have two stimuli at the same time, then they will obscure the start/stop times of one another, meaning your validator will give the wrong results.
|
|
14
|
+
|
|
15
|
+
solutions: |
|
|
16
|
+
This may be fine! You just need to make sure that the multiple Components in the same Routine which are validated by the same validator aren't overlapping in their timing. If they're not, you can ignore this!
|
|
17
|
+
|
|
18
|
+
versions: |
|
|
19
|
+
>2025.1.0
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
code: 4130
|
|
3
|
+
cat: Timing
|
|
4
|
+
msg: Static Component `{name}` given infinite stop time
|
|
5
|
+
|
|
6
|
+
# The following are typically used for online help pages, and support reStructured Text.
|
|
7
|
+
label: Static Component given infinite stop time
|
|
8
|
+
|
|
9
|
+
synopsis: |
|
|
10
|
+
Static Component pauses the frame loop while it's active, meaning that unlike other Components, it needs to have a fixed stop time to know when to finish. Otherwise, the experiment will simply stall forever, even if there's code in the Each Frame tab of a Code Component to end the experiment / stop the Static Component (as the frame loop is paused, so Each Frame code isn't happening). You won't even be able to end the experiment with the ESCAPE key as this is checked each frame!
|
|
11
|
+
|
|
12
|
+
details: |
|
|
13
|
+
The only instance where you might want an infinite Static Component is if you're using threading, as threaded operations don't rely on a frame loop to execute their code. In this case, you can ignore this message. However, this is a rare and fairly advanced use case, so if the previous sentences sounded like jibberish, you almost certainly don't want an infinite Static Component!
|
|
14
|
+
|
|
15
|
+
solutions: |
|
|
16
|
+
Give your Static Component a fixed duration.
|
|
17
|
+
|
|
18
|
+
versions: |
|
|
19
|
+
All
|
|
@@ -25,8 +25,14 @@
|
|
|
25
25
|
cat: Visual
|
|
26
26
|
3110: Component duration less than 1 screen refresh
|
|
27
27
|
3115: Component start/stop times cannot sync with screen refresh
|
|
28
|
-
3200:
|
|
28
|
+
3200:
|
|
29
|
+
cat: Audio
|
|
30
|
+
3210: Exclusive latency mode
|
|
31
|
+
|
|
29
32
|
3400: Response
|
|
33
|
+
3600:
|
|
34
|
+
cat: Validation
|
|
35
|
+
3610: Multiple Components in same Routine validated by same validator
|
|
30
36
|
|
|
31
37
|
4000:
|
|
32
38
|
cat: Builder experiments
|
|
@@ -40,6 +46,7 @@
|
|
|
40
46
|
4115: Frames must be given as whole numbers
|
|
41
47
|
4120: Component stop duration with no start time
|
|
42
48
|
4125: Microphone given no stop duration
|
|
49
|
+
4130: Static Component given infinite stop time
|
|
43
50
|
4200:
|
|
44
51
|
cat: Code component syntax
|
|
45
52
|
4205: Python syntax error
|
|
@@ -76,7 +76,7 @@ _translate(
|
|
|
76
76
|
|
|
77
77
|
# Alert 4325
|
|
78
78
|
_translate(
|
|
79
|
-
"Font `{font} {style}` not available in weight `{weight}`, component `{name}` will default to
|
|
79
|
+
"Font `{font} {style}` not available in weight `{weight}`, component `{name}` will default to Noto Sans Regular.")
|
|
80
80
|
|
|
81
81
|
# Alert 4330
|
|
82
82
|
_translate(
|
psychopy/alerts/alerttools.py
CHANGED
|
@@ -5,9 +5,7 @@ from esprima import parseScript
|
|
|
5
5
|
|
|
6
6
|
from psychopy.tools import monitorunittools
|
|
7
7
|
from psychopy.alerts._alerts import alert
|
|
8
|
-
from psychopy.tools.fontmanager import FontManager
|
|
9
8
|
|
|
10
|
-
fontMGR = FontManager()
|
|
11
9
|
|
|
12
10
|
class TestWin:
|
|
13
11
|
"""
|
|
@@ -261,20 +259,6 @@ def testDisabled(component):
|
|
|
261
259
|
if component.params['disabled'].val:
|
|
262
260
|
alert(4305, component, strFields={'name': component.params['name']})
|
|
263
261
|
|
|
264
|
-
def testFont(component):
|
|
265
|
-
"""
|
|
266
|
-
Tests whether font is stored locally or whether it needs to be retrieved from Google Fonts
|
|
267
|
-
|
|
268
|
-
Parameters
|
|
269
|
-
----------
|
|
270
|
-
component: Component
|
|
271
|
-
The component used for testing
|
|
272
|
-
"""
|
|
273
|
-
if 'font' in component.params:
|
|
274
|
-
fontInfo = fontMGR.getFontsMatching(component.params['font'].val, fallback=False)
|
|
275
|
-
if not fontInfo:
|
|
276
|
-
alert(4320, strFields={'param': component.params['font']})
|
|
277
|
-
|
|
278
262
|
def testDollarSyntax(component):
|
|
279
263
|
"""
|
|
280
264
|
Tests that use of dollar signs in Builder components to denote literal interpretation are used correctly
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|