├── tests ├── __init__.py ├── __init__.pyc ├── context.pyc ├── __pycache__ │ └── test_basic.cpython-27-PYTEST.pyc ├── context.py ├── test_simulate.py ├── test_distance.py ├── test_fried_egg.py ├── test_recmat.py ├── test_temporal.py ├── test_fingerprint.py ├── test_fingerprint_optimizer.py ├── test_load_smoke.py ├── test_egg_methods.py ├── test_speech.py └── test_clustering_best_match.py ├── quail ├── data │ ├── __init__.py │ ├── cmr.egg │ ├── frfr.egg │ ├── manual.egg │ ├── murd62.egg │ ├── automatic.egg │ └── naturalistic.egg ├── analysis │ ├── __init__.py │ └── accuracy.py ├── __init__.py ├── simulate.py └── distance.py ├── docs ├── modules │ └── generated │ │ ├── quail.Egg.examples │ │ ├── quail.plot.examples │ │ ├── quail.Egg.crack.examples │ │ ├── quail.Egg.info.examples │ │ ├── quail.Egg.save.examples │ │ ├── quail.analyze.examples │ │ ├── quail.crack_egg.examples │ │ ├── quail.load_egg.examples │ │ ├── quail.recmat2egg.examples │ │ ├── quail.stack_eggs.examples │ │ ├── quail.decode_speech.examples │ │ └── quail.load_example_data.examples ├── auto_examples │ ├── plot_pfr.py.md5 │ ├── plot_pnr.py.md5 │ ├── plot_spc.py.md5 │ ├── plot_accuracy.py.md5 │ ├── plot_cmr_data.py.md5 │ ├── plot_frfr_data.py.md5 │ ├── plot_lagcrp.py.md5 │ ├── plot_temporal.py.md5 │ ├── plot_existing_axes.py.md5 │ ├── plot_fingerprint.py.md5 │ ├── plot_murdock_data.py.md5 │ ├── crack_egg.zip │ ├── create_egg.zip │ ├── plot_pfr.zip │ ├── plot_pnr.zip │ ├── plot_spc.zip │ ├── recmat2egg.zip │ ├── plot_lagcrp.zip │ ├── decode_speech.zip │ ├── plot_accuracy.zip │ ├── plot_cmr_data.zip │ ├── plot_frfr_data.zip │ ├── plot_temporal.zip │ ├── plot_fingerprint.zip │ ├── plot_murdock_data.zip │ ├── auto_examples_python.zip │ ├── plot_existing_axes.zip │ ├── auto_examples_jupyter.zip │ ├── create_multisubject_egg.zip │ ├── fingerprint_optimalpresenter.zip │ ├── images │ │ ├── sphx_glr_plot_pfr_001.png │ │ ├── sphx_glr_plot_pnr_001.png │ │ ├── sphx_glr_plot_spc_001.png │ │ ├── sphx_glr_plot_lagcrp_001.png │ │ ├── sphx_glr_plot_accuracy_001.png │ │ ├── sphx_glr_plot_cmr_data_001.png │ │ ├── sphx_glr_plot_frfr_data_001.png │ │ ├── sphx_glr_plot_frfr_data_002.png │ │ ├── sphx_glr_plot_temporal_001.png │ │ ├── sphx_glr_plot_fingerprint_001.png │ │ ├── sphx_glr_plot_murdock_data_001.png │ │ ├── thumb │ │ │ ├── sphx_glr_crack_egg_thumb.png │ │ │ ├── sphx_glr_plot_pfr_thumb.png │ │ │ ├── sphx_glr_plot_pnr_thumb.png │ │ │ ├── sphx_glr_plot_spc_thumb.png │ │ │ ├── sphx_glr_create_egg_thumb.png │ │ │ ├── sphx_glr_plot_lagcrp_thumb.png │ │ │ ├── sphx_glr_recmat2egg_thumb.png │ │ │ ├── sphx_glr_decode_speech_thumb.png │ │ │ ├── sphx_glr_plot_accuracy_thumb.png │ │ │ ├── sphx_glr_plot_cmr_data_thumb.png │ │ │ ├── sphx_glr_plot_frfr_data_thumb.png │ │ │ ├── sphx_glr_plot_temporal_thumb.png │ │ │ ├── sphx_glr_plot_fingerprint_thumb.png │ │ │ ├── sphx_glr_plot_murdock_data_thumb.png │ │ │ ├── sphx_glr_plot_existing_axes_thumb.png │ │ │ ├── sphx_glr_create_multisubject_egg_thumb.png │ │ │ └── sphx_glr_fingerprint_optimalpresenter_thumb.png │ │ └── sphx_glr_plot_existing_axes_001.png │ ├── crack_egg.codeobj.json │ ├── create_egg.codeobj.json │ ├── create_multisubject_egg.codeobj.json │ ├── recmat2egg.codeobj.json │ ├── decode_speech.codeobj.json │ ├── crack_egg.py │ ├── recmat2egg.py │ ├── plot_pfr.py │ ├── plot_spc.py │ ├── plot_accuracy.py │ ├── plot_temporal.py │ ├── plot_pnr.py │ ├── decode_speech.py │ ├── fingerprint_optimalpresenter.codeobj.json │ ├── plot_lagcrp.py │ ├── plot_existing_axes.py │ ├── plot_fingerprint.py │ ├── create_multisubject_egg.py │ ├── crack_egg.ipynb │ ├── plot_pfr.ipynb │ ├── recmat2egg.ipynb │ ├── plot_spc.ipynb │ ├── plot_accuracy.ipynb │ ├── plot_temporal.ipynb │ ├── plot_pnr.ipynb │ ├── decode_speech.ipynb │ ├── plot_lagcrp.ipynb │ ├── plot_existing_axes.ipynb │ ├── plot_fingerprint.ipynb │ ├── plot_lagcrp.codeobj.json │ ├── plot_pfr.codeobj.json │ ├── plot_pnr.codeobj.json │ ├── plot_spc.codeobj.json │ ├── plot_accuracy.codeobj.json │ ├── plot_fingerprint.codeobj.json │ ├── plot_temporal.codeobj.json │ ├── create_multisubject_egg.ipynb │ ├── crack_egg.rst │ ├── recmat2egg.rst │ ├── decode_speech.rst │ ├── plot_spc.rst │ ├── plot_pfr.rst │ ├── plot_pnr.rst │ ├── plot_accuracy.rst │ ├── create_multisubject_egg.rst │ └── plot_temporal.rst ├── _static │ ├── plot_acc.png │ ├── plot_pfr.png │ ├── plot_spc.png │ ├── plot_lagcrp.png │ ├── plot_fingerprint.png │ └── murdock_1962_analysis.png ├── _build │ ├── html │ │ ├── objects.inv │ │ ├── _static │ │ │ ├── file.png │ │ │ ├── plus.png │ │ │ ├── minus.png │ │ │ ├── no_image.png │ │ │ ├── broken_example.png │ │ │ ├── js │ │ │ │ └── jquery-fix.js │ │ │ ├── bootstrap-2.3.2 │ │ │ │ └── img │ │ │ │ │ ├── glyphicons-halflings.png │ │ │ │ │ └── glyphicons-halflings-white.png │ │ │ └── bootswatch-2.3.2 │ │ │ │ └── img │ │ │ │ ├── glyphicons-halflings.png │ │ │ │ └── glyphicons-halflings-white.png │ │ ├── _images │ │ │ ├── plot_lagcrp.png │ │ │ ├── plot_fingerprint.png │ │ │ ├── advanced_plotting_7_0.png │ │ │ ├── advanced_plotting_9_0.png │ │ │ ├── sphx_glr_plot_pfr_001.png │ │ │ ├── sphx_glr_plot_pnr_001.png │ │ │ ├── sphx_glr_plot_spc_001.png │ │ │ ├── advanced_plotting_11_0.png │ │ │ ├── advanced_plotting_14_0.png │ │ │ ├── advanced_plotting_16_0.png │ │ │ ├── advanced_plotting_18_0.png │ │ │ ├── advanced_plotting_26_1.png │ │ │ ├── sphx_glr_crack_egg_thumb.png │ │ │ ├── sphx_glr_plot_lagcrp_001.png │ │ │ ├── sphx_glr_plot_pfr_thumb.png │ │ │ ├── sphx_glr_plot_pnr_thumb.png │ │ │ ├── sphx_glr_plot_spc_thumb.png │ │ │ ├── sphx_glr_create_egg_thumb.png │ │ │ ├── sphx_glr_plot_accuracy_001.png │ │ │ ├── sphx_glr_plot_lagcrp_thumb.png │ │ │ ├── sphx_glr_plot_temporal_001.png │ │ │ ├── sphx_glr_recmat2egg_thumb.png │ │ │ ├── basic_analyze_and_plot_14_1.png │ │ │ ├── basic_analyze_and_plot_19_1.png │ │ │ ├── basic_analyze_and_plot_23_1.png │ │ │ ├── basic_analyze_and_plot_27_1.png │ │ │ ├── basic_analyze_and_plot_29_1.png │ │ │ ├── basic_analyze_and_plot_35_1.png │ │ │ ├── sphx_glr_decode_speech_thumb.png │ │ │ ├── sphx_glr_plot_accuracy_thumb.png │ │ │ ├── sphx_glr_plot_fingerprint_001.png │ │ │ ├── sphx_glr_plot_temporal_thumb.png │ │ │ ├── sphx_glr_plot_existing_axes_001.png │ │ │ ├── sphx_glr_plot_fingerprint_thumb.png │ │ │ ├── tutorial_optimal_presenter_7_1.png │ │ │ ├── sphx_glr_plot_existing_axes_thumb.png │ │ │ ├── sphx_glr_create_multisubject_egg_thumb.png │ │ │ └── sphx_glr_fingerprint_optimalpresenter_thumb.png │ │ ├── _sources │ │ │ ├── quail.plot.rst.txt │ │ │ ├── quail.analyze.rst.txt │ │ │ ├── quail.load_egg.rst.txt │ │ │ ├── quail.crack_egg.rst.txt │ │ │ ├── quail.recmat2egg.rst.txt │ │ │ ├── quail.stack_eggs.rst.txt │ │ │ ├── quail.decode_speech.rst.txt │ │ │ ├── quail.load_example_data.rst.txt │ │ │ ├── quail.Egg.rst.txt │ │ │ ├── tutorial.rst.txt │ │ │ ├── index.rst.txt │ │ │ ├── api.rst.txt │ │ │ ├── auto_examples │ │ │ │ ├── crack_egg.rst.txt │ │ │ │ ├── recmat2egg.rst.txt │ │ │ │ ├── decode_speech.rst.txt │ │ │ │ ├── plot_spc.rst.txt │ │ │ │ ├── plot_pfr.rst.txt │ │ │ │ ├── plot_pnr.rst.txt │ │ │ │ ├── plot_accuracy.rst.txt │ │ │ │ └── create_multisubject_egg.rst.txt │ │ │ └── tutorial │ │ │ │ └── fingerprint.rst.txt │ │ └── .buildinfo │ └── doctrees │ │ ├── api.doctree │ │ ├── index.doctree │ │ ├── quail.Egg.doctree │ │ ├── tutorial.doctree │ │ ├── environment.pickle │ │ ├── quail.plot.doctree │ │ ├── quail.analyze.doctree │ │ ├── quail.load_egg.doctree │ │ ├── tutorial │ │ ├── egg.doctree │ │ ├── fingerprint.doctree │ │ ├── speech_decoding.doctree │ │ ├── advanced_plotting.doctree │ │ ├── optimal presenter.doctree │ │ └── basic_analyze_and_plot.doctree │ │ ├── quail.crack_egg.doctree │ │ ├── quail.recmat2egg.doctree │ │ ├── quail.stack_eggs.doctree │ │ ├── auto_examples │ │ ├── index.doctree │ │ ├── crack_egg.doctree │ │ ├── create_egg.doctree │ │ ├── plot_pfr.doctree │ │ ├── plot_pnr.doctree │ │ ├── plot_spc.doctree │ │ ├── recmat2egg.doctree │ │ ├── plot_lagcrp.doctree │ │ ├── decode_speech.doctree │ │ ├── plot_accuracy.doctree │ │ ├── plot_temporal.doctree │ │ ├── plot_fingerprint.doctree │ │ ├── plot_existing_axes.doctree │ │ ├── create_multisubject_egg.doctree │ │ └── fingerprint_optimalpresenter.doctree │ │ ├── quail.decode_speech.doctree │ │ ├── quail.load_example_data.doctree │ │ └── nbsphinx │ │ └── tutorial_optimal_presenter_7_1.png ├── quail.plot.rst ├── quail.analyze.rst ├── quail.load_egg.rst ├── tutorial │ ├── images │ │ ├── fingerprint1.png │ │ ├── fingerprint2.png │ │ ├── fingerprint25.png │ │ ├── fingerprint3.png │ │ ├── fingerprint4.pdf │ │ └── fingerprint4.png │ ├── advanced_plotting_files │ │ ├── advanced_plotting_5_0.png │ │ ├── advanced_plotting_6_0.png │ │ ├── advanced_plotting_7_0.png │ │ ├── advanced_plotting_8_0.png │ │ ├── advanced_plotting_9_0.png │ │ ├── advanced_plotting_10_0.png │ │ ├── advanced_plotting_11_0.png │ │ ├── advanced_plotting_11_1.png │ │ ├── advanced_plotting_12_0.png │ │ ├── advanced_plotting_13_0.png │ │ ├── advanced_plotting_14_0.png │ │ ├── advanced_plotting_15_0.png │ │ ├── advanced_plotting_16_0.png │ │ ├── advanced_plotting_17_0.png │ │ ├── advanced_plotting_18_0.png │ │ ├── advanced_plotting_18_1.png │ │ ├── advanced_plotting_19_0.png │ │ ├── advanced_plotting_20_0.png │ │ ├── advanced_plotting_20_1.png │ │ ├── advanced_plotting_21_0.png │ │ ├── advanced_plotting_22_2.png │ │ ├── advanced_plotting_23_0.png │ │ ├── advanced_plotting_23_1.png │ │ ├── advanced_plotting_23_2.png │ │ ├── advanced_plotting_24_1.png │ │ ├── advanced_plotting_24_3.png │ │ ├── advanced_plotting_24_5.png │ │ ├── advanced_plotting_25_0.png │ │ ├── advanced_plotting_25_1.png │ │ ├── advanced_plotting_25_2.png │ │ ├── advanced_plotting_26_0.png │ │ ├── advanced_plotting_26_1.png │ │ ├── advanced_plotting_26_2.png │ │ ├── advanced_plotting_26_3.png │ │ ├── advanced_plotting_26_5.png │ │ ├── advanced_plotting_28_0.png │ │ ├── advanced_plotting_28_1.png │ │ └── advanced_plotting_28_2.png │ ├── basic_analyze_and_plot_files │ │ ├── basic_analyze_and_plot_14_0.png │ │ ├── basic_analyze_and_plot_14_1.png │ │ ├── basic_analyze_and_plot_19_0.png │ │ ├── basic_analyze_and_plot_19_1.png │ │ ├── basic_analyze_and_plot_23_0.png │ │ ├── basic_analyze_and_plot_23_1.png │ │ ├── basic_analyze_and_plot_27_0.png │ │ ├── basic_analyze_and_plot_27_1.png │ │ ├── basic_analyze_and_plot_29_0.png │ │ ├── basic_analyze_and_plot_29_1.png │ │ ├── basic_analyze_and_plot_33_0.png │ │ ├── basic_analyze_and_plot_35_0.png │ │ ├── basic_analyze_and_plot_35_1.png │ │ └── basic_analyze_and_plot_39_0.png │ ├── Makefile │ ├── tools │ │ └── nb_to_doc.py │ └── fingerprint.rst ├── quail.crack_egg.rst ├── quail.recmat2egg.rst ├── quail.stack_eggs.rst ├── quail.decode_speech.rst ├── quail.load_example_data.rst ├── doc_requirements.txt ├── quail.FriedEgg.rst ├── quail.Fingerprint.rst ├── quail.OptimalPresenter.rst ├── quail.Egg.rst ├── issues │ └── coverage_expansion.md ├── tutorial.rst ├── installation.rst ├── index.rst └── api.rst ├── MANIFEST.in ├── data └── sample.wav ├── Makefile ├── images ├── plot_acc.png ├── plot_pfr.png ├── plot_spc.png ├── Quail_Logo.pdf ├── Quail_Logo.png ├── plot_lagcrp.png ├── Quail_Logo_small.png ├── plot_fingerprint.png └── murdock_1962_analysis.png ├── examples ├── README.txt ├── crack_egg.py ├── recmat2egg.py ├── plot_pfr.py ├── plot_spc.py ├── plot_accuracy.py ├── plot_temporal.py ├── plot_pnr.py ├── decode_speech.py ├── plot_lagcrp.py ├── plot_existing_axes.py ├── plot_fingerprint.py └── create_multisubject_egg.py ├── requirements.txt ├── .gitignore ├── .readthedocs.yaml ├── paper ├── codemeta.json └── paper.bib ├── LICENSE ├── .travis.yml ├── .github └── workflows │ └── tests.yml └── setup.py /tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /quail/data/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /quail/analysis/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/modules/generated/quail.Egg.examples: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/modules/generated/quail.plot.examples: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/modules/generated/quail.Egg.crack.examples: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/modules/generated/quail.Egg.info.examples: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/modules/generated/quail.Egg.save.examples: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/modules/generated/quail.analyze.examples: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/modules/generated/quail.crack_egg.examples: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/modules/generated/quail.load_egg.examples: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/modules/generated/quail.recmat2egg.examples: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/modules/generated/quail.stack_eggs.examples: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/modules/generated/quail.decode_speech.examples: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/modules/generated/quail.load_example_data.examples: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include quail/data/* 2 | include requirements.txt 3 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_pfr.py.md5: -------------------------------------------------------------------------------- 1 | 88df9be9b191175e0dc8e843e08abf14 -------------------------------------------------------------------------------- /docs/auto_examples/plot_pnr.py.md5: -------------------------------------------------------------------------------- 1 | a49f085ec22e1d141f7568eb55c64ea6 -------------------------------------------------------------------------------- /docs/auto_examples/plot_spc.py.md5: -------------------------------------------------------------------------------- 1 | 8b44b1efa518da25e6686e6c5f1c82f8 -------------------------------------------------------------------------------- /docs/auto_examples/plot_accuracy.py.md5: -------------------------------------------------------------------------------- 1 | 6df4c3a2a3cab37a1fd3a74789ce9bca -------------------------------------------------------------------------------- /docs/auto_examples/plot_cmr_data.py.md5: -------------------------------------------------------------------------------- 1 | 8851788439a0497c85148a6b0be0ef9b -------------------------------------------------------------------------------- /docs/auto_examples/plot_frfr_data.py.md5: -------------------------------------------------------------------------------- 1 | 222bd00611ddf18a08879deddf57e13e -------------------------------------------------------------------------------- /docs/auto_examples/plot_lagcrp.py.md5: -------------------------------------------------------------------------------- 1 | 3a84bbf6e7d9ad4562f1ccabe69285ae -------------------------------------------------------------------------------- /docs/auto_examples/plot_temporal.py.md5: -------------------------------------------------------------------------------- 1 | 2f5d0c2d38e111cd367c22d3f6252b56 -------------------------------------------------------------------------------- /docs/auto_examples/plot_existing_axes.py.md5: -------------------------------------------------------------------------------- 1 | 1a5e3f382ee0be5b97a92f3561e42fe2 -------------------------------------------------------------------------------- /docs/auto_examples/plot_fingerprint.py.md5: -------------------------------------------------------------------------------- 1 | 5d0c3516062152c86283665434a07739 -------------------------------------------------------------------------------- /docs/auto_examples/plot_murdock_data.py.md5: -------------------------------------------------------------------------------- 1 | 5ce9cc0b5debc143d252246d5d1f85f2 -------------------------------------------------------------------------------- /data/sample.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/data/sample.wav -------------------------------------------------------------------------------- /quail/data/cmr.egg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/quail/data/cmr.egg -------------------------------------------------------------------------------- /tests/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/tests/__init__.pyc -------------------------------------------------------------------------------- /tests/context.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/tests/context.pyc -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | init: 2 | pip install -r requirements.txt 3 | 4 | test: 5 | nosetests tests 6 | -------------------------------------------------------------------------------- /images/plot_acc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/images/plot_acc.png -------------------------------------------------------------------------------- /images/plot_pfr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/images/plot_pfr.png -------------------------------------------------------------------------------- /images/plot_spc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/images/plot_spc.png -------------------------------------------------------------------------------- /quail/data/frfr.egg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/quail/data/frfr.egg -------------------------------------------------------------------------------- /examples/README.txt: -------------------------------------------------------------------------------- 1 | .. _examples-index: 2 | 3 | Gallery of Examples 4 | =================== 5 | -------------------------------------------------------------------------------- /images/Quail_Logo.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/images/Quail_Logo.pdf -------------------------------------------------------------------------------- /images/Quail_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/images/Quail_Logo.png -------------------------------------------------------------------------------- /images/plot_lagcrp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/images/plot_lagcrp.png -------------------------------------------------------------------------------- /quail/data/manual.egg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/quail/data/manual.egg -------------------------------------------------------------------------------- /quail/data/murd62.egg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/quail/data/murd62.egg -------------------------------------------------------------------------------- /docs/_static/plot_acc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_static/plot_acc.png -------------------------------------------------------------------------------- /docs/_static/plot_pfr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_static/plot_pfr.png -------------------------------------------------------------------------------- /docs/_static/plot_spc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_static/plot_spc.png -------------------------------------------------------------------------------- /quail/data/automatic.egg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/quail/data/automatic.egg -------------------------------------------------------------------------------- /docs/_build/html/objects.inv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/objects.inv -------------------------------------------------------------------------------- /docs/_static/plot_lagcrp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_static/plot_lagcrp.png -------------------------------------------------------------------------------- /images/Quail_Logo_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/images/Quail_Logo_small.png -------------------------------------------------------------------------------- /images/plot_fingerprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/images/plot_fingerprint.png -------------------------------------------------------------------------------- /quail/data/naturalistic.egg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/quail/data/naturalistic.egg -------------------------------------------------------------------------------- /docs/quail.plot.rst: -------------------------------------------------------------------------------- 1 | quail.plot 2 | ========== 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: plot -------------------------------------------------------------------------------- /docs/_build/doctrees/api.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/api.doctree -------------------------------------------------------------------------------- /docs/_build/html/_static/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_static/file.png -------------------------------------------------------------------------------- /docs/_build/html/_static/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_static/plus.png -------------------------------------------------------------------------------- /docs/_static/plot_fingerprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_static/plot_fingerprint.png -------------------------------------------------------------------------------- /docs/auto_examples/crack_egg.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/crack_egg.zip -------------------------------------------------------------------------------- /docs/auto_examples/create_egg.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/create_egg.zip -------------------------------------------------------------------------------- /docs/auto_examples/plot_pfr.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/plot_pfr.zip -------------------------------------------------------------------------------- /docs/auto_examples/plot_pnr.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/plot_pnr.zip -------------------------------------------------------------------------------- /docs/auto_examples/plot_spc.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/plot_spc.zip -------------------------------------------------------------------------------- /docs/auto_examples/recmat2egg.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/recmat2egg.zip -------------------------------------------------------------------------------- /images/murdock_1962_analysis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/images/murdock_1962_analysis.png -------------------------------------------------------------------------------- /docs/_build/doctrees/index.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/index.doctree -------------------------------------------------------------------------------- /docs/_build/html/_static/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_static/minus.png -------------------------------------------------------------------------------- /docs/auto_examples/plot_lagcrp.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/plot_lagcrp.zip -------------------------------------------------------------------------------- /docs/quail.analyze.rst: -------------------------------------------------------------------------------- 1 | quail.analyze 2 | ============= 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: analyze -------------------------------------------------------------------------------- /docs/_build/doctrees/quail.Egg.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/quail.Egg.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/tutorial.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/tutorial.doctree -------------------------------------------------------------------------------- /docs/_build/html/_static/no_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_static/no_image.png -------------------------------------------------------------------------------- /docs/_static/murdock_1962_analysis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_static/murdock_1962_analysis.png -------------------------------------------------------------------------------- /docs/auto_examples/decode_speech.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/decode_speech.zip -------------------------------------------------------------------------------- /docs/auto_examples/plot_accuracy.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/plot_accuracy.zip -------------------------------------------------------------------------------- /docs/auto_examples/plot_cmr_data.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/plot_cmr_data.zip -------------------------------------------------------------------------------- /docs/auto_examples/plot_frfr_data.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/plot_frfr_data.zip -------------------------------------------------------------------------------- /docs/auto_examples/plot_temporal.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/plot_temporal.zip -------------------------------------------------------------------------------- /docs/quail.load_egg.rst: -------------------------------------------------------------------------------- 1 | quail.load\_egg 2 | =============== 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: load_egg -------------------------------------------------------------------------------- /docs/tutorial/images/fingerprint1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/images/fingerprint1.png -------------------------------------------------------------------------------- /docs/tutorial/images/fingerprint2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/images/fingerprint2.png -------------------------------------------------------------------------------- /docs/tutorial/images/fingerprint25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/images/fingerprint25.png -------------------------------------------------------------------------------- /docs/tutorial/images/fingerprint3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/images/fingerprint3.png -------------------------------------------------------------------------------- /docs/tutorial/images/fingerprint4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/images/fingerprint4.pdf -------------------------------------------------------------------------------- /docs/tutorial/images/fingerprint4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/images/fingerprint4.png -------------------------------------------------------------------------------- /docs/_build/doctrees/environment.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/environment.pickle -------------------------------------------------------------------------------- /docs/_build/doctrees/quail.plot.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/quail.plot.doctree -------------------------------------------------------------------------------- /docs/_build/html/_images/plot_lagcrp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/plot_lagcrp.png -------------------------------------------------------------------------------- /docs/auto_examples/plot_fingerprint.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/plot_fingerprint.zip -------------------------------------------------------------------------------- /docs/auto_examples/plot_murdock_data.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/plot_murdock_data.zip -------------------------------------------------------------------------------- /docs/quail.crack_egg.rst: -------------------------------------------------------------------------------- 1 | quail.crack\_egg 2 | ================ 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: crack_egg -------------------------------------------------------------------------------- /docs/_build/doctrees/quail.analyze.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/quail.analyze.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/quail.load_egg.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/quail.load_egg.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/tutorial/egg.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/tutorial/egg.doctree -------------------------------------------------------------------------------- /docs/_build/html/_sources/quail.plot.rst.txt: -------------------------------------------------------------------------------- 1 | quail.plot 2 | ========== 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: plot -------------------------------------------------------------------------------- /docs/_build/html/_static/broken_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_static/broken_example.png -------------------------------------------------------------------------------- /docs/_build/html/_static/js/jquery-fix.js: -------------------------------------------------------------------------------- 1 | // No Conflict in later (our) version of jQuery 2 | window.$jqTheme = jQuery.noConflict(true); -------------------------------------------------------------------------------- /docs/auto_examples/auto_examples_python.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/auto_examples_python.zip -------------------------------------------------------------------------------- /docs/auto_examples/plot_existing_axes.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/plot_existing_axes.zip -------------------------------------------------------------------------------- /docs/quail.recmat2egg.rst: -------------------------------------------------------------------------------- 1 | quail.recmat2egg 2 | ================ 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: recmat2egg -------------------------------------------------------------------------------- /docs/quail.stack_eggs.rst: -------------------------------------------------------------------------------- 1 | quail.stack\_eggs 2 | ================= 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: stack_eggs -------------------------------------------------------------------------------- /docs/_build/doctrees/quail.crack_egg.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/quail.crack_egg.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/quail.recmat2egg.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/quail.recmat2egg.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/quail.stack_eggs.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/quail.stack_eggs.doctree -------------------------------------------------------------------------------- /docs/_build/html/_images/plot_fingerprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/plot_fingerprint.png -------------------------------------------------------------------------------- /docs/auto_examples/auto_examples_jupyter.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/auto_examples_jupyter.zip -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/index.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/index.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/quail.decode_speech.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/quail.decode_speech.doctree -------------------------------------------------------------------------------- /docs/_build/html/_sources/quail.analyze.rst.txt: -------------------------------------------------------------------------------- 1 | quail.analyze 2 | ============= 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: analyze -------------------------------------------------------------------------------- /docs/auto_examples/create_multisubject_egg.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/create_multisubject_egg.zip -------------------------------------------------------------------------------- /docs/quail.decode_speech.rst: -------------------------------------------------------------------------------- 1 | quail.decode\_speech 2 | ==================== 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: decode_speech -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | numpy>=2.0.0 2 | scipy>=1.10.0 3 | matplotlib>=3.5.0 4 | seaborn>=0.12.0 5 | pandas>=2.0.0 6 | joblib>=1.3.0 7 | openai-whisper 8 | -------------------------------------------------------------------------------- /docs/_build/doctrees/tutorial/fingerprint.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/tutorial/fingerprint.doctree -------------------------------------------------------------------------------- /docs/_build/html/_images/advanced_plotting_7_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/advanced_plotting_7_0.png -------------------------------------------------------------------------------- /docs/_build/html/_images/advanced_plotting_9_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/advanced_plotting_9_0.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_pfr_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_pfr_001.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_pnr_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_pnr_001.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_spc_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_spc_001.png -------------------------------------------------------------------------------- /docs/_build/html/_sources/quail.load_egg.rst.txt: -------------------------------------------------------------------------------- 1 | quail.load\_egg 2 | =============== 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: load_egg -------------------------------------------------------------------------------- /tests/__pycache__/test_basic.cpython-27-PYTEST.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/tests/__pycache__/test_basic.cpython-27-PYTEST.pyc -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/crack_egg.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/crack_egg.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/create_egg.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/create_egg.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/plot_pfr.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/plot_pfr.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/plot_pnr.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/plot_pnr.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/plot_spc.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/plot_spc.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/recmat2egg.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/recmat2egg.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/quail.load_example_data.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/quail.load_example_data.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/tutorial/speech_decoding.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/tutorial/speech_decoding.doctree -------------------------------------------------------------------------------- /docs/_build/html/_images/advanced_plotting_11_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/advanced_plotting_11_0.png -------------------------------------------------------------------------------- /docs/_build/html/_images/advanced_plotting_14_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/advanced_plotting_14_0.png -------------------------------------------------------------------------------- /docs/_build/html/_images/advanced_plotting_16_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/advanced_plotting_16_0.png -------------------------------------------------------------------------------- /docs/_build/html/_images/advanced_plotting_18_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/advanced_plotting_18_0.png -------------------------------------------------------------------------------- /docs/_build/html/_images/advanced_plotting_26_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/advanced_plotting_26_1.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_crack_egg_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_crack_egg_thumb.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_lagcrp_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_lagcrp_001.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_pfr_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_pfr_thumb.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_pnr_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_pnr_thumb.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_spc_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_spc_thumb.png -------------------------------------------------------------------------------- /docs/_build/html/_sources/quail.crack_egg.rst.txt: -------------------------------------------------------------------------------- 1 | quail.crack\_egg 2 | ================ 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: crack_egg -------------------------------------------------------------------------------- /docs/auto_examples/fingerprint_optimalpresenter.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/fingerprint_optimalpresenter.zip -------------------------------------------------------------------------------- /docs/auto_examples/images/sphx_glr_plot_pfr_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/sphx_glr_plot_pfr_001.png -------------------------------------------------------------------------------- /docs/auto_examples/images/sphx_glr_plot_pnr_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/sphx_glr_plot_pnr_001.png -------------------------------------------------------------------------------- /docs/auto_examples/images/sphx_glr_plot_spc_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/sphx_glr_plot_spc_001.png -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/plot_lagcrp.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/plot_lagcrp.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/tutorial/advanced_plotting.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/tutorial/advanced_plotting.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/tutorial/optimal presenter.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/tutorial/optimal presenter.doctree -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_create_egg_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_create_egg_thumb.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_accuracy_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_accuracy_001.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_lagcrp_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_lagcrp_thumb.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_temporal_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_temporal_001.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_recmat2egg_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_recmat2egg_thumb.png -------------------------------------------------------------------------------- /docs/_build/html/_sources/quail.recmat2egg.rst.txt: -------------------------------------------------------------------------------- 1 | quail.recmat2egg 2 | ================ 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: recmat2egg -------------------------------------------------------------------------------- /docs/_build/html/_sources/quail.stack_eggs.rst.txt: -------------------------------------------------------------------------------- 1 | quail.stack\_eggs 2 | ================= 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: stack_eggs -------------------------------------------------------------------------------- /docs/auto_examples/images/sphx_glr_plot_lagcrp_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/sphx_glr_plot_lagcrp_001.png -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/decode_speech.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/decode_speech.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/plot_accuracy.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/plot_accuracy.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/plot_temporal.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/plot_temporal.doctree -------------------------------------------------------------------------------- /docs/_build/html/_images/basic_analyze_and_plot_14_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/basic_analyze_and_plot_14_1.png -------------------------------------------------------------------------------- /docs/_build/html/_images/basic_analyze_and_plot_19_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/basic_analyze_and_plot_19_1.png -------------------------------------------------------------------------------- /docs/_build/html/_images/basic_analyze_and_plot_23_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/basic_analyze_and_plot_23_1.png -------------------------------------------------------------------------------- /docs/_build/html/_images/basic_analyze_and_plot_27_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/basic_analyze_and_plot_27_1.png -------------------------------------------------------------------------------- /docs/_build/html/_images/basic_analyze_and_plot_29_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/basic_analyze_and_plot_29_1.png -------------------------------------------------------------------------------- /docs/_build/html/_images/basic_analyze_and_plot_35_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/basic_analyze_and_plot_35_1.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_decode_speech_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_decode_speech_thumb.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_accuracy_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_accuracy_thumb.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_fingerprint_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_fingerprint_001.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_temporal_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_temporal_thumb.png -------------------------------------------------------------------------------- /docs/auto_examples/images/sphx_glr_plot_accuracy_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/sphx_glr_plot_accuracy_001.png -------------------------------------------------------------------------------- /docs/auto_examples/images/sphx_glr_plot_cmr_data_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/sphx_glr_plot_cmr_data_001.png -------------------------------------------------------------------------------- /docs/auto_examples/images/sphx_glr_plot_frfr_data_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/sphx_glr_plot_frfr_data_001.png -------------------------------------------------------------------------------- /docs/auto_examples/images/sphx_glr_plot_frfr_data_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/sphx_glr_plot_frfr_data_002.png -------------------------------------------------------------------------------- /docs/auto_examples/images/sphx_glr_plot_temporal_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/sphx_glr_plot_temporal_001.png -------------------------------------------------------------------------------- /docs/quail.load_example_data.rst: -------------------------------------------------------------------------------- 1 | quail.load\_example\_data 2 | ========================= 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: load_example_data -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/plot_fingerprint.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/plot_fingerprint.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/tutorial/basic_analyze_and_plot.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/tutorial/basic_analyze_and_plot.doctree -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_existing_axes_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_existing_axes_001.png -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_fingerprint_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_fingerprint_thumb.png -------------------------------------------------------------------------------- /docs/_build/html/_images/tutorial_optimal_presenter_7_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/tutorial_optimal_presenter_7_1.png -------------------------------------------------------------------------------- /docs/_build/html/_sources/quail.decode_speech.rst.txt: -------------------------------------------------------------------------------- 1 | quail.decode\_speech 2 | ==================== 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: decode_speech -------------------------------------------------------------------------------- /docs/auto_examples/images/sphx_glr_plot_fingerprint_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/sphx_glr_plot_fingerprint_001.png -------------------------------------------------------------------------------- /docs/auto_examples/images/sphx_glr_plot_murdock_data_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/sphx_glr_plot_murdock_data_001.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_crack_egg_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_crack_egg_thumb.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_plot_pfr_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_plot_pfr_thumb.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_plot_pnr_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_plot_pnr_thumb.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_plot_spc_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_plot_spc_thumb.png -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/plot_existing_axes.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/plot_existing_axes.doctree -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_plot_existing_axes_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_plot_existing_axes_thumb.png -------------------------------------------------------------------------------- /docs/auto_examples/images/sphx_glr_plot_existing_axes_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/sphx_glr_plot_existing_axes_001.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_create_egg_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_create_egg_thumb.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_plot_lagcrp_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_plot_lagcrp_thumb.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_recmat2egg_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_recmat2egg_thumb.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_5_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_5_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_6_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_6_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_7_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_7_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_8_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_8_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_9_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_9_0.png -------------------------------------------------------------------------------- /docs/_build/doctrees/nbsphinx/tutorial_optimal_presenter_7_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/nbsphinx/tutorial_optimal_presenter_7_1.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_decode_speech_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_decode_speech_thumb.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_plot_accuracy_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_plot_accuracy_thumb.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_plot_cmr_data_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_plot_cmr_data_thumb.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_plot_frfr_data_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_plot_frfr_data_thumb.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_plot_temporal_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_plot_temporal_thumb.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_10_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_10_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_11_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_11_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_11_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_11_1.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_12_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_12_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_13_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_13_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_14_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_14_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_15_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_15_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_16_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_16_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_17_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_17_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_18_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_18_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_18_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_18_1.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_19_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_19_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_20_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_20_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_20_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_20_1.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_21_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_21_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_22_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_22_2.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_23_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_23_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_23_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_23_1.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_23_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_23_2.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_24_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_24_1.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_24_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_24_3.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_24_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_24_5.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_25_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_25_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_25_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_25_1.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_25_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_25_2.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_26_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_26_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_26_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_26_1.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_26_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_26_2.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_26_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_26_3.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_26_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_26_5.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_28_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_28_0.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_28_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_28_1.png -------------------------------------------------------------------------------- /docs/tutorial/advanced_plotting_files/advanced_plotting_28_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/advanced_plotting_files/advanced_plotting_28_2.png -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/create_multisubject_egg.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/create_multisubject_egg.doctree -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_create_multisubject_egg_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_create_multisubject_egg_thumb.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_plot_fingerprint_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_plot_fingerprint_thumb.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_plot_murdock_data_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_plot_murdock_data_thumb.png -------------------------------------------------------------------------------- /tests/context.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import sys 4 | import os 5 | sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) 6 | 7 | import sample 8 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/quail.load_example_data.rst.txt: -------------------------------------------------------------------------------- 1 | quail.load\_example\_data 2 | ========================= 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autofunction:: load_example_data -------------------------------------------------------------------------------- /docs/_build/html/_static/bootstrap-2.3.2/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_static/bootstrap-2.3.2/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /docs/_build/html/_static/bootswatch-2.3.2/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_static/bootswatch-2.3.2/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_plot_existing_axes_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_plot_existing_axes_thumb.png -------------------------------------------------------------------------------- /docs/_build/doctrees/auto_examples/fingerprint_optimalpresenter.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/doctrees/auto_examples/fingerprint_optimalpresenter.doctree -------------------------------------------------------------------------------- /docs/_build/html/_images/sphx_glr_fingerprint_optimalpresenter_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_images/sphx_glr_fingerprint_optimalpresenter_thumb.png -------------------------------------------------------------------------------- /docs/_build/html/_static/bootstrap-2.3.2/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_static/bootstrap-2.3.2/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_create_multisubject_egg_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_create_multisubject_egg_thumb.png -------------------------------------------------------------------------------- /docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_14_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_14_0.png -------------------------------------------------------------------------------- /docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_14_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_14_1.png -------------------------------------------------------------------------------- /docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_19_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_19_0.png -------------------------------------------------------------------------------- /docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_19_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_19_1.png -------------------------------------------------------------------------------- /docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_23_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_23_0.png -------------------------------------------------------------------------------- /docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_23_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_23_1.png -------------------------------------------------------------------------------- /docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_27_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_27_0.png -------------------------------------------------------------------------------- /docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_27_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_27_1.png -------------------------------------------------------------------------------- /docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_29_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_29_0.png -------------------------------------------------------------------------------- /docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_29_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_29_1.png -------------------------------------------------------------------------------- /docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_33_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_33_0.png -------------------------------------------------------------------------------- /docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_35_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_35_0.png -------------------------------------------------------------------------------- /docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_35_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_35_1.png -------------------------------------------------------------------------------- /docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_39_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/tutorial/basic_analyze_and_plot_files/basic_analyze_and_plot_39_0.png -------------------------------------------------------------------------------- /docs/_build/html/_static/bootswatch-2.3.2/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/_build/html/_static/bootswatch-2.3.2/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /docs/auto_examples/images/thumb/sphx_glr_fingerprint_optimalpresenter_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ContextLab/quail/HEAD/docs/auto_examples/images/thumb/sphx_glr_fingerprint_optimalpresenter_thumb.png -------------------------------------------------------------------------------- /docs/auto_examples/crack_egg.codeobj.json: -------------------------------------------------------------------------------- 1 | { 2 | "quail.load": [ 3 | { 4 | "is_class": false, 5 | "is_explicit": false, 6 | "module": "quail", 7 | "module_short": "quail", 8 | "name": "load" 9 | } 10 | ] 11 | } -------------------------------------------------------------------------------- /docs/auto_examples/create_egg.codeobj.json: -------------------------------------------------------------------------------- 1 | { 2 | "quail.Egg": [ 3 | { 4 | "is_class": false, 5 | "is_explicit": false, 6 | "module": "quail", 7 | "module_short": "quail", 8 | "name": "Egg" 9 | } 10 | ] 11 | } -------------------------------------------------------------------------------- /docs/auto_examples/create_multisubject_egg.codeobj.json: -------------------------------------------------------------------------------- 1 | { 2 | "quail.Egg": [ 3 | { 4 | "is_class": false, 5 | "is_explicit": false, 6 | "module": "quail", 7 | "module_short": "quail", 8 | "name": "Egg" 9 | } 10 | ] 11 | } -------------------------------------------------------------------------------- /docs/auto_examples/recmat2egg.codeobj.json: -------------------------------------------------------------------------------- 1 | { 2 | "quail.recmat2egg": [ 3 | { 4 | "is_class": false, 5 | "is_explicit": false, 6 | "module": "quail", 7 | "module_short": "quail", 8 | "name": "recmat2egg" 9 | } 10 | ] 11 | } -------------------------------------------------------------------------------- /docs/tutorial/Makefile: -------------------------------------------------------------------------------- 1 | notebooks: 2 | 3 | tools/nb_to_doc.py egg 4 | tools/nb_to_doc.py basic_analyze_and_plot 5 | tools/nb_to_doc.py advanced_plotting 6 | tools/nb_to_doc.py speech_decoding 7 | tools/nb_to_doc.py fingerprint 8 | -------------------------------------------------------------------------------- /docs/auto_examples/decode_speech.codeobj.json: -------------------------------------------------------------------------------- 1 | { 2 | "quail.decode_speech": [ 3 | { 4 | "is_class": false, 5 | "is_explicit": false, 6 | "module": "quail", 7 | "module_short": "quail", 8 | "name": "decode_speech" 9 | } 10 | ] 11 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.flac 3 | .cache/ 4 | .idea/ 5 | quail.egg-info/ 6 | .DS_Store 7 | data/*.wav.* 8 | tests/__pycache__/* 9 | dist/* 10 | */__pycache__ 11 | .pytest_cache/* 12 | venv/ 13 | docs/_build 14 | docs/sg_execution_times.rst 15 | CLAUDE.md 16 | -------------------------------------------------------------------------------- /docs/_build/html/.buildinfo: -------------------------------------------------------------------------------- 1 | # Sphinx build info version 1 2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. 3 | config: 06f8dbfe2189432395f7cdc548d7e758 4 | tags: 645f666f9bcd5a90fca523b33c5a78b7 5 | -------------------------------------------------------------------------------- /tests/test_simulate.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | import quail.simulate as simulate 3 | import pandas as pd 4 | 5 | def test_simulate_list(): 6 | df = simulate.simulate_list() 7 | assert isinstance(df, pd.DataFrame) 8 | assert len(df) == 16 9 | assert 'COLOR' in df.columns 10 | -------------------------------------------------------------------------------- /docs/doc_requirements.txt: -------------------------------------------------------------------------------- 1 | sphinx>=4.0 2 | sphinx_bootstrap_theme 3 | sphinx-gallery 4 | numpydoc 5 | nbsphinx 6 | seaborn>=0.12.0 7 | matplotlib>=3.5.0 8 | scipy>=1.10.0 9 | numpy>=2.0.0 10 | pandas>=2.0.0 11 | joblib>=1.3.0 12 | sqlalchemy 13 | requests 14 | pydub 15 | pathos 16 | jupyter_client 17 | ipykernel 18 | -------------------------------------------------------------------------------- /docs/quail.FriedEgg.rst: -------------------------------------------------------------------------------- 1 | quail.FriedEgg 2 | ============== 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autoclass:: FriedEgg 7 | 8 | 9 | .. automethod:: __init__ 10 | 11 | 12 | .. rubric:: Methods 13 | 14 | .. autosummary:: 15 | 16 | ~FriedEgg.__init__ 17 | ~FriedEgg.get_data 18 | ~FriedEgg.plot 19 | ~FriedEgg.save 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /docs/quail.Fingerprint.rst: -------------------------------------------------------------------------------- 1 | quail.Fingerprint 2 | ================= 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autoclass:: Fingerprint 7 | 8 | 9 | .. automethod:: __init__ 10 | 11 | 12 | .. rubric:: Methods 13 | 14 | .. autosummary:: 15 | 16 | ~Fingerprint.__init__ 17 | ~Fingerprint.get_features 18 | ~Fingerprint.update 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # Read the Docs configuration file for Sphinx projects 2 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 3 | 4 | version: 2 5 | 6 | build: 7 | os: ubuntu-22.04 8 | tools: 9 | python: "3.11" 10 | 11 | sphinx: 12 | configuration: docs/conf.py 13 | 14 | python: 15 | install: 16 | - requirements: docs/doc_requirements.txt 17 | - method: pip 18 | path: . 19 | -------------------------------------------------------------------------------- /examples/crack_egg.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Crack Egg 5 | ============================= 6 | 7 | This an example of how to crack an egg (take a slice of subjects/lists from it) 8 | 9 | """ 10 | 11 | # Code source: Contextual Dynamics Laboratory 12 | # License: MIT 13 | 14 | #import 15 | import quail 16 | 17 | #load data 18 | egg = quail.load('example') 19 | 20 | #crack egg 21 | cracked_egg = egg.crack(subjects=[0], lists=[0]) 22 | 23 | cracked_egg.info() 24 | -------------------------------------------------------------------------------- /docs/auto_examples/crack_egg.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Crack Egg 5 | ============================= 6 | 7 | This an example of how to crack an egg (take a slice of subjects/lists from it) 8 | 9 | """ 10 | 11 | # Code source: Contextual Dynamics Laboratory 12 | # License: MIT 13 | 14 | #import 15 | import quail 16 | 17 | #load data 18 | egg = quail.load('example') 19 | 20 | #crack egg 21 | cracked_egg = egg.crack(subjects=[0], lists=[0]) 22 | 23 | cracked_egg.info() 24 | -------------------------------------------------------------------------------- /docs/quail.OptimalPresenter.rst: -------------------------------------------------------------------------------- 1 | quail.OptimalPresenter 2 | ====================== 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autoclass:: OptimalPresenter 7 | 8 | 9 | .. automethod:: __init__ 10 | 11 | 12 | .. rubric:: Methods 13 | 14 | .. autosummary:: 15 | 16 | ~OptimalPresenter.__init__ 17 | ~OptimalPresenter.get_params 18 | ~OptimalPresenter.order 19 | ~OptimalPresenter.set_params 20 | ~OptimalPresenter.set_strategy 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/quail.Egg.rst: -------------------------------------------------------------------------------- 1 | quail.Egg 2 | ========= 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autoclass:: Egg 7 | 8 | 9 | .. automethod:: __init__ 10 | 11 | 12 | .. rubric:: Methods 13 | 14 | .. autosummary:: 15 | 16 | ~Egg.__init__ 17 | ~Egg.analyze 18 | ~Egg.crack 19 | ~Egg.get_pres_features 20 | ~Egg.get_pres_items 21 | ~Egg.get_rec_features 22 | ~Egg.get_rec_items 23 | ~Egg.info 24 | ~Egg.save 25 | ~Egg.to_dict 26 | ~Egg.to_json 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /quail/__init__.py: -------------------------------------------------------------------------------- 1 | try: 2 | from importlib.metadata import version 3 | except ImportError: 4 | from importlib_metadata import version 5 | 6 | from .load import load, load_example_data, load_egg, loadEL 7 | from .egg import Egg, FriedEgg 8 | from .analysis.analysis import analyze 9 | from .plot import plot 10 | from .helpers import stack_eggs, crack_egg, recmat2egg, df2list 11 | from .decode_speech import decode_speech 12 | from .fingerprint import Fingerprint, OptimalPresenter 13 | from .distance import * 14 | 15 | 16 | __version__ = version('quail') 17 | 18 | -------------------------------------------------------------------------------- /examples/recmat2egg.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Make egg out of recall matrix 5 | ============================= 6 | 7 | This example shows how to make an egg out of a precomputed recall matrix so that 8 | the analysis and plotting functions can be used. 9 | 10 | """ 11 | 12 | # Code source: Contextual Dynamics Laboratory 13 | # License: MIT 14 | 15 | # import 16 | import quail 17 | 18 | # create fake recall matrix 19 | recmat = [[[5,4,3,0,1], [3,1,2,0]]] 20 | 21 | # create egg 22 | egg = quail.recmat2egg(recmat, list_length=6) 23 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/quail.Egg.rst.txt: -------------------------------------------------------------------------------- 1 | quail.Egg 2 | ========= 3 | 4 | .. currentmodule:: quail 5 | 6 | .. autoclass:: Egg 7 | 8 | 9 | .. automethod:: __init__ 10 | 11 | 12 | .. rubric:: Methods 13 | 14 | .. autosummary:: 15 | 16 | ~Egg.__init__ 17 | ~Egg.analyze 18 | ~Egg.crack 19 | ~Egg.get_pres_features 20 | ~Egg.get_pres_items 21 | ~Egg.get_rec_features 22 | ~Egg.get_rec_items 23 | ~Egg.info 24 | ~Egg.save 25 | ~Egg.to_dict 26 | ~Egg.to_json 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /docs/auto_examples/recmat2egg.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Make egg out of recall matrix 5 | ============================= 6 | 7 | This example shows how to make an egg out of a precomputed recall matrix so that 8 | the analysis and plotting functions can be used. 9 | 10 | """ 11 | 12 | # Code source: Contextual Dynamics Laboratory 13 | # License: MIT 14 | 15 | # import 16 | import quail 17 | 18 | # create fake recall matrix 19 | recmat = [[[5,4,3,0,1], [3,1,2,0]]] 20 | 21 | # create egg 22 | egg = quail.recmat2egg(recmat, list_length=6) 23 | -------------------------------------------------------------------------------- /examples/plot_pfr.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot probability of first recall 5 | ============================= 6 | 7 | This example plots the probability of an item being recalled first given its 8 | list position. 9 | 10 | """ 11 | 12 | # Code source: Contextual Dynamics Laboratory 13 | # License: MIT 14 | 15 | # import 16 | import quail 17 | 18 | #load data 19 | egg = quail.load('example') 20 | 21 | # analyze and plot 22 | fegg = egg.analyze('pfr', listgroup=['average']*8) 23 | 24 | fegg.plot(title='Probability of First Recall') 25 | -------------------------------------------------------------------------------- /examples/plot_spc.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot serial position curve 5 | ============================= 6 | 7 | This example plots the probability of recall success as a function of serial 8 | position during stimulus encoding. 9 | 10 | """ 11 | 12 | # Code source: Contextual Dynamics Laboratory 13 | # License: MIT 14 | 15 | # import 16 | import quail 17 | 18 | #load data 19 | egg = quail.load('example') 20 | 21 | # analyze and plot 22 | fegg = egg.analyze('spc', listgroup=['average']*8) 23 | 24 | fegg.plot(title='Serial Position Curve') 25 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_pfr.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot probability of first recall 5 | ============================= 6 | 7 | This example plots the probability of an item being recalled first given its 8 | list position. 9 | 10 | """ 11 | 12 | # Code source: Contextual Dynamics Laboratory 13 | # License: MIT 14 | 15 | # import 16 | import quail 17 | 18 | #load data 19 | egg = quail.load('example') 20 | 21 | # analyze and plot 22 | fegg = egg.analyze('pfr', listgroup=['average']*8) 23 | 24 | fegg.plot(title='Probability of First Recall') 25 | -------------------------------------------------------------------------------- /examples/plot_accuracy.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot free recall accuracy 5 | ============================= 6 | 7 | This example plots free recall accuracy for a single subject. 8 | 9 | """ 10 | 11 | # Code source: Contextual Dynamics Laboratory 12 | # License: MIT 13 | 14 | #import 15 | import quail 16 | 17 | #load data 18 | egg = quail.load('example') 19 | 20 | #analysis 21 | fegg = egg.analyze('accuracy', listgroup=['condition1']*4+['condition2']*4) 22 | 23 | #plot by list 24 | fegg.plot(plot_style='violin', title='Average Recall Accuracy') 25 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_spc.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot serial position curve 5 | ============================= 6 | 7 | This example plots the probability of recall success as a function of serial 8 | position during stimulus encoding. 9 | 10 | """ 11 | 12 | # Code source: Contextual Dynamics Laboratory 13 | # License: MIT 14 | 15 | # import 16 | import quail 17 | 18 | #load data 19 | egg = quail.load('example') 20 | 21 | # analyze and plot 22 | fegg = egg.analyze('spc', listgroup=['average']*8) 23 | 24 | fegg.plot(title='Serial Position Curve') 25 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_accuracy.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot free recall accuracy 5 | ============================= 6 | 7 | This example plots free recall accuracy for a single subject. 8 | 9 | """ 10 | 11 | # Code source: Contextual Dynamics Laboratory 12 | # License: MIT 13 | 14 | #import 15 | import quail 16 | 17 | #load data 18 | egg = quail.load('example') 19 | 20 | #analysis 21 | fegg = egg.analyze('accuracy', listgroup=['condition1']*4+['condition2']*4) 22 | 23 | #plot by list 24 | fegg.plot(plot_style='violin', title='Average Recall Accuracy') 25 | -------------------------------------------------------------------------------- /examples/plot_temporal.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot temporal clustering 5 | ============================= 6 | 7 | This example plots temporal clustering, the extent to which subject tend to 8 | recall neighboring items sequentially. 9 | 10 | """ 11 | 12 | # Code source: Contextual Dynamics Laboratory 13 | # License: MIT 14 | 15 | # import 16 | import quail 17 | 18 | #load data 19 | egg = quail.load('example') 20 | 21 | #analyze and plot 22 | fegg = egg.analyze('temporal', listgroup=['early']*4+['late']*4) 23 | 24 | fegg.plot(title='Temporal Clustering') 25 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_temporal.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot temporal clustering 5 | ============================= 6 | 7 | This example plots temporal clustering, the extent to which subject tend to 8 | recall neighboring items sequentially. 9 | 10 | """ 11 | 12 | # Code source: Contextual Dynamics Laboratory 13 | # License: MIT 14 | 15 | # import 16 | import quail 17 | 18 | #load data 19 | egg = quail.load('example') 20 | 21 | #analyze and plot 22 | fegg = egg.analyze('temporal', listgroup=['early']*4+['late']*4) 23 | 24 | fegg.plot(title='Temporal Clustering') 25 | -------------------------------------------------------------------------------- /examples/plot_pnr.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot probability of nth recall 5 | ============================= 6 | 7 | This example plots the probability of an item being recalled nth given its 8 | list position. 9 | 10 | """ 11 | 12 | # Code source: Contextual Dynamics Laboratory 13 | # License: MIT 14 | 15 | # import 16 | import quail 17 | 18 | #load data 19 | egg = quail.load('example') 20 | 21 | # analyze and plot 22 | fegg = egg.analyze('pnr', listgroup=['average']*8, 23 | position=5) 24 | 25 | fegg.plot(title='Probability of Recall') 26 | -------------------------------------------------------------------------------- /paper/codemeta.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "https://raw.githubusercontent.com/codemeta/codemeta/master/codemeta.jsonld", 3 | "@type": "Code", 4 | "author": [ 5 | 6 | ], 7 | "identifier": "", 8 | "codeRepository": "https://github.com/ContextLab/quail", 9 | "datePublished": "2017-08-31", 10 | "dateModified": "2017-10-05", 11 | "dateCreated": "2017-08-31", 12 | "description": " A Python package that facilitates analysis and visualization of behavioral data from memory experiments", 13 | "keywords": "memory, free recall, python", 14 | "license": "MIT", 15 | "title": "Quail", 16 | "version": "0.1.4" 17 | } 18 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_pnr.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot probability of nth recall 5 | ============================= 6 | 7 | This example plots the probability of an item being recalled nth given its 8 | list position. 9 | 10 | """ 11 | 12 | # Code source: Contextual Dynamics Laboratory 13 | # License: MIT 14 | 15 | # import 16 | import quail 17 | 18 | #load data 19 | egg = quail.load('example') 20 | 21 | # analyze and plot 22 | fegg = egg.analyze('pnr', listgroup=['average']*8, 23 | position=5) 24 | 25 | fegg.plot(title='Probability of Recall') 26 | -------------------------------------------------------------------------------- /examples/decode_speech.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Decode speech 5 | ============================= 6 | 7 | This example plots free recall accuracy for a single subject. 8 | 9 | """ 10 | 11 | # Code source: Contextual Dynamics Laboratory 12 | # License: MIT 13 | 14 | #import 15 | import quail 16 | 17 | # decode speech 18 | recall_data = quail.decode_speech('../data/sample.wav', save=True, 19 | speech_context=['DONKEY', 'PETUNIA'], 20 | keypath='path/to/key.json') 21 | 22 | # print results 23 | print(recall_data) 24 | -------------------------------------------------------------------------------- /quail/simulate.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import numpy as np 3 | import os 4 | 5 | def simulate_list(nwords=16, nrec=10, ncats=4): 6 | """A function to simulate a list""" 7 | 8 | # load wordpool 9 | # Assuming relative to this file 10 | path = os.path.join(os.path.dirname(__file__), 'data/cut_wordpool.csv') 11 | wp = pd.read_csv(path) 12 | 13 | # get one list - pick a random group (groups are 1-16) 14 | wp = wp[wp['GROUP']==np.random.choice(list(range(1, 17)), 1)[0]].sample(16) 15 | 16 | wp['COLOR'] = [[int(np.random.rand() * 255) for i in range(3)] for i in range(16)] 17 | 18 | return wp 19 | -------------------------------------------------------------------------------- /docs/auto_examples/decode_speech.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Decode speech 5 | ============================= 6 | 7 | This example plots free recall accuracy for a single subject. 8 | 9 | """ 10 | 11 | # Code source: Contextual Dynamics Laboratory 12 | # License: MIT 13 | 14 | #import 15 | import quail 16 | 17 | # decode speech 18 | recall_data = quail.decode_speech('../data/sample.wav', save=True, 19 | speech_context=['DONKEY', 'PETUNIA'], 20 | keypath='path/to/key.json') 21 | 22 | # print results 23 | print(recall_data) 24 | -------------------------------------------------------------------------------- /docs/auto_examples/fingerprint_optimalpresenter.codeobj.json: -------------------------------------------------------------------------------- 1 | { 2 | "Fingerprint": [ 3 | { 4 | "is_class": false, 5 | "is_explicit": false, 6 | "module": "quail", 7 | "module_short": "quail", 8 | "name": "Fingerprint" 9 | } 10 | ], 11 | "OptimalPresenter": [ 12 | { 13 | "is_class": false, 14 | "is_explicit": false, 15 | "module": "quail", 16 | "module_short": "quail", 17 | "name": "OptimalPresenter" 18 | } 19 | ], 20 | "quail.Egg": [ 21 | { 22 | "is_class": false, 23 | "is_explicit": false, 24 | "module": "quail", 25 | "module_short": "quail", 26 | "name": "Egg" 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /examples/plot_lagcrp.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot Lag-CRP 5 | ============================= 6 | 7 | This example plots a Lag-CRP as described in Kahana et al (1996). 8 | Given the recall of a stimulus in position n, this plot shows the probability of 9 | recalling stimuli in neighboring stimulus positions (n+/-5). 10 | 11 | """ 12 | 13 | # Code source: Contextual Dynamics Laboratory 14 | # License: MIT 15 | 16 | # import 17 | import quail 18 | 19 | # load data 20 | egg = quail.load('example') 21 | 22 | # analyze and plot 23 | fegg = egg.analyze('lagcrp', listgroup=['average']*8) 24 | 25 | fegg.plot(title='Lag-CRP') 26 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_lagcrp.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot Lag-CRP 5 | ============================= 6 | 7 | This example plots a Lag-CRP as described in Kahana et al (1996). 8 | Given the recall of a stimulus in position n, this plot shows the probability of 9 | recalling stimuli in neighboring stimulus positions (n+/-5). 10 | 11 | """ 12 | 13 | # Code source: Contextual Dynamics Laboratory 14 | # License: MIT 15 | 16 | # import 17 | import quail 18 | 19 | # load data 20 | egg = quail.load('example') 21 | 22 | # analyze and plot 23 | fegg = egg.analyze('lagcrp', listgroup=['average']*8) 24 | 25 | fegg.plot(title='Lag-CRP') 26 | -------------------------------------------------------------------------------- /examples/plot_existing_axes.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot free recall accuracy in an existing ax object 5 | ============================= 6 | 7 | This example plots free recall accuracy in an existing Matplotlib Axes object. 8 | 9 | """ 10 | 11 | # Code source: Contextual Dynamics Laboratory 12 | # License: MIT 13 | 14 | #import 15 | import quail 16 | import matplotlib.pyplot as plt 17 | 18 | #load data 19 | egg = quail.load('example') 20 | 21 | #analysis 22 | fegg = egg.analyze('accuracy', listgroup=['condition1']*4+['condition2']*4) 23 | 24 | #plot by list 25 | fig = plt.figure() 26 | ax = fig.add_subplot(2,1,1) 27 | fegg.plot(plot_style='violin', title='Average Recall Accuracy', ax=ax) 28 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_existing_axes.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot free recall accuracy in an existing ax object 5 | ============================= 6 | 7 | This example plots free recall accuracy in an existing Matplotlib Axes object. 8 | 9 | """ 10 | 11 | # Code source: Contextual Dynamics Laboratory 12 | # License: MIT 13 | 14 | #import 15 | import quail 16 | import matplotlib.pyplot as plt 17 | 18 | #load data 19 | egg = quail.load('example') 20 | 21 | #analysis 22 | fegg = egg.analyze('accuracy', listgroup=['condition1']*4+['condition2']*4) 23 | 24 | #plot by list 25 | fig = plt.figure() 26 | ax = fig.add_subplot(2,1,1) 27 | fegg.plot(plot_style='violin', title='Average Recall Accuracy', ax=ax) 28 | -------------------------------------------------------------------------------- /docs/tutorial/tools/nb_to_doc.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python 2 | """ 3 | Convert empty IPython notebook to a sphinx doc page. 4 | """ 5 | import sys 6 | from subprocess import check_call as sh 7 | 8 | 9 | def convert_nb(nbname): 10 | 11 | # Execute the notebook 12 | sh(["jupyter", "nbconvert", "--to", "notebook", 13 | "--execute", "--inplace", "--ExecutePreprocessor.timeout=600", nbname + ".ipynb"]) 14 | 15 | # Convert to .rst for Sphinx 16 | sh(["jupyter", "nbconvert", "--to", "rst", nbname + ".ipynb"]) 17 | 18 | # Clear notebook output 19 | sh(["jupyter", "nbconvert", "--to", "notebook", "--inplace", 20 | "--ClearOutputPreprocessor.enabled=True", nbname + ".ipynb"]) 21 | 22 | 23 | if __name__ == "__main__": 24 | for nbname in sys.argv[1:]: 25 | convert_nb(nbname) 26 | -------------------------------------------------------------------------------- /quail/distance.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import numpy as np 3 | from scipy.spatial.distance import cdist 4 | 5 | def match(a, b): 6 | "Returns 0 if match and 1 otherwise" 7 | return int(not np.array_equal(a, b)) 8 | 9 | def correlation(a, b): 10 | "Returns correlation distance between a and b" 11 | if isinstance(a, list): 12 | a = np.array(a) 13 | if isinstance(b, list): 14 | b = np.array(b) 15 | a = a.reshape(1, -1) 16 | b = b.reshape(1, -1) 17 | return cdist(a, b, 'correlation') 18 | 19 | def euclidean(a, b): 20 | "Returns euclidean distance between a and b" 21 | return np.linalg.norm(np.subtract(a, b)) 22 | 23 | dist_funcs = { 24 | 'match' : match, 25 | 'correlation' : correlation, 26 | 'euclidean' : euclidean 27 | } 28 | -------------------------------------------------------------------------------- /tests/test_distance.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from quail.distance import * 4 | import numpy as np 5 | import pytest 6 | from scipy.spatial.distance import cdist 7 | 8 | def test_match(): 9 | a = 'A' 10 | b = 'B' 11 | assert np.equal(match(a, b), 1) 12 | 13 | def test_euclidean_list(): 14 | a = [0, 1, 0] 15 | b = [0, 1, 0] 16 | assert np.equal(euclidean(a, b), 0) 17 | 18 | def test_euclidean_array(): 19 | a = np.array([0, 1, 0]) 20 | b = np.array([0, 1, 0]) 21 | assert np.equal(euclidean(a, b), 0) 22 | 23 | def test_correlation_list(): 24 | a = [0, 1, 0] 25 | b = [0, 1, 0] 26 | assert np.equal(correlation(a, b), 0) 27 | 28 | def test_correlation_array(): 29 | a = np.array([0, 1, 0]) 30 | b = np.array([0, 1, 0]) 31 | assert np.equal(correlation(a, b), 0) 32 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/tutorial.rst.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | .. _tutorial: 4 | 5 | How to use the Quail package 6 | ============================ 7 | 8 | The Egg data object 9 | ------------------- 10 | 11 | .. toctree:: 12 | :maxdepth: 2 13 | 14 | tutorial/egg.ipynb 15 | 16 | Basic analysis and plotting 17 | --------------------------- 18 | 19 | .. toctree:: 20 | :maxdepth: 2 21 | 22 | tutorial/basic_analyze_and_plot.ipynb 23 | 24 | More advanced plotting 25 | ---------------------- 26 | 27 | .. toctree:: 28 | :maxdepth: 2 29 | 30 | tutorial/advanced_plotting.ipynb 31 | 32 | Setting up speech decoding 33 | -------------------------- 34 | 35 | .. toctree:: 36 | :maxdepth: 2 37 | 38 | tutorial/speech_decoding.ipynb 39 | 40 | What is a "memory fingerprint"? 41 | ------------------------------- 42 | 43 | .. toctree:: 44 | :maxdepth: 2 45 | 46 | tutorial/fingerprint.ipynb 47 | -------------------------------------------------------------------------------- /examples/plot_fingerprint.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot memory fingerprint 5 | ============================= 6 | 7 | This example plots a fingerprint. Briefly, a fingerprint 8 | can be described as a summary of how a subject organizes information with 9 | respect to the multiple features of the stimuli. In addition to presentation 10 | and recall data, a features object is passed to the Egg class. It is comprised 11 | of a dictionary for each presented stimulus that contains feature dimensions and 12 | values for each stimulus. 13 | 14 | """ 15 | 16 | # Code source: Contextual Dynamics Laboratory 17 | # License: MIT 18 | 19 | #import 20 | import quail 21 | 22 | #load data 23 | egg = quail.load('example') 24 | 25 | # analyze and plot 26 | fegg = egg.analyze('fingerprint', listgroup=['average']*8) 27 | 28 | fegg.plot(title='Memory Fingerprint') 29 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_fingerprint.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Plot memory fingerprint 5 | ============================= 6 | 7 | This example plots a fingerprint. Briefly, a fingerprint 8 | can be described as a summary of how a subject organizes information with 9 | respect to the multiple features of the stimuli. In addition to presentation 10 | and recall data, a features object is passed to the Egg class. It is comprised 11 | of a dictionary for each presented stimulus that contains feature dimensions and 12 | values for each stimulus. 13 | 14 | """ 15 | 16 | # Code source: Contextual Dynamics Laboratory 17 | # License: MIT 18 | 19 | #import 20 | import quail 21 | 22 | #load data 23 | egg = quail.load('example') 24 | 25 | # analyze and plot 26 | fegg = egg.analyze('fingerprint', listgroup=['average']*8) 27 | 28 | fegg.plot(title='Memory Fingerprint') 29 | -------------------------------------------------------------------------------- /examples/create_multisubject_egg.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Create a multisubject egg 5 | ============================= 6 | 7 | An egg is made up of two primary pieces of data: `pres`, which are the 8 | words/stimuli that were presented to a subject and `rec`, which are the 9 | words/stimuli that were recalled by the subject. 10 | 11 | """ 12 | 13 | # Code source: Contextual Dynamics Laboratory 14 | # License: MIT 15 | 16 | import quail 17 | import numpy as np 18 | 19 | # presented words 20 | presented_words = [[['cat', 'bat', 'hat', 'goat'],['zoo', 'animal', 'zebra', 'horse']],[['cat', 'bat', 'hat', 'goat'],['zoo', 'animal', 'zebra', 'horse']]] 21 | 22 | # recalled words 23 | recalled_words = [[['bat', 'cat', 'goat', 'hat'],['animal', 'horse', 'zoo']],[['bat', 'cat', 'goat'],['animal', 'horse']]] 24 | 25 | # create egg 26 | egg = quail.Egg(pres=presented_words, rec=recalled_words) 27 | 28 | # analyze and plot 29 | fegg = egg.analyze('accuracy') 30 | 31 | fegg.plot(plot_style='violin', title='Average Recall Accuracy') 32 | -------------------------------------------------------------------------------- /docs/auto_examples/create_multisubject_egg.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | ============================= 4 | Create a multisubject egg 5 | ============================= 6 | 7 | An egg is made up of two primary pieces of data: `pres`, which are the 8 | words/stimuli that were presented to a subject and `rec`, which are the 9 | words/stimuli that were recalled by the subject. 10 | 11 | """ 12 | 13 | # Code source: Contextual Dynamics Laboratory 14 | # License: MIT 15 | 16 | import quail 17 | import numpy as np 18 | 19 | # presented words 20 | presented_words = [[['cat', 'bat', 'hat', 'goat'],['zoo', 'animal', 'zebra', 'horse']],[['cat', 'bat', 'hat', 'goat'],['zoo', 'animal', 'zebra', 'horse']]] 21 | 22 | # recalled words 23 | recalled_words = [[['bat', 'cat', 'goat', 'hat'],['animal', 'horse', 'zoo']],[['bat', 'cat', 'goat'],['animal', 'horse']]] 24 | 25 | # create egg 26 | egg = quail.Egg(pres=presented_words, rec=recalled_words) 27 | 28 | # analyze and plot 29 | fegg = egg.analyze('accuracy') 30 | 31 | fegg.plot(plot_style='violin', title='Average Recall Accuracy') 32 | -------------------------------------------------------------------------------- /tests/test_fried_egg.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from quail.egg import Egg, FriedEgg 4 | import pytest 5 | import pandas as pd 6 | import six 7 | import matplotlib.pyplot as plt 8 | 9 | presented=[[['cat', 'bat', 'hat', 'goat'],['zoo', 'animal', 'zebra', 'horse']]] 10 | recalled=[[['bat', 'cat', 'goat', 'hat'],['animal', 'horse', 'zoo']]] 11 | fried_egg = Egg(pres=presented,rec=recalled).analyze('accuracy') 12 | 13 | def test_fried_egg_data_is_df(): 14 | assert isinstance(fried_egg.data, pd.DataFrame) 15 | 16 | def test_fried_egg_analysis(): 17 | assert isinstance(fried_egg.analysis, six.string_types) 18 | assert fried_egg.analysis=='accuracy' 19 | 20 | def test_fried_egg_listlength(): 21 | assert fried_egg.list_length==4 22 | 23 | def test_fried_egg_n_lists(): 24 | assert fried_egg.n_lists==2 25 | 26 | def test_fried_egg_n_subjects(): 27 | assert fried_egg.n_subjects==1 28 | 29 | def test_fried_egg_position(): 30 | assert fried_egg.position==0 31 | 32 | def test_fried_egg_plot(): 33 | isinstance(fried_egg.plot(show=False), plt.Figure) 34 | -------------------------------------------------------------------------------- /docs/issues/coverage_expansion.md: -------------------------------------------------------------------------------- 1 | # Issue: Expand Test Coverage 2 | 3 | **Status**: Backlog 4 | **Created**: 2025-12-08 5 | **Priority**: Medium 6 | 7 | ## Objective 8 | Increase test coverage from ~78% to >90%, focusing on integration tests and edge cases that require mocking external dependencies or complex data structures. 9 | 10 | ## Tasks 11 | - [ ] **Load Module**: Add tests for `quail.load` (loading from .mat, .json, CAAN datasets). 12 | - Requires mocking filesystem and potentially `scipy.io.loadmat`. 13 | - [ ] **Plot Module**: Increase coverage for `plot.py` beyond basic smoke tests. 14 | - Verify plot content (ax limits, labels) more rigorously. 15 | - [ ] **Decode Speech**: Refactor and test `decode_speech.py` (currently low coverage). 16 | - Mock Whisper API / local model. 17 | - [ ] **LagCRP**: Add edge case tests for `lagcrp.py` (short lists, repeats). 18 | 19 | ## Notes 20 | - Current coverage (78%) is considered stable for core functionality (`egg`, `clustering`). 21 | - `lagcrp` optimization (Phase 5) might change the implementation, so tests should be added after that. 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2017 Contextual Dynamics Laboratory (www.context-lab.com) 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 9 | -------------------------------------------------------------------------------- /docs/tutorial.rst: -------------------------------------------------------------------------------- 1 | 2 | 3 | .. _tutorial: 4 | 5 | How to use the Quail package 6 | ============================ 7 | 8 | The Egg data object 9 | ------------------- 10 | 11 | .. toctree:: 12 | :maxdepth: 2 13 | 14 | tutorial/egg.ipynb 15 | 16 | Basic analysis and plotting 17 | --------------------------- 18 | 19 | .. toctree:: 20 | :maxdepth: 2 21 | 22 | tutorial/basic_analyze_and_plot.ipynb 23 | 24 | More advanced plotting 25 | ---------------------- 26 | 27 | .. toctree:: 28 | :maxdepth: 2 29 | 30 | tutorial/advanced_plotting.ipynb 31 | 32 | Setting up speech decoding 33 | -------------------------- 34 | 35 | .. toctree:: 36 | :maxdepth: 2 37 | 38 | tutorial/speech_decoding.ipynb 39 | 40 | What is a "memory fingerprint"? 41 | ------------------------------- 42 | 43 | .. toctree:: 44 | :maxdepth: 2 45 | 46 | tutorial/fingerprint.ipynb 47 | 48 | Example datasets 49 | ---------------- 50 | 51 | Quail includes several classic free recall datasets for demonstration and testing. 52 | These tutorials show how to load and analyze these datasets. 53 | 54 | .. toctree:: 55 | :maxdepth: 2 56 | 57 | tutorial/murdock_1962 58 | tutorial/cmr_polyn_2009 59 | tutorial/frfr_heusser_2018 60 | -------------------------------------------------------------------------------- /docs/auto_examples/crack_egg.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n# Crack Egg\n\nThis an example of how to crack an egg (take a slice of subjects/lists from it)\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "# Code source: Contextual Dynamics Laboratory\n# License: MIT\n\n#import\nimport quail\n\n#load data\negg = quail.load('example')\n\n#crack egg\ncracked_egg = egg.crack(subjects=[0], lists=[0])\n\ncracked_egg.info()" 19 | ] 20 | } 21 | ], 22 | "metadata": { 23 | "kernelspec": { 24 | "display_name": "Python 3", 25 | "language": "python", 26 | "name": "python3" 27 | }, 28 | "language_info": { 29 | "codemirror_mode": { 30 | "name": "ipython", 31 | "version": 3 32 | }, 33 | "file_extension": ".py", 34 | "mimetype": "text/x-python", 35 | "name": "python", 36 | "nbconvert_exporter": "python", 37 | "pygments_lexer": "ipython3", 38 | "version": "3.12.2" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 0 43 | } -------------------------------------------------------------------------------- /docs/auto_examples/plot_pfr.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n# Plot probability of first recall\n\nThis example plots the probability of an item being recalled first given its\nlist position.\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "# Code source: Contextual Dynamics Laboratory\n# License: MIT\n\n# import\nimport quail\n\n#load data\negg = quail.load('example')\n\n# analyze and plot\nfegg = egg.analyze('pfr', listgroup=['average']*8)\n\nfegg.plot(title='Probability of First Recall')" 19 | ] 20 | } 21 | ], 22 | "metadata": { 23 | "kernelspec": { 24 | "display_name": "Python 3", 25 | "language": "python", 26 | "name": "python3" 27 | }, 28 | "language_info": { 29 | "codemirror_mode": { 30 | "name": "ipython", 31 | "version": 3 32 | }, 33 | "file_extension": ".py", 34 | "mimetype": "text/x-python", 35 | "name": "python", 36 | "nbconvert_exporter": "python", 37 | "pygments_lexer": "ipython3", 38 | "version": "3.12.2" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 0 43 | } -------------------------------------------------------------------------------- /docs/auto_examples/recmat2egg.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n# Make egg out of recall matrix\n\nThis example shows how to make an egg out of a precomputed recall matrix so that\nthe analysis and plotting functions can be used.\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "# Code source: Contextual Dynamics Laboratory\n# License: MIT\n\n# import\nimport quail\n\n# create fake recall matrix\nrecmat = [[[5,4,3,0,1], [3,1,2,0]]]\n\n# create egg\negg = quail.recmat2egg(recmat, list_length=6)" 19 | ] 20 | } 21 | ], 22 | "metadata": { 23 | "kernelspec": { 24 | "display_name": "Python 3", 25 | "language": "python", 26 | "name": "python3" 27 | }, 28 | "language_info": { 29 | "codemirror_mode": { 30 | "name": "ipython", 31 | "version": 3 32 | }, 33 | "file_extension": ".py", 34 | "mimetype": "text/x-python", 35 | "name": "python", 36 | "nbconvert_exporter": "python", 37 | "pygments_lexer": "ipython3", 38 | "version": "3.12.2" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 0 43 | } -------------------------------------------------------------------------------- /docs/auto_examples/plot_spc.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n# Plot serial position curve\n\nThis example plots the probability of recall success as a function of serial\nposition during stimulus encoding.\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "# Code source: Contextual Dynamics Laboratory\n# License: MIT\n\n# import\nimport quail\n\n#load data\negg = quail.load('example')\n\n# analyze and plot\nfegg = egg.analyze('spc', listgroup=['average']*8)\n\nfegg.plot(title='Serial Position Curve')" 19 | ] 20 | } 21 | ], 22 | "metadata": { 23 | "kernelspec": { 24 | "display_name": "Python 3", 25 | "language": "python", 26 | "name": "python3" 27 | }, 28 | "language_info": { 29 | "codemirror_mode": { 30 | "name": "ipython", 31 | "version": 3 32 | }, 33 | "file_extension": ".py", 34 | "mimetype": "text/x-python", 35 | "name": "python", 36 | "nbconvert_exporter": "python", 37 | "pygments_lexer": "ipython3", 38 | "version": "3.12.2" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 0 43 | } -------------------------------------------------------------------------------- /docs/auto_examples/plot_accuracy.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n# Plot free recall accuracy\n\nThis example plots free recall accuracy for a single subject.\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "# Code source: Contextual Dynamics Laboratory\n# License: MIT\n\n#import\nimport quail\n\n#load data\negg = quail.load('example')\n\n#analysis\nfegg = egg.analyze('accuracy', listgroup=['condition1']*4+['condition2']*4)\n\n#plot by list\nfegg.plot(plot_style='violin', title='Average Recall Accuracy')" 19 | ] 20 | } 21 | ], 22 | "metadata": { 23 | "kernelspec": { 24 | "display_name": "Python 3", 25 | "language": "python", 26 | "name": "python3" 27 | }, 28 | "language_info": { 29 | "codemirror_mode": { 30 | "name": "ipython", 31 | "version": 3 32 | }, 33 | "file_extension": ".py", 34 | "mimetype": "text/x-python", 35 | "name": "python", 36 | "nbconvert_exporter": "python", 37 | "pygments_lexer": "ipython3", 38 | "version": "3.12.2" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 0 43 | } -------------------------------------------------------------------------------- /docs/auto_examples/plot_temporal.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n# Plot temporal clustering\n\nThis example plots temporal clustering, the extent to which subject tend to\nrecall neighboring items sequentially.\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "# Code source: Contextual Dynamics Laboratory\n# License: MIT\n\n# import\nimport quail\n\n#load data\negg = quail.load('example')\n\n#analyze and plot\nfegg = egg.analyze('temporal', listgroup=['early']*4+['late']*4)\n\nfegg.plot(title='Temporal Clustering')" 19 | ] 20 | } 21 | ], 22 | "metadata": { 23 | "kernelspec": { 24 | "display_name": "Python 3", 25 | "language": "python", 26 | "name": "python3" 27 | }, 28 | "language_info": { 29 | "codemirror_mode": { 30 | "name": "ipython", 31 | "version": 3 32 | }, 33 | "file_extension": ".py", 34 | "mimetype": "text/x-python", 35 | "name": "python", 36 | "nbconvert_exporter": "python", 37 | "pygments_lexer": "ipython3", 38 | "version": "3.12.2" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 0 43 | } -------------------------------------------------------------------------------- /docs/installation.rst: -------------------------------------------------------------------------------- 1 | .. _installation: 2 | 3 | Installation 4 | ============ 5 | 6 | To install quail in the recommended way, run: 7 | 8 | .. code-block:: bash 9 | 10 | pip install quail 11 | 12 | This will install quail with basic functionality. To install with speech decoding dependencies (Note: you will still need to install ffmpeg manually on your computer since it is not pip installable): 13 | 14 | .. code-block:: bash 15 | 16 | pip install quail[speech-decoding] 17 | 18 | For CDL users, you can install speech decoding and efficient learning capabilities like this: 19 | 20 | .. code-block:: bash 21 | 22 | pip install quail[speech-decoding, efficient-learning] 23 | 24 | To install directly from this repo (not recommended, but you'll get the "bleeding edge" version of the code): 25 | 26 | .. code-block:: bash 27 | 28 | git clone https://github.com/ContextLab/quail.git 29 | 30 | Then, navigate to the folder and type: 31 | 32 | .. code-block:: bash 33 | 34 | pip install -e . 35 | 36 | Requirements 37 | ------------ 38 | 39 | + python>=3.6 40 | + pandas>=2.0.0 41 | + seaborn>=0.12.0 42 | + matplotlib>=3.5.0 43 | + scipy>=1.10.0 44 | + numpy>=2.0.0 45 | + joblib>=1.3.0 46 | + pytest (for development) 47 | 48 | If installing from github (instead of pip), you must also install the requirements: 49 | 50 | .. code-block:: bash 51 | 52 | pip install -r requirements.txt 53 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_pnr.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n# Plot probability of nth recall\n\nThis example plots the probability of an item being recalled nth given its\nlist position.\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "# Code source: Contextual Dynamics Laboratory\n# License: MIT\n\n# import\nimport quail\n\n#load data\negg = quail.load('example')\n\n# analyze and plot\nfegg = egg.analyze('pnr', listgroup=['average']*8,\n position=5)\n\nfegg.plot(title='Probability of Recall')" 19 | ] 20 | } 21 | ], 22 | "metadata": { 23 | "kernelspec": { 24 | "display_name": "Python 3", 25 | "language": "python", 26 | "name": "python3" 27 | }, 28 | "language_info": { 29 | "codemirror_mode": { 30 | "name": "ipython", 31 | "version": 3 32 | }, 33 | "file_extension": ".py", 34 | "mimetype": "text/x-python", 35 | "name": "python", 36 | "nbconvert_exporter": "python", 37 | "pygments_lexer": "ipython3", 38 | "version": "3.12.2" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 0 43 | } -------------------------------------------------------------------------------- /docs/auto_examples/decode_speech.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n# Decode speech\n\nThis example plots free recall accuracy for a single subject.\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "# Code source: Contextual Dynamics Laboratory\n# License: MIT\n\n#import\nimport quail\n\n# decode speech\nrecall_data = quail.decode_speech('../data/sample.wav', save=True,\n speech_context=['DONKEY', 'PETUNIA'],\n keypath='path/to/key.json')\n\n# print results\nprint(recall_data)" 19 | ] 20 | } 21 | ], 22 | "metadata": { 23 | "kernelspec": { 24 | "display_name": "Python 3", 25 | "language": "python", 26 | "name": "python3" 27 | }, 28 | "language_info": { 29 | "codemirror_mode": { 30 | "name": "ipython", 31 | "version": 3 32 | }, 33 | "file_extension": ".py", 34 | "mimetype": "text/x-python", 35 | "name": "python", 36 | "nbconvert_exporter": "python", 37 | "pygments_lexer": "ipython3", 38 | "version": "3.12.2" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 0 43 | } -------------------------------------------------------------------------------- /docs/auto_examples/plot_lagcrp.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n# Plot Lag-CRP\n\nThis example plots a Lag-CRP as described in Kahana et al (1996).\nGiven the recall of a stimulus in position n, this plot shows the probability of\nrecalling stimuli in neighboring stimulus positions (n+/-5).\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "# Code source: Contextual Dynamics Laboratory\n# License: MIT\n\n# import\nimport quail\n\n# load data\negg = quail.load('example')\n\n# analyze and plot\nfegg = egg.analyze('lagcrp', listgroup=['average']*8)\n\nfegg.plot(title='Lag-CRP')" 19 | ] 20 | } 21 | ], 22 | "metadata": { 23 | "kernelspec": { 24 | "display_name": "Python 3", 25 | "language": "python", 26 | "name": "python3" 27 | }, 28 | "language_info": { 29 | "codemirror_mode": { 30 | "name": "ipython", 31 | "version": 3 32 | }, 33 | "file_extension": ".py", 34 | "mimetype": "text/x-python", 35 | "name": "python", 36 | "nbconvert_exporter": "python", 37 | "pygments_lexer": "ipython3", 38 | "version": "3.12.2" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 0 43 | } -------------------------------------------------------------------------------- /tests/test_recmat.py: -------------------------------------------------------------------------------- 1 | # from quail.egg import Egg 2 | # from quail.analysis.recmat import _recmat 3 | # import numpy as np 4 | # import pytest 5 | # 6 | # # generate some fake data 7 | # stimuli = [{ 8 | # 'item' : 'CAT', 9 | # 'category' : 'animal', 10 | # 'size' : 'bigger', 11 | # 'starting letter' : 'C', 12 | # 'length' : 3 13 | # }, 14 | # { 15 | # 'item' : 'DOG', 16 | # 'category' : 'animal', 17 | # 'size' : 'bigger', 18 | # 'starting letter' : 'D', 19 | # 'length' : 3 20 | # }, 21 | # { 22 | # 'item' : 'SHOE', 23 | # 'category' : 'object', 24 | # 'size' : 'smaller', 25 | # 'starting letter' : 'S', 26 | # 'length' : 4 27 | # }, 28 | # { 29 | # 'item' : 'HORSE', 30 | # 'category' : 'animal', 31 | # 'size' : 'bigger', 32 | # 'starting letter' : 'H', 33 | # 'length' : 5 34 | # } 35 | # ] 36 | # egg = Egg(pres=[stimuli], rec=[list(np.array(stimuli)[[3, 1, 0]])]) 37 | # 38 | # def test_exact(): 39 | # _recmat(egg.pres, egg.rec, 'exact', 'euclidean') 40 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | sudo: false 3 | services: 4 | - xvfb 5 | python: 6 | - '3.6' 7 | - '3.7' 8 | - '3.8' 9 | - '3.9' 10 | before_script: 11 | - export DISPLAY=:99.0 12 | - sleep 3 13 | install: 14 | - wget http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh 15 | - bash miniconda.sh -b -p $HOME/miniconda 16 | - export PATH="$HOME/miniconda/bin:$PATH" 17 | - hash -r 18 | - conda config --set always_yes yes --set changeps1 no 19 | - conda update -q conda 20 | - conda info -a 21 | - conda create -q -n testenv python=$TRAVIS_PYTHON_VERSION pip pytest numpy pandas 22 | scipy matplotlib seaborn scikit-learn 23 | - source activate testenv 24 | - pip install .[speech-decoding,efficient-learning] 25 | script: py.test 26 | notifications: 27 | slack: 28 | secure: aovihUl6ZPh96YPe83cQgxobxXK2xauqovtwlugv1A/J4zR8YZzbr4ykOOlJHnAOSrBUql1AU2+6QpbPx5dtYVvowI6VunaKUfsXMtQqKNNfQvcswOj9I6lLOi8ZUZt2ABZY6oEVFcawED21NeYSkrNmJndZ1n3j3b0XwxOkOFQtxrnVeRX6c/F6xPp5tu+f5ODDhitwq+IyCoKSu3WRBHvvtX8n0hJsRU2ZWI7G8mNDXkBybTjLG8wK+B5l9sPMa8y453+EbCDTgBDOMWSkKC7t6Cls+9qT48aRf3TEP0feI21bV/LbQN/GWPfz7paBHOUvadisWSJAEFmPuP1WlOL9noAU6OjHHl+87aqi2Cmw8ajcTbMhvCsmqascR3AIDfRBZFbq74duZ1yYiGlByUhPSLr2YkLbCL3WbYEgMvknvaAbKZkssXS70Xtyov1ynpD3uvGV4jVMFJntx672nz6VmJpyw4y6IZIV9Sh7zRaDZOKmE+iQQNEbH/2Bs5b0mW6QS8yH3Q5KML/RfD8P0FFScE4X6wZSQAjMvjIDtW3dlZkPurh7tyLHmkHNdlEcHzzRY/qXZo+qUUxDN2rKE0mI4fhaIbV4py9iNYsl4+G8WW1CkAf9YJPbfDQvSRugsN6nv7KH3JNv7Ne8kByO0s8qdCvl77POxv4vuQNAdkQ= 29 | -------------------------------------------------------------------------------- /tests/test_temporal.py: -------------------------------------------------------------------------------- 1 | from quail.egg import Egg 2 | import numpy as np 3 | import pytest 4 | 5 | # generate some fake data 6 | presented = ['CAT', 'DOG', 'SHOE', 'HORSE'] 7 | recalled = ['HORSE', 'DOG', 'CAT'] 8 | 9 | features = {'CAT' : { 10 | 'category' : 'animal', 11 | 'size' : 'bigger', 12 | 'starting letter' : 'C', 13 | 'length' : 3 14 | }, 15 | 'DOG' : { 16 | 'category' : 'animal', 17 | 'size' : 'bigger', 18 | 'starting letter' : 'D', 19 | 'length' : 3 20 | }, 21 | 'SHOE' : { 22 | 'category' : 'object', 23 | 'size' : 'smaller', 24 | 'starting letter' : 'S', 25 | 'length' : 4 26 | }, 27 | 'HORSE' : { 28 | 'category' : 'animal', 29 | 'size' : 'bigger', 30 | 'starting letter' : 'H', 31 | 'length' : 5 32 | }} 33 | 34 | presented = list(map(lambda x: {'item' : x}, presented)) 35 | for p in presented: 36 | p.update(**features[p['item']]) 37 | 38 | recalled = list(map(lambda x: {'item' : x}, recalled)) 39 | for r in recalled: 40 | r.update(**features[r['item']]) 41 | 42 | egg = Egg(pres=[[presented]],rec=[[recalled]]) 43 | 44 | def test_temporal(): 45 | egg.analyze('temporal') 46 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_existing_axes.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n# Plot free recall accuracy in an existing ax object\n\nThis example plots free recall accuracy in an existing Matplotlib Axes object.\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "# Code source: Contextual Dynamics Laboratory\n# License: MIT\n\n#import\nimport quail\nimport matplotlib.pyplot as plt\n\n#load data\negg = quail.load('example')\n\n#analysis\nfegg = egg.analyze('accuracy', listgroup=['condition1']*4+['condition2']*4)\n\n#plot by list\nfig = plt.figure()\nax = fig.add_subplot(2,1,1)\nfegg.plot(plot_style='violin', title='Average Recall Accuracy', ax=ax)" 19 | ] 20 | } 21 | ], 22 | "metadata": { 23 | "kernelspec": { 24 | "display_name": "Python 3", 25 | "language": "python", 26 | "name": "python3" 27 | }, 28 | "language_info": { 29 | "codemirror_mode": { 30 | "name": "ipython", 31 | "version": 3 32 | }, 33 | "file_extension": ".py", 34 | "mimetype": "text/x-python", 35 | "name": "python", 36 | "nbconvert_exporter": "python", 37 | "pygments_lexer": "ipython3", 38 | "version": "3.12.2" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 0 43 | } -------------------------------------------------------------------------------- /docs/index.rst: -------------------------------------------------------------------------------- 1 | .. sample documentation master file, created by 2 | sphinx-quickstart on Mon Apr 16 21:22:43 2012. 3 | You can adapt this file completely to your liking, but it should at least 4 | contain the root `toctree` directive. 5 | 6 | **Quail**: A python toolbox for analyzing free recall experiments and plotting the results 7 | ==================================================================================================== 8 | 9 | .. image:: _static/murdock_1962_analysis.png 10 | :width: 800pt 11 | :align: center 12 | :alt: Murdock (1962) Free Recall Analysis 13 | 14 | `Quail `_ is a library for analyzing and visualizing free recall data 15 | in Python. It is built on top of matplotlib and seaborn. For sample Jupyter 16 | notebooks, click `Examples `_ 17 | and to read the paper, click 18 | `Paper `_. 19 | 20 | Some key features of Quail are: 21 | 22 | + A simple data structure for encoding and recall data (eggs). 23 | + A set of functions for analyzing data: accuracy, serial position curves, p(first recall), lag-crp and memory fingerprints! 24 | + Simple API for customizing plot styles. 25 | + Set of powerful tools for importing data, automatically transcribing audio files and more. 26 | 27 | .. toctree:: 28 | :maxdepth: 2 29 | :caption: Contents: 30 | 31 | installation 32 | tutorial 33 | auto_examples/index 34 | api 35 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/index.rst.txt: -------------------------------------------------------------------------------- 1 | .. sample documentation master file, created by 2 | sphinx-quickstart on Mon Apr 16 21:22:43 2012. 3 | You can adapt this file completely to your liking, but it should at least 4 | contain the root `toctree` directive. 5 | 6 | **Quail**: A python toolbox for analyzing free recall experiments and plotting the results 7 | ==================================================================================================== 8 | 9 | .. image:: _static/plot_lagcrp.png 10 | :width: 400pt 11 | .. image:: _static/plot_fingerprint.png 12 | :width: 400pt 13 | 14 | `Quail `_ is a library for analyzing and visualizing free recall data 15 | in Python. It is built on top of matplotlib and seaborn. For sample Jupyter 16 | notebooks, click `Examples `_ 17 | and to read the paper, click 18 | `Paper `_. 19 | 20 | Some key features of Quail are: 21 | 22 | + A simple data structure for encoding and recall data (eggs). 23 | + A set of functions for analyzing data: accuracy, serial position curves, p(first recall), lag-crp and memory fingerprints! 24 | + Simple API for customizing plot styles. 25 | + Set of powerful tools for importing data, automatically transcribing audio files and more. 26 | 27 | .. toctree:: 28 | :maxdepth: 2 29 | :caption: Contents: 30 | 31 | installation 32 | tutorial 33 | auto_examples/index 34 | api 35 | -------------------------------------------------------------------------------- /docs/api.rst: -------------------------------------------------------------------------------- 1 | 2 | 3 | .. _api_ref: 4 | 5 | .. currentmodule:: quail 6 | 7 | API reference 8 | ============= 9 | 10 | .. _plot_api: 11 | 12 | Egg class 13 | ------------------ 14 | 15 | .. autosummary:: 16 | :toctree: 17 | 18 | quail.Egg 19 | 20 | FriedEgg class 21 | ------------------ 22 | 23 | .. autosummary:: 24 | :toctree: 25 | 26 | quail.FriedEgg 27 | 28 | Fingerprint class 29 | ------------------ 30 | 31 | .. autosummary:: 32 | :toctree: 33 | 34 | quail.Fingerprint 35 | 36 | Optimal Presenter class 37 | ----------------------- 38 | 39 | .. autosummary:: 40 | :toctree: 41 | 42 | quail.OptimalPresenter 43 | 44 | Load example data 45 | ----------------- 46 | 47 | .. autosummary:: 48 | :toctree: 49 | 50 | quail.load_example_data 51 | 52 | 53 | Load egg 54 | -------- 55 | 56 | .. autosummary:: 57 | :toctree: 58 | 59 | quail.load_egg 60 | 61 | Analyze 62 | ------- 63 | 64 | .. autosummary:: 65 | :toctree: 66 | 67 | quail.analyze 68 | 69 | Plot 70 | ---- 71 | 72 | .. autosummary:: 73 | :toctree: 74 | 75 | quail.plot 76 | 77 | Decode speech 78 | ------------- 79 | 80 | .. autosummary:: 81 | :toctree: 82 | 83 | quail.decode_speech 84 | 85 | Stack eggs 86 | ---------- 87 | 88 | .. autosummary:: 89 | :toctree: 90 | 91 | quail.stack_eggs 92 | 93 | Crack egg 94 | --------- 95 | 96 | .. autosummary:: 97 | :toctree: 98 | 99 | quail.crack_egg 100 | 101 | Convert recall matrix to egg 102 | ---------------------------- 103 | 104 | .. autosummary:: 105 | :toctree: 106 | 107 | quail.recmat2egg 108 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_fingerprint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n# Plot memory fingerprint\n\nThis example plots a fingerprint. Briefly, a fingerprint\ncan be described as a summary of how a subject organizes information with\nrespect to the multiple features of the stimuli. In addition to presentation\nand recall data, a features object is passed to the Egg class. It is comprised\nof a dictionary for each presented stimulus that contains feature dimensions and\nvalues for each stimulus.\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "# Code source: Contextual Dynamics Laboratory\n# License: MIT\n\n#import\nimport quail\n\n#load data\negg = quail.load('example')\n\n# analyze and plot\nfegg = egg.analyze('fingerprint', listgroup=['average']*8)\n\nfegg.plot(title='Memory Fingerprint')" 19 | ] 20 | } 21 | ], 22 | "metadata": { 23 | "kernelspec": { 24 | "display_name": "Python 3", 25 | "language": "python", 26 | "name": "python3" 27 | }, 28 | "language_info": { 29 | "codemirror_mode": { 30 | "name": "ipython", 31 | "version": 3 32 | }, 33 | "file_extension": ".py", 34 | "mimetype": "text/x-python", 35 | "name": "python", 36 | "nbconvert_exporter": "python", 37 | "pygments_lexer": "ipython3", 38 | "version": "3.12.2" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 0 43 | } -------------------------------------------------------------------------------- /docs/_build/html/_sources/api.rst.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | .. _api_ref: 4 | 5 | .. currentmodule:: quail 6 | 7 | API reference 8 | ============= 9 | 10 | .. _plot_api: 11 | 12 | Egg class 13 | ------------------ 14 | 15 | .. autosummary:: 16 | :toctree: 17 | 18 | quail.Egg 19 | 20 | FriedEgg class 21 | ------------------ 22 | 23 | .. autosummary:: 24 | :toctree: 25 | 26 | quail.FriedEgg 27 | 28 | Fingerprint class 29 | ------------------ 30 | 31 | .. autosummary:: 32 | :toctree: 33 | 34 | quail.Fingerprint 35 | 36 | Optimal Presenter class 37 | ----------------------- 38 | 39 | .. autosummary:: 40 | :toctree: 41 | 42 | quail.OptimalPresenter 43 | 44 | Load example data 45 | ----------------- 46 | 47 | .. autosummary:: 48 | :toctree: 49 | 50 | quail.load_example_data 51 | 52 | 53 | Load egg 54 | -------- 55 | 56 | .. autosummary:: 57 | :toctree: 58 | 59 | quail.load_egg 60 | 61 | Analyze 62 | ------- 63 | 64 | .. autosummary:: 65 | :toctree: 66 | 67 | quail.analyze 68 | 69 | Plot 70 | ---- 71 | 72 | .. autosummary:: 73 | :toctree: 74 | 75 | quail.plot 76 | 77 | Decode speech 78 | ------------- 79 | 80 | .. autosummary:: 81 | :toctree: 82 | 83 | quail.decode_speech 84 | 85 | Stack eggs 86 | ---------- 87 | 88 | .. autosummary:: 89 | :toctree: 90 | 91 | quail.stack_eggs 92 | 93 | Crack egg 94 | --------- 95 | 96 | .. autosummary:: 97 | :toctree: 98 | 99 | quail.crack_egg 100 | 101 | Convert recall matrix to egg 102 | ---------------------------- 103 | 104 | .. autosummary:: 105 | :toctree: 106 | 107 | quail.recmat2egg 108 | -------------------------------------------------------------------------------- /tests/test_fingerprint.py: -------------------------------------------------------------------------------- 1 | from quail.egg import Egg 2 | import numpy as np 3 | import pytest 4 | 5 | # generate some fake data 6 | presented = ['CAT', 'DOG', 'SHOE', 'HORSE'] 7 | recalled = ['HORSE', 'DOG', 'CAT'] 8 | 9 | features = {'CAT' : { 10 | 'category' : 'animal', 11 | 'size' : 'bigger', 12 | 'starting letter' : 'C', 13 | 'length' : 3 14 | }, 15 | 'DOG' : { 16 | 'category' : 'animal', 17 | 'size' : 'bigger', 18 | 'starting letter' : 'D', 19 | 'length' : 3 20 | }, 21 | 'SHOE' : { 22 | 'category' : 'object', 23 | 'size' : 'smaller', 24 | 'starting letter' : 'S', 25 | 'length' : 4 26 | }, 27 | 'HORSE' : { 28 | 'category' : 'animal', 29 | 'size' : 'bigger', 30 | 'starting letter' : 'H', 31 | 'length' : 5 32 | }} 33 | 34 | presented = list(map(lambda x: {'item' : x}, presented)) 35 | for p in presented: 36 | p.update(**features[p['item']]) 37 | 38 | recalled = list(map(lambda x: {'item' : x}, recalled)) 39 | for r in recalled: 40 | r.update(**features[r['item']]) 41 | 42 | egg = Egg(pres=[[presented]],rec=[[recalled]]) 43 | 44 | def test_fingerprint(): 45 | assert np.allclose(egg.analyze('fingerprint', features=['category']).data.values[0], np.array([0.91666667])) 46 | 47 | def test_fingerprint_permute_runs(): 48 | assert egg.analyze('fingerprint', permute=True, n_perms=3) 49 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_lagcrp.codeobj.json: -------------------------------------------------------------------------------- 1 | { 2 | "egg": [ 3 | { 4 | "is_class": false, 5 | "is_explicit": false, 6 | "module": "quail.egg", 7 | "module_short": "quail", 8 | "name": "Egg" 9 | }, 10 | { 11 | "is_class": false, 12 | "is_explicit": false, 13 | "module": "quail", 14 | "module_short": "quail", 15 | "name": "Egg" 16 | } 17 | ], 18 | "egg.analyze": [ 19 | { 20 | "is_class": false, 21 | "is_explicit": false, 22 | "module": "quail.egg", 23 | "module_short": "quail", 24 | "name": "Egg.analyze" 25 | }, 26 | { 27 | "is_class": false, 28 | "is_explicit": false, 29 | "module": "quail", 30 | "module_short": "quail", 31 | "name": "Egg.analyze" 32 | } 33 | ], 34 | "fegg": [ 35 | { 36 | "is_class": false, 37 | "is_explicit": false, 38 | "module": "quail.egg", 39 | "module_short": "quail", 40 | "name": "FriedEgg" 41 | }, 42 | { 43 | "is_class": false, 44 | "is_explicit": false, 45 | "module": "quail", 46 | "module_short": "quail", 47 | "name": "FriedEgg" 48 | } 49 | ], 50 | "fegg.plot": [ 51 | { 52 | "is_class": false, 53 | "is_explicit": false, 54 | "module": "quail.egg", 55 | "module_short": "quail", 56 | "name": "FriedEgg.plot" 57 | }, 58 | { 59 | "is_class": false, 60 | "is_explicit": false, 61 | "module": "quail", 62 | "module_short": "quail", 63 | "name": "FriedEgg.plot" 64 | } 65 | ], 66 | "quail.load": [ 67 | { 68 | "is_class": false, 69 | "is_explicit": false, 70 | "module": "builtins", 71 | "module_short": "builtins", 72 | "name": "function" 73 | }, 74 | { 75 | "is_class": false, 76 | "is_explicit": false, 77 | "module": "quail", 78 | "module_short": "quail", 79 | "name": "load" 80 | } 81 | ] 82 | } -------------------------------------------------------------------------------- /docs/auto_examples/plot_pfr.codeobj.json: -------------------------------------------------------------------------------- 1 | { 2 | "egg": [ 3 | { 4 | "is_class": false, 5 | "is_explicit": false, 6 | "module": "quail.egg", 7 | "module_short": "quail", 8 | "name": "Egg" 9 | }, 10 | { 11 | "is_class": false, 12 | "is_explicit": false, 13 | "module": "quail", 14 | "module_short": "quail", 15 | "name": "Egg" 16 | } 17 | ], 18 | "egg.analyze": [ 19 | { 20 | "is_class": false, 21 | "is_explicit": false, 22 | "module": "quail.egg", 23 | "module_short": "quail", 24 | "name": "Egg.analyze" 25 | }, 26 | { 27 | "is_class": false, 28 | "is_explicit": false, 29 | "module": "quail", 30 | "module_short": "quail", 31 | "name": "Egg.analyze" 32 | } 33 | ], 34 | "fegg": [ 35 | { 36 | "is_class": false, 37 | "is_explicit": false, 38 | "module": "quail.egg", 39 | "module_short": "quail", 40 | "name": "FriedEgg" 41 | }, 42 | { 43 | "is_class": false, 44 | "is_explicit": false, 45 | "module": "quail", 46 | "module_short": "quail", 47 | "name": "FriedEgg" 48 | } 49 | ], 50 | "fegg.plot": [ 51 | { 52 | "is_class": false, 53 | "is_explicit": false, 54 | "module": "quail.egg", 55 | "module_short": "quail", 56 | "name": "FriedEgg.plot" 57 | }, 58 | { 59 | "is_class": false, 60 | "is_explicit": false, 61 | "module": "quail", 62 | "module_short": "quail", 63 | "name": "FriedEgg.plot" 64 | } 65 | ], 66 | "quail.load": [ 67 | { 68 | "is_class": false, 69 | "is_explicit": false, 70 | "module": "builtins", 71 | "module_short": "builtins", 72 | "name": "function" 73 | }, 74 | { 75 | "is_class": false, 76 | "is_explicit": false, 77 | "module": "quail", 78 | "module_short": "quail", 79 | "name": "load" 80 | } 81 | ] 82 | } -------------------------------------------------------------------------------- /docs/auto_examples/plot_pnr.codeobj.json: -------------------------------------------------------------------------------- 1 | { 2 | "egg": [ 3 | { 4 | "is_class": false, 5 | "is_explicit": false, 6 | "module": "quail.egg", 7 | "module_short": "quail", 8 | "name": "Egg" 9 | }, 10 | { 11 | "is_class": false, 12 | "is_explicit": false, 13 | "module": "quail", 14 | "module_short": "quail", 15 | "name": "Egg" 16 | } 17 | ], 18 | "egg.analyze": [ 19 | { 20 | "is_class": false, 21 | "is_explicit": false, 22 | "module": "quail.egg", 23 | "module_short": "quail", 24 | "name": "Egg.analyze" 25 | }, 26 | { 27 | "is_class": false, 28 | "is_explicit": false, 29 | "module": "quail", 30 | "module_short": "quail", 31 | "name": "Egg.analyze" 32 | } 33 | ], 34 | "fegg": [ 35 | { 36 | "is_class": false, 37 | "is_explicit": false, 38 | "module": "quail.egg", 39 | "module_short": "quail", 40 | "name": "FriedEgg" 41 | }, 42 | { 43 | "is_class": false, 44 | "is_explicit": false, 45 | "module": "quail", 46 | "module_short": "quail", 47 | "name": "FriedEgg" 48 | } 49 | ], 50 | "fegg.plot": [ 51 | { 52 | "is_class": false, 53 | "is_explicit": false, 54 | "module": "quail.egg", 55 | "module_short": "quail", 56 | "name": "FriedEgg.plot" 57 | }, 58 | { 59 | "is_class": false, 60 | "is_explicit": false, 61 | "module": "quail", 62 | "module_short": "quail", 63 | "name": "FriedEgg.plot" 64 | } 65 | ], 66 | "quail.load": [ 67 | { 68 | "is_class": false, 69 | "is_explicit": false, 70 | "module": "builtins", 71 | "module_short": "builtins", 72 | "name": "function" 73 | }, 74 | { 75 | "is_class": false, 76 | "is_explicit": false, 77 | "module": "quail", 78 | "module_short": "quail", 79 | "name": "load" 80 | } 81 | ] 82 | } -------------------------------------------------------------------------------- /docs/auto_examples/plot_spc.codeobj.json: -------------------------------------------------------------------------------- 1 | { 2 | "egg": [ 3 | { 4 | "is_class": false, 5 | "is_explicit": false, 6 | "module": "quail.egg", 7 | "module_short": "quail", 8 | "name": "Egg" 9 | }, 10 | { 11 | "is_class": false, 12 | "is_explicit": false, 13 | "module": "quail", 14 | "module_short": "quail", 15 | "name": "Egg" 16 | } 17 | ], 18 | "egg.analyze": [ 19 | { 20 | "is_class": false, 21 | "is_explicit": false, 22 | "module": "quail.egg", 23 | "module_short": "quail", 24 | "name": "Egg.analyze" 25 | }, 26 | { 27 | "is_class": false, 28 | "is_explicit": false, 29 | "module": "quail", 30 | "module_short": "quail", 31 | "name": "Egg.analyze" 32 | } 33 | ], 34 | "fegg": [ 35 | { 36 | "is_class": false, 37 | "is_explicit": false, 38 | "module": "quail.egg", 39 | "module_short": "quail", 40 | "name": "FriedEgg" 41 | }, 42 | { 43 | "is_class": false, 44 | "is_explicit": false, 45 | "module": "quail", 46 | "module_short": "quail", 47 | "name": "FriedEgg" 48 | } 49 | ], 50 | "fegg.plot": [ 51 | { 52 | "is_class": false, 53 | "is_explicit": false, 54 | "module": "quail.egg", 55 | "module_short": "quail", 56 | "name": "FriedEgg.plot" 57 | }, 58 | { 59 | "is_class": false, 60 | "is_explicit": false, 61 | "module": "quail", 62 | "module_short": "quail", 63 | "name": "FriedEgg.plot" 64 | } 65 | ], 66 | "quail.load": [ 67 | { 68 | "is_class": false, 69 | "is_explicit": false, 70 | "module": "builtins", 71 | "module_short": "builtins", 72 | "name": "function" 73 | }, 74 | { 75 | "is_class": false, 76 | "is_explicit": false, 77 | "module": "quail", 78 | "module_short": "quail", 79 | "name": "load" 80 | } 81 | ] 82 | } -------------------------------------------------------------------------------- /docs/auto_examples/plot_accuracy.codeobj.json: -------------------------------------------------------------------------------- 1 | { 2 | "egg": [ 3 | { 4 | "is_class": false, 5 | "is_explicit": false, 6 | "module": "quail.egg", 7 | "module_short": "quail", 8 | "name": "Egg" 9 | }, 10 | { 11 | "is_class": false, 12 | "is_explicit": false, 13 | "module": "quail", 14 | "module_short": "quail", 15 | "name": "Egg" 16 | } 17 | ], 18 | "egg.analyze": [ 19 | { 20 | "is_class": false, 21 | "is_explicit": false, 22 | "module": "quail.egg", 23 | "module_short": "quail", 24 | "name": "Egg.analyze" 25 | }, 26 | { 27 | "is_class": false, 28 | "is_explicit": false, 29 | "module": "quail", 30 | "module_short": "quail", 31 | "name": "Egg.analyze" 32 | } 33 | ], 34 | "fegg": [ 35 | { 36 | "is_class": false, 37 | "is_explicit": false, 38 | "module": "quail.egg", 39 | "module_short": "quail", 40 | "name": "FriedEgg" 41 | }, 42 | { 43 | "is_class": false, 44 | "is_explicit": false, 45 | "module": "quail", 46 | "module_short": "quail", 47 | "name": "FriedEgg" 48 | } 49 | ], 50 | "fegg.plot": [ 51 | { 52 | "is_class": false, 53 | "is_explicit": false, 54 | "module": "quail.egg", 55 | "module_short": "quail", 56 | "name": "FriedEgg.plot" 57 | }, 58 | { 59 | "is_class": false, 60 | "is_explicit": false, 61 | "module": "quail", 62 | "module_short": "quail", 63 | "name": "FriedEgg.plot" 64 | } 65 | ], 66 | "quail.load": [ 67 | { 68 | "is_class": false, 69 | "is_explicit": false, 70 | "module": "builtins", 71 | "module_short": "builtins", 72 | "name": "function" 73 | }, 74 | { 75 | "is_class": false, 76 | "is_explicit": false, 77 | "module": "quail", 78 | "module_short": "quail", 79 | "name": "load" 80 | } 81 | ] 82 | } -------------------------------------------------------------------------------- /docs/auto_examples/plot_fingerprint.codeobj.json: -------------------------------------------------------------------------------- 1 | { 2 | "egg": [ 3 | { 4 | "is_class": false, 5 | "is_explicit": false, 6 | "module": "quail.egg", 7 | "module_short": "quail", 8 | "name": "Egg" 9 | }, 10 | { 11 | "is_class": false, 12 | "is_explicit": false, 13 | "module": "quail", 14 | "module_short": "quail", 15 | "name": "Egg" 16 | } 17 | ], 18 | "egg.analyze": [ 19 | { 20 | "is_class": false, 21 | "is_explicit": false, 22 | "module": "quail.egg", 23 | "module_short": "quail", 24 | "name": "Egg.analyze" 25 | }, 26 | { 27 | "is_class": false, 28 | "is_explicit": false, 29 | "module": "quail", 30 | "module_short": "quail", 31 | "name": "Egg.analyze" 32 | } 33 | ], 34 | "fegg": [ 35 | { 36 | "is_class": false, 37 | "is_explicit": false, 38 | "module": "quail.egg", 39 | "module_short": "quail", 40 | "name": "FriedEgg" 41 | }, 42 | { 43 | "is_class": false, 44 | "is_explicit": false, 45 | "module": "quail", 46 | "module_short": "quail", 47 | "name": "FriedEgg" 48 | } 49 | ], 50 | "fegg.plot": [ 51 | { 52 | "is_class": false, 53 | "is_explicit": false, 54 | "module": "quail.egg", 55 | "module_short": "quail", 56 | "name": "FriedEgg.plot" 57 | }, 58 | { 59 | "is_class": false, 60 | "is_explicit": false, 61 | "module": "quail", 62 | "module_short": "quail", 63 | "name": "FriedEgg.plot" 64 | } 65 | ], 66 | "quail.load": [ 67 | { 68 | "is_class": false, 69 | "is_explicit": false, 70 | "module": "builtins", 71 | "module_short": "builtins", 72 | "name": "function" 73 | }, 74 | { 75 | "is_class": false, 76 | "is_explicit": false, 77 | "module": "quail", 78 | "module_short": "quail", 79 | "name": "load" 80 | } 81 | ] 82 | } -------------------------------------------------------------------------------- /docs/auto_examples/plot_temporal.codeobj.json: -------------------------------------------------------------------------------- 1 | { 2 | "egg": [ 3 | { 4 | "is_class": false, 5 | "is_explicit": false, 6 | "module": "quail.egg", 7 | "module_short": "quail", 8 | "name": "Egg" 9 | }, 10 | { 11 | "is_class": false, 12 | "is_explicit": false, 13 | "module": "quail", 14 | "module_short": "quail", 15 | "name": "Egg" 16 | } 17 | ], 18 | "egg.analyze": [ 19 | { 20 | "is_class": false, 21 | "is_explicit": false, 22 | "module": "quail.egg", 23 | "module_short": "quail", 24 | "name": "Egg.analyze" 25 | }, 26 | { 27 | "is_class": false, 28 | "is_explicit": false, 29 | "module": "quail", 30 | "module_short": "quail", 31 | "name": "Egg.analyze" 32 | } 33 | ], 34 | "fegg": [ 35 | { 36 | "is_class": false, 37 | "is_explicit": false, 38 | "module": "quail.egg", 39 | "module_short": "quail", 40 | "name": "FriedEgg" 41 | }, 42 | { 43 | "is_class": false, 44 | "is_explicit": false, 45 | "module": "quail", 46 | "module_short": "quail", 47 | "name": "FriedEgg" 48 | } 49 | ], 50 | "fegg.plot": [ 51 | { 52 | "is_class": false, 53 | "is_explicit": false, 54 | "module": "quail.egg", 55 | "module_short": "quail", 56 | "name": "FriedEgg.plot" 57 | }, 58 | { 59 | "is_class": false, 60 | "is_explicit": false, 61 | "module": "quail", 62 | "module_short": "quail", 63 | "name": "FriedEgg.plot" 64 | } 65 | ], 66 | "quail.load": [ 67 | { 68 | "is_class": false, 69 | "is_explicit": false, 70 | "module": "builtins", 71 | "module_short": "builtins", 72 | "name": "function" 73 | }, 74 | { 75 | "is_class": false, 76 | "is_explicit": false, 77 | "module": "quail", 78 | "module_short": "quail", 79 | "name": "load" 80 | } 81 | ] 82 | } -------------------------------------------------------------------------------- /docs/auto_examples/create_multisubject_egg.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n# Create a multisubject egg\n\nAn egg is made up of two primary pieces of data: `pres`, which are the\nwords/stimuli that were presented to a subject and `rec`, which are the\nwords/stimuli that were recalled by the subject.\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "# Code source: Contextual Dynamics Laboratory\n# License: MIT\n\nimport quail\nimport numpy as np\n\n# presented words\npresented_words = [[['cat', 'bat', 'hat', 'goat'],['zoo', 'animal', 'zebra', 'horse']],[['cat', 'bat', 'hat', 'goat'],['zoo', 'animal', 'zebra', 'horse']]]\n\n# recalled words\nrecalled_words = [[['bat', 'cat', 'goat', 'hat'],['animal', 'horse', 'zoo']],[['bat', 'cat', 'goat'],['animal', 'horse']]]\n\n# create egg\negg = quail.Egg(pres=presented_words, rec=recalled_words)\n\n# analyze and plot\nfegg = egg.analyze('accuracy')\n\nfegg.plot(plot_style='violin', title='Average Recall Accuracy')" 19 | ] 20 | } 21 | ], 22 | "metadata": { 23 | "kernelspec": { 24 | "display_name": "Python 3", 25 | "language": "python", 26 | "name": "python3" 27 | }, 28 | "language_info": { 29 | "codemirror_mode": { 30 | "name": "ipython", 31 | "version": 3 32 | }, 33 | "file_extension": ".py", 34 | "mimetype": "text/x-python", 35 | "name": "python", 36 | "nbconvert_exporter": "python", 37 | "pygments_lexer": "ipython3", 38 | "version": "3.12.2" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 0 43 | } -------------------------------------------------------------------------------- /tests/test_fingerprint_optimizer.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pytest 4 | import quail 5 | from quail.fingerprint import Fingerprint, OptimalPresenter 6 | from quail.load import load_example_data 7 | 8 | egg = load_example_data().crack(subjects=[0]) 9 | f = Fingerprint() 10 | f_egg = Fingerprint(init=egg) 11 | f_egg_perm = Fingerprint(init=egg, permute=True, nperms=10) 12 | 13 | def test_fingerprint_init(): 14 | assert isinstance(f, quail.Fingerprint) 15 | 16 | def test_fingerprint_init_with_egg(): 17 | assert isinstance(f, quail.Fingerprint) 18 | 19 | def test_fingerprint_init_with_egg_permute(): 20 | assert isinstance(f_egg_perm, quail.Fingerprint) 21 | 22 | def test_fingerprint_update(): 23 | f.update(egg) 24 | assert isinstance(f, quail.Fingerprint) 25 | assert len(f.history)==1 26 | 27 | def test_fingerprint_get_features(): 28 | assert isinstance(f_egg.get_features(), list) 29 | 30 | presenter = OptimalPresenter() 31 | params = { 32 | 'fingerprint' : f 33 | } 34 | presenter_params = OptimalPresenter(params=params, strategy='stabilize') 35 | 36 | def test_optimal_presenter_init(): 37 | assert isinstance(presenter, quail.OptimalPresenter) 38 | 39 | def test_optimal_presenter_init_w_params(): 40 | assert isinstance(presenter_params, quail.OptimalPresenter) 41 | 42 | def test_optimal_presenter_set_params(): 43 | presenter_params.set_params('alpha', 3) 44 | assert presenter_params.get_params('alpha') is 3 45 | 46 | def test_optimal_presenter_set_strategy(): 47 | presenter_params.set_strategy('stabilize') 48 | assert presenter_params.strategy is 'stabilize' 49 | 50 | def test_optimal_presenter_order(): 51 | egg = load_example_data() 52 | egg_slice = egg.crack(subjects=[0], lists=[0]) 53 | reordered_egg = presenter.order(egg_slice, nperms=10) 54 | assert isinstance(reordered_egg, quail.Egg) 55 | -------------------------------------------------------------------------------- /quail/analysis/accuracy.py: -------------------------------------------------------------------------------- 1 | from __future__ import division 2 | import numpy as np 3 | from .recmat import recall_matrix 4 | 5 | def accuracy_helper(egg, match='exact', distance='euclidean', 6 | features=None): 7 | """ 8 | Computes proportion of words recalled 9 | 10 | Parameters 11 | ---------- 12 | egg : quail.Egg 13 | Data to analyze 14 | 15 | match : str (exact, best or smooth) 16 | Matching approach to compute recall matrix. If exact, the presented and 17 | recalled items must be identical (default). If best, the recalled item 18 | that is most similar to the presented items will be selected. If smooth, 19 | a weighted average of all presented items will be used, where the 20 | weights are derived from the similarity between the recalled item and 21 | each presented item. 22 | 23 | distance : str 24 | The distance function used to compare presented and recalled items. 25 | Applies only to 'best' and 'smooth' matching approaches. Can be any 26 | distance function supported by numpy.spatial.distance.cdist. 27 | 28 | Returns 29 | ---------- 30 | prop_recalled : numpy array 31 | proportion of words recalled 32 | 33 | """ 34 | 35 | def acc(lst): 36 | return len([i for i in np.unique(lst) if i>=0])/(egg.list_length) 37 | 38 | opts = dict(match=match, distance=distance, features=features) 39 | if match == 'exact': 40 | opts.update({'features' : 'item'}) 41 | recmat = recall_matrix(egg, **opts) 42 | 43 | if match in ['exact', 'best']: 44 | result = [acc(lst) for lst in recmat] 45 | elif match == 'smooth': 46 | result = np.mean(recmat, axis=1) 47 | else: 48 | raise ValueError('Match must be set to exact, best or smooth.') 49 | 50 | return np.nanmean(result, axis=0) 51 | -------------------------------------------------------------------------------- /docs/auto_examples/crack_egg.rst: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/crack_egg.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_crack_egg.py: 19 | 20 | 21 | ============================= 22 | Crack Egg 23 | ============================= 24 | 25 | This an example of how to crack an egg (take a slice of subjects/lists from it) 26 | 27 | .. GENERATED FROM PYTHON SOURCE LINES 10-24 28 | 29 | .. code-block:: Python 30 | 31 | 32 | # Code source: Contextual Dynamics Laboratory 33 | # License: MIT 34 | 35 | #import 36 | import quail 37 | 38 | #load data 39 | egg = quail.load('example') 40 | 41 | #crack egg 42 | cracked_egg = egg.crack(subjects=[0], lists=[0]) 43 | 44 | cracked_egg.info() 45 | 46 | 47 | .. _sphx_glr_download_auto_examples_crack_egg.py: 48 | 49 | .. only:: html 50 | 51 | .. container:: sphx-glr-footer sphx-glr-footer-example 52 | 53 | .. container:: sphx-glr-download sphx-glr-download-jupyter 54 | 55 | :download:`Download Jupyter notebook: crack_egg.ipynb ` 56 | 57 | .. container:: sphx-glr-download sphx-glr-download-python 58 | 59 | :download:`Download Python source code: crack_egg.py ` 60 | 61 | .. container:: sphx-glr-download sphx-glr-download-zip 62 | 63 | :download:`Download zipped: crack_egg.zip ` 64 | 65 | 66 | .. only:: html 67 | 68 | .. rst-class:: sphx-glr-signature 69 | 70 | `Gallery generated by Sphinx-Gallery `_ 71 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/auto_examples/crack_egg.rst.txt: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/crack_egg.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_crack_egg.py: 19 | 20 | 21 | ============================= 22 | Crack Egg 23 | ============================= 24 | 25 | This an example of how to crack an egg (take a slice of subjects/lists from it) 26 | 27 | .. GENERATED FROM PYTHON SOURCE LINES 10-24 28 | 29 | .. code-block:: Python 30 | 31 | 32 | # Code source: Contextual Dynamics Laboratory 33 | # License: MIT 34 | 35 | #import 36 | import quail 37 | 38 | #load data 39 | egg = quail.load('example') 40 | 41 | #crack egg 42 | cracked_egg = egg.crack(subjects=[0], lists=[0]) 43 | 44 | cracked_egg.info() 45 | 46 | 47 | .. _sphx_glr_download_auto_examples_crack_egg.py: 48 | 49 | .. only:: html 50 | 51 | .. container:: sphx-glr-footer sphx-glr-footer-example 52 | 53 | .. container:: sphx-glr-download sphx-glr-download-jupyter 54 | 55 | :download:`Download Jupyter notebook: crack_egg.ipynb ` 56 | 57 | .. container:: sphx-glr-download sphx-glr-download-python 58 | 59 | :download:`Download Python source code: crack_egg.py ` 60 | 61 | .. container:: sphx-glr-download sphx-glr-download-zip 62 | 63 | :download:`Download zipped: crack_egg.zip ` 64 | 65 | 66 | .. only:: html 67 | 68 | .. rst-class:: sphx-glr-signature 69 | 70 | `Gallery generated by Sphinx-Gallery `_ 71 | -------------------------------------------------------------------------------- /tests/test_load_smoke.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | import quail 3 | import os 4 | import joblib 5 | 6 | def test_save_load_egg(tmp_path): 7 | # Setup Egg 8 | pres = [[['word1', 'word2']]] 9 | rec = [[['word2', 'word1']]] 10 | egg = quail.Egg(pres=pres, rec=rec) 11 | 12 | # Save path 13 | fname = tmp_path / "test_egg.egg" 14 | 15 | # Save 16 | egg.save(str(fname)) 17 | 18 | # Check file exists 19 | assert os.path.exists(str(fname)) 20 | 21 | # Load 22 | loaded_egg = quail.load_egg(str(fname)) 23 | 24 | # Verify content 25 | assert loaded_egg.n_subjects == 1 26 | assert loaded_egg.get_pres_items().iloc[0].tolist() == ['word1', 'word2'] 27 | 28 | def test_save_load_fried_egg(tmp_path): 29 | # Create FriedEgg 30 | pres = [[['word1', 'word2']]] 31 | rec = [[['word2', 'word1']]] 32 | egg = quail.Egg(pres=pres, rec=rec) 33 | res = egg.analyze('accuracy') 34 | 35 | # Save 36 | fname = tmp_path / "test_res.fegg" 37 | res.save(str(fname)) 38 | 39 | # Check 40 | assert os.path.exists(str(fname)) 41 | 42 | # Load (requires updated load function? quail.load handles eggs, but what about fried eggs?) 43 | # quail.load helper or specific function? 44 | # quail/load.py has load_egg 45 | # But usually just quail.load() auto-detects? 46 | 47 | # Checking load.py source: load(path) calls joblib.load 48 | loaded_res = quail.load(str(fname)) 49 | 50 | assert isinstance(loaded_res, quail.FriedEgg) 51 | # Check data 52 | assert loaded_res.data.equals(res.data) 53 | 54 | def test_load_example_data(): 55 | # Test loading built-in example 56 | try: 57 | egg = quail.load_example_data() 58 | assert isinstance(egg, quail.Egg) 59 | assert egg.n_subjects > 0 60 | except Exception as e: 61 | # Might fail if data file not found nearby or permission issue 62 | pytest.fail(f"Failed to load example data: {e}") 63 | -------------------------------------------------------------------------------- /docs/auto_examples/recmat2egg.rst: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/recmat2egg.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_recmat2egg.py: 19 | 20 | 21 | ============================= 22 | Make egg out of recall matrix 23 | ============================= 24 | 25 | This example shows how to make an egg out of a precomputed recall matrix so that 26 | the analysis and plotting functions can be used. 27 | 28 | .. GENERATED FROM PYTHON SOURCE LINES 11-23 29 | 30 | .. code-block:: Python 31 | 32 | 33 | # Code source: Contextual Dynamics Laboratory 34 | # License: MIT 35 | 36 | # import 37 | import quail 38 | 39 | # create fake recall matrix 40 | recmat = [[[5,4,3,0,1], [3,1,2,0]]] 41 | 42 | # create egg 43 | egg = quail.recmat2egg(recmat, list_length=6) 44 | 45 | 46 | .. _sphx_glr_download_auto_examples_recmat2egg.py: 47 | 48 | .. only:: html 49 | 50 | .. container:: sphx-glr-footer sphx-glr-footer-example 51 | 52 | .. container:: sphx-glr-download sphx-glr-download-jupyter 53 | 54 | :download:`Download Jupyter notebook: recmat2egg.ipynb ` 55 | 56 | .. container:: sphx-glr-download sphx-glr-download-python 57 | 58 | :download:`Download Python source code: recmat2egg.py ` 59 | 60 | .. container:: sphx-glr-download sphx-glr-download-zip 61 | 62 | :download:`Download zipped: recmat2egg.zip ` 63 | 64 | 65 | .. only:: html 66 | 67 | .. rst-class:: sphx-glr-signature 68 | 69 | `Gallery generated by Sphinx-Gallery `_ 70 | -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | name: Tests 2 | 3 | on: 4 | push: 5 | branches: [ master, main, optimize-quail ] 6 | pull_request: 7 | branches: [ master, main ] 8 | 9 | jobs: 10 | test: 11 | runs-on: ubuntu-latest 12 | strategy: 13 | matrix: 14 | python-version: ['3.9', '3.10', '3.11', '3.12'] 15 | fail-fast: false 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | 20 | - name: Set up Python ${{ matrix.python-version }} 21 | uses: actions/setup-python@v5 22 | with: 23 | python-version: ${{ matrix.python-version }} 24 | 25 | - name: Install system dependencies 26 | run: | 27 | sudo apt-get update 28 | sudo apt-get install -y ffmpeg 29 | 30 | - name: Install dependencies 31 | run: | 32 | python -m pip install --upgrade pip 33 | pip install pytest pytest-cov 34 | pip install torch --index-url https://download.pytorch.org/whl/cpu 35 | pip install openai-whisper 36 | pip install -e . 37 | 38 | - name: Run tests 39 | run: | 40 | pytest tests/ -v --tb=short 41 | 42 | - name: Run tests with coverage 43 | run: | 44 | pytest tests/ --cov=quail --cov-report=xml --cov-report=term-missing 45 | 46 | lint: 47 | runs-on: ubuntu-latest 48 | steps: 49 | - uses: actions/checkout@v4 50 | 51 | - name: Set up Python 52 | uses: actions/setup-python@v5 53 | with: 54 | python-version: '3.11' 55 | 56 | - name: Install dependencies 57 | run: | 58 | python -m pip install --upgrade pip 59 | pip install flake8 60 | 61 | - name: Lint with flake8 62 | run: | 63 | # Stop the build if there are Python syntax errors or undefined names 64 | flake8 quail --count --select=E9,F63,F7,F82 --show-source --statistics 65 | # Exit-zero treats all errors as warnings 66 | flake8 quail --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics 67 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/auto_examples/recmat2egg.rst.txt: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/recmat2egg.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_recmat2egg.py: 19 | 20 | 21 | ============================= 22 | Make egg out of recall matrix 23 | ============================= 24 | 25 | This example shows how to make an egg out of a precomputed recall matrix so that 26 | the analysis and plotting functions can be used. 27 | 28 | .. GENERATED FROM PYTHON SOURCE LINES 11-23 29 | 30 | .. code-block:: Python 31 | 32 | 33 | # Code source: Contextual Dynamics Laboratory 34 | # License: MIT 35 | 36 | # import 37 | import quail 38 | 39 | # create fake recall matrix 40 | recmat = [[[5,4,3,0,1], [3,1,2,0]]] 41 | 42 | # create egg 43 | egg = quail.recmat2egg(recmat, list_length=6) 44 | 45 | 46 | .. _sphx_glr_download_auto_examples_recmat2egg.py: 47 | 48 | .. only:: html 49 | 50 | .. container:: sphx-glr-footer sphx-glr-footer-example 51 | 52 | .. container:: sphx-glr-download sphx-glr-download-jupyter 53 | 54 | :download:`Download Jupyter notebook: recmat2egg.ipynb ` 55 | 56 | .. container:: sphx-glr-download sphx-glr-download-python 57 | 58 | :download:`Download Python source code: recmat2egg.py ` 59 | 60 | .. container:: sphx-glr-download sphx-glr-download-zip 61 | 62 | :download:`Download zipped: recmat2egg.zip ` 63 | 64 | 65 | .. only:: html 66 | 67 | .. rst-class:: sphx-glr-signature 68 | 69 | `Gallery generated by Sphinx-Gallery `_ 70 | -------------------------------------------------------------------------------- /tests/test_egg_methods.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | import quail 3 | import os 4 | import joblib 5 | 6 | def test_egg_info(capsys): 7 | pres = [[['a']]] 8 | rec = [[['a']]] 9 | egg = quail.Egg(pres=pres, rec=rec, meta={'foo': 'bar'}) 10 | 11 | egg.info() 12 | captured = capsys.readouterr() 13 | assert 'Number of subjects: 1' in captured.out 14 | assert 'Meta data: {\'foo\': \'bar\'}' in captured.out 15 | 16 | def test_egg_save_load(tmpdir): 17 | pres = [[['a']]] 18 | rec = [[['a']]] 19 | egg = quail.Egg(pres=pres, rec=rec) 20 | 21 | # Save 22 | path = str(tmpdir.join('test_egg.egg')) 23 | egg.save(path) 24 | 25 | assert os.path.exists(path) 26 | 27 | # Load (manual load since Egg doesn't have load classmethod, probably quail.load functions do) 28 | # But joblib.load should work to inspect it 29 | loaded_dict = joblib.load(path) 30 | assert isinstance(loaded_dict, dict) 31 | assert 'pres' in loaded_dict 32 | assert isinstance(loaded_dict['pres'], list) 33 | # Check item in first position 34 | assert loaded_dict['pres'][0][0][0]['item'] == 'a' 35 | 36 | def test_fried_egg_save(tmpdir): 37 | fegg = quail.FriedEgg(data=[1, 2, 3], analysis='dummy') 38 | 39 | path = str(tmpdir.join('test_fegg')) # Extension should be added 40 | fegg.save(path) 41 | 42 | expected_path = path + '.fegg' 43 | assert os.path.exists(expected_path) 44 | 45 | loaded = joblib.load(expected_path) 46 | assert loaded['analysis'] == 'dummy' 47 | assert loaded['data'] == [1, 2, 3] 48 | 49 | def test_egg_to_dict_json(): 50 | pres = [[['a']]] 51 | rec = [[['a']]] 52 | egg = quail.Egg(pres=pres, rec=rec) 53 | 54 | d = egg.to_dict() 55 | assert isinstance(d, dict) 56 | assert 'pres' in d 57 | assert isinstance(d['pres'], list) 58 | 59 | j = egg.to_json() 60 | assert isinstance(j, dict) 61 | # checking json string format? 62 | # egg.to_json returns dict of JSON strings for DFs 63 | assert isinstance(j['pres'], str) 64 | -------------------------------------------------------------------------------- /docs/auto_examples/decode_speech.rst: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/decode_speech.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_decode_speech.py: 19 | 20 | 21 | ============================= 22 | Decode speech 23 | ============================= 24 | 25 | This example plots free recall accuracy for a single subject. 26 | 27 | .. GENERATED FROM PYTHON SOURCE LINES 10-24 28 | 29 | .. code-block:: Python 30 | 31 | 32 | # Code source: Contextual Dynamics Laboratory 33 | # License: MIT 34 | 35 | #import 36 | import quail 37 | 38 | # decode speech 39 | recall_data = quail.decode_speech('../data/sample.wav', save=True, 40 | speech_context=['DONKEY', 'PETUNIA'], 41 | keypath='path/to/key.json') 42 | 43 | # print results 44 | print(recall_data) 45 | 46 | 47 | .. _sphx_glr_download_auto_examples_decode_speech.py: 48 | 49 | .. only:: html 50 | 51 | .. container:: sphx-glr-footer sphx-glr-footer-example 52 | 53 | .. container:: sphx-glr-download sphx-glr-download-jupyter 54 | 55 | :download:`Download Jupyter notebook: decode_speech.ipynb ` 56 | 57 | .. container:: sphx-glr-download sphx-glr-download-python 58 | 59 | :download:`Download Python source code: decode_speech.py ` 60 | 61 | .. container:: sphx-glr-download sphx-glr-download-zip 62 | 63 | :download:`Download zipped: decode_speech.zip ` 64 | 65 | 66 | .. only:: html 67 | 68 | .. rst-class:: sphx-glr-signature 69 | 70 | `Gallery generated by Sphinx-Gallery `_ 71 | -------------------------------------------------------------------------------- /tests/test_speech.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | import quail 3 | import os 4 | import shutil 5 | 6 | def test_decode_speech_smoke(tmp_path): 7 | # This test requires Whisper models which might be large. 8 | # We use 'tiny' model for speed if network available. 9 | 10 | # Check if 'test_audio.wav' exists (generated by command) 11 | # Ideally should generate here or use fixture. 12 | import numpy as np 13 | import scipy.io.wavfile as wav 14 | 15 | fname = tmp_path / "test_speech.wav" 16 | RATE=16000 17 | t=np.linspace(0, 1, RATE*1) # 1 second 18 | # Silence/Tone (Whisper might produce empty string or hallucinate) 19 | data=(np.sin(2*np.pi*440*t)*32767).astype(np.int16) 20 | wav.write(str(fname), RATE, data) 21 | 22 | try: 23 | # Run decode with tiny model 24 | res = quail.decode_speech(str(fname), model_size='tiny', fp16=False) 25 | # Result should be list of tuples or empty list 26 | assert isinstance(res, list) 27 | 28 | # We don't expect accurate transcription of a sine wave, 29 | # but function should complete without error. 30 | 31 | except ImportError: 32 | pytest.skip("Whisper not installed") 33 | except Exception as e: 34 | # Network issues downloading model? 35 | pytest.fail(f"Decode failed: {e}") 36 | 37 | def test_decode_speech_save(tmp_path): 38 | # Test saving functionality 39 | import numpy as np 40 | import scipy.io.wavfile as wav 41 | 42 | fname = tmp_path / "test_save.wav" 43 | RATE=16000 44 | data = np.zeros(RATE, dtype=np.int16) # Silence 45 | wav.write(str(fname), RATE, data) 46 | 47 | try: 48 | quail.decode_speech(str(fname), model_size='tiny', save=True, fp16=False) 49 | 50 | # Check files 51 | assert os.path.exists(str(fname) + ".p") 52 | assert os.path.exists(str(fname) + ".txt") 53 | 54 | except ImportError: 55 | pytest.skip("Whisper not installed") 56 | except Exception as e: 57 | pytest.fail(f"Decode save failed: {e}") 58 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/auto_examples/decode_speech.rst.txt: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/decode_speech.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_decode_speech.py: 19 | 20 | 21 | ============================= 22 | Decode speech 23 | ============================= 24 | 25 | This example plots free recall accuracy for a single subject. 26 | 27 | .. GENERATED FROM PYTHON SOURCE LINES 10-24 28 | 29 | .. code-block:: Python 30 | 31 | 32 | # Code source: Contextual Dynamics Laboratory 33 | # License: MIT 34 | 35 | #import 36 | import quail 37 | 38 | # decode speech 39 | recall_data = quail.decode_speech('../data/sample.wav', save=True, 40 | speech_context=['DONKEY', 'PETUNIA'], 41 | keypath='path/to/key.json') 42 | 43 | # print results 44 | print(recall_data) 45 | 46 | 47 | .. _sphx_glr_download_auto_examples_decode_speech.py: 48 | 49 | .. only:: html 50 | 51 | .. container:: sphx-glr-footer sphx-glr-footer-example 52 | 53 | .. container:: sphx-glr-download sphx-glr-download-jupyter 54 | 55 | :download:`Download Jupyter notebook: decode_speech.ipynb ` 56 | 57 | .. container:: sphx-glr-download sphx-glr-download-python 58 | 59 | :download:`Download Python source code: decode_speech.py ` 60 | 61 | .. container:: sphx-glr-download sphx-glr-download-zip 62 | 63 | :download:`Download zipped: decode_speech.zip ` 64 | 65 | 66 | .. only:: html 67 | 68 | .. rst-class:: sphx-glr-signature 69 | 70 | `Gallery generated by Sphinx-Gallery `_ 71 | -------------------------------------------------------------------------------- /tests/test_clustering_best_match.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | import quail 3 | import pandas as pd 4 | import numpy as np 5 | from quail.analysis.clustering import fingerprint_helper 6 | 7 | def test_clustering_best_match(): 8 | # Setup egg where "best" match logic differs from "exact" 9 | # "best" uses matchmat (dist) to find closest item even if not exact? 10 | # Actually _get_weight_best uses argmin of matchmat. 11 | # matchmat is distance between pres and rec features. 12 | # If standard features (exact matches possible), best == exact. 13 | # But if continuous features (e.g. color), exact fails. 14 | 15 | # Continuous feature: color (RGB) 16 | pres = [[['a', 'b', 'c']]] 17 | # For match='best', rec must have the feature values attached 18 | rec_feat = [{'item': 'a', 'color': [0.1]}, {'item': 'b', 'color': [0.5]}, {'item': 'c', 'color': [0.9]}] 19 | rec = [[rec_feat]] 20 | 21 | # features: 'color' 22 | # a: [0.1], b: [0.5], c: [0.9] 23 | features = [{'item': 'a', 'color': [0.1]}, {'item': 'b', 'color': [0.5]}, {'item': 'c', 'color': [0.9]}] 24 | pres_feat = [[features]] # 1 subj, 1 list 25 | # rec uses same items 26 | 27 | # But let's say recalled item has slightly DIFFERENT feature value? 28 | # Quail usually assumes Recalled item IS Presented item (same object/features). 29 | # If they are same, distance is 0. 30 | 31 | # _get_weight_best calculates: 32 | # cdx = argmin(matchmat[i, :]) -> index of closest presented item to recalled item i. 33 | # If exact match exists (dist 0), it picks that. 34 | 35 | egg = quail.Egg(pres=pres, rec=rec, features=pres_feat) 36 | 37 | print(f"\nDEBUG: egg.pres shape: {egg.pres.shape}") 38 | print(f"DEBUG: egg.rec shape: {egg.rec.shape}") 39 | print(f"DEBUG: egg.pres content:\n{egg.pres}") 40 | print(f"DEBUG: egg.rec content:\n{egg.rec}") 41 | 42 | # Use match='best' 43 | res = fingerprint_helper(egg, match='best', features=['color']) 44 | assert res is not None 45 | assert not np.isnan(res) 46 | 47 | # Test with custom distance function? 48 | # Default color uses euclidean. 49 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | from setuptools import setup, find_packages 5 | 6 | DESCRIPTION = 'A python toolbox for analyzing and plotting free recall data' 7 | LONG_DESCRIPTION = """\ 8 | Quail is a Python package that facilitates analyses of behavioral data from memory experiments. (The current focus is on free recall experiments.) Key features include: 9 | 10 | - Serial position curves (probability of recalling items presented at each presentation position) 11 | - Probability of Nth recall curves (probability of recalling items at each presentation position as the Nth recall in the recall sequence) 12 | - Lag-Conditional Response Probability curves (probability of transitioning between items in the recall sequence, as a function of their relative presentation positions) 13 | - Clustering metrics (e.g. single-number summaries of how often participants transition from recalling a word to another related word, where "related" can be user-defined.) 14 | - Many nice plotting functions 15 | - Convenience functions for loading in data 16 | - Automatically parse speech data (audio files) using OpenAI Whisper 17 | 18 | The intended user of this toolbox is a memory researcher who seeks an easy way to analyze and visualize data from free recall psychology experiments. 19 | """ 20 | 21 | # Read requirements from requirements.txt 22 | here = os.path.abspath(os.path.dirname(__file__)) 23 | with open(os.path.join(here, 'requirements.txt')) as f: 24 | requirements = [line.strip() for line in f if line.strip() and not line.startswith('#')] 25 | 26 | EXTRAS_REQUIRE={ 27 | 'speech-decoding': ["pydub", "openai-whisper"], 28 | 'efficient-learning': ["sqlalchemy"], 29 | } 30 | 31 | setup( 32 | name='quail', 33 | version='0.3.0', 34 | description=DESCRIPTION, 35 | long_description=LONG_DESCRIPTION, 36 | long_description_content_type='text/x-rst', 37 | author='Contextual Dynamics Lab', 38 | author_email='contextualdynamics@gmail.com', 39 | url='https://github.com/ContextLab/quail', 40 | license='MIT', 41 | packages=find_packages(exclude=('tests', 'docs', 'paper')), 42 | include_package_data=True, 43 | install_requires=requirements, 44 | extras_require=EXTRAS_REQUIRE, 45 | ) 46 | -------------------------------------------------------------------------------- /docs/tutorial/fingerprint.rst: -------------------------------------------------------------------------------- 1 | 2 | Computing a memory fingerprint 3 | ============================== 4 | 5 | A memory fingerprint can be defined as a subject’s tendency to cluster 6 | their recall responses with respect to more than one stimulus feature 7 | dimensions. What is a “stimulus feature dimension” you ask? It is simply 8 | an attribute of the stimulus, such as its color, category, spatial 9 | location etc. Let’s walkthrough an example to gain a better intuition. 10 | 11 | Let’s imagine you were running a free recall experiment where subjects 12 | were presented with lists of words that varied randomly over a number of 13 | distinct dimensions: 14 | 15 | In the figure above, the first word (dog) is: green in color, an animal, 16 | starts with the letter ‘d’, is large (bigger than a shoebox) and is 17 | positioned left-center on the screen. The next word (cat) is similar 18 | along some dimensions, but different along others. For instance, cat and 19 | dog are both animals, but the words are presented in different colors, 20 | occupy different parts of the computer screen, etc. More generally, each 21 | word on this list is similar to others words along some dimensions, but 22 | different along other dimensions. Let’s imagine a subject started 23 | recalling the list as follows: 24 | 25 | In this recall sequence, “dog” was recalled, followed by “cat”. For each 26 | recall transition, we can compute the similarity between the two stimuli 27 | along each feature dimension. For example, both words are in the animal 28 | category, so their similarity along that feature dimension would be 29 | high. In the color dimension, green (dog) and blue (cat) are somewhat 30 | similar colors, so these words are somewhat similar along this 31 | dimension. The figure below illustrates how we compute a “clustering 32 | score” for a given recall transition and feature dimension: 33 | 34 | For each recall transition and feature dimension (color in this 35 | example), we: 36 | 37 | 1. Compute the similarity between the first word of the recall 38 | transition pair and all other words that the subject could have 39 | transitioned to 40 | 2. Sort these similarity scores from lowest to highest 41 | 3. Find the position of the second word of the recall transition pair 42 | 4. Divide this by the number of possible transitions to derive a 43 | “percentile rank” 44 | 45 | This analysis is performed to each recall transition and feature 46 | dimension for a given list, and then the percentile ranks are averaged 47 | within feature to get a “memory fingerprint” for each list: 48 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_spc.rst: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/plot_spc.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_plot_spc.py: 19 | 20 | 21 | ============================= 22 | Plot serial position curve 23 | ============================= 24 | 25 | This example plots the probability of recall success as a function of serial 26 | position during stimulus encoding. 27 | 28 | .. GENERATED FROM PYTHON SOURCE LINES 11-25 29 | 30 | 31 | 32 | .. image-sg:: /auto_examples/images/sphx_glr_plot_spc_001.png 33 | :alt: Serial Position Curve 34 | :srcset: /auto_examples/images/sphx_glr_plot_spc_001.png 35 | :class: sphx-glr-single-img 36 | 37 | 38 | .. rst-class:: sphx-glr-script-out 39 | 40 | .. code-block:: none 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | | 50 | 51 | .. code-block:: Python 52 | 53 | 54 | # Code source: Contextual Dynamics Laboratory 55 | # License: MIT 56 | 57 | # import 58 | import quail 59 | 60 | #load data 61 | egg = quail.load('example') 62 | 63 | # analyze and plot 64 | fegg = egg.analyze('spc', listgroup=['average']*8) 65 | 66 | fegg.plot(title='Serial Position Curve') 67 | 68 | 69 | .. rst-class:: sphx-glr-timing 70 | 71 | **Total running time of the script:** (0 minutes 0.819 seconds) 72 | 73 | 74 | .. _sphx_glr_download_auto_examples_plot_spc.py: 75 | 76 | .. only:: html 77 | 78 | .. container:: sphx-glr-footer sphx-glr-footer-example 79 | 80 | .. container:: sphx-glr-download sphx-glr-download-jupyter 81 | 82 | :download:`Download Jupyter notebook: plot_spc.ipynb ` 83 | 84 | .. container:: sphx-glr-download sphx-glr-download-python 85 | 86 | :download:`Download Python source code: plot_spc.py ` 87 | 88 | .. container:: sphx-glr-download sphx-glr-download-zip 89 | 90 | :download:`Download zipped: plot_spc.zip ` 91 | 92 | 93 | .. only:: html 94 | 95 | .. rst-class:: sphx-glr-signature 96 | 97 | `Gallery generated by Sphinx-Gallery `_ 98 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/tutorial/fingerprint.rst.txt: -------------------------------------------------------------------------------- 1 | 2 | Computing a memory fingerprint 3 | ============================== 4 | 5 | A memory fingerprint can be defined as a subject’s tendency to cluster 6 | their recall responses with respect to more than one stimulus feature 7 | dimensions. What is a “stimulus feature dimension” you ask? It is simply 8 | an attribute of the stimulus, such as its color, category, spatial 9 | location etc. Let’s walkthrough an example to gain a better intuition. 10 | 11 | Let’s imagine you were running a free recall experiment where subjects 12 | were presented with lists of words that varied randomly over a number of 13 | distinct dimensions: 14 | 15 | In the figure above, the first word (dog) is: green in color, an animal, 16 | starts with the letter ‘d’, is large (bigger than a shoebox) and is 17 | positioned left-center on the screen. The next word (cat) is similar 18 | along some dimensions, but different along others. For instance, cat and 19 | dog are both animals, but the words are presented in different colors, 20 | occupy different parts of the computer screen, etc. More generally, each 21 | word on this list is similar to others words along some dimensions, but 22 | different along other dimensions. Let’s imagine a subject started 23 | recalling the list as follows: 24 | 25 | In this recall sequence, “dog” was recalled, followed by “cat”. For each 26 | recall transition, we can compute the similarity between the two stimuli 27 | along each feature dimension. For example, both words are in the animal 28 | category, so their similarity along that feature dimension would be 29 | high. In the color dimension, green (dog) and blue (cat) are somewhat 30 | similar colors, so these words are somewhat similar along this 31 | dimension. The figure below illustrates how we compute a “clustering 32 | score” for a given recall transition and feature dimension: 33 | 34 | For each recall transition and feature dimension (color in this 35 | example), we: 36 | 37 | 1. Compute the similarity between the first word of the recall 38 | transition pair and all other words that the subject could have 39 | transitioned to 40 | 2. Sort these similarity scores from lowest to highest 41 | 3. Find the position of the second word of the recall transition pair 42 | 4. Divide this by the number of possible transitions to derive a 43 | “percentile rank” 44 | 45 | This analysis is performed to each recall transition and feature 46 | dimension for a given list, and then the percentile ranks are averaged 47 | within feature to get a “memory fingerprint” for each list: 48 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_pfr.rst: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/plot_pfr.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_plot_pfr.py: 19 | 20 | 21 | ============================= 22 | Plot probability of first recall 23 | ============================= 24 | 25 | This example plots the probability of an item being recalled first given its 26 | list position. 27 | 28 | .. GENERATED FROM PYTHON SOURCE LINES 11-25 29 | 30 | 31 | 32 | .. image-sg:: /auto_examples/images/sphx_glr_plot_pfr_001.png 33 | :alt: Probability of First Recall 34 | :srcset: /auto_examples/images/sphx_glr_plot_pfr_001.png 35 | :class: sphx-glr-single-img 36 | 37 | 38 | .. rst-class:: sphx-glr-script-out 39 | 40 | .. code-block:: none 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | | 50 | 51 | .. code-block:: Python 52 | 53 | 54 | # Code source: Contextual Dynamics Laboratory 55 | # License: MIT 56 | 57 | # import 58 | import quail 59 | 60 | #load data 61 | egg = quail.load('example') 62 | 63 | # analyze and plot 64 | fegg = egg.analyze('pfr', listgroup=['average']*8) 65 | 66 | fegg.plot(title='Probability of First Recall') 67 | 68 | 69 | .. rst-class:: sphx-glr-timing 70 | 71 | **Total running time of the script:** (0 minutes 0.677 seconds) 72 | 73 | 74 | .. _sphx_glr_download_auto_examples_plot_pfr.py: 75 | 76 | .. only:: html 77 | 78 | .. container:: sphx-glr-footer sphx-glr-footer-example 79 | 80 | .. container:: sphx-glr-download sphx-glr-download-jupyter 81 | 82 | :download:`Download Jupyter notebook: plot_pfr.ipynb ` 83 | 84 | .. container:: sphx-glr-download sphx-glr-download-python 85 | 86 | :download:`Download Python source code: plot_pfr.py ` 87 | 88 | .. container:: sphx-glr-download sphx-glr-download-zip 89 | 90 | :download:`Download zipped: plot_pfr.zip ` 91 | 92 | 93 | .. only:: html 94 | 95 | .. rst-class:: sphx-glr-signature 96 | 97 | `Gallery generated by Sphinx-Gallery `_ 98 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/auto_examples/plot_spc.rst.txt: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/plot_spc.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_plot_spc.py: 19 | 20 | 21 | ============================= 22 | Plot serial position curve 23 | ============================= 24 | 25 | This example plots the probability of recall success as a function of serial 26 | position during stimulus encoding. 27 | 28 | .. GENERATED FROM PYTHON SOURCE LINES 11-25 29 | 30 | 31 | 32 | .. image-sg:: /auto_examples/images/sphx_glr_plot_spc_001.png 33 | :alt: Serial Position Curve 34 | :srcset: /auto_examples/images/sphx_glr_plot_spc_001.png 35 | :class: sphx-glr-single-img 36 | 37 | 38 | .. rst-class:: sphx-glr-script-out 39 | 40 | .. code-block:: none 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | | 50 | 51 | .. code-block:: Python 52 | 53 | 54 | # Code source: Contextual Dynamics Laboratory 55 | # License: MIT 56 | 57 | # import 58 | import quail 59 | 60 | #load data 61 | egg = quail.load('example') 62 | 63 | # analyze and plot 64 | fegg = egg.analyze('spc', listgroup=['average']*8) 65 | 66 | fegg.plot(title='Serial Position Curve') 67 | 68 | 69 | .. rst-class:: sphx-glr-timing 70 | 71 | **Total running time of the script:** (0 minutes 0.819 seconds) 72 | 73 | 74 | .. _sphx_glr_download_auto_examples_plot_spc.py: 75 | 76 | .. only:: html 77 | 78 | .. container:: sphx-glr-footer sphx-glr-footer-example 79 | 80 | .. container:: sphx-glr-download sphx-glr-download-jupyter 81 | 82 | :download:`Download Jupyter notebook: plot_spc.ipynb ` 83 | 84 | .. container:: sphx-glr-download sphx-glr-download-python 85 | 86 | :download:`Download Python source code: plot_spc.py ` 87 | 88 | .. container:: sphx-glr-download sphx-glr-download-zip 89 | 90 | :download:`Download zipped: plot_spc.zip ` 91 | 92 | 93 | .. only:: html 94 | 95 | .. rst-class:: sphx-glr-signature 96 | 97 | `Gallery generated by Sphinx-Gallery `_ 98 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/auto_examples/plot_pfr.rst.txt: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/plot_pfr.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_plot_pfr.py: 19 | 20 | 21 | ============================= 22 | Plot probability of first recall 23 | ============================= 24 | 25 | This example plots the probability of an item being recalled first given its 26 | list position. 27 | 28 | .. GENERATED FROM PYTHON SOURCE LINES 11-25 29 | 30 | 31 | 32 | .. image-sg:: /auto_examples/images/sphx_glr_plot_pfr_001.png 33 | :alt: Probability of First Recall 34 | :srcset: /auto_examples/images/sphx_glr_plot_pfr_001.png 35 | :class: sphx-glr-single-img 36 | 37 | 38 | .. rst-class:: sphx-glr-script-out 39 | 40 | .. code-block:: none 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | | 50 | 51 | .. code-block:: Python 52 | 53 | 54 | # Code source: Contextual Dynamics Laboratory 55 | # License: MIT 56 | 57 | # import 58 | import quail 59 | 60 | #load data 61 | egg = quail.load('example') 62 | 63 | # analyze and plot 64 | fegg = egg.analyze('pfr', listgroup=['average']*8) 65 | 66 | fegg.plot(title='Probability of First Recall') 67 | 68 | 69 | .. rst-class:: sphx-glr-timing 70 | 71 | **Total running time of the script:** (0 minutes 0.677 seconds) 72 | 73 | 74 | .. _sphx_glr_download_auto_examples_plot_pfr.py: 75 | 76 | .. only:: html 77 | 78 | .. container:: sphx-glr-footer sphx-glr-footer-example 79 | 80 | .. container:: sphx-glr-download sphx-glr-download-jupyter 81 | 82 | :download:`Download Jupyter notebook: plot_pfr.ipynb ` 83 | 84 | .. container:: sphx-glr-download sphx-glr-download-python 85 | 86 | :download:`Download Python source code: plot_pfr.py ` 87 | 88 | .. container:: sphx-glr-download sphx-glr-download-zip 89 | 90 | :download:`Download zipped: plot_pfr.zip ` 91 | 92 | 93 | .. only:: html 94 | 95 | .. rst-class:: sphx-glr-signature 96 | 97 | `Gallery generated by Sphinx-Gallery `_ 98 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_pnr.rst: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/plot_pnr.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_plot_pnr.py: 19 | 20 | 21 | ============================= 22 | Plot probability of nth recall 23 | ============================= 24 | 25 | This example plots the probability of an item being recalled nth given its 26 | list position. 27 | 28 | .. GENERATED FROM PYTHON SOURCE LINES 11-26 29 | 30 | 31 | 32 | .. image-sg:: /auto_examples/images/sphx_glr_plot_pnr_001.png 33 | :alt: Probability of Recall 34 | :srcset: /auto_examples/images/sphx_glr_plot_pnr_001.png 35 | :class: sphx-glr-single-img 36 | 37 | 38 | .. rst-class:: sphx-glr-script-out 39 | 40 | .. code-block:: none 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | | 50 | 51 | .. code-block:: Python 52 | 53 | 54 | # Code source: Contextual Dynamics Laboratory 55 | # License: MIT 56 | 57 | # import 58 | import quail 59 | 60 | #load data 61 | egg = quail.load('example') 62 | 63 | # analyze and plot 64 | fegg = egg.analyze('pnr', listgroup=['average']*8, 65 | position=5) 66 | 67 | fegg.plot(title='Probability of Recall') 68 | 69 | 70 | .. rst-class:: sphx-glr-timing 71 | 72 | **Total running time of the script:** (0 minutes 0.686 seconds) 73 | 74 | 75 | .. _sphx_glr_download_auto_examples_plot_pnr.py: 76 | 77 | .. only:: html 78 | 79 | .. container:: sphx-glr-footer sphx-glr-footer-example 80 | 81 | .. container:: sphx-glr-download sphx-glr-download-jupyter 82 | 83 | :download:`Download Jupyter notebook: plot_pnr.ipynb ` 84 | 85 | .. container:: sphx-glr-download sphx-glr-download-python 86 | 87 | :download:`Download Python source code: plot_pnr.py ` 88 | 89 | .. container:: sphx-glr-download sphx-glr-download-zip 90 | 91 | :download:`Download zipped: plot_pnr.zip ` 92 | 93 | 94 | .. only:: html 95 | 96 | .. rst-class:: sphx-glr-signature 97 | 98 | `Gallery generated by Sphinx-Gallery `_ 99 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_accuracy.rst: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/plot_accuracy.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_plot_accuracy.py: 19 | 20 | 21 | ============================= 22 | Plot free recall accuracy 23 | ============================= 24 | 25 | This example plots free recall accuracy for a single subject. 26 | 27 | .. GENERATED FROM PYTHON SOURCE LINES 10-25 28 | 29 | 30 | 31 | .. image-sg:: /auto_examples/images/sphx_glr_plot_accuracy_001.png 32 | :alt: Average Recall Accuracy 33 | :srcset: /auto_examples/images/sphx_glr_plot_accuracy_001.png 34 | :class: sphx-glr-single-img 35 | 36 | 37 | .. rst-class:: sphx-glr-script-out 38 | 39 | .. code-block:: none 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | | 49 | 50 | .. code-block:: Python 51 | 52 | 53 | # Code source: Contextual Dynamics Laboratory 54 | # License: MIT 55 | 56 | #import 57 | import quail 58 | 59 | #load data 60 | egg = quail.load('example') 61 | 62 | #analysis 63 | fegg = egg.analyze('accuracy', listgroup=['condition1']*4+['condition2']*4) 64 | 65 | #plot by list 66 | fegg.plot(plot_style='violin', title='Average Recall Accuracy') 67 | 68 | 69 | .. rst-class:: sphx-glr-timing 70 | 71 | **Total running time of the script:** (0 minutes 0.716 seconds) 72 | 73 | 74 | .. _sphx_glr_download_auto_examples_plot_accuracy.py: 75 | 76 | .. only:: html 77 | 78 | .. container:: sphx-glr-footer sphx-glr-footer-example 79 | 80 | .. container:: sphx-glr-download sphx-glr-download-jupyter 81 | 82 | :download:`Download Jupyter notebook: plot_accuracy.ipynb ` 83 | 84 | .. container:: sphx-glr-download sphx-glr-download-python 85 | 86 | :download:`Download Python source code: plot_accuracy.py ` 87 | 88 | .. container:: sphx-glr-download sphx-glr-download-zip 89 | 90 | :download:`Download zipped: plot_accuracy.zip ` 91 | 92 | 93 | .. only:: html 94 | 95 | .. rst-class:: sphx-glr-signature 96 | 97 | `Gallery generated by Sphinx-Gallery `_ 98 | -------------------------------------------------------------------------------- /docs/auto_examples/create_multisubject_egg.rst: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/create_multisubject_egg.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_create_multisubject_egg.py: 19 | 20 | 21 | ============================= 22 | Create a multisubject egg 23 | ============================= 24 | 25 | An egg is made up of two primary pieces of data: `pres`, which are the 26 | words/stimuli that were presented to a subject and `rec`, which are the 27 | words/stimuli that were recalled by the subject. 28 | 29 | .. GENERATED FROM PYTHON SOURCE LINES 12-32 30 | 31 | .. code-block:: Python 32 | 33 | 34 | # Code source: Contextual Dynamics Laboratory 35 | # License: MIT 36 | 37 | import quail 38 | import numpy as np 39 | 40 | # presented words 41 | presented_words = [[['cat', 'bat', 'hat', 'goat'],['zoo', 'animal', 'zebra', 'horse']],[['cat', 'bat', 'hat', 'goat'],['zoo', 'animal', 'zebra', 'horse']]] 42 | 43 | # recalled words 44 | recalled_words = [[['bat', 'cat', 'goat', 'hat'],['animal', 'horse', 'zoo']],[['bat', 'cat', 'goat'],['animal', 'horse']]] 45 | 46 | # create egg 47 | egg = quail.Egg(pres=presented_words, rec=recalled_words) 48 | 49 | # analyze and plot 50 | fegg = egg.analyze('accuracy') 51 | 52 | fegg.plot(plot_style='violin', title='Average Recall Accuracy') 53 | 54 | 55 | .. _sphx_glr_download_auto_examples_create_multisubject_egg.py: 56 | 57 | .. only:: html 58 | 59 | .. container:: sphx-glr-footer sphx-glr-footer-example 60 | 61 | .. container:: sphx-glr-download sphx-glr-download-jupyter 62 | 63 | :download:`Download Jupyter notebook: create_multisubject_egg.ipynb ` 64 | 65 | .. container:: sphx-glr-download sphx-glr-download-python 66 | 67 | :download:`Download Python source code: create_multisubject_egg.py ` 68 | 69 | .. container:: sphx-glr-download sphx-glr-download-zip 70 | 71 | :download:`Download zipped: create_multisubject_egg.zip ` 72 | 73 | 74 | .. only:: html 75 | 76 | .. rst-class:: sphx-glr-signature 77 | 78 | `Gallery generated by Sphinx-Gallery `_ 79 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/auto_examples/plot_pnr.rst.txt: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/plot_pnr.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_plot_pnr.py: 19 | 20 | 21 | ============================= 22 | Plot probability of nth recall 23 | ============================= 24 | 25 | This example plots the probability of an item being recalled nth given its 26 | list position. 27 | 28 | .. GENERATED FROM PYTHON SOURCE LINES 11-26 29 | 30 | 31 | 32 | .. image-sg:: /auto_examples/images/sphx_glr_plot_pnr_001.png 33 | :alt: Probability of Recall 34 | :srcset: /auto_examples/images/sphx_glr_plot_pnr_001.png 35 | :class: sphx-glr-single-img 36 | 37 | 38 | .. rst-class:: sphx-glr-script-out 39 | 40 | .. code-block:: none 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | | 50 | 51 | .. code-block:: Python 52 | 53 | 54 | # Code source: Contextual Dynamics Laboratory 55 | # License: MIT 56 | 57 | # import 58 | import quail 59 | 60 | #load data 61 | egg = quail.load('example') 62 | 63 | # analyze and plot 64 | fegg = egg.analyze('pnr', listgroup=['average']*8, 65 | position=5) 66 | 67 | fegg.plot(title='Probability of Recall') 68 | 69 | 70 | .. rst-class:: sphx-glr-timing 71 | 72 | **Total running time of the script:** (0 minutes 0.686 seconds) 73 | 74 | 75 | .. _sphx_glr_download_auto_examples_plot_pnr.py: 76 | 77 | .. only:: html 78 | 79 | .. container:: sphx-glr-footer sphx-glr-footer-example 80 | 81 | .. container:: sphx-glr-download sphx-glr-download-jupyter 82 | 83 | :download:`Download Jupyter notebook: plot_pnr.ipynb ` 84 | 85 | .. container:: sphx-glr-download sphx-glr-download-python 86 | 87 | :download:`Download Python source code: plot_pnr.py ` 88 | 89 | .. container:: sphx-glr-download sphx-glr-download-zip 90 | 91 | :download:`Download zipped: plot_pnr.zip ` 92 | 93 | 94 | .. only:: html 95 | 96 | .. rst-class:: sphx-glr-signature 97 | 98 | `Gallery generated by Sphinx-Gallery `_ 99 | -------------------------------------------------------------------------------- /docs/auto_examples/plot_temporal.rst: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/plot_temporal.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_plot_temporal.py: 19 | 20 | 21 | ============================= 22 | Plot temporal clustering 23 | ============================= 24 | 25 | This example plots temporal clustering, the extent to which subject tend to 26 | recall neighboring items sequentially. 27 | 28 | .. GENERATED FROM PYTHON SOURCE LINES 11-25 29 | 30 | 31 | 32 | .. image-sg:: /auto_examples/images/sphx_glr_plot_temporal_001.png 33 | :alt: Temporal Clustering 34 | :srcset: /auto_examples/images/sphx_glr_plot_temporal_001.png 35 | :class: sphx-glr-single-img 36 | 37 | 38 | .. rst-class:: sphx-glr-script-out 39 | 40 | .. code-block:: none 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | | 50 | 51 | .. code-block:: Python 52 | 53 | 54 | # Code source: Contextual Dynamics Laboratory 55 | # License: MIT 56 | 57 | # import 58 | import quail 59 | 60 | #load data 61 | egg = quail.load('example') 62 | 63 | #analyze and plot 64 | fegg = egg.analyze('temporal', listgroup=['early']*4+['late']*4) 65 | 66 | fegg.plot(title='Temporal Clustering') 67 | 68 | 69 | .. rst-class:: sphx-glr-timing 70 | 71 | **Total running time of the script:** (0 minutes 1.977 seconds) 72 | 73 | 74 | .. _sphx_glr_download_auto_examples_plot_temporal.py: 75 | 76 | .. only:: html 77 | 78 | .. container:: sphx-glr-footer sphx-glr-footer-example 79 | 80 | .. container:: sphx-glr-download sphx-glr-download-jupyter 81 | 82 | :download:`Download Jupyter notebook: plot_temporal.ipynb ` 83 | 84 | .. container:: sphx-glr-download sphx-glr-download-python 85 | 86 | :download:`Download Python source code: plot_temporal.py ` 87 | 88 | .. container:: sphx-glr-download sphx-glr-download-zip 89 | 90 | :download:`Download zipped: plot_temporal.zip ` 91 | 92 | 93 | .. only:: html 94 | 95 | .. rst-class:: sphx-glr-signature 96 | 97 | `Gallery generated by Sphinx-Gallery `_ 98 | -------------------------------------------------------------------------------- /paper/paper.bib: -------------------------------------------------------------------------------- 1 | @online{HeusEtal17a, 2 | Author = {Andrew C. Heusser and Paxton C. Fitzpatrick and Campbell E. Field and Kirsten Ziman and Jeremy R. Manning}, 3 | Title = {Quail Documentation}, 4 | Url = {http://cdl-quail.readthedocs.io/en/latest/}, 5 | Year = 2017} 6 | 7 | @online{HeusEtal17, 8 | Author = {Andrew C. Heusser and Paxton C. Fitzpatrick and Campbell E. Field and Kirsten Ziman and Jeremy R. Manning}, 9 | Doi = {10.5281/zenodo.1003184}, 10 | Title = {Quail: a Python toolbox for analyzing and plotting free recall data}, 11 | Url = {https://doi.org/10.5281/zenodo.1003183}, 12 | Year = 2017} 13 | 14 | @book{Ebbi13, 15 | Address = {New York}, 16 | Author = {H. Ebbinghaus}, 17 | Title = {On Memory: A contribution to experimental psychology}, 18 | Year = 1913} 19 | 20 | @incollection{MannEtal15, 21 | Author = {J. R. Manning and K. A. Norman and M. J. Kahana}, 22 | Booktitle = {The Cognitive Neurosciences, Fifth edition}, 23 | Editor = {M. Gazzaniga}, 24 | Pages = {557--566}, 25 | Publisher = {{MIT} Press}, 26 | Title = {The role of context in episodic memory}, 27 | Year = 2015} 28 | 29 | @article{Murd62a, 30 | Author = {B. B. Murdock}, 31 | Doi = {10.1037/h0045106}, 32 | Journal = {Journal of Experimental Psychology}, 33 | Pages = {482-488}, 34 | Title = {The serial position effect of free recall}, 35 | Volume = 64, 36 | Year = 1962} 37 | 38 | @article{Kaha96, 39 | Author = {M. J. Kahana}, 40 | Doi = {10.3758/BF03197276}, 41 | Journal = {Memory \& Cognition}, 42 | Title = {Associative retrieval processes in free recall}, 43 | Volume = 24, 44 | Year = 1996} 45 | 46 | @book{Kaha12, 47 | Author = {M. J. Kahana}, 48 | Journal = {Oxford University Press}, 49 | Title = {Foundations of Human Memory}, 50 | Address = {New York, NY}, 51 | Year = 2012} 52 | 53 | @article{Hoga75, 54 | Author = {R. M. Hogan}, 55 | Date-Modified = {2017-10-09 20:03:48 +0000}, 56 | Doi = {10.3758/BF03212898}, 57 | Journal = {MC}, 58 | Pages = {197--209}, 59 | Title = {Interitem encoding and directed search in free recall}, 60 | Volume = 3, 61 | Year = 1975} 62 | 63 | @misc{WaskEtal16, 64 | Author = {M. Waskom and O. Botvinnik and D. O'Kane and P. Hobson and S. Lukauskas and D. C. Gemperline and T. Augspurger and Y. Halchenko and J. B. Cole and J. Warmenhoven and J. de Ruiter and C. Pye and S. Hoyer and J. Vanderplas and S. Villalba and G. Kunter and E. Quintero and P. Bachant and M. Martin and K. Meyer and A. Miles and Y. Ram and T. Yarkoni and M. L. Williams and C. Evans and C. Fitzgerald and Brian and C. Fonnesbeck and A. Lee and A. Qalieh}, 65 | Doi = {10.5281/zenodo.54844}, 66 | Title = {Seaborn: v0.7.1}, 67 | Year = 2016} 68 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/auto_examples/plot_accuracy.rst.txt: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/plot_accuracy.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_plot_accuracy.py: 19 | 20 | 21 | ============================= 22 | Plot free recall accuracy 23 | ============================= 24 | 25 | This example plots free recall accuracy for a single subject. 26 | 27 | .. GENERATED FROM PYTHON SOURCE LINES 10-25 28 | 29 | 30 | 31 | .. image-sg:: /auto_examples/images/sphx_glr_plot_accuracy_001.png 32 | :alt: Average Recall Accuracy 33 | :srcset: /auto_examples/images/sphx_glr_plot_accuracy_001.png 34 | :class: sphx-glr-single-img 35 | 36 | 37 | .. rst-class:: sphx-glr-script-out 38 | 39 | .. code-block:: none 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | | 49 | 50 | .. code-block:: Python 51 | 52 | 53 | # Code source: Contextual Dynamics Laboratory 54 | # License: MIT 55 | 56 | #import 57 | import quail 58 | 59 | #load data 60 | egg = quail.load('example') 61 | 62 | #analysis 63 | fegg = egg.analyze('accuracy', listgroup=['condition1']*4+['condition2']*4) 64 | 65 | #plot by list 66 | fegg.plot(plot_style='violin', title='Average Recall Accuracy') 67 | 68 | 69 | .. rst-class:: sphx-glr-timing 70 | 71 | **Total running time of the script:** (0 minutes 0.716 seconds) 72 | 73 | 74 | .. _sphx_glr_download_auto_examples_plot_accuracy.py: 75 | 76 | .. only:: html 77 | 78 | .. container:: sphx-glr-footer sphx-glr-footer-example 79 | 80 | .. container:: sphx-glr-download sphx-glr-download-jupyter 81 | 82 | :download:`Download Jupyter notebook: plot_accuracy.ipynb ` 83 | 84 | .. container:: sphx-glr-download sphx-glr-download-python 85 | 86 | :download:`Download Python source code: plot_accuracy.py ` 87 | 88 | .. container:: sphx-glr-download sphx-glr-download-zip 89 | 90 | :download:`Download zipped: plot_accuracy.zip ` 91 | 92 | 93 | .. only:: html 94 | 95 | .. rst-class:: sphx-glr-signature 96 | 97 | `Gallery generated by Sphinx-Gallery `_ 98 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/auto_examples/create_multisubject_egg.rst.txt: -------------------------------------------------------------------------------- 1 | 2 | .. DO NOT EDIT. 3 | .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. 4 | .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: 5 | .. "auto_examples/create_multisubject_egg.py" 6 | .. LINE NUMBERS ARE GIVEN BELOW. 7 | 8 | .. only:: html 9 | 10 | .. note:: 11 | :class: sphx-glr-download-link-note 12 | 13 | :ref:`Go to the end ` 14 | to download the full example code. 15 | 16 | .. rst-class:: sphx-glr-example-title 17 | 18 | .. _sphx_glr_auto_examples_create_multisubject_egg.py: 19 | 20 | 21 | ============================= 22 | Create a multisubject egg 23 | ============================= 24 | 25 | An egg is made up of two primary pieces of data: `pres`, which are the 26 | words/stimuli that were presented to a subject and `rec`, which are the 27 | words/stimuli that were recalled by the subject. 28 | 29 | .. GENERATED FROM PYTHON SOURCE LINES 12-32 30 | 31 | .. code-block:: Python 32 | 33 | 34 | # Code source: Contextual Dynamics Laboratory 35 | # License: MIT 36 | 37 | import quail 38 | import numpy as np 39 | 40 | # presented words 41 | presented_words = [[['cat', 'bat', 'hat', 'goat'],['zoo', 'animal', 'zebra', 'horse']],[['cat', 'bat', 'hat', 'goat'],['zoo', 'animal', 'zebra', 'horse']]] 42 | 43 | # recalled words 44 | recalled_words = [[['bat', 'cat', 'goat', 'hat'],['animal', 'horse', 'zoo']],[['bat', 'cat', 'goat'],['animal', 'horse']]] 45 | 46 | # create egg 47 | egg = quail.Egg(pres=presented_words, rec=recalled_words) 48 | 49 | # analyze and plot 50 | fegg = egg.analyze('accuracy') 51 | 52 | fegg.plot(plot_style='violin', title='Average Recall Accuracy') 53 | 54 | 55 | .. _sphx_glr_download_auto_examples_create_multisubject_egg.py: 56 | 57 | .. only:: html 58 | 59 | .. container:: sphx-glr-footer sphx-glr-footer-example 60 | 61 | .. container:: sphx-glr-download sphx-glr-download-jupyter 62 | 63 | :download:`Download Jupyter notebook: create_multisubject_egg.ipynb ` 64 | 65 | .. container:: sphx-glr-download sphx-glr-download-python 66 | 67 | :download:`Download Python source code: create_multisubject_egg.py ` 68 | 69 | .. container:: sphx-glr-download sphx-glr-download-zip 70 | 71 | :download:`Download zipped: create_multisubject_egg.zip ` 72 | 73 | 74 | .. only:: html 75 | 76 | .. rst-class:: sphx-glr-signature 77 | 78 | `Gallery generated by Sphinx-Gallery `_ 79 | --------------------------------------------------------------------------------