psychopy 2024.2.5__py3-none-any.whl → 2025.1.1__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 +4 -4
- psychopy/GIT_SHA +1 -1
- 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 +4 -4
- 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 +19 -7
- 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 +12 -5
- 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 +2 -2
- 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/Hardware/lab_streaming_layer/lsl_triggers_demo_legacy_legacy.psyexp +312 -0
- 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 +30 -9
- 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 +18 -5
- 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 +535 -155
- 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/devices/eyetracker/__init__.py +10 -18
- psychopy/iohub/devices/eyetracker/calibration/procedure.py +15 -33
- psychopy/iohub/devices/eyetracker/hw/gazepoint/__init__.py +2 -2
- psychopy/iohub/devices/eyetracker/hw/gazepoint/gp3/__init__.py +1 -0
- psychopy/iohub/devices/eyetracker/hw/gazepoint/gp3/eyetracker.py +10 -0
- psychopy/iohub/devices/eyetracker/hw/pupil_labs/neon/__init__.py +1 -0
- psychopy/iohub/devices/mouse/linux2.py +2 -1
- 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_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_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/__init__.py +0 -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 +2967 -559
- 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 +4 -2
- 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 +374 -201
- psychopy/web.py +1 -1
- {psychopy-2024.2.5.dist-info → psychopy-2025.1.1.dist-info}/METADATA +13 -12
- {psychopy-2024.2.5.dist-info → psychopy-2025.1.1.dist-info}/RECORD +647 -624
- {psychopy-2024.2.5.dist-info → psychopy-2025.1.1.dist-info}/WHEEL +1 -1
- 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/ar_001/.DS_Store +0 -0
- psychopy/app/locale/ar_001/LC_MESSAGE/.DS_Store +0 -0
- psychopy/core.py.orig +0 -169
- psychopy/demos/builder/.DS_Store +0 -0
- 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/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_lastrun.py +0 -562
- 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/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/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/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/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/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/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.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.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-2024.2.5.dist-info → psychopy-2025.1.1.dist-info}/entry_points.txt +0 -0
- {psychopy-2024.2.5.dist-info → psychopy-2025.1.1.dist-info}/licenses/LICENSE +0 -0
|
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
|
|
@@ -53,7 +53,6 @@
|
|
|
53
53
|
<Param val="CONTINUOUS" valType="str" updates="None" name="mgMove"/>
|
|
54
54
|
<Param val="0.5" valType="num" updates="None" name="mgSaccade"/>
|
|
55
55
|
<Param val="0.6" valType="num" updates="None" name="plConfidenceThreshold"/>
|
|
56
|
-
<Param val="True" valType="bool" updates="None" name="plPupilCaptureRecordingEnabled"/>
|
|
57
56
|
<Param val="" valType="str" updates="None" name="plPupilCaptureRecordingLocation"/>
|
|
58
57
|
<Param val="127.0.0.1" valType="str" updates="None" name="plPupilRemoteAddress"/>
|
|
59
58
|
<Param val="50020" valType="num" updates="None" name="plPupilRemotePort"/>
|
|
@@ -53,7 +53,6 @@
|
|
|
53
53
|
<Param val="CONTINUOUS" valType="str" updates="None" name="mgMove"/>
|
|
54
54
|
<Param val="0.5" valType="num" updates="None" name="mgSaccade"/>
|
|
55
55
|
<Param val="0.6" valType="num" updates="None" name="plConfidenceThreshold"/>
|
|
56
|
-
<Param val="True" valType="bool" updates="None" name="plPupilCaptureRecordingEnabled"/>
|
|
57
56
|
<Param val="" valType="str" updates="None" name="plPupilCaptureRecordingLocation"/>
|
|
58
57
|
<Param val="127.0.0.1" valType="str" updates="None" name="plPupilRemoteAddress"/>
|
|
59
58
|
<Param val="50020" valType="num" updates="None" name="plPupilRemotePort"/>
|
|
@@ -59,9 +59,7 @@
|
|
|
59
59
|
<Param val="0.5" valType="num" updates="None" name="mgSaccade"/>
|
|
60
60
|
<Param val="neon.local" valType="str" updates="None" name="plCompanionAddress"/>
|
|
61
61
|
<Param val="8080" valType="num" updates="None" name="plCompanionPort"/>
|
|
62
|
-
<Param val="True" valType="bool" updates="None" name="plCompanionRecordingEnabled"/>
|
|
63
62
|
<Param val="0.6" valType="num" updates="None" name="plConfidenceThreshold"/>
|
|
64
|
-
<Param val="True" valType="bool" updates="None" name="plPupilCaptureRecordingEnabled"/>
|
|
65
63
|
<Param val="" valType="str" updates="None" name="plPupilCaptureRecordingLocation"/>
|
|
66
64
|
<Param val="127.0.0.1" valType="str" updates="None" name="plPupilRemoteAddress"/>
|
|
67
65
|
<Param val="50020" valType="num" updates="None" name="plPupilRemotePort"/>
|
|
@@ -53,7 +53,6 @@
|
|
|
53
53
|
<Param val="CONTINUOUS" valType="str" updates="None" name="mgMove"/>
|
|
54
54
|
<Param val="0.5" valType="num" updates="None" name="mgSaccade"/>
|
|
55
55
|
<Param val="0.6" valType="num" updates="None" name="plConfidenceThreshold"/>
|
|
56
|
-
<Param val="True" valType="bool" updates="None" name="plPupilCaptureRecordingEnabled"/>
|
|
57
56
|
<Param val="" valType="str" updates="None" name="plPupilCaptureRecordingLocation"/>
|
|
58
57
|
<Param val="127.0.0.1" valType="str" updates="None" name="plPupilRemoteAddress"/>
|
|
59
58
|
<Param val="50020" valType="num" updates="None" name="plPupilRemotePort"/>
|
|
Binary file
|
|
Binary file
|
psychopy/app/__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
|
"""Module for the PsychoPy GUI application.
|
|
@@ -33,7 +33,37 @@ _psychopyAppInstance = None
|
|
|
33
33
|
REQUIRES_RESTART = False
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
# Adapted from
|
|
37
|
+
# https://code.activestate.com/recipes/580767-unix-tee-like-functionality-via-a-python-class/
|
|
38
|
+
# (BSD 3-Clause)
|
|
39
|
+
class _Tee(object):
|
|
40
|
+
def __init__(self, fid):
|
|
41
|
+
self._other_fid = fid
|
|
42
|
+
|
|
43
|
+
def write(self, s):
|
|
44
|
+
sys.__stdout__.write(s)
|
|
45
|
+
self._other_fid.write(s)
|
|
46
|
+
|
|
47
|
+
def writeln(self, s):
|
|
48
|
+
self.write(s + '\n')
|
|
49
|
+
|
|
50
|
+
def close(self):
|
|
51
|
+
self._other_fid.close()
|
|
52
|
+
|
|
53
|
+
def flush(self):
|
|
54
|
+
self._other_fid.flush()
|
|
55
|
+
sys.__stdout__.flush()
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def startApp(
|
|
59
|
+
showSplash=True,
|
|
60
|
+
testMode=False,
|
|
61
|
+
safeMode=False,
|
|
62
|
+
startView=None,
|
|
63
|
+
startFiles=None,
|
|
64
|
+
firstRun=False,
|
|
65
|
+
profiling=False,
|
|
66
|
+
):
|
|
37
67
|
"""Start the PsychoPy GUI.
|
|
38
68
|
|
|
39
69
|
This function is idempotent, where additional calls after the app starts
|
|
@@ -88,14 +118,25 @@ def startApp(showSplash=True, testMode=False, safeMode=False, startView=None):
|
|
|
88
118
|
|
|
89
119
|
# NOTE - messages and errors cropping up before this point will go to
|
|
90
120
|
# console, afterwards to 'last_app_load.log'.
|
|
91
|
-
|
|
121
|
+
if sys.platform == 'win32' and sys.executable.endswith('pythonw.exe'):
|
|
122
|
+
sys.stderr = sys.stdout = lastRunLog
|
|
123
|
+
else:
|
|
124
|
+
sys.stderr = sys.stdout = _Tee(lastRunLog) # redirect output to file
|
|
92
125
|
|
|
93
126
|
# Create the application instance which starts loading it.
|
|
94
127
|
# If `testMode==True`, all messages and errors (i.e. exceptions) will log to
|
|
95
128
|
# console.
|
|
96
129
|
from psychopy.app._psychopyApp import PsychoPyApp
|
|
97
130
|
_psychopyAppInstance = PsychoPyApp(
|
|
98
|
-
0,
|
|
131
|
+
0,
|
|
132
|
+
testMode=testMode,
|
|
133
|
+
showSplash=showSplash,
|
|
134
|
+
safeMode=safeMode,
|
|
135
|
+
startView=startView,
|
|
136
|
+
startFiles=startFiles,
|
|
137
|
+
firstRun=firstRun,
|
|
138
|
+
profiling=profiling,
|
|
139
|
+
)
|
|
99
140
|
|
|
100
141
|
# After the app is loaded, we hand off logging to the stream dispatcher
|
|
101
142
|
# using the provided log file path. The dispatcher will write out any log
|
|
@@ -148,7 +189,7 @@ def restartApp():
|
|
|
148
189
|
"""Restart the PsychoPy application instance.
|
|
149
190
|
|
|
150
191
|
This will write a file named '.restart' to the user preferences directory
|
|
151
|
-
and quit the application. The presence of this file will indicate to the
|
|
192
|
+
and quit the application. The presence of this file will indicate to the
|
|
152
193
|
launcher parent process that the app should restart.
|
|
153
194
|
|
|
154
195
|
The app restarts with the same arguments as the original launch. This is
|
|
@@ -160,11 +201,11 @@ def restartApp():
|
|
|
160
201
|
"""
|
|
161
202
|
if not isAppStarted():
|
|
162
203
|
return
|
|
163
|
-
|
|
204
|
+
|
|
164
205
|
# write a restart file to the user preferences directory
|
|
165
206
|
from psychopy.preferences import prefs
|
|
166
207
|
restartFilePath = os.path.join(prefs.paths['userPrefsDir'], '.restart')
|
|
167
|
-
|
|
208
|
+
|
|
168
209
|
with open(restartFilePath, 'w') as restartFile:
|
|
169
210
|
restartFile.write('') # empty file
|
|
170
211
|
|
|
@@ -288,7 +329,7 @@ def getAppFrame(frameName):
|
|
|
288
329
|
_psychopyAppInstance.showRunner()
|
|
289
330
|
else:
|
|
290
331
|
raise AttributeError('Cannot load frame. Method not available.')
|
|
291
|
-
|
|
332
|
+
|
|
292
333
|
frameRef = getattr(_psychopyAppInstance, frameName, None)
|
|
293
334
|
|
|
294
335
|
return frameRef
|
psychopy/app/__main__.py
ADDED
psychopy/app/_psychopyApp.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
|
import traceback
|
|
8
8
|
from pathlib import Path
|
|
@@ -19,8 +19,6 @@ import argparse
|
|
|
19
19
|
|
|
20
20
|
from psychopy.app.themes import icons, colors, handlers
|
|
21
21
|
|
|
22
|
-
profiling = False # turning on will save profile files in currDir
|
|
23
|
-
|
|
24
22
|
import psychopy
|
|
25
23
|
from psychopy import prefs
|
|
26
24
|
from packaging.version import Version
|
|
@@ -51,7 +49,7 @@ from psychopy.localization import _translate
|
|
|
51
49
|
# e.g. coder and builder are imported during app.__init__ because they
|
|
52
50
|
# take a while
|
|
53
51
|
|
|
54
|
-
# needed by splash screen for the path to resources/
|
|
52
|
+
# needed by splash screen for the path to resources/splash.png
|
|
55
53
|
import ctypes
|
|
56
54
|
from psychopy import logging, __version__
|
|
57
55
|
from psychopy import projects
|
|
@@ -123,7 +121,7 @@ class MenuFrame(wx.Frame, themes.handlers.ThemeMixin):
|
|
|
123
121
|
class IDStore(dict):
|
|
124
122
|
"""A simpe class that works like a dict but you can access attributes
|
|
125
123
|
like standard python attrs. Useful to replace the previous pre-made
|
|
126
|
-
app.IDs (wx.
|
|
124
|
+
app.IDs (wx.NewIdRef(count=1) is no longer recommended or safe)
|
|
127
125
|
"""
|
|
128
126
|
def __getattr__(self, attr):
|
|
129
127
|
return self[attr]
|
|
@@ -166,7 +164,7 @@ class _Showgui_Hack():
|
|
|
166
164
|
class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
167
165
|
_called_from_test = False # pytest needs to change this
|
|
168
166
|
|
|
169
|
-
def __init__(self, arg=0, testMode=False, startView=None, **kwargs):
|
|
167
|
+
def __init__(self, arg=0, testMode=False, startView=None, profiling=False, **kwargs):
|
|
170
168
|
"""With a wx.App some things get done here, before App.__init__
|
|
171
169
|
then some further code is launched in OnInit() which occurs after
|
|
172
170
|
"""
|
|
@@ -208,6 +206,7 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
208
206
|
|
|
209
207
|
# set as false to disable loading plugins on startup
|
|
210
208
|
self._safeMode = kwargs.get('safeMode', True)
|
|
209
|
+
self.firstRun = kwargs.get('firstRun', False)
|
|
211
210
|
|
|
212
211
|
# Shared memory used for messaging between app instances, this gets
|
|
213
212
|
# allocated when `OnInit` is called.
|
|
@@ -245,7 +244,11 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
245
244
|
self.locale.AddCatalog(self.GetAppName())
|
|
246
245
|
|
|
247
246
|
logging.flush()
|
|
248
|
-
self.onInit(
|
|
247
|
+
self.onInit(
|
|
248
|
+
testMode=testMode,
|
|
249
|
+
startView=startView,
|
|
250
|
+
**kwargs
|
|
251
|
+
)
|
|
249
252
|
if profiling:
|
|
250
253
|
profile.disable()
|
|
251
254
|
print("time to load app = {:.2f}".format(time.time()-t0))
|
|
@@ -378,7 +381,15 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
378
381
|
for builderFrame in self.builder:
|
|
379
382
|
builderFrame.componentButtons.populate()
|
|
380
383
|
|
|
381
|
-
def onInit(
|
|
384
|
+
def onInit(
|
|
385
|
+
self,
|
|
386
|
+
showSplash=True,
|
|
387
|
+
testMode=False,
|
|
388
|
+
safeMode=False,
|
|
389
|
+
startView=None,
|
|
390
|
+
startFiles=None,
|
|
391
|
+
firstRun=False,
|
|
392
|
+
):
|
|
382
393
|
"""This is launched immediately *after* the app initialises with
|
|
383
394
|
wxPython.
|
|
384
395
|
|
|
@@ -406,8 +417,14 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
406
417
|
|
|
407
418
|
if showSplash:
|
|
408
419
|
# show splash screen
|
|
409
|
-
|
|
410
|
-
|
|
420
|
+
if str(__version__).endswith("beta"):
|
|
421
|
+
splashFile = os.path.join(
|
|
422
|
+
self.prefs.paths['resources'], 'betasplash.png'
|
|
423
|
+
)
|
|
424
|
+
else:
|
|
425
|
+
splashFile = os.path.join(
|
|
426
|
+
self.prefs.paths['resources'], 'splash.png'
|
|
427
|
+
)
|
|
411
428
|
splashImage = wx.Image(name=splashFile)
|
|
412
429
|
splashImage.ConvertAlphaToMask()
|
|
413
430
|
splash = AS.AdvancedSplash(
|
|
@@ -415,7 +432,7 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
415
432
|
timeout=3000, agwStyle=AS.AS_TIMEOUT | AS.AS_CENTER_ON_SCREEN
|
|
416
433
|
)
|
|
417
434
|
w, h = splashImage.GetSize()
|
|
418
|
-
splash.SetTextPosition((
|
|
435
|
+
splash.SetTextPosition((300, h - 30))
|
|
419
436
|
splash.SetText(
|
|
420
437
|
_translate("Copyright (C) {year} OpenScienceTools.org").format(year=2024))
|
|
421
438
|
else:
|
|
@@ -428,9 +445,6 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
428
445
|
# import coder and builder here but only use them later
|
|
429
446
|
from psychopy.app import coder, builder, runner, dialogs
|
|
430
447
|
|
|
431
|
-
if '--firstrun' in sys.argv:
|
|
432
|
-
del sys.argv[sys.argv.index('--firstrun')]
|
|
433
|
-
self.firstRun = True
|
|
434
448
|
if 'lastVersion' not in self.prefs.appData:
|
|
435
449
|
# must be before 1.74.00
|
|
436
450
|
last = self.prefs.appData['lastVersion'] = '1.73.04'
|
|
@@ -445,18 +459,25 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
445
459
|
# on a mac, don't exit when the last frame is deleted, just show menu
|
|
446
460
|
if sys.platform == 'darwin':
|
|
447
461
|
self.menuFrame = MenuFrame(parent=None, app=self)
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
462
|
+
|
|
463
|
+
# get starting windows
|
|
464
|
+
if startView in (None, []):
|
|
465
|
+
# if no window specified, use default from prefs
|
|
466
|
+
if self.prefs.app['defaultView'] == 'all':
|
|
467
|
+
startView = ["builder", "coder", "runner"]
|
|
468
|
+
elif self.prefs.app['defaultView'] == "last":
|
|
469
|
+
if self.prefs.appData['lastFrame'] == "both" or not self.prefs.appData['lastFrame']:
|
|
470
|
+
self.prefs.appData['lastFrame'] = "builder-coder-runner"
|
|
471
|
+
startView = self.prefs.appData['lastFrame'].split("-")
|
|
472
|
+
elif self.prefs.app['defaultView'] in ["builder", "coder", "runner"]:
|
|
473
|
+
startView = self.prefs.app['defaultView']
|
|
459
474
|
|
|
475
|
+
if not startView: # if we still don't have a startView then load Builder
|
|
476
|
+
startView = ["builder"]
|
|
477
|
+
|
|
478
|
+
# load fonts
|
|
479
|
+
if splash:
|
|
480
|
+
splash.SetText(_translate("Loading app fonts..."))
|
|
460
481
|
self.dpi = int(wx.GetDisplaySize()[0] /
|
|
461
482
|
float(wx.GetDisplaySizeMM()[0]) * 25.4)
|
|
462
483
|
# detect retina displays
|
|
@@ -470,7 +491,6 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
470
491
|
# adjust dpi to something reasonable
|
|
471
492
|
if not (50 < self.dpi < 120):
|
|
472
493
|
self.dpi = 80 # dpi was unreasonable, make one up
|
|
473
|
-
|
|
474
494
|
# Manage fonts
|
|
475
495
|
if sys.platform == 'win32':
|
|
476
496
|
# wx.SYS_DEFAULT_GUI_FONT is default GUI font in Win32
|
|
@@ -478,10 +498,9 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
478
498
|
else:
|
|
479
499
|
self._mainFont = wx.SystemSettings.GetFont(wx.SYS_ANSI_FIXED_FONT)
|
|
480
500
|
# rescale for tiny retina fonts
|
|
481
|
-
|
|
482
501
|
if hasattr(wx.Font, "AddPrivateFont") and sys.platform != "darwin":
|
|
483
502
|
# Load packaged fonts if possible
|
|
484
|
-
for fontFile in (Path(__file__).parent / "
|
|
503
|
+
for fontFile in (Path(__file__).parent.parent / "assets" / "fonts").glob("*"):
|
|
485
504
|
if fontFile.suffix in ['.ttf', '.truetype']:
|
|
486
505
|
wx.Font.AddPrivateFont(str(fontFile))
|
|
487
506
|
# Set fonts as those loaded
|
|
@@ -498,126 +517,92 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
498
517
|
wx.FONTFAMILY_TELETYPE,
|
|
499
518
|
wx.FONTSTYLE_NORMAL,
|
|
500
519
|
wx.FONTWEIGHT_NORMAL)
|
|
501
|
-
|
|
502
520
|
if self.isRetina:
|
|
503
521
|
self._codeFont.SetPointSize(int(self._codeFont.GetPointSize()*fontScale))
|
|
504
522
|
self._mainFont.SetPointSize(int(self._mainFont.GetPointSize()*fontScale))
|
|
505
|
-
|
|
506
523
|
# that gets most of the properties of _codeFont but the FaceName
|
|
507
524
|
# FaceName is set in the setting of the theme:
|
|
508
525
|
self.theme = prefs.app['theme']
|
|
509
526
|
|
|
510
|
-
# removed Aug 2017: on newer versions of wx (at least on mac)
|
|
511
|
-
# this looks too big
|
|
512
|
-
# if hasattr(self._mainFont, 'Larger'):
|
|
513
|
-
# # Font.Larger is available since wyPython version 2.9.1
|
|
514
|
-
# # PsychoPy still supports 2.8 (see ensureMinimal above)
|
|
515
|
-
# self._mainFont = self._mainFont.Larger()
|
|
516
|
-
# self._codeFont.SetPointSize(
|
|
517
|
-
# self._mainFont.GetPointSize()) # unify font size
|
|
518
|
-
|
|
519
527
|
# load plugins so they're available before frames are created
|
|
520
528
|
if splash:
|
|
521
|
-
splash.SetText(_translate("
|
|
529
|
+
splash.SetText(_translate("Loading plugins..."))
|
|
522
530
|
from psychopy.plugins import activatePlugins
|
|
523
531
|
activatePlugins()
|
|
524
|
-
|
|
525
|
-
# create both frame for coder/builder as necess
|
|
526
|
-
if splash:
|
|
527
|
-
splash.SetText(_translate(" Creating frames..."))
|
|
528
|
-
|
|
529
|
-
# get starting windows
|
|
530
|
-
if startView in (None, []):
|
|
531
|
-
# if no window specified, use default from prefs
|
|
532
|
-
if self.prefs.app['defaultView'] == 'all':
|
|
533
|
-
startView = ["builder", "coder", "runner"]
|
|
534
|
-
elif self.prefs.app['defaultView'] == "last":
|
|
535
|
-
if self.prefs.appData['lastFrame'] == "both" or not self.prefs.appData['lastFrame']:
|
|
536
|
-
self.prefs.appData['lastFrame'] = "builder-coder-runner"
|
|
537
|
-
startView = self.prefs.appData['lastFrame'].split("-")
|
|
538
|
-
elif self.prefs.app['defaultView'] in ["builder", "coder", "runner"]:
|
|
539
|
-
startView = self.prefs.app['defaultView']
|
|
540
532
|
|
|
541
|
-
|
|
542
|
-
|
|
533
|
+
# show frames
|
|
534
|
+
if splash:
|
|
535
|
+
splash.SetText(_translate("Creating frames..."))
|
|
543
536
|
|
|
544
537
|
# if specified as a single string, convert to list
|
|
545
538
|
if isinstance(startView, str):
|
|
546
539
|
startView = [startView]
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
if arg.endswith(".psyexp"):
|
|
551
|
-
exps.append(arg)
|
|
552
|
-
if arg.endswith(".py"):
|
|
553
|
-
if arg.endswith("psychopyApp.py"):
|
|
554
|
-
# this is called erroneously when starting standalone app
|
|
555
|
-
continue
|
|
556
|
-
else:
|
|
557
|
-
scripts.append(arg)
|
|
558
|
-
if "runner" not in startView and arg.endswith(".psyrun"):
|
|
559
|
-
runlist.append(arg)
|
|
560
|
-
|
|
561
|
-
# show frames according to files
|
|
562
|
-
if exps and "builder" not in startView:
|
|
563
|
-
startView.append("builder")
|
|
564
|
-
if scripts and "coder" not in startView:
|
|
565
|
-
startView.append("coder")
|
|
566
|
-
if runlist and "runner" not in startView:
|
|
567
|
-
startView.append("runner")
|
|
568
|
-
|
|
540
|
+
# if last open frame was no frame, use all instead
|
|
541
|
+
if not startView:
|
|
542
|
+
startView = ["builder", "coder", "runner"]
|
|
569
543
|
# create windows
|
|
570
544
|
if "runner" in startView:
|
|
571
|
-
|
|
572
|
-
try:
|
|
573
|
-
self.showRunner(fileList=runlist)
|
|
574
|
-
except Exception as err:
|
|
575
|
-
# if Runner failed with file, try without
|
|
576
|
-
self.showRunner()
|
|
577
|
-
# log error
|
|
578
|
-
logging.error(_translate(
|
|
579
|
-
"Failed to open Runner with requested file list, opening without file list.\n"
|
|
580
|
-
"Requested: {}\n"
|
|
581
|
-
"Err: {}"
|
|
582
|
-
).format(runlist, err))
|
|
583
|
-
logging.debug(
|
|
584
|
-
"\n".join(traceback.format_exception(err))
|
|
585
|
-
)
|
|
586
|
-
|
|
545
|
+
self.showRunner()
|
|
587
546
|
if "coder" in startView:
|
|
588
|
-
|
|
547
|
+
self.showCoder()
|
|
548
|
+
if "builder" in startView:
|
|
549
|
+
self.showBuilder()
|
|
550
|
+
# # if told to directly run stuff, do it now
|
|
551
|
+
# if "direct" in startView:
|
|
552
|
+
# self.showRunner()
|
|
553
|
+
# for exp in [file for file in sys.argv if file.endswith('.psyexp') or file.endswith('.py')]:
|
|
554
|
+
# self.runner.panel.runFile(exp)
|
|
555
|
+
|
|
556
|
+
# load starting files
|
|
557
|
+
if splash:
|
|
558
|
+
splash.SetText(_translate("Loading requested files..."))
|
|
559
|
+
# get starting files
|
|
560
|
+
if startFiles is None:
|
|
561
|
+
startFiles = []
|
|
562
|
+
# get last coder files
|
|
563
|
+
if self.prefs.coder['reloadPrevFiles']:
|
|
564
|
+
for thisFile in self.prefs.appData['coder']['prevFiles']:
|
|
565
|
+
startFiles.append(thisFile)
|
|
566
|
+
# get last builder files
|
|
567
|
+
if self.prefs.builder['reloadPrevExp'] and ('prevFiles' in self.prefs.appData['builder']):
|
|
568
|
+
for thisFile in self.prefs.appData['builder']['prevFiles']:
|
|
569
|
+
startFiles.append(thisFile)
|
|
570
|
+
# open start files
|
|
571
|
+
for thisFile in startFiles:
|
|
572
|
+
# convert to file object & skip any which aren't paths
|
|
589
573
|
try:
|
|
590
|
-
|
|
591
|
-
except
|
|
592
|
-
|
|
574
|
+
thisFile = Path(thisFile)
|
|
575
|
+
except:
|
|
576
|
+
continue
|
|
577
|
+
# skip nonexistent files
|
|
578
|
+
if not thisFile.is_file():
|
|
593
579
|
logging.error(_translate(
|
|
594
|
-
"Failed to open
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
).format(scripts, err))
|
|
598
|
-
logging.debug(
|
|
599
|
-
"\n".join(traceback.format_exception(err))
|
|
600
|
-
)
|
|
601
|
-
self.showCoder()
|
|
602
|
-
|
|
603
|
-
if "builder" in startView:
|
|
604
|
-
# open Builder if requested
|
|
580
|
+
"Failed to open {}, file does not exist."
|
|
581
|
+
).format(thisFile))
|
|
582
|
+
continue
|
|
605
583
|
try:
|
|
606
|
-
|
|
584
|
+
# choose frame based on extension
|
|
585
|
+
if "builder" in startView and thisFile.suffix == ".psyexp":
|
|
586
|
+
# open .psyexp in Builder
|
|
587
|
+
builder = self.showBuilder()
|
|
588
|
+
if builder.fileExists:
|
|
589
|
+
# if current builder file is a real file, open in new frame
|
|
590
|
+
self.newBuilderFrame(fileName=str(thisFile))
|
|
591
|
+
else:
|
|
592
|
+
# otherwise, open in current
|
|
593
|
+
builder.fileOpen(filename=thisFile)
|
|
594
|
+
elif "runner" in startView and thisFile.suffix == ".psyrun":
|
|
595
|
+
# open .psyrun in Runner
|
|
596
|
+
runner = self.showRunner()
|
|
597
|
+
runner.fileOpen(filename=str(thisFile))
|
|
598
|
+
elif "coder" in startView and thisFile.suffix not in (".psyexp", ".psyrun"):
|
|
599
|
+
# open anything else in Coder
|
|
600
|
+
coder = self.showCoder()
|
|
601
|
+
coder.fileOpen(filename=str(thisFile))
|
|
607
602
|
except Exception as err:
|
|
608
|
-
# if Builder failed with file, try without
|
|
609
|
-
self.showBuilder()
|
|
610
|
-
# log error
|
|
611
603
|
logging.error(_translate(
|
|
612
|
-
"Failed to open
|
|
613
|
-
|
|
614
|
-
"Err: {}"
|
|
615
|
-
).format(exps, err))
|
|
616
|
-
|
|
617
|
-
if "direct" in startView:
|
|
618
|
-
self.showRunner()
|
|
619
|
-
for exp in [file for file in sys.argv if file.endswith('.psyexp') or file.endswith('.py')]:
|
|
620
|
-
self.runner.panel.runFile(exp)
|
|
604
|
+
"Failed to open file {}, reason: {}"
|
|
605
|
+
).format(thisFile, err))
|
|
621
606
|
|
|
622
607
|
# if we started a busy cursor which never finished, finish it now
|
|
623
608
|
if wx.IsBusy():
|
|
@@ -855,6 +840,8 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
855
840
|
self.SetTopWindow(self.coder)
|
|
856
841
|
self.coder.Raise()
|
|
857
842
|
|
|
843
|
+
return self.coder
|
|
844
|
+
|
|
858
845
|
def newBuilderFrame(self, event=None, fileName=None):
|
|
859
846
|
# have to reimport because it is only local to __init__ so far
|
|
860
847
|
wx.BeginBusyCursor()
|
|
@@ -868,6 +855,7 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
868
855
|
self.SetTopWindow(self.builder)
|
|
869
856
|
self.updateWindowMenu()
|
|
870
857
|
wx.EndBusyCursor()
|
|
858
|
+
|
|
871
859
|
return self.builder
|
|
872
860
|
|
|
873
861
|
def showBuilder(self, event=None, fileList=()):
|
|
@@ -880,12 +868,31 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
880
868
|
if len(self.getAllFrames(frameType="builder")) == 0:
|
|
881
869
|
self.newBuilderFrame()
|
|
882
870
|
# loop through all frames, from the back bringing each forward
|
|
871
|
+
thisFrame = None
|
|
883
872
|
for thisFrame in self.getAllFrames(frameType='builder'):
|
|
884
873
|
thisFrame.Show(True)
|
|
885
874
|
thisFrame.Raise()
|
|
875
|
+
self.builder = thisFrame
|
|
886
876
|
self.SetTopWindow(thisFrame)
|
|
877
|
+
|
|
878
|
+
return self.builder
|
|
887
879
|
|
|
888
880
|
def showRunner(self, event=None, fileList=[]):
|
|
881
|
+
"""
|
|
882
|
+
Show the Runner window, if not shown already.
|
|
883
|
+
|
|
884
|
+
Parameters
|
|
885
|
+
----------
|
|
886
|
+
event : wx.Event, optional
|
|
887
|
+
wx event, if called by a UI element, by default None
|
|
888
|
+
fileList : list[str or pathlib.Path], optional
|
|
889
|
+
List of files to open Runner with, by default []
|
|
890
|
+
|
|
891
|
+
Returns
|
|
892
|
+
-------
|
|
893
|
+
psychopy.app.runner.RunnerFrame
|
|
894
|
+
Current Runner frame
|
|
895
|
+
"""
|
|
889
896
|
if not self.runner:
|
|
890
897
|
self.runner = self.newRunnerFrame()
|
|
891
898
|
if not self.testMode:
|
|
@@ -895,6 +902,8 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
895
902
|
# Runner captures standard streams until program closed
|
|
896
903
|
# if self.runner and not self.testMode:
|
|
897
904
|
# sys.stderr = sys.stdout = self.stdStreamDispatcher
|
|
905
|
+
|
|
906
|
+
return self.runner
|
|
898
907
|
|
|
899
908
|
def newRunnerFrame(self, event=None):
|
|
900
909
|
# have to reimport because it is only local to __init__ so far
|
|
@@ -1090,7 +1099,7 @@ class PsychoPyApp(wx.App, handlers.ThemeMixin):
|
|
|
1090
1099
|
info.SetVersion('v' + psychopy.__version__)
|
|
1091
1100
|
info.SetDescription(msg)
|
|
1092
1101
|
|
|
1093
|
-
info.SetCopyright('(C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
1102
|
+
info.SetCopyright('(C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.')
|
|
1094
1103
|
info.SetWebSite('https://www.psychopy.org')
|
|
1095
1104
|
info.SetLicence(license)
|
|
1096
1105
|
# developers
|