diff --git a/notebooks/test/test-bus.ipynb b/notebooks/test/test-bus.ipynb new file mode 100644 index 0000000..8c254b7 --- /dev/null +++ b/notebooks/test/test-bus.ipynb @@ -0,0 +1,2268 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "89b9fdf4-327d-4b58-954f-1e2f0636ab0d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sys \n", + "builtins \n", + "_frozen_importlib \n", + "_imp \n", + "_thread \n", + "_warnings \n", + "_weakref \n", + "_io \n", + "marshal \n", + "posix \n", + "_frozen_importlib_external \n", + "time \n", + "zipimport \n", + "_codecs \n", + "codecs \n", + "encodings.aliases \n", + "encodings \n", + "encodings.utf_8 \n", + "_signal \n", + "_abc \n", + "abc \n", + "io \n", + "__main__ \n", + "_stat \n", + "stat \n", + "_collections_abc \n", + "genericpath \n", + "posixpath \n", + "os.path \n", + "os \n", + "_sitebuiltins \n", + "__future__ \n", + "itertools \n", + "keyword \n", + "_operator \n", + "operator \n", + "reprlib \n", + "_collections \n", + "collections \n", + "types \n", + "_functools \n", + "functools \n", + "contextlib \n", + "_virtualenv \n", + "_distutils_hack \n", + "importlib._bootstrap \n", + "importlib._bootstrap_external \n", + "warnings \n", + "importlib \n", + "importlib._abc \n", + "importlib.util \n", + "importlib.machinery \n", + "sphinxcontrib )>\n", + "sitecustomize \n", + "site \n", + "runpy \n", + "enum \n", + "_sre \n", + "re._constants \n", + "re._parser \n", + "re._casefix \n", + "re._compiler \n", + "copyreg \n", + "re \n", + "collections.abc \n", + "_typing \n", + "typing.io \n", + "typing.re \n", + "typing \n", + "ipykernel._version \n", + "_json \n", + "json.scanner \n", + "json.decoder \n", + "json.encoder \n", + "json \n", + "errno \n", + "_locale \n", + "locale \n", + "signal \n", + "_weakrefset \n", + "threading \n", + "fcntl \n", + "_posixsubprocess \n", + "select \n", + "math \n", + "selectors \n", + "subprocess \n", + "jupyter_client._version \n", + "platform \n", + "_ctypes \n", + "_struct \n", + "struct \n", + "ctypes._endian \n", + "ctypes \n", + "zmq.backend.select \n", + "cython_runtime \n", + "_cython_3_0_0 \n", + "zmq.error \n", + "zmq.backend.cython.context \n", + "weakref \n", + "zmq.backend.cython.message \n", + "copy \n", + "_bisect \n", + "bisect \n", + "_random \n", + "_sha512 \n", + "random \n", + "_compat_pickle \n", + "_pickle \n", + "pickle \n", + "zmq.constants \n", + "zmq.backend.cython.socket \n", + "zmq.backend.cython._device \n", + "zmq.backend.cython._poll \n", + "zmq.backend.cython._proxy_steerable \n", + "zmq.backend.cython._version \n", + "zmq.backend.cython.error \n", + "zmq.backend.cython.utils \n", + "zmq.backend.cython \n", + "zmq.backend \n", + "atexit \n", + "zmq.utils \n", + "zmq.utils.interop \n", + "zmq.sugar.attrsettr \n", + "zmq._typing \n", + "zmq.utils.jsonapi \n", + "zmq.sugar.poll \n", + "zmq.sugar.socket \n", + "zmq.sugar.context \n", + "zmq.sugar.frame \n", + "zmq.sugar.tracker \n", + "zmq.sugar.version \n", + "zmq.sugar.stopwatch \n", + "zmq.sugar \n", + "zmq \n", + "concurrent \n", + "token \n", + "tokenize \n", + "linecache \n", + "textwrap \n", + "traceback \n", + "_string \n", + "string \n", + "logging \n", + "concurrent.futures._base \n", + "concurrent.futures \n", + "_heapq \n", + "heapq \n", + "_socket \n", + "array \n", + "socket \n", + "_ssl \n", + "binascii \n", + "base64 \n", + "ssl \n", + "asyncio.constants \n", + "_ast \n", + "ast \n", + "_opcode \n", + "opcode \n", + "dis \n", + "inspect \n", + "asyncio.coroutines \n", + "_contextvars \n", + "contextvars \n", + "asyncio.format_helpers \n", + "asyncio.base_futures \n", + "asyncio.exceptions \n", + "asyncio.base_tasks \n", + "_asyncio \n", + "asyncio.events \n", + "asyncio.futures \n", + "asyncio.protocols \n", + "asyncio.transports \n", + "asyncio.log \n", + "asyncio.sslproto \n", + "asyncio.mixins \n", + "asyncio.tasks \n", + "asyncio.locks \n", + "asyncio.staggered \n", + "asyncio.trsock \n", + "asyncio.base_events \n", + "asyncio.runners \n", + "asyncio.queues \n", + "asyncio.streams \n", + "asyncio.subprocess \n", + "asyncio.taskgroups \n", + "asyncio.timeouts \n", + "asyncio.threads \n", + "asyncio.base_subprocess \n", + "asyncio.selector_events \n", + "asyncio.unix_events \n", + "asyncio \n", + "zmq._future \n", + "zmq.asyncio \n", + "fnmatch \n", + "urllib \n", + "ipaddress \n", + "urllib.parse \n", + "ntpath \n", + "pathlib \n", + "traitlets.utils \n", + "traitlets.utils.bunch \n", + "traitlets.utils.descriptions \n", + "traitlets.utils.getargspec \n", + "traitlets.utils.importstring \n", + "traitlets.utils.sentinel \n", + "traitlets.utils.warnings \n", + "traitlets.traitlets \n", + "traitlets._version \n", + "traitlets.utils.decorators \n", + "traitlets \n", + "_queue \n", + "queue \n", + "jupyter_core.version \n", + "jupyter_core \n", + "jupyter_core.utils \n", + "jupyter_client.channelsabc \n", + "_hashlib \n", + "_blake2 \n", + "hashlib \n", + "hmac \n", + "dataclasses \n", + "pprint \n", + "_datetime \n", + "datetime \n", + "tornado \n", + "numbers \n", + "logging.handlers \n", + "html.entities \n", + "html \n", + "zlib \n", + "tornado.speedups \n", + "tornado.util \n", + "tornado.escape \n", + "_curses \n", + "curses \n", + "tornado.log \n", + "tornado.concurrent \n", + "tornado.ioloop \n", + "socketserver \n", + "logging.config \n", + "traitlets.utils.text \n", + "gettext \n", + "argparse \n", + "traitlets.config.loader \n", + "traitlets.config.configurable \n", + "traitlets.utils.nested_update \n", + "traitlets.config.application \n", + "traitlets.config \n", + "traitlets.log \n", + "zmq.eventloop \n", + "zmq.eventloop.zmqstream \n", + "jupyter_client.adapter \n", + "dateutil._version \n", + "dateutil \n", + "calendar \n", + "six \n", + "_decimal \n", + "decimal \n", + "dateutil._common \n", + "dateutil.relativedelta \n", + "six.moves )>\n", + "dateutil.tz._common \n", + "dateutil.tz._factories \n", + "dateutil.tz.tz \n", + "dateutil.tz \n", + "dateutil.parser._parser \n", + "dateutil.parser.isoparser \n", + "dateutil.parser \n", + "_strptime \n", + "jupyter_client.jsonutil \n", + "jupyter_client.session \n", + "jupyter_client.channels \n", + "termios \n", + "getpass \n", + "jupyter_client.clientabc \n", + "glob \n", + "_compression \n", + "_bz2 \n", + "bz2 \n", + "_lzma \n", + "lzma \n", + "shutil \n", + "tempfile \n", + "platformdirs.api \n", + "platformdirs.version \n", + "configparser \n", + "platformdirs.unix \n", + "platformdirs \n", + "jupyter_core.paths \n", + "jupyter_client.localinterfaces \n", + "jupyter_client.utils \n", + "jupyter_client.connect \n", + "jupyter_client.client \n", + "jupyter_client.asynchronous.client \n", + "jupyter_client.asynchronous \n", + "jupyter_client.blocking.client \n", + "jupyter_client.blocking \n", + "jupyter_client.launcher \n", + "_uuid \n", + "uuid \n", + "_csv \n", + "csv \n", + "email \n", + "zipfile \n", + "quopri \n", + "email._parseaddr \n", + "email.base64mime \n", + "email.quoprimime \n", + "email.errors \n", + "email.encoders \n", + "email.charset \n", + "email.utils \n", + "email.header \n", + "email._policybase \n", + "email._encoded_words \n", + "email.iterators \n", + "email.message \n", + "importlib.metadata._functools \n", + "importlib.metadata._text \n", + "importlib.metadata._adapters \n", + "importlib.metadata._meta \n", + "importlib.metadata._collections \n", + "importlib.metadata._itertools \n", + "importlib.resources.abc \n", + "importlib.resources._adapters \n", + "importlib.resources._common \n", + "importlib.resources._legacy \n", + "importlib.resources \n", + "importlib.abc \n", + "importlib.metadata \n", + "jupyter_client.provisioning.provisioner_base \n", + "jupyter_client.provisioning.factory \n", + "jupyter_client.provisioning.local_provisioner \n", + "jupyter_client.provisioning \n", + "jupyter_client.kernelspec \n", + "jupyter_client.managerabc \n", + "jupyter_client.manager \n", + "jupyter_client.multikernelmanager \n", + "jupyter_client \n", + "ipykernel.connect \n", + "ipykernel \n", + "IPython.core \n", + "IPython.core.getipython \n", + "IPython.core.release \n", + "pkgutil \n", + "sysconfig \n", + "_sysconfigdata__x86_64-linux-gnu \n", + "pydoc \n", + "executing._exceptions \n", + "executing._position_node_finder \n", + "executing.executing \n", + "executing.version \n", + "executing \n", + "asttokens.line_numbers \n", + "asttokens.util \n", + "asttokens.asttokens \n", + "asttokens \n", + "fractions \n", + "pure_eval.utils \n", + "pure_eval.my_getattr_static \n", + "pure_eval.core \n", + "pure_eval.version \n", + "pure_eval \n", + "stack_data.utils \n", + "stack_data.core \n", + "stack_data.formatting \n", + "stack_data.serializing \n", + "stack_data.version \n", + "stack_data \n", + "pygments \n", + "pygments.formatters._mapping \n", + "pygments.plugin \n", + "pygments.util \n", + "pygments.formatters \n", + "pygments.styles \n", + "pygments.formatter \n", + "pygments.console \n", + "pygments.token \n", + "pygments.style \n", + "pygments.formatters.terminal256 \n", + "IPython.utils \n", + "IPython.utils.colorable \n", + "IPython.utils.ipstruct \n", + "IPython.utils.coloransi \n", + "IPython.utils.PyColorize \n", + "IPython.utils.encoding \n", + "IPython.utils.py3compat \n", + "IPython.core.excolors \n", + "cmd \n", + "bdb \n", + "codeop \n", + "code \n", + "pdb \n", + "IPython.core.debugger \n", + "IPython.core.display_trap \n", + "pexpect.exceptions \n", + "pexpect.utils \n", + "pexpect.expect \n", + "tty \n", + "pty \n", + "resource \n", + "ptyprocess.util \n", + "ptyprocess.ptyprocess \n", + "ptyprocess \n", + "pexpect.spawnbase \n", + "pexpect.pty_spawn \n", + "pexpect.run \n", + "pexpect \n", + "shlex \n", + "IPython.utils._process_common \n", + "IPython.utils._process_posix \n", + "IPython.utils.process \n", + "IPython.utils.path \n", + "IPython.utils.terminal \n", + "IPython.core.ultratb \n", + "IPython.utils._sysinfo \n", + "IPython.utils.sysinfo \n", + "IPython.core.crashhandler \n", + "IPython.utils.importstring \n", + "IPython.paths \n", + "IPython.core.profiledir \n", + "IPython.core.application \n", + "IPython.terminal \n", + "IPython.core.compilerop \n", + "IPython.core.error \n", + "IPython.utils.docs \n", + "IPython.utils.decorators \n", + "IPython.utils.text \n", + "IPython.core.magic_arguments \n", + "getopt \n", + "IPython.core.display_functions \n", + "mimetypes \n", + "IPython.testing \n", + "IPython.testing.skipdoctest \n", + "IPython.core.display \n", + "IPython.lib \n", + "IPython.lib.display \n", + "IPython.display \n", + "IPython.utils.data \n", + "IPython.core.page \n", + "IPython.lib.pretty \n", + "IPython.utils.openpy \n", + "IPython.utils.dir2 \n", + "IPython.utils.wildcard \n", + "pygments.lexers._mapping \n", + "pygments.modeline \n", + "pygments.lexers \n", + "pygments.filter \n", + "pygments.filters \n", + "pygments.regexopt \n", + "pygments.lexer \n", + "pygments.unistring \n", + "pygments.lexers.python \n", + "pygments.formatters.html \n", + "IPython.core.oinspect \n", + "IPython.utils.tokenutil \n", + "IPython.core.inputtransformer2 \n", + "IPython.core.magic \n", + "pickleshare \n", + "IPython.core.hooks \n", + "IPython.core.autocall \n", + "IPython.core.macro \n", + "IPython.core.splitinput \n", + "IPython.core.prefilter \n", + "IPython.core.alias \n", + "IPython.core.builtin_trap \n", + "IPython.core.displayhook \n", + "IPython.core.displaypub \n", + "backcall.backcall \n", + "backcall \n", + "IPython.core.events \n", + "IPython.core.extensions \n", + "decorator \n", + "IPython.utils.sentinel \n", + "IPython.core.formatters \n", + "_sqlite3 \n", + "sqlite3.dbapi2 \n", + "sqlite3 \n", + "IPython.core.history \n", + "IPython.core.logger \n", + "IPython.core.payload \n", + "IPython.core.usage \n", + "IPython.utils.capture \n", + "IPython.utils.io \n", + "IPython.utils.strdispatch \n", + "IPython.utils.syspathcontext \n", + "IPython.core.async_helpers \n", + "IPython.core.interactiveshell \n", + "prompt_toolkit.application.current \n", + "prompt_toolkit.eventloop.utils \n", + "prompt_toolkit.eventloop.async_generator \n", + "prompt_toolkit.eventloop.inputhook \n", + "prompt_toolkit.eventloop \n", + "prompt_toolkit.application.run_in_terminal \n", + "prompt_toolkit.selection \n", + "prompt_toolkit.clipboard.base \n", + "prompt_toolkit.clipboard.in_memory \n", + "prompt_toolkit.clipboard \n", + "prompt_toolkit.cache \n", + "prompt_toolkit.enums \n", + "prompt_toolkit.filters.base \n", + "prompt_toolkit.filters.app \n", + "prompt_toolkit.filters.cli \n", + "prompt_toolkit.filters.utils \n", + "prompt_toolkit.filters \n", + "prompt_toolkit.document \n", + "prompt_toolkit.auto_suggest \n", + "prompt_toolkit.keys \n", + "prompt_toolkit.key_binding.key_bindings \n", + "wcwidth.table_wide \n", + "wcwidth.table_zero \n", + "wcwidth.unicode_versions \n", + "wcwidth.wcwidth \n", + "wcwidth \n", + "prompt_toolkit.utils \n", + "prompt_toolkit.key_binding.key_processor \n", + "prompt_toolkit.key_binding \n", + "prompt_toolkit.key_binding.vi_state \n", + "prompt_toolkit.cursor_shapes \n", + "prompt_toolkit.data_structures \n", + "prompt_toolkit.styles.base \n", + "prompt_toolkit.styles.named_colors \n", + "prompt_toolkit.styles.style \n", + "prompt_toolkit.styles.defaults \n", + "prompt_toolkit.styles.pygments \n", + "colorsys \n", + "prompt_toolkit.styles.style_transformation \n", + "prompt_toolkit.styles \n", + "prompt_toolkit.output.color_depth \n", + "prompt_toolkit.output.base \n", + "prompt_toolkit.output.flush_stdout \n", + "prompt_toolkit.output.plain_text \n", + "prompt_toolkit.output.defaults \n", + "prompt_toolkit.output \n", + "prompt_toolkit.output.vt100 \n", + "prompt_toolkit.mouse_events \n", + "prompt_toolkit.formatted_text.base \n", + "prompt_toolkit.formatted_text.ansi \n", + "xml \n", + "xml.dom.domreg \n", + "xml.dom \n", + "xml.dom.minicompat \n", + "xml.dom.NodeFilter \n", + "xml.dom.xmlbuilder \n", + "xml.dom.minidom \n", + "prompt_toolkit.formatted_text.html \n", + "prompt_toolkit.formatted_text.pygments \n", + "prompt_toolkit.formatted_text.utils \n", + "prompt_toolkit.formatted_text \n", + "prompt_toolkit.completion.base \n", + "prompt_toolkit.completion.deduplicate \n", + "prompt_toolkit.completion.filesystem \n", + "prompt_toolkit.completion.word_completer \n", + "prompt_toolkit.completion.fuzzy_completer \n", + "prompt_toolkit.completion.nested \n", + "prompt_toolkit.completion \n", + "prompt_toolkit.history \n", + "prompt_toolkit.search \n", + "prompt_toolkit.validation \n", + "prompt_toolkit.buffer \n", + "prompt_toolkit.input.base \n", + "prompt_toolkit.input.defaults \n", + "prompt_toolkit.input \n", + "prompt_toolkit.input.typeahead \n", + "prompt_toolkit.key_binding.bindings \n", + "prompt_toolkit.key_binding.bindings.scroll \n", + "prompt_toolkit.key_binding.bindings.page_navigation \n", + "prompt_toolkit.lexers.base \n", + "prompt_toolkit.lexers.pygments \n", + "prompt_toolkit.lexers \n", + "prompt_toolkit.layout.utils \n", + "prompt_toolkit.layout.processors \n", + "prompt_toolkit.layout.controls \n", + "prompt_toolkit.layout.dimension \n", + "prompt_toolkit.layout.margins \n", + "prompt_toolkit.layout.mouse_handlers \n", + "prompt_toolkit.layout.screen \n", + "prompt_toolkit.layout.containers \n", + "prompt_toolkit.layout.layout \n", + "prompt_toolkit.layout.menus \n", + "prompt_toolkit.layout.scrollable_pane \n", + "prompt_toolkit.layout \n", + "prompt_toolkit.key_binding.bindings.completion \n", + "prompt_toolkit.key_binding.bindings.named_commands \n", + "prompt_toolkit.key_binding.bindings.basic \n", + "prompt_toolkit.key_binding.bindings.cpr \n", + "prompt_toolkit.key_binding.bindings.emacs \n", + "prompt_toolkit.key_binding.bindings.mouse \n", + "prompt_toolkit.input.ansi_escape_sequences \n", + "prompt_toolkit.input.vt100_parser \n", + "prompt_toolkit.key_binding.digraphs \n", + "prompt_toolkit.key_binding.bindings.vi \n", + "prompt_toolkit.key_binding.defaults \n", + "prompt_toolkit.key_binding.emacs_state \n", + "prompt_toolkit.layout.dummy \n", + "prompt_toolkit.renderer \n", + "prompt_toolkit.application.application \n", + "prompt_toolkit.application.dummy \n", + "prompt_toolkit.application \n", + "prompt_toolkit.key_binding.bindings.focus \n", + "prompt_toolkit.widgets.toolbars \n", + "prompt_toolkit.widgets.base \n", + "prompt_toolkit.widgets.dialogs \n", + "prompt_toolkit.widgets.menus \n", + "prompt_toolkit.widgets \n", + "prompt_toolkit.shortcuts.dialogs \n", + "prompt_toolkit.shortcuts.progress_bar.formatters \n", + "prompt_toolkit.shortcuts.progress_bar.base \n", + "prompt_toolkit.shortcuts.progress_bar \n", + "prompt_toolkit.key_binding.bindings.auto_suggest \n", + "prompt_toolkit.key_binding.bindings.open_in_editor \n", + "prompt_toolkit.shortcuts.prompt \n", + "prompt_toolkit.shortcuts.utils \n", + "prompt_toolkit.shortcuts \n", + "prompt_toolkit \n", + "prompt_toolkit.patch_stdout \n", + "unicodedata \n", + "IPython.core.guarded_eval \n", + "IPython.core.latex_symbols \n", + "IPython.utils.generics \n", + "parso.utils \n", + "parso.tree \n", + "parso.python \n", + "parso.python.token \n", + "parso.python.tokenize \n", + "parso.pgen2.grammar_parser \n", + "parso.pgen2.generator \n", + "parso.pgen2 \n", + "parso.parser \n", + "parso._compatibility \n", + "difflib \n", + "parso.python.prefix \n", + "parso.python.tree \n", + "parso.python.parser \n", + "parso.python.diff \n", + "gc \n", + "parso.cache \n", + "parso.normalizer \n", + "parso.python.errors \n", + "parso.python.pep8 \n", + "parso.file_io \n", + "parso.grammar \n", + "parso \n", + "jedi.parser_utils \n", + "jedi.debug \n", + "jedi.settings \n", + "jedi.cache \n", + "jedi.file_io \n", + "jedi.inference.cache \n", + "jedi.inference.helpers \n", + "jedi.inference.utils \n", + "jedi.inference.base_value \n", + "jedi.inference.sys_path \n", + "jedi.inference.recursion \n", + "jedi.inference.flow_analysis \n", + "jedi.common \n", + "jedi.inference.lazy_value \n", + "jedi.inference.docstrings \n", + "jedi.plugins \n", + "jedi.inference.names \n", + "jedi.inference.filters \n", + "jedi.inference.compiled.getattr_static \n", + "jedi.inference.compiled.access \n", + "jedi.inference.signature \n", + "jedi.inference.context \n", + "jedi.inference.compiled.value \n", + "jedi.inference.compiled \n", + "jedi.inference.analysis \n", + "jedi.inference.gradual \n", + "jedi.inference.value.module \n", + "jedi.inference.value.dynamic_arrays \n", + "jedi.inference.value.iterable \n", + "jedi.inference.arguments \n", + "jedi.inference.parser_cache \n", + "jedi.inference.gradual.generics \n", + "jedi.inference.value.function \n", + "jedi.inference.value.klass \n", + "jedi.inference.value.instance \n", + "jedi.inference.value \n", + "jedi.inference.gradual.base \n", + "jedi.inference.gradual.type_var \n", + "jedi.inference.gradual.typing \n", + "jedi.inference.gradual.stub_value \n", + "jedi.inference.gradual.typeshed \n", + "jedi._compatibility \n", + "jedi.inference.compiled.subprocess.functions \n", + "jedi.api.exceptions \n", + "jedi.inference.compiled.subprocess \n", + "jedi.inference.imports \n", + "jedi.inference.param \n", + "jedi.inference.gradual.annotation \n", + "jedi.inference.value.decorator \n", + "jedi.inference.syntax_tree \n", + "jedi.inference \n", + "jedi.inference.gradual.conversion \n", + "jedi.inference.compiled.mixed \n", + "pydoc_data \n", + "pydoc_data.topics \n", + "jedi.api.keywords \n", + "jedi.api.completion_cache \n", + "jedi.api.helpers \n", + "jedi.api.classes \n", + "jedi.api.interpreter \n", + "jedi.api.strings \n", + "jedi.api.file_name \n", + "jedi.inference.docstring_utils \n", + "jedi.api.completion \n", + "filecmp \n", + "jedi.api.environment \n", + "jedi.inference.references \n", + "jedi.api.project \n", + "jedi.api.errors \n", + "jedi.inference.value.namespace \n", + "jedi.api.refactoring \n", + "jedi.api.refactoring.extract \n", + "jedi.inference.gradual.utils \n", + "jedi.api \n", + "jedi.plugins.stdlib \n", + "jedi.plugins.flask \n", + "jedi.plugins.pytest \n", + "jedi.plugins.django \n", + "jedi.plugins.registry \n", + "jedi \n", + "IPython.core.completer \n", + "IPython.terminal.ptutils \n", + "IPython.terminal.shortcuts.auto_match \n", + "IPython.terminal.shortcuts.filters \n", + "IPython.terminal.shortcuts.auto_suggest \n", + "IPython.terminal.shortcuts \n", + "concurrent.futures.thread \n", + "IPython.terminal.debugger \n", + "IPython.lib.clipboard \n", + "IPython.terminal.magics \n", + "IPython.terminal.pt_inputhooks \n", + "IPython.terminal.prompts \n", + "IPython.terminal.interactiveshell \n", + "IPython.core.magics.auto \n", + "IPython.core.magics.basic \n", + "http \n", + "email.feedparser \n", + "email.parser \n", + "http.client \n", + "urllib.response \n", + "urllib.error \n", + "urllib.request \n", + "IPython.utils.contexts \n", + "IPython.core.magics.code \n", + "IPython.core.magics.config \n", + "IPython.core.magics.display \n", + "_lsprof \n", + "profile \n", + "cProfile \n", + "pstats \n", + "timeit \n", + "IPython.utils.module_paths \n", + "IPython.utils.timing \n", + "IPython.core.magics.ast_mod \n", + "IPython.core.magics.execution \n", + "IPython.core.magics.extension \n", + "IPython.core.magics.history \n", + "IPython.core.magics.logging \n", + "IPython.core.magics.namespace \n", + "IPython.core.magics.osm \n", + "IPython.core.magics.packaging \n", + "IPython.core.pylabtools \n", + "IPython.core.magics.pylab \n", + "IPython.core.magics.script \n", + "IPython.core.magics \n", + "IPython.core.shellapp \n", + "IPython.extensions \n", + "IPython.extensions.storemagic \n", + "IPython.terminal.ipapp \n", + "IPython.terminal.embed \n", + "IPython.utils.frame \n", + "IPython \n", + "ipykernel.control \n", + "ipykernel.heartbeat \n", + "ipykernel.iostream \n", + "comm.base_comm \n", + "comm \n", + "ipykernel.jsonutil \n", + "pwd \n", + "psutil._common \n", + "psutil._compat \n", + "psutil._psposix \n", + "psutil._psutil_linux \n", + "psutil._psutil_posix \n", + "psutil._pslinux \n", + "psutil \n", + "tornado.gen \n", + "tornado.locks \n", + "tornado.queues \n", + "ipykernel.kernelbase \n", + "ipykernel.comm.comm \n", + "ipykernel.comm.manager \n", + "ipykernel.comm \n", + "ipykernel.compiler \n", + "debugpy._version \n", + "debugpy.public_api \n", + "debugpy \n", + "debugpy._vendored._util \n", + "debugpy._vendored \n", + "_pydevd_bundle \n", + "encodings.ascii \n", + "encodings.latin_1 \n", + "stringprep \n", + "encodings.idna \n", + "_pydevd_bundle.pydevd_vm_type \n", + "_pydev_bundle \n", + "xmlrpc \n", + "xml.parsers \n", + "pyexpat.errors \n", + "pyexpat.model \n", + "pyexpat \n", + "xml.parsers.expat.model \n", + "xml.parsers.expat.errors \n", + "xml.parsers.expat \n", + "gzip \n", + "xmlrpc.client \n", + "http.server \n", + "xmlrpc.server \n", + "_pydev_bundle._pydev_saved_modules \n", + "_pydevd_bundle.pydevd_constants \n", + "_pydev_runfiles \n", + "_pydevd_frame_eval \n", + "pydev_ipython \n", + "pydevd_plugins )>\n", + "_pydev_bundle.pydev_log \n", + "_pydev_bundle._pydev_filesystem_encoding \n", + "_pydevd_bundle.pydevd_comm_constants \n", + "pydevd_file_utils \n", + "_pydev_bundle._pydev_execfile \n", + "_pydevd_bundle.pydevd_exec2 \n", + "_pydev_bundle.pydev_imports \n", + "_pydev_bundle.pydev_is_thread_alive \n", + "_pydev_bundle.pydev_override \n", + "pydevd_plugins.extensions )>\n", + "_pydevd_bundle.pydevd_extension_utils \n", + "_pydevd_bundle.pydevd_frame_utils \n", + "_pydevd_bundle.pydevd_filtering \n", + "_pydevd_bundle.pydevd_io \n", + "_pydevd_bundle.pydevd_defaults \n", + "_pydevd_bundle.pydevd_utils \n", + "_pydevd_bundle.pydevd_runpy \n", + "_pydev_bundle._pydev_tipper_common \n", + "_pydev_bundle._pydev_imports_tipper \n", + "_pydev_bundle._pydev_calltip_util \n", + "_pydevd_bundle.pydevd_safe_repr \n", + "_pydevd_bundle.pydevd_resolver \n", + "_pydevd_bundle.pydevd_extension_api \n", + "_pydevd_bundle.pydevd_xml \n", + "_pydevd_bundle.pydevd_dont_trace \n", + "_pydevd_frame_eval.vendored \n", + "_pydevd_frame_eval.vendored.bytecode.flags \n", + "_pydevd_frame_eval.vendored.bytecode.instr \n", + "_pydevd_frame_eval.vendored.bytecode.bytecode \n", + "_pydevd_frame_eval.vendored.bytecode.concrete \n", + "_pydevd_frame_eval.vendored.bytecode.cfg \n", + "_pydevd_frame_eval.vendored.bytecode \n", + "_pydevd_bundle.pydevd_bytecode_utils \n", + "_pydevd_bundle.pydevd_cython \n", + "_pydevd_bundle.pydevd_cython_wrapper \n", + "_pydevd_bundle.pydevd_additional_thread_info \n", + "_pydevd_bundle.pydevd_thread_lifecycle \n", + "_pydevd_bundle.pydevd_save_locals \n", + "_pydev_bundle.pydev_monkey \n", + "pydevd_tracing \n", + "_pydevd_bundle.pydevd_collect_bytecode_info \n", + "_pydevd_bundle.pydevd_daemon_thread \n", + "_pydevd_bundle.pydevd_timeout \n", + "_pydevd_bundle.pydevd_vars \n", + "_pydev_bundle.pydev_console_utils \n", + "_pydevd_bundle.pydevd_import_class \n", + "_pydevd_bundle.pydevd_breakpoints \n", + "_pydevd_bundle.pydevd_custom_frames \n", + "_pydevd_bundle.pydevd_dont_trace_files \n", + "_pydevd_bundle.pydevd_net_command \n", + "_pydevd_bundle.pydevconsole_code \n", + "_pydev_bundle.pydev_umd \n", + "pydevconsole \n", + "_pydev_bundle._pydev_completer \n", + "_pydevd_bundle.pydevd_net_command_factory_xml \n", + "_pydevd_bundle.pydevd_frame \n", + "_pydevd_bundle.pydevd_additional_thread_info_regular \n", + "_pydevd_bundle.pydevd_trace_dispatch \n", + "_pydevd_frame_eval.pydevd_frame_eval_main \n", + "_pydevd_bundle.pydevd_source_mapping \n", + "_pydevd_bundle.pydevd_concurrency_analyser \n", + "_pydevd_bundle.pydevd_concurrency_analyser.pydevd_thread_wrappers \n", + "_pydevd_bundle.pydevd_concurrency_analyser.pydevd_concurrency_logger \n", + "_pydevd_bundle._debug_adapter \n", + "_pydevd_bundle._debug_adapter.pydevd_schema_log \n", + "_pydevd_bundle._debug_adapter.pydevd_base_schema \n", + "_pydevd_bundle._debug_adapter.pydevd_schema \n", + "_pydevd_bundle.pydevd_reload \n", + "_pydev_bundle.fsnotify \n", + "_pydevd_bundle.pydevd_console \n", + "_pydevd_bundle.pydevd_comm \n", + "_pydevd_bundle.pydevd_net_command_factory_json \n", + "_pydevd_bundle.pydevd_api \n", + "_pydevd_bundle.pydevd_json_debug_options \n", + "_pydevd_bundle.pydevd_process_net_command_json \n", + "_pydevd_bundle.pydevd_traceproperty \n", + "_pydevd_bundle.pydevd_process_net_command \n", + "_pydevd_bundle.pydevd_suspended_frames \n", + "_pydevd_bundle.pydevd_trace_api \n", + "pydevd_plugins.pydevd_line_validation \n", + "pydevd_plugins.django_debug \n", + "pydevd_plugins.jinja2_debug \n", + "_pydevd_bundle.pydevd_plugin_utils \n", + "pydevd \n", + "debugpy._vendored.force_pydevd \n", + "debugpy.server \n", + "debugpy.adapter \n", + "debugpy.common \n", + "debugpy.common.json \n", + "debugpy.common.timestamp \n", + "debugpy.common.util \n", + "debugpy.common.log \n", + "debugpy.common.sockets \n", + "debugpy.server.api \n", + "ipykernel.debugger \n", + "packaging \n", + "packaging._structures \n", + "packaging.version \n", + "ipykernel.eventloops \n", + "IPython.core.payloadpage \n", + "ipykernel.displayhook \n", + "ipykernel.zmqshell \n", + "ipykernel.ipkernel \n", + "ipykernel.parentpoller \n", + "ipykernel.kernelapp \n", + "tornado.platform \n", + "tornado.platform.asyncio \n", + "faulthandler \n", + "IPython.core.completerlib \n", + "csoundengine \n", + "numpy._utils._convertions \n", + "numpy._utils \n", + "numpy._globals \n", + "numpy.exceptions \n", + "numpy.version \n", + "numpy._distributor_init \n", + "numpy._utils._inspect \n", + "numpy.core._exceptions \n", + "numpy.dtypes \n", + "numpy.core._multiarray_umath \n", + "numpy.core.overrides \n", + "numpy.core.multiarray \n", + "numpy.core.umath \n", + "numpy.core._string_helpers \n", + "numpy.compat.py3k \n", + "numpy.compat \n", + "numpy.core._dtype \n", + "numpy.core._type_aliases \n", + "numpy.core.numerictypes \n", + "numpy.core._ufunc_config \n", + "numpy.core._methods \n", + "numpy.core.fromnumeric \n", + "numpy.core.shape_base \n", + "numpy.core.arrayprint \n", + "numpy.core._asarray \n", + "numpy.core.numeric \n", + "numpy.core.defchararray \n", + "numpy.core.records \n", + "numpy.core.memmap \n", + "numpy.core.function_base \n", + "numpy.core._machar \n", + "numpy.core.getlimits \n", + "numpy.core.einsumfunc \n", + "numpy.core._multiarray_tests \n", + "numpy.core._add_newdocs \n", + "numpy.core._add_newdocs_scalars \n", + "numpy.core._dtype_ctypes \n", + "numpy.core._internal \n", + "numpy._pytesttester \n", + "numpy.core \n", + "numpy.__config__ \n", + "numpy.lib.mixins \n", + "numpy.lib.ufunclike \n", + "numpy.lib.type_check \n", + "numpy.lib.scimath \n", + "numpy.lib.stride_tricks \n", + "numpy.lib.twodim_base \n", + "numpy.linalg._umath_linalg \n", + "numpy._typing._nested_sequence \n", + "numpy._typing._nbit \n", + "numpy._typing._char_codes \n", + "numpy._typing._scalars \n", + "numpy._typing._shape \n", + "numpy._typing._dtype_like \n", + "numpy._typing._array_like \n", + "numpy._typing \n", + "numpy.linalg.linalg \n", + "numpy.linalg \n", + "numpy.matrixlib.defmatrix \n", + "numpy.matrixlib \n", + "numpy.lib.histograms \n", + "numpy.lib.function_base \n", + "numpy.lib.index_tricks \n", + "numpy.lib.nanfunctions \n", + "numpy.lib.shape_base \n", + "numpy.lib.polynomial \n", + "numpy.lib.utils \n", + "numpy.lib.arraysetops \n", + "numpy.lib.format \n", + "numpy.lib._datasource \n", + "numpy.lib._iotools \n", + "numpy.lib.npyio \n", + "numpy.lib.arrayterator \n", + "numpy.lib.arraypad \n", + "numpy.lib._version \n", + "numpy.lib \n", + "numpy.fft._pocketfft_internal \n", + "numpy.fft._pocketfft \n", + "numpy.fft.helper \n", + "numpy.fft \n", + "numpy.polynomial.polyutils \n", + "numpy.polynomial._polybase \n", + "numpy.polynomial.polynomial \n", + "numpy.polynomial.chebyshev \n", + "numpy.polynomial.legendre \n", + "numpy.polynomial.hermite \n", + "numpy.polynomial.hermite_e \n", + "numpy.polynomial.laguerre \n", + "numpy.polynomial \n", + "_cython_3_0_2 \n", + "numpy.random._common \n", + "secrets \n", + "numpy.random.bit_generator \n", + "numpy.random._bounded_integers \n", + "numpy.random._mt19937 \n", + "numpy.random.mtrand \n", + "numpy.random._philox \n", + "numpy.random._pcg64 \n", + "numpy.random._sfc64 \n", + "numpy.random._generator \n", + "numpy.random._pickle \n", + "numpy.random \n", + "numpy.ctypeslib \n", + "numpy.ma.core \n", + "numpy.ma.extras \n", + "numpy.ma \n", + "numpy \n", + "ctypes.util \n", + "_cffi_backend \n", + "_soundfile \n", + "_soundfile_data \n", + "soundfile \n", + "sndfileio.util \n", + "sndfileio.datastructs \n", + "sndfileio.sndfileio \n", + "scipy._lib._testutils \n", + "scipy._lib \n", + "scipy._lib.deprecation \n", + "scipy.__config__ \n", + "scipy.version \n", + "scipy._distributor_init \n", + "scipy._lib._pep440 \n", + "scipy._lib._ccallback_c \n", + "scipy._lib._ccallback \n", + "scipy \n", + "scipy.signal._sigtools \n", + "scipy.linalg._fblas \n", + "scipy.linalg.blas \n", + "scipy.linalg._flapack \n", + "scipy.linalg.lapack \n", + "scipy.linalg._misc \n", + "_cython_0_29_36 \n", + "scipy.linalg.cython_lapack \n", + "scipy.linalg._cythonized_array_utils \n", + "scipy._lib._util \n", + "scipy.linalg._decomp \n", + "scipy.linalg._decomp_svd \n", + "scipy.linalg._solve_toeplitz \n", + "scipy.linalg._basic \n", + "scipy.linalg._decomp_lu_cython \n", + "scipy.linalg._decomp_lu \n", + "scipy.linalg._decomp_ldl \n", + "scipy.linalg._decomp_cholesky \n", + "scipy.linalg._decomp_qr \n", + "scipy.linalg._decomp_qz \n", + "scipy.linalg._decomp_schur \n", + "scipy.linalg._decomp_polar \n", + "scipy.linalg._expm_frechet \n", + "scipy.linalg._matfuncs_sqrtm_triu \n", + "scipy.linalg._matfuncs_sqrtm \n", + "scipy.linalg.cython_blas \n", + "scipy.linalg._matfuncs_expm \n", + "scipy.linalg._matfuncs \n", + "scipy.linalg._special_matrices \n", + "scipy.linalg._solvers \n", + "scipy.linalg._procrustes \n", + "scipy.linalg._decomp_update \n", + "scipy.sparse._sputils \n", + "scipy.sparse._matrix \n", + "scipy.sparse._base \n", + "scipy.sparse._sparsetools \n", + "scipy.sparse._data \n", + "scipy.sparse._index \n", + "scipy.sparse._compressed \n", + "scipy.sparse._csr \n", + "scipy.sparse._csc \n", + "_csparsetools \n", + "scipy.sparse._csparsetools \n", + "scipy.sparse._lil \n", + "scipy.sparse._dok \n", + "scipy.sparse._coo \n", + "scipy.sparse._dia \n", + "scipy.sparse._bsr \n", + "scipy.sparse._construct \n", + "scipy.sparse._extract \n", + "scipy.sparse._matrix_io \n", + "scipy.sparse.linalg._isolve._iterative \n", + "scipy.sparse.linalg._interface \n", + "scipy.sparse.linalg._isolve.utils \n", + "scipy._lib.decorator \n", + "scipy._lib._threadsafety \n", + "scipy.sparse.linalg._isolve.iterative \n", + "scipy.sparse.linalg._isolve.minres \n", + "scipy.sparse.linalg._isolve._gcrotmk \n", + "scipy.sparse.linalg._isolve.lgmres \n", + "scipy.sparse.linalg._isolve.lsqr \n", + "scipy.sparse.linalg._isolve.lsmr \n", + "scipy.sparse.linalg._isolve.tfqmr \n", + "scipy.sparse.linalg._isolve \n", + "scipy.sparse.linalg._dsolve._superlu \n", + "scipy.sparse.linalg._dsolve.linsolve \n", + "scipy.sparse.linalg._dsolve._add_newdocs \n", + "scipy.sparse.linalg._dsolve \n", + "scipy.sparse.linalg._eigen.arpack._arpack \n", + "scipy.sparse.linalg._eigen.arpack.arpack \n", + "scipy.sparse.linalg._eigen.arpack \n", + "scipy.sparse.linalg._eigen.lobpcg.lobpcg \n", + "scipy.sparse.linalg._eigen.lobpcg \n", + "scipy.sparse.linalg._eigen._svds \n", + "scipy.sparse.linalg._eigen \n", + "scipy.sparse.linalg._onenormest \n", + "scipy.sparse.linalg._expm_multiply \n", + "scipy.sparse.linalg._matfuncs \n", + "scipy.sparse.linalg._norm \n", + "scipy.sparse.linalg.isolve \n", + "scipy.sparse.linalg.dsolve \n", + "scipy.sparse.linalg.interface \n", + "scipy.sparse.linalg.eigen \n", + "scipy.sparse.linalg.matfuncs \n", + "scipy.sparse.linalg \n", + "scipy.sparse.csgraph._laplacian \n", + "scipy.sparse.csgraph._tools \n", + "scipy.sparse.csgraph._validation \n", + "scipy.sparse.csgraph._shortest_path \n", + "scipy.sparse.csgraph._traversal \n", + "scipy.sparse.csgraph._min_spanning_tree \n", + "scipy.sparse.csgraph._flow \n", + "scipy.sparse.csgraph._matching \n", + "scipy.sparse.csgraph._reordering \n", + "scipy.sparse.csgraph \n", + "scipy.sparse.base \n", + "scipy.sparse.bsr \n", + "scipy.sparse.compressed \n", + "scipy.sparse.construct \n", + "scipy.sparse.coo \n", + "scipy.sparse.csc \n", + "scipy.sparse.csr \n", + "scipy.sparse.data \n", + "scipy.sparse.dia \n", + "scipy.sparse.dok \n", + "scipy.sparse.extract \n", + "scipy.sparse.lil \n", + "scipy.sparse.sparsetools \n", + "scipy.sparse.sputils \n", + "scipy.sparse \n", + "scipy.linalg._sketches \n", + "scipy.linalg._decomp_cossin \n", + "scipy.linalg.decomp \n", + "scipy.linalg.decomp_cholesky \n", + "scipy.linalg.decomp_lu \n", + "scipy.linalg.decomp_qr \n", + "scipy.linalg.decomp_svd \n", + "scipy.linalg.decomp_schur \n", + "scipy.linalg.basic \n", + "scipy.linalg.misc \n", + "scipy.linalg.special_matrices \n", + "scipy.linalg._flinalg \n", + "scipy.linalg._flinalg_py \n", + "scipy.linalg.flinalg \n", + "scipy.linalg.matfuncs \n", + "scipy.linalg \n", + "scipy.special._sf_error \n", + "scipy.special._ufuncs_cxx \n", + "scipy.special._ufuncs \n", + "scipy.special._specfun \n", + "scipy.special._comb \n", + "scipy.special._basic \n", + "scipy.special._logsumexp \n", + "scipy.special._orthogonal \n", + "scipy.special._spfun_stats \n", + "scipy.special._ellip_harm_2 \n", + "scipy.special._ellip_harm \n", + "scipy.special._lambertw \n", + "scipy.special._spherical_bessel \n", + "scipy.special._add_newdocs \n", + "scipy.special.add_newdocs \n", + "scipy.special.basic \n", + "scipy.special.orthogonal \n", + "scipy.special.specfun \n", + "scipy.special.sf_error \n", + "scipy.special.spfun_stats \n", + "scipy.special \n", + "scipy._lib._uarray._uarray \n", + "scipy._lib._uarray._backend \n", + "scipy._lib._uarray \n", + "scipy._lib.uarray \n", + "scipy.fft._basic \n", + "scipy.fft._realtransforms \n", + "scipy.fft._fftlog \n", + "scipy.fft._fftlog_multimethods \n", + "scipy.fft._pocketfft.pypocketfft \n", + "scipy.fft._pocketfft.helper \n", + "scipy.fft._pocketfft.basic \n", + "scipy.fft._pocketfft.realtransforms \n", + "scipy.fft._pocketfft \n", + "scipy.fft._helper \n", + "scipy.fft._backend \n", + "scipy.fft \n", + "scipy.signal.windows._windows \n", + "scipy.signal.windows.windows \n", + "scipy.signal.windows \n", + "scipy.signal._waveforms \n", + "scipy.signal._max_len_seq_inner \n", + "scipy.signal._max_len_seq \n", + "scipy.signal._upfirdn_apply \n", + "scipy.signal._upfirdn \n", + "scipy.signal._spline \n", + "scipy.interpolate._fitpack \n", + "scipy.interpolate.dfitpack \n", + "scipy.interpolate._fitpack_impl \n", + "scipy.optimize._minpack2 \n", + "scipy.optimize._linesearch \n", + "scipy.optimize._group_columns \n", + "scipy.optimize._numdiff \n", + "scipy.optimize._hessian_update_strategy \n", + "scipy.optimize._differentiable_functions \n", + "scipy.optimize._optimize \n", + "scipy.optimize._trustregion \n", + "scipy.optimize._trustregion_dogleg \n", + "scipy.optimize._trustregion_ncg \n", + "scipy._lib.messagestream \n", + "scipy.optimize._trlib._trlib \n", + "scipy.optimize._trlib \n", + "scipy.optimize._trustregion_krylov \n", + "scipy.optimize._trustregion_exact \n", + "unittest.util \n", + "unittest.result \n", + "unittest.case \n", + "unittest.suite \n", + "unittest.loader \n", + "unittest.signals \n", + "unittest.runner \n", + "unittest.main \n", + "unittest \n", + "numpy.testing._private \n", + "numpy.testing._private.utils \n", + "numpy.testing._private.extbuild \n", + "numpy.testing.overrides \n", + "numpy.testing \n", + "scipy.optimize._constraints \n", + "scipy.optimize._trustregion_constr.projections \n", + "scipy.optimize._trustregion_constr.qp_subproblem \n", + "scipy.optimize._trustregion_constr.equality_constrained_sqp \n", + "scipy.optimize._trustregion_constr.canonical_constraint \n", + "scipy.optimize._trustregion_constr.tr_interior_point \n", + "scipy.optimize._trustregion_constr.report \n", + "scipy.optimize._trustregion_constr.minimize_trustregion_constr \n", + "scipy.optimize._trustregion_constr \n", + "scipy.optimize._lbfgsb \n", + "scipy.optimize._lbfgsb_py \n", + "_moduleTNC \n", + "scipy.optimize._moduleTNC \n", + "scipy.optimize._tnc \n", + "scipy.optimize._cobyla \n", + "scipy.optimize._cobyla_py \n", + "scipy.optimize._slsqp \n", + "scipy.optimize._slsqp_py \n", + "scipy.optimize._minimize \n", + "scipy.optimize._minpack \n", + "scipy.optimize._lsq.common \n", + "scipy.optimize._lsq.trf \n", + "scipy.optimize._lsq.dogbox \n", + "scipy.optimize._lsq.least_squares \n", + "scipy.optimize._lsq.givens_elimination \n", + "scipy.optimize._lsq.trf_linear \n", + "scipy.optimize._lsq.bvls \n", + "scipy.optimize._lsq.lsq_linear \n", + "scipy.optimize._lsq \n", + "scipy.optimize._minpack_py \n", + "scipy.optimize._spectral \n", + "scipy.optimize._nonlin \n", + "scipy.optimize._root \n", + "scipy.optimize._zeros \n", + "scipy.optimize._zeros_py \n", + "scipy.optimize._root_scalar \n", + "scipy.optimize.__nnls \n", + "scipy.optimize._nnls \n", + "scipy.optimize._basinhopping \n", + "scipy.optimize._highs \n", + "scipy.optimize._highs.cython.src._highs_wrapper \n", + "scipy.optimize._highs._highs_wrapper \n", + "scipy.optimize._highs.cython.src._highs_constants \n", + "scipy.optimize._highs._highs_constants \n", + "scipy.optimize._linprog_highs \n", + "scipy.linalg._interpolative \n", + "scipy.linalg._interpolative_backend \n", + "scipy.linalg.interpolative \n", + "scipy.optimize._remove_redundancy \n", + "scipy.optimize._linprog_util \n", + "scipy.optimize._linprog_ip \n", + "scipy.optimize._linprog_simplex \n", + "scipy.optimize._bglu_dense \n", + "scipy.optimize._linprog_rs \n", + "scipy.optimize._linprog_doc \n", + "scipy.optimize._linprog \n", + "scipy.optimize._lsap \n", + "scipy.optimize._differentialevolution \n", + "scipy.spatial._ckdtree \n", + "scipy.spatial._kdtree \n", + "scipy.spatial._qhull \n", + "scipy.spatial._voronoi \n", + "scipy.spatial._spherical_voronoi \n", + "scipy.spatial._plotutils \n", + "scipy.spatial._procrustes \n", + "scipy.spatial._distance_wrap \n", + "scipy.spatial._hausdorff \n", + "scipy.spatial._distance_pybind \n", + "scipy.spatial.distance \n", + "scipy.spatial._geometric_slerp \n", + "scipy.spatial.ckdtree \n", + "scipy.spatial.kdtree \n", + "scipy.spatial.qhull \n", + "scipy.constants._codata \n", + "scipy.constants._constants \n", + "scipy.constants.codata \n", + "scipy.constants.constants \n", + "scipy.constants \n", + "scipy.spatial.transform._rotation_groups \n", + "scipy.spatial.transform._rotation \n", + "scipy.spatial.transform._rotation_spline \n", + "scipy.spatial.transform.rotation \n", + "scipy.spatial.transform \n", + "scipy.spatial \n", + "scipy.optimize._shgo_lib \n", + "scipy.optimize._shgo_lib._vertex \n", + "scipy.optimize._shgo_lib._complex \n", + "scipy.optimize._shgo \n", + "scipy.optimize._dual_annealing \n", + "scipy.optimize._qap \n", + "scipy.optimize._direct \n", + "scipy.optimize._direct_py \n", + "scipy.optimize._milp \n", + "scipy.optimize.cobyla \n", + "scipy.optimize.lbfgsb \n", + "scipy.optimize.linesearch \n", + "scipy.optimize.minpack \n", + "scipy.optimize.minpack2 \n", + "scipy.optimize.moduleTNC \n", + "scipy.optimize.nonlin \n", + "scipy.optimize.optimize \n", + "scipy.optimize.slsqp \n", + "scipy.optimize.tnc \n", + "scipy.optimize.zeros \n", + "scipy.optimize \n", + "scipy.interpolate._bspl \n", + "scipy.interpolate._bsplines \n", + "scipy.interpolate._fitpack_py \n", + "scipy.interpolate._polyint \n", + "scipy.interpolate._ppoly \n", + "scipy.interpolate.interpnd \n", + "scipy.interpolate._interpolate \n", + "scipy.interpolate._fitpack2 \n", + "scipy.interpolate._rbf \n", + "scipy.interpolate._rbfinterp_pythran \n", + "scipy.interpolate._rbfinterp \n", + "scipy.interpolate._cubic \n", + "scipy.interpolate._ndgriddata \n", + "scipy.interpolate._pade \n", + "scipy.interpolate._rgi_cython \n", + "scipy.interpolate._rgi \n", + "scipy.interpolate.fitpack \n", + "scipy.interpolate.fitpack2 \n", + "scipy.interpolate.interpolate \n", + "scipy.interpolate.ndgriddata \n", + "scipy.interpolate.polyint \n", + "scipy.interpolate.rbf \n", + "scipy.interpolate \n", + "scipy.signal._bsplines \n", + "scipy.signal._filter_design \n", + "scipy.signal._fir_filter_design \n", + "scipy.integrate._quadrature \n", + "scipy.integrate._odepack \n", + "scipy.integrate._odepack_py \n", + "scipy.integrate._quadpack \n", + "scipy.integrate._quadpack_py \n", + "scipy.integrate._vode \n", + "scipy.integrate._dop \n", + "scipy.integrate._lsoda \n", + "scipy.integrate._ode \n", + "scipy.integrate._bvp \n", + "scipy.integrate._ivp.common \n", + "scipy.integrate._ivp.base \n", + "scipy.integrate._ivp.bdf \n", + "scipy.integrate._ivp.radau \n", + "scipy.integrate._ivp.dop853_coefficients \n", + "scipy.integrate._ivp.rk \n", + "scipy.integrate._ivp.lsoda \n", + "scipy.integrate._ivp.ivp \n", + "scipy.integrate._ivp \n", + "scipy.integrate._quad_vec \n", + "scipy.integrate.dop \n", + "scipy.integrate.lsoda \n", + "scipy.integrate.vode \n", + "scipy.integrate.odepack \n", + "scipy.integrate.quadpack \n", + "scipy.integrate \n", + "scipy.signal._lti_conversion \n", + "scipy.signal._ltisys \n", + "scipy.ndimage._ni_support \n", + "scipy.ndimage._nd_image \n", + "scipy._lib.doccer \n", + "scipy.ndimage._ni_docstrings \n", + "scipy.ndimage._filters \n", + "scipy.ndimage._fourier \n", + "scipy.ndimage._interpolation \n", + "_ni_label \n", + "scipy.ndimage._ni_label \n", + "scipy.ndimage._morphology \n", + "scipy.ndimage._measurements \n", + "scipy.ndimage.filters \n", + "scipy.ndimage.fourier \n", + "scipy.ndimage.interpolation \n", + "scipy.ndimage.measurements \n", + "scipy.ndimage.morphology \n", + "scipy.ndimage \n", + "scipy.signal._arraytools \n", + "scipy.signal._sosfilt \n", + "scipy.signal._signaltools \n", + "scipy.signal._savitzky_golay \n", + "scipy.signal._spectral \n", + "scipy.signal._spectral_py \n", + "scipy.signal._wavelets \n", + "scipy.stats._warnings_errors \n", + "scipy.stats._distr_params \n", + "scipy._lib._finite_differences \n", + "scipy.stats._constants \n", + "scipy.stats._censored_data \n", + "scipy.stats._distn_infrastructure \n", + "scipy.special.cython_special \n", + "scipy.stats._stats \n", + "scipy.stats._tukeylambda_stats \n", + "scipy.stats._ksstats \n", + "scipy.stats.beta_ufunc \n", + "scipy.stats._boost.beta_ufunc \n", + "scipy.stats.binom_ufunc \n", + "scipy.stats._boost.binom_ufunc \n", + "scipy.stats.nbinom_ufunc \n", + "scipy.stats._boost.nbinom_ufunc \n", + "scipy.stats.hypergeom_ufunc \n", + "scipy.stats._boost.hypergeom_ufunc \n", + "scipy.stats.ncf_ufunc \n", + "scipy.stats._boost.ncf_ufunc \n", + "scipy.stats.ncx2_ufunc \n", + "scipy.stats._boost.ncx2_ufunc \n", + "scipy.stats.nct_ufunc \n", + "scipy.stats._boost.nct_ufunc \n", + "scipy.stats.skewnorm_ufunc \n", + "scipy.stats._boost.skewnorm_ufunc \n", + "scipy.stats.invgauss_ufunc \n", + "scipy.stats._boost.invgauss_ufunc \n", + "scipy.stats._boost \n", + "scipy.stats._continuous_distns \n", + "scipy.stats._biasedurn \n", + "scipy.stats._discrete_distns \n", + "scipy.stats._levy_stable.levyst \n", + "scipy.stats._levy_stable \n", + "scipy.stats._entropy \n", + "scipy.stats.distributions \n", + "scipy._lib._bunch \n", + "scipy.stats._stats_pythran \n", + "scipy.stats._stats_mstats_common \n", + "scipy.stats._mstats_basic \n", + "scipy.stats._common \n", + "scipy.stats._hypotests \n", + "scipy._lib._docscrape \n", + "scipy.stats._axis_nan_policy \n", + "scipy.stats._resampling \n", + "scipy.stats._binomtest \n", + "scipy.stats._stats_py \n", + "scipy.stats._variation \n", + "scipy.stats._statlib \n", + "scipy.stats._fit \n", + "scipy.stats._relative_risk \n", + "scipy.stats._crosstab \n", + "scipy.stats._odds_ratio \n", + "scipy.stats.contingency \n", + "scipy.stats._morestats \n", + "scipy.stats._sobol \n", + "scipy.stats._qmc_cy \n", + "scipy.stats._qmc \n", + "scipy.stats._multicomp \n", + "scipy.stats._binned_statistic \n", + "scipy.stats._mvn \n", + "scipy.stats._kde \n", + "scipy.stats._mstats_extras \n", + "scipy.stats.mstats \n", + "scipy.stats.qmc \n", + "scipy.stats._covariance \n", + "scipy.stats._rcont.rcont \n", + "scipy.stats._rcont \n", + "scipy.stats._qmvnt \n", + "scipy.stats._multivariate \n", + "scipy.stats._rvs_sampling \n", + "scipy.stats._page_trend_test \n", + "scipy.stats._mannwhitneyu \n", + "scipy.stats._sensitivity_analysis \n", + "scipy.stats._survival \n", + "scipy.stats.biasedurn \n", + "scipy.stats.kde \n", + "scipy.stats.morestats \n", + "scipy.stats.mstats_basic \n", + "scipy.stats.mstats_extras \n", + "scipy.stats.mvn \n", + "scipy.stats.statlib \n", + "scipy.stats.stats \n", + "scipy.stats \n", + "scipy.signal._peak_finding_utils \n", + "scipy.signal._peak_finding \n", + "cmath \n", + "scipy.signal._czt \n", + "scipy.signal.bsplines \n", + "scipy.signal.filter_design \n", + "scipy.signal.fir_filter_design \n", + "scipy.signal.lti_conversion \n", + "scipy.signal.ltisys \n", + "scipy.signal.spectral \n", + "scipy.signal.signaltools \n", + "scipy.signal.waveforms \n", + "scipy.signal.wavelets \n", + "scipy.signal.spline \n", + "scipy.signal \n", + "sndfileio.dsp \n", + "sndfileio.resampling \n", + "sndfileio \n", + "appdirs \n", + "yaml.error \n", + "yaml.tokens \n", + "yaml.events \n", + "yaml.nodes \n", + "yaml.reader \n", + "yaml.scanner \n", + "yaml.parser \n", + "yaml.composer \n", + "yaml.constructor \n", + "yaml.resolver \n", + "yaml.loader \n", + "yaml.emitter \n", + "yaml.serializer \n", + "yaml.representer \n", + "yaml.dumper \n", + "yaml._yaml \n", + "yaml.cyaml \n", + "yaml \n", + "configdict.configdict \n", + "configdict \n", + "csoundengine.config \n", + "cachetools.keys \n", + "cachetools \n", + "emlib \n", + "emlib.common \n", + "emlib.dialogs \n", + "emlib.iterlib \n", + "emlib.envir \n", + "emlib.misc \n", + "xxhash._xxhash \n", + "xxhash.version \n", + "xxhash \n", + "csoundengine.internalTools \n", + "csoundengine.linuxaudio \n", + "_jack \n", + "jack \n", + "csoundengine.jacktools \n", + "csoundengine.state \n", + "emlib.textlib \n", + "emlib.mathlib \n", + "ctcsound7 \n", + "csoundengine.csoundlib \n", + "csoundengine.tools \n", + "csoundengine.dependencies \n", + "emlib.net \n", + "pitchtools \n", + "tabulate.version \n", + "tabulate \n", + "emlib.containers \n", + "csoundengine.engineorc \n", + "csoundengine.termui \n", + "csoundengine.errors \n", + "csoundengine.engine \n", + "csoundengine.session \n", + "_cython_0_29_34 \n", + "bpf4.arraytools \n", + "bpf4.config \n", + "bpf4.core \n", + "bpf4.util \n", + "bpf4.api \n", + "bpf4.version \n", + "bpf4 \n", + "ipywidgets._version \n", + "ipywidgets.comm \n", + "ipywidgets.widgets.utils \n", + "ipywidgets.widgets.widget \n", + "ipywidgets.widgets.trait_types \n", + "ipywidgets.widgets.widget_layout \n", + "ipywidgets.widgets.widget_style \n", + "ipywidgets.widgets.domwidget \n", + "ipywidgets.widgets.valuewidget \n", + "ipywidgets.widgets.widget_core \n", + "ipywidgets.widgets.widget_description \n", + "ipywidgets.widgets.widget_bool \n", + "ipywidgets.widgets.widget_button \n", + "ipywidgets.widgets.docutils \n", + "ipywidgets.widgets.widget_box \n", + "ipywidgets.widgets.widget_int \n", + "ipywidgets.widgets.widget_float \n", + "ipywidgets.widgets.widget_color \n", + "ipywidgets.widgets.widget_date \n", + "ipywidgets.widgets.widget_datetime \n", + "ipywidgets.widgets.widget_time \n", + "ipywidgets.widgets.widget_output \n", + "ipywidgets.widgets.widget_selection \n", + "ipywidgets.widgets.widget_selectioncontainer \n", + "ipywidgets.widgets.widget_string \n", + "ipywidgets.widgets.widget_controller \n", + "ipywidgets.widgets.interaction \n", + "ipywidgets.widgets.widget_link \n", + "ipywidgets.widgets.widget_media \n", + "ipywidgets.widgets.widget_tagsinput \n", + "ipywidgets.widgets.widget_templates \n", + "ipywidgets.widgets.widget_upload \n", + "ipywidgets.widgets \n", + "ipywidgets \n", + "csoundengine.jupytertools \n", + "csoundengine.baseevent \n", + "csoundengine.instrtools \n", + "csoundengine.instr \n", + "csoundengine.abstractrenderer \n", + "csoundengine.synth \n", + "csoundengine.tableproxy \n", + "csoundengine.sessioninstrs \n", + "csoundengine.offlineorc \n", + "emlib.filetools \n", + "csoundengine.offline \n", + "csoundengine.busproxy \n" + ] + } + ], + "source": [ + "from csoundengine import *" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f1cf65f4-aa7c-4457-adaf-2713a9b8b8c9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'sys': , 'builtins': , '_frozen_importlib': , '_imp': , '_thread': , '_warnings': , '_weakref': , '_io': , 'marshal': , 'posix': , '_frozen_importlib_external': , 'time': , 'zipimport': , '_codecs': , 'codecs': , 'encodings.aliases': , 'encodings': , 'encodings.utf_8': , '_signal': , '_abc': , 'abc': , 'io': , '__main__': , '_stat': , 'stat': , '_collections_abc': , 'genericpath': , 'posixpath': , 'os.path': , 'os': , '_sitebuiltins': , '__future__': , 'itertools': , 'keyword': , '_operator': , 'operator': , 'reprlib': , '_collections': , 'collections': , 'types': , '_functools': , 'functools': , 'contextlib': , '_virtualenv': , '_distutils_hack': , 'importlib._bootstrap': , 'importlib._bootstrap_external': , 'warnings': , 'importlib': , 'importlib._abc': , 'importlib.util': , 'importlib.machinery': , 'sphinxcontrib': )>, 'sitecustomize': , 'site': , 'runpy': , 'enum': , '_sre': , 're._constants': , 're._parser': , 're._casefix': , 're._compiler': , 'copyreg': , 're': , 'collections.abc': , '_typing': , 'typing.io': , 'typing.re': , 'typing': , 'ipykernel._version': , '_json': , 'json.scanner': , 'json.decoder': , 'json.encoder': , 'json': , 'errno': , '_locale': , 'locale': , 'signal': , '_weakrefset': , 'threading': , 'fcntl': , '_posixsubprocess': , 'select': , 'math': , 'selectors': , 'subprocess': , 'jupyter_client._version': , 'platform': , '_ctypes': , '_struct': , 'struct': , 'ctypes._endian': , 'ctypes': , 'zmq.backend.select': , 'cython_runtime': , '_cython_3_0_0': , 'zmq.error': , 'zmq.backend.cython.context': , 'weakref': , 'zmq.backend.cython.message': , 'copy': , '_bisect': , 'bisect': , '_random': , '_sha512': , 'random': , '_compat_pickle': , '_pickle': , 'pickle': , 'zmq.constants': , 'zmq.backend.cython.socket': , 'zmq.backend.cython._device': , 'zmq.backend.cython._poll': , 'zmq.backend.cython._proxy_steerable': , 'zmq.backend.cython._version': , 'zmq.backend.cython.error': , 'zmq.backend.cython.utils': , 'zmq.backend.cython': , 'zmq.backend': , 'atexit': , 'zmq.utils': , 'zmq.utils.interop': , 'zmq.sugar.attrsettr': , 'zmq._typing': , 'zmq.utils.jsonapi': , 'zmq.sugar.poll': , 'zmq.sugar.socket': , 'zmq.sugar.context': , 'zmq.sugar.frame': , 'zmq.sugar.tracker': , 'zmq.sugar.version': , 'zmq.sugar.stopwatch': , 'zmq.sugar': , 'zmq': , 'concurrent': , 'token': , 'tokenize': , 'linecache': , 'textwrap': , 'traceback': , '_string': , 'string': , 'logging': , 'concurrent.futures._base': , 'concurrent.futures': , '_heapq': , 'heapq': , '_socket': , 'array': , 'socket': , '_ssl': , 'binascii': , 'base64': , 'ssl': , 'asyncio.constants': , '_ast': , 'ast': , '_opcode': , 'opcode': , 'dis': , 'inspect': , 'asyncio.coroutines': , '_contextvars': , 'contextvars': , 'asyncio.format_helpers': , 'asyncio.base_futures': , 'asyncio.exceptions': , 'asyncio.base_tasks': , '_asyncio': , 'asyncio.events': , 'asyncio.futures': , 'asyncio.protocols': , 'asyncio.transports': , 'asyncio.log': , 'asyncio.sslproto': , 'asyncio.mixins': , 'asyncio.tasks': , 'asyncio.locks': , 'asyncio.staggered': , 'asyncio.trsock': , 'asyncio.base_events': , 'asyncio.runners': , 'asyncio.queues': , 'asyncio.streams': , 'asyncio.subprocess': , 'asyncio.taskgroups': , 'asyncio.timeouts': , 'asyncio.threads': , 'asyncio.base_subprocess': , 'asyncio.selector_events': , 'asyncio.unix_events': , 'asyncio': , 'zmq._future': , 'zmq.asyncio': , 'fnmatch': , 'urllib': , 'ipaddress': , 'urllib.parse': , 'ntpath': , 'pathlib': , 'traitlets.utils': , 'traitlets.utils.bunch': , 'traitlets.utils.descriptions': , 'traitlets.utils.getargspec': , 'traitlets.utils.importstring': , 'traitlets.utils.sentinel': , 'traitlets.utils.warnings': , 'traitlets.traitlets': , 'traitlets._version': , 'traitlets.utils.decorators': , 'traitlets': , '_queue': , 'queue': , 'jupyter_core.version': , 'jupyter_core': , 'jupyter_core.utils': , 'jupyter_client.channelsabc': , '_hashlib': , '_blake2': , 'hashlib': , 'hmac': , 'dataclasses': , 'pprint': , '_datetime': , 'datetime': , 'tornado': , 'numbers': , 'logging.handlers': , 'html.entities': , 'html': , 'zlib': , 'tornado.speedups': , 'tornado.util': , 'tornado.escape': , '_curses': , 'curses': , 'tornado.log': , 'tornado.concurrent': , 'tornado.ioloop': , 'socketserver': , 'logging.config': , 'traitlets.utils.text': , 'gettext': , 'argparse': , 'traitlets.config.loader': , 'traitlets.config.configurable': , 'traitlets.utils.nested_update': , 'traitlets.config.application': , 'traitlets.config': , 'traitlets.log': , 'zmq.eventloop': , 'zmq.eventloop.zmqstream': , 'jupyter_client.adapter': , 'dateutil._version': , 'dateutil': , 'calendar': , 'six': , '_decimal': , 'decimal': , 'dateutil._common': , 'dateutil.relativedelta': , 'six.moves': )>, 'dateutil.tz._common': , 'dateutil.tz._factories': , 'dateutil.tz.tz': , 'dateutil.tz': , 'dateutil.parser._parser': , 'dateutil.parser.isoparser': , 'dateutil.parser': , '_strptime': , 'jupyter_client.jsonutil': , 'jupyter_client.session': , 'jupyter_client.channels': , 'termios': , 'getpass': , 'jupyter_client.clientabc': , 'glob': , '_compression': , '_bz2': , 'bz2': , '_lzma': , 'lzma': , 'shutil': , 'tempfile': , 'platformdirs.api': , 'platformdirs.version': , 'configparser': , 'platformdirs.unix': , 'platformdirs': , 'jupyter_core.paths': , 'jupyter_client.localinterfaces': , 'jupyter_client.utils': , 'jupyter_client.connect': , 'jupyter_client.client': , 'jupyter_client.asynchronous.client': , 'jupyter_client.asynchronous': , 'jupyter_client.blocking.client': , 'jupyter_client.blocking': , 'jupyter_client.launcher': , '_uuid': , 'uuid': , '_csv': , 'csv': , 'email': , 'zipfile': , 'quopri': , 'email._parseaddr': , 'email.base64mime': , 'email.quoprimime': , 'email.errors': , 'email.encoders': , 'email.charset': , 'email.utils': , 'email.header': , 'email._policybase': , 'email._encoded_words': , 'email.iterators': , 'email.message': , 'importlib.metadata._functools': , 'importlib.metadata._text': , 'importlib.metadata._adapters': , 'importlib.metadata._meta': , 'importlib.metadata._collections': , 'importlib.metadata._itertools': , 'importlib.resources.abc': , 'importlib.resources._adapters': , 'importlib.resources._common': , 'importlib.resources._legacy': , 'importlib.resources': , 'importlib.abc': , 'importlib.metadata': , 'jupyter_client.provisioning.provisioner_base': , 'jupyter_client.provisioning.factory': , 'jupyter_client.provisioning.local_provisioner': , 'jupyter_client.provisioning': , 'jupyter_client.kernelspec': , 'jupyter_client.managerabc': , 'jupyter_client.manager': , 'jupyter_client.multikernelmanager': , 'jupyter_client': , 'ipykernel.connect': , 'ipykernel': , 'IPython.core': , 'IPython.core.getipython': , 'IPython.core.release': , 'pkgutil': , 'sysconfig': , '_sysconfigdata__x86_64-linux-gnu': , 'pydoc': , 'executing._exceptions': , 'executing._position_node_finder': , 'executing.executing': , 'executing.version': , 'executing': , 'asttokens.line_numbers': , 'asttokens.util': , 'asttokens.asttokens': , 'asttokens': , 'fractions': , 'pure_eval.utils': , 'pure_eval.my_getattr_static': , 'pure_eval.core': , 'pure_eval.version': , 'pure_eval': , 'stack_data.utils': , 'stack_data.core': , 'stack_data.formatting': , 'stack_data.serializing': , 'stack_data.version': , 'stack_data': , 'pygments': , 'pygments.formatters._mapping': , 'pygments.plugin': , 'pygments.util': , 'pygments.formatters': , 'pygments.styles': , 'pygments.formatter': , 'pygments.console': , 'pygments.token': , 'pygments.style': , 'pygments.formatters.terminal256': , 'IPython.utils': , 'IPython.utils.colorable': , 'IPython.utils.ipstruct': , 'IPython.utils.coloransi': , 'IPython.utils.PyColorize': , 'IPython.utils.encoding': , 'IPython.utils.py3compat': , 'IPython.core.excolors': , 'cmd': , 'bdb': , 'codeop': , 'code': , 'pdb': , 'IPython.core.debugger': , 'IPython.core.display_trap': , 'pexpect.exceptions': , 'pexpect.utils': , 'pexpect.expect': , 'tty': , 'pty': , 'resource': , 'ptyprocess.util': , 'ptyprocess.ptyprocess': , 'ptyprocess': , 'pexpect.spawnbase': , 'pexpect.pty_spawn': , 'pexpect.run': , 'pexpect': , 'shlex': , 'IPython.utils._process_common': , 'IPython.utils._process_posix': , 'IPython.utils.process': , 'IPython.utils.path': , 'IPython.utils.terminal': , 'IPython.core.ultratb': , 'IPython.utils._sysinfo': , 'IPython.utils.sysinfo': , 'IPython.core.crashhandler': , 'IPython.utils.importstring': , 'IPython.paths': , 'IPython.core.profiledir': , 'IPython.core.application': , 'IPython.terminal': , 'IPython.core.compilerop': , 'IPython.core.error': , 'IPython.utils.docs': , 'IPython.utils.decorators': , 'IPython.utils.text': , 'IPython.core.magic_arguments': , 'getopt': , 'IPython.core.display_functions': , 'mimetypes': , 'IPython.testing': , 'IPython.testing.skipdoctest': , 'IPython.core.display': , 'IPython.lib': , 'IPython.lib.display': , 'IPython.display': , 'IPython.utils.data': , 'IPython.core.page': , 'IPython.lib.pretty': , 'IPython.utils.openpy': , 'IPython.utils.dir2': , 'IPython.utils.wildcard': , 'pygments.lexers._mapping': , 'pygments.modeline': , 'pygments.lexers': , 'pygments.filter': , 'pygments.filters': , 'pygments.regexopt': , 'pygments.lexer': , 'pygments.unistring': , 'pygments.lexers.python': , 'pygments.formatters.html': , 'IPython.core.oinspect': , 'IPython.utils.tokenutil': , 'IPython.core.inputtransformer2': , 'IPython.core.magic': , 'pickleshare': , 'IPython.core.hooks': , 'IPython.core.autocall': , 'IPython.core.macro': , 'IPython.core.splitinput': , 'IPython.core.prefilter': , 'IPython.core.alias': , 'IPython.core.builtin_trap': , 'IPython.core.displayhook': , 'IPython.core.displaypub': , 'backcall.backcall': , 'backcall': , 'IPython.core.events': , 'IPython.core.extensions': , 'decorator': , 'IPython.utils.sentinel': , 'IPython.core.formatters': , '_sqlite3': , 'sqlite3.dbapi2': , 'sqlite3': , 'IPython.core.history': , 'IPython.core.logger': , 'IPython.core.payload': , 'IPython.core.usage': , 'IPython.utils.capture': , 'IPython.utils.io': , 'IPython.utils.strdispatch': , 'IPython.utils.syspathcontext': , 'IPython.core.async_helpers': , 'IPython.core.interactiveshell': , 'prompt_toolkit.application.current': , 'prompt_toolkit.eventloop.utils': , 'prompt_toolkit.eventloop.async_generator': , 'prompt_toolkit.eventloop.inputhook': , 'prompt_toolkit.eventloop': , 'prompt_toolkit.application.run_in_terminal': , 'prompt_toolkit.selection': , 'prompt_toolkit.clipboard.base': , 'prompt_toolkit.clipboard.in_memory': , 'prompt_toolkit.clipboard': , 'prompt_toolkit.cache': , 'prompt_toolkit.enums': , 'prompt_toolkit.filters.base': , 'prompt_toolkit.filters.app': , 'prompt_toolkit.filters.cli': , 'prompt_toolkit.filters.utils': , 'prompt_toolkit.filters': , 'prompt_toolkit.document': , 'prompt_toolkit.auto_suggest': , 'prompt_toolkit.keys': , 'prompt_toolkit.key_binding.key_bindings': , 'wcwidth.table_wide': , 'wcwidth.table_zero': , 'wcwidth.unicode_versions': , 'wcwidth.wcwidth': , 'wcwidth': , 'prompt_toolkit.utils': , 'prompt_toolkit.key_binding.key_processor': , 'prompt_toolkit.key_binding': , 'prompt_toolkit.key_binding.vi_state': , 'prompt_toolkit.cursor_shapes': , 'prompt_toolkit.data_structures': , 'prompt_toolkit.styles.base': , 'prompt_toolkit.styles.named_colors': , 'prompt_toolkit.styles.style': , 'prompt_toolkit.styles.defaults': , 'prompt_toolkit.styles.pygments': , 'colorsys': , 'prompt_toolkit.styles.style_transformation': , 'prompt_toolkit.styles': , 'prompt_toolkit.output.color_depth': , 'prompt_toolkit.output.base': , 'prompt_toolkit.output.flush_stdout': , 'prompt_toolkit.output.plain_text': , 'prompt_toolkit.output.defaults': , 'prompt_toolkit.output': , 'prompt_toolkit.output.vt100': , 'prompt_toolkit.mouse_events': , 'prompt_toolkit.formatted_text.base': , 'prompt_toolkit.formatted_text.ansi': , 'xml': , 'xml.dom.domreg': , 'xml.dom': , 'xml.dom.minicompat': , 'xml.dom.NodeFilter': , 'xml.dom.xmlbuilder': , 'xml.dom.minidom': , 'prompt_toolkit.formatted_text.html': , 'prompt_toolkit.formatted_text.pygments': , 'prompt_toolkit.formatted_text.utils': , 'prompt_toolkit.formatted_text': , 'prompt_toolkit.completion.base': , 'prompt_toolkit.completion.deduplicate': , 'prompt_toolkit.completion.filesystem': , 'prompt_toolkit.completion.word_completer': , 'prompt_toolkit.completion.fuzzy_completer': , 'prompt_toolkit.completion.nested': , 'prompt_toolkit.completion': , 'prompt_toolkit.history': , 'prompt_toolkit.search': , 'prompt_toolkit.validation': , 'prompt_toolkit.buffer': , 'prompt_toolkit.input.base': , 'prompt_toolkit.input.defaults': , 'prompt_toolkit.input': , 'prompt_toolkit.input.typeahead': , 'prompt_toolkit.key_binding.bindings': , 'prompt_toolkit.key_binding.bindings.scroll': , 'prompt_toolkit.key_binding.bindings.page_navigation': , 'prompt_toolkit.lexers.base': , 'prompt_toolkit.lexers.pygments': , 'prompt_toolkit.lexers': , 'prompt_toolkit.layout.utils': , 'prompt_toolkit.layout.processors': , 'prompt_toolkit.layout.controls': , 'prompt_toolkit.layout.dimension': , 'prompt_toolkit.layout.margins': , 'prompt_toolkit.layout.mouse_handlers': , 'prompt_toolkit.layout.screen': , 'prompt_toolkit.layout.containers': , 'prompt_toolkit.layout.layout': , 'prompt_toolkit.layout.menus': , 'prompt_toolkit.layout.scrollable_pane': , 'prompt_toolkit.layout': , 'prompt_toolkit.key_binding.bindings.completion': , 'prompt_toolkit.key_binding.bindings.named_commands': , 'prompt_toolkit.key_binding.bindings.basic': , 'prompt_toolkit.key_binding.bindings.cpr': , 'prompt_toolkit.key_binding.bindings.emacs': , 'prompt_toolkit.key_binding.bindings.mouse': , 'prompt_toolkit.input.ansi_escape_sequences': , 'prompt_toolkit.input.vt100_parser': , 'prompt_toolkit.key_binding.digraphs': , 'prompt_toolkit.key_binding.bindings.vi': , 'prompt_toolkit.key_binding.defaults': , 'prompt_toolkit.key_binding.emacs_state': , 'prompt_toolkit.layout.dummy': , 'prompt_toolkit.renderer': , 'prompt_toolkit.application.application': , 'prompt_toolkit.application.dummy': , 'prompt_toolkit.application': , 'prompt_toolkit.key_binding.bindings.focus': , 'prompt_toolkit.widgets.toolbars': , 'prompt_toolkit.widgets.base': , 'prompt_toolkit.widgets.dialogs': , 'prompt_toolkit.widgets.menus': , 'prompt_toolkit.widgets': , 'prompt_toolkit.shortcuts.dialogs': , 'prompt_toolkit.shortcuts.progress_bar.formatters': , 'prompt_toolkit.shortcuts.progress_bar.base': , 'prompt_toolkit.shortcuts.progress_bar': , 'prompt_toolkit.key_binding.bindings.auto_suggest': , 'prompt_toolkit.key_binding.bindings.open_in_editor': , 'prompt_toolkit.shortcuts.prompt': , 'prompt_toolkit.shortcuts.utils': , 'prompt_toolkit.shortcuts': , 'prompt_toolkit': , 'prompt_toolkit.patch_stdout': , 'unicodedata': , 'IPython.core.guarded_eval': , 'IPython.core.latex_symbols': , 'IPython.utils.generics': , 'parso.utils': , 'parso.tree': , 'parso.python': , 'parso.python.token': , 'parso.python.tokenize': , 'parso.pgen2.grammar_parser': , 'parso.pgen2.generator': , 'parso.pgen2': , 'parso.parser': , 'parso._compatibility': , 'difflib': , 'parso.python.prefix': , 'parso.python.tree': , 'parso.python.parser': , 'parso.python.diff': , 'gc': , 'parso.cache': , 'parso.normalizer': , 'parso.python.errors': , 'parso.python.pep8': , 'parso.file_io': , 'parso.grammar': , 'parso': , 'jedi.parser_utils': , 'jedi.debug': , 'jedi.settings': , 'jedi.cache': , 'jedi.file_io': , 'jedi.inference.cache': , 'jedi.inference.helpers': , 'jedi.inference.utils': , 'jedi.inference.base_value': , 'jedi.inference.sys_path': , 'jedi.inference.recursion': , 'jedi.inference.flow_analysis': , 'jedi.common': , 'jedi.inference.lazy_value': , 'jedi.inference.docstrings': , 'jedi.plugins': , 'jedi.inference.names': , 'jedi.inference.filters': , 'jedi.inference.compiled.getattr_static': , 'jedi.inference.compiled.access': , 'jedi.inference.signature': , 'jedi.inference.context': , 'jedi.inference.compiled.value': , 'jedi.inference.compiled': , 'jedi.inference.analysis': , 'jedi.inference.gradual': , 'jedi.inference.value.module': , 'jedi.inference.value.dynamic_arrays': , 'jedi.inference.value.iterable': , 'jedi.inference.arguments': , 'jedi.inference.parser_cache': , 'jedi.inference.gradual.generics': , 'jedi.inference.value.function': , 'jedi.inference.value.klass': , 'jedi.inference.value.instance': , 'jedi.inference.value': , 'jedi.inference.gradual.base': , 'jedi.inference.gradual.type_var': , 'jedi.inference.gradual.typing': , 'jedi.inference.gradual.stub_value': , 'jedi.inference.gradual.typeshed': , 'jedi._compatibility': , 'jedi.inference.compiled.subprocess.functions': , 'jedi.api.exceptions': , 'jedi.inference.compiled.subprocess': , 'jedi.inference.imports': , 'jedi.inference.param': , 'jedi.inference.gradual.annotation': , 'jedi.inference.value.decorator': , 'jedi.inference.syntax_tree': , 'jedi.inference': , 'jedi.inference.gradual.conversion': , 'jedi.inference.compiled.mixed': , 'pydoc_data': , 'pydoc_data.topics': , 'jedi.api.keywords': , 'jedi.api.completion_cache': , 'jedi.api.helpers': , 'jedi.api.classes': , 'jedi.api.interpreter': , 'jedi.api.strings': , 'jedi.api.file_name': , 'jedi.inference.docstring_utils': , 'jedi.api.completion': , 'filecmp': , 'jedi.api.environment': , 'jedi.inference.references': , 'jedi.api.project': , 'jedi.api.errors': , 'jedi.inference.value.namespace': , 'jedi.api.refactoring': , 'jedi.api.refactoring.extract': , 'jedi.inference.gradual.utils': , 'jedi.api': , 'jedi.plugins.stdlib': , 'jedi.plugins.flask': , 'jedi.plugins.pytest': , 'jedi.plugins.django': , 'jedi.plugins.registry': , 'jedi': , 'IPython.core.completer': , 'IPython.terminal.ptutils': , 'IPython.terminal.shortcuts.auto_match': , 'IPython.terminal.shortcuts.filters': , 'IPython.terminal.shortcuts.auto_suggest': , 'IPython.terminal.shortcuts': , 'concurrent.futures.thread': , 'IPython.terminal.debugger': , 'IPython.lib.clipboard': , 'IPython.terminal.magics': , 'IPython.terminal.pt_inputhooks': , 'IPython.terminal.prompts': , 'IPython.terminal.interactiveshell': , 'IPython.core.magics.auto': , 'IPython.core.magics.basic': , 'http': , 'email.feedparser': , 'email.parser': , 'http.client': , 'urllib.response': , 'urllib.error': , 'urllib.request': , 'IPython.utils.contexts': , 'IPython.core.magics.code': , 'IPython.core.magics.config': , 'IPython.core.magics.display': , '_lsprof': , 'profile': , 'cProfile': , 'pstats': , 'timeit': , 'IPython.utils.module_paths': , 'IPython.utils.timing': , 'IPython.core.magics.ast_mod': , 'IPython.core.magics.execution': , 'IPython.core.magics.extension': , 'IPython.core.magics.history': , 'IPython.core.magics.logging': , 'IPython.core.magics.namespace': , 'IPython.core.magics.osm': , 'IPython.core.magics.packaging': , 'IPython.core.pylabtools': , 'IPython.core.magics.pylab': , 'IPython.core.magics.script': , 'IPython.core.magics': , 'IPython.core.shellapp': , 'IPython.extensions': , 'IPython.extensions.storemagic': , 'IPython.terminal.ipapp': , 'IPython.terminal.embed': , 'IPython.utils.frame': , 'IPython': , 'ipykernel.control': , 'ipykernel.heartbeat': , 'ipykernel.iostream': , 'comm.base_comm': , 'comm': , 'ipykernel.jsonutil': , 'pwd': , 'psutil._common': , 'psutil._compat': , 'psutil._psposix': , 'psutil._psutil_linux': , 'psutil._psutil_posix': , 'psutil._pslinux': , 'psutil': , 'tornado.gen': , 'tornado.locks': , 'tornado.queues': , 'ipykernel.kernelbase': , 'ipykernel.comm.comm': , 'ipykernel.comm.manager': , 'ipykernel.comm': , 'ipykernel.compiler': , 'debugpy._version': , 'debugpy.public_api': , 'debugpy': , 'debugpy._vendored._util': , 'debugpy._vendored': , '_pydevd_bundle': , 'encodings.ascii': , 'encodings.latin_1': , 'stringprep': , 'encodings.idna': , '_pydevd_bundle.pydevd_vm_type': , '_pydev_bundle': , 'xmlrpc': , 'xml.parsers': , 'pyexpat.errors': , 'pyexpat.model': , 'pyexpat': , 'xml.parsers.expat.model': , 'xml.parsers.expat.errors': , 'xml.parsers.expat': , 'gzip': , 'xmlrpc.client': , 'http.server': , 'xmlrpc.server': , '_pydev_bundle._pydev_saved_modules': , '_pydevd_bundle.pydevd_constants': , '_pydev_runfiles': , '_pydevd_frame_eval': , 'pydev_ipython': , 'pydevd_plugins': )>, '_pydev_bundle.pydev_log': , '_pydev_bundle._pydev_filesystem_encoding': , '_pydevd_bundle.pydevd_comm_constants': , 'pydevd_file_utils': , '_pydev_bundle._pydev_execfile': , '_pydevd_bundle.pydevd_exec2': , '_pydev_bundle.pydev_imports': , '_pydev_bundle.pydev_is_thread_alive': , '_pydev_bundle.pydev_override': , 'pydevd_plugins.extensions': )>, '_pydevd_bundle.pydevd_extension_utils': , '_pydevd_bundle.pydevd_frame_utils': , '_pydevd_bundle.pydevd_filtering': , '_pydevd_bundle.pydevd_io': , '_pydevd_bundle.pydevd_defaults': , '_pydevd_bundle.pydevd_utils': , '_pydevd_bundle.pydevd_runpy': , '_pydev_bundle._pydev_tipper_common': , '_pydev_bundle._pydev_imports_tipper': , '_pydev_bundle._pydev_calltip_util': , '_pydevd_bundle.pydevd_safe_repr': , '_pydevd_bundle.pydevd_resolver': , '_pydevd_bundle.pydevd_extension_api': , '_pydevd_bundle.pydevd_xml': , '_pydevd_bundle.pydevd_dont_trace': , '_pydevd_frame_eval.vendored': , '_pydevd_frame_eval.vendored.bytecode.flags': , '_pydevd_frame_eval.vendored.bytecode.instr': , '_pydevd_frame_eval.vendored.bytecode.bytecode': , '_pydevd_frame_eval.vendored.bytecode.concrete': , '_pydevd_frame_eval.vendored.bytecode.cfg': , '_pydevd_frame_eval.vendored.bytecode': , '_pydevd_bundle.pydevd_bytecode_utils': , '_pydevd_bundle.pydevd_cython': , '_pydevd_bundle.pydevd_cython_wrapper': , '_pydevd_bundle.pydevd_additional_thread_info': , '_pydevd_bundle.pydevd_thread_lifecycle': , '_pydevd_bundle.pydevd_save_locals': , '_pydev_bundle.pydev_monkey': , 'pydevd_tracing': , '_pydevd_bundle.pydevd_collect_bytecode_info': , '_pydevd_bundle.pydevd_daemon_thread': , '_pydevd_bundle.pydevd_timeout': , '_pydevd_bundle.pydevd_vars': , '_pydev_bundle.pydev_console_utils': , '_pydevd_bundle.pydevd_import_class': , '_pydevd_bundle.pydevd_breakpoints': , '_pydevd_bundle.pydevd_custom_frames': , '_pydevd_bundle.pydevd_dont_trace_files': , '_pydevd_bundle.pydevd_net_command': , '_pydevd_bundle.pydevconsole_code': , '_pydev_bundle.pydev_umd': , 'pydevconsole': , '_pydev_bundle._pydev_completer': , '_pydevd_bundle.pydevd_net_command_factory_xml': , '_pydevd_bundle.pydevd_frame': , '_pydevd_bundle.pydevd_additional_thread_info_regular': , '_pydevd_bundle.pydevd_trace_dispatch': , '_pydevd_frame_eval.pydevd_frame_eval_main': , '_pydevd_bundle.pydevd_source_mapping': , '_pydevd_bundle.pydevd_concurrency_analyser': , '_pydevd_bundle.pydevd_concurrency_analyser.pydevd_thread_wrappers': , '_pydevd_bundle.pydevd_concurrency_analyser.pydevd_concurrency_logger': , '_pydevd_bundle._debug_adapter': , '_pydevd_bundle._debug_adapter.pydevd_schema_log': , '_pydevd_bundle._debug_adapter.pydevd_base_schema': , '_pydevd_bundle._debug_adapter.pydevd_schema': , '_pydevd_bundle.pydevd_reload': , '_pydev_bundle.fsnotify': , '_pydevd_bundle.pydevd_console': , '_pydevd_bundle.pydevd_comm': , '_pydevd_bundle.pydevd_net_command_factory_json': , '_pydevd_bundle.pydevd_api': , '_pydevd_bundle.pydevd_json_debug_options': , '_pydevd_bundle.pydevd_process_net_command_json': , '_pydevd_bundle.pydevd_traceproperty': , '_pydevd_bundle.pydevd_process_net_command': , '_pydevd_bundle.pydevd_suspended_frames': , '_pydevd_bundle.pydevd_trace_api': , 'pydevd_plugins.pydevd_line_validation': , 'pydevd_plugins.django_debug': , 'pydevd_plugins.jinja2_debug': , '_pydevd_bundle.pydevd_plugin_utils': , 'pydevd': , 'debugpy._vendored.force_pydevd': , 'debugpy.server': , 'debugpy.adapter': , 'debugpy.common': , 'debugpy.common.json': , 'debugpy.common.timestamp': , 'debugpy.common.util': , 'debugpy.common.log': , 'debugpy.common.sockets': , 'debugpy.server.api': , 'ipykernel.debugger': , 'packaging': , 'packaging._structures': , 'packaging.version': , 'ipykernel.eventloops': , 'IPython.core.payloadpage': , 'ipykernel.displayhook': , 'ipykernel.zmqshell': , 'ipykernel.ipkernel': , 'ipykernel.parentpoller': , 'ipykernel.kernelapp': , 'tornado.platform': , 'tornado.platform.asyncio': , 'faulthandler': , 'IPython.core.completerlib': , 'csoundengine': , 'numpy._utils._convertions': , 'numpy._utils': , 'numpy._globals': , 'numpy.exceptions': , 'numpy.version': , 'numpy._distributor_init': , 'numpy._utils._inspect': , 'numpy.core._exceptions': , 'numpy.dtypes': , 'numpy.core._multiarray_umath': , 'numpy.core.overrides': , 'numpy.core.multiarray': , 'numpy.core.umath': , 'numpy.core._string_helpers': , 'numpy.compat.py3k': , 'numpy.compat': , 'numpy.core._dtype': , 'numpy.core._type_aliases': , 'numpy.core.numerictypes': , 'numpy.core._ufunc_config': , 'numpy.core._methods': , 'numpy.core.fromnumeric': , 'numpy.core.shape_base': , 'numpy.core.arrayprint': , 'numpy.core._asarray': , 'numpy.core.numeric': , 'numpy.core.defchararray': , 'numpy.core.records': , 'numpy.core.memmap': , 'numpy.core.function_base': , 'numpy.core._machar': , 'numpy.core.getlimits': , 'numpy.core.einsumfunc': , 'numpy.core._multiarray_tests': , 'numpy.core._add_newdocs': , 'numpy.core._add_newdocs_scalars': , 'numpy.core._dtype_ctypes': , 'numpy.core._internal': , 'numpy._pytesttester': , 'numpy.core': , 'numpy.__config__': , 'numpy.lib.mixins': , 'numpy.lib.ufunclike': , 'numpy.lib.type_check': , 'numpy.lib.scimath': , 'numpy.lib.stride_tricks': , 'numpy.lib.twodim_base': , 'numpy.linalg._umath_linalg': , 'numpy._typing._nested_sequence': , 'numpy._typing._nbit': , 'numpy._typing._char_codes': , 'numpy._typing._scalars': , 'numpy._typing._shape': , 'numpy._typing._dtype_like': , 'numpy._typing._array_like': , 'numpy._typing': , 'numpy.linalg.linalg': , 'numpy.linalg': , 'numpy.matrixlib.defmatrix': , 'numpy.matrixlib': , 'numpy.lib.histograms': , 'numpy.lib.function_base': , 'numpy.lib.index_tricks': , 'numpy.lib.nanfunctions': , 'numpy.lib.shape_base': , 'numpy.lib.polynomial': , 'numpy.lib.utils': , 'numpy.lib.arraysetops': , 'numpy.lib.format': , 'numpy.lib._datasource': , 'numpy.lib._iotools': , 'numpy.lib.npyio': , 'numpy.lib.arrayterator': , 'numpy.lib.arraypad': , 'numpy.lib._version': , 'numpy.lib': , 'numpy.fft._pocketfft_internal': , 'numpy.fft._pocketfft': , 'numpy.fft.helper': , 'numpy.fft': , 'numpy.polynomial.polyutils': , 'numpy.polynomial._polybase': , 'numpy.polynomial.polynomial': , 'numpy.polynomial.chebyshev': , 'numpy.polynomial.legendre': , 'numpy.polynomial.hermite': , 'numpy.polynomial.hermite_e': , 'numpy.polynomial.laguerre': , 'numpy.polynomial': , '_cython_3_0_2': , 'numpy.random._common': , 'secrets': , 'numpy.random.bit_generator': , 'numpy.random._bounded_integers': , 'numpy.random._mt19937': , 'numpy.random.mtrand': , 'numpy.random._philox': , 'numpy.random._pcg64': , 'numpy.random._sfc64': , 'numpy.random._generator': , 'numpy.random._pickle': , 'numpy.random': , 'numpy.ctypeslib': , 'numpy.ma.core': , 'numpy.ma.extras': , 'numpy.ma': , 'numpy': , 'ctypes.util': , '_cffi_backend': , '_soundfile': , '_soundfile_data': , 'soundfile': , 'sndfileio.util': , 'sndfileio.datastructs': , 'sndfileio.sndfileio': , 'scipy._lib._testutils': , 'scipy._lib': , 'scipy._lib.deprecation': , 'scipy.__config__': , 'scipy.version': , 'scipy._distributor_init': , 'scipy._lib._pep440': , 'scipy._lib._ccallback_c': , 'scipy._lib._ccallback': , 'scipy': , 'scipy.signal._sigtools': , 'scipy.linalg._fblas': , 'scipy.linalg.blas': , 'scipy.linalg._flapack': , 'scipy.linalg.lapack': , 'scipy.linalg._misc': , '_cython_0_29_36': , 'scipy.linalg.cython_lapack': , 'scipy.linalg._cythonized_array_utils': , 'scipy._lib._util': , 'scipy.linalg._decomp': , 'scipy.linalg._decomp_svd': , 'scipy.linalg._solve_toeplitz': , 'scipy.linalg._basic': , 'scipy.linalg._decomp_lu_cython': , 'scipy.linalg._decomp_lu': , 'scipy.linalg._decomp_ldl': , 'scipy.linalg._decomp_cholesky': , 'scipy.linalg._decomp_qr': , 'scipy.linalg._decomp_qz': , 'scipy.linalg._decomp_schur': , 'scipy.linalg._decomp_polar': , 'scipy.linalg._expm_frechet': , 'scipy.linalg._matfuncs_sqrtm_triu': , 'scipy.linalg._matfuncs_sqrtm': , 'scipy.linalg.cython_blas': , 'scipy.linalg._matfuncs_expm': , 'scipy.linalg._matfuncs': , 'scipy.linalg._special_matrices': , 'scipy.linalg._solvers': , 'scipy.linalg._procrustes': , 'scipy.linalg._decomp_update': , 'scipy.sparse._sputils': , 'scipy.sparse._matrix': , 'scipy.sparse._base': , 'scipy.sparse._sparsetools': , 'scipy.sparse._data': , 'scipy.sparse._index': , 'scipy.sparse._compressed': , 'scipy.sparse._csr': , 'scipy.sparse._csc': , '_csparsetools': , 'scipy.sparse._csparsetools': , 'scipy.sparse._lil': , 'scipy.sparse._dok': , 'scipy.sparse._coo': , 'scipy.sparse._dia': , 'scipy.sparse._bsr': , 'scipy.sparse._construct': , 'scipy.sparse._extract': , 'scipy.sparse._matrix_io': , 'scipy.sparse.linalg._isolve._iterative': , 'scipy.sparse.linalg._interface': , 'scipy.sparse.linalg._isolve.utils': , 'scipy._lib.decorator': , 'scipy._lib._threadsafety': , 'scipy.sparse.linalg._isolve.iterative': , 'scipy.sparse.linalg._isolve.minres': , 'scipy.sparse.linalg._isolve._gcrotmk': , 'scipy.sparse.linalg._isolve.lgmres': , 'scipy.sparse.linalg._isolve.lsqr': , 'scipy.sparse.linalg._isolve.lsmr': , 'scipy.sparse.linalg._isolve.tfqmr': , 'scipy.sparse.linalg._isolve': , 'scipy.sparse.linalg._dsolve._superlu': , 'scipy.sparse.linalg._dsolve.linsolve': , 'scipy.sparse.linalg._dsolve._add_newdocs': , 'scipy.sparse.linalg._dsolve': , 'scipy.sparse.linalg._eigen.arpack._arpack': , 'scipy.sparse.linalg._eigen.arpack.arpack': , 'scipy.sparse.linalg._eigen.arpack': , 'scipy.sparse.linalg._eigen.lobpcg.lobpcg': , 'scipy.sparse.linalg._eigen.lobpcg': , 'scipy.sparse.linalg._eigen._svds': , 'scipy.sparse.linalg._eigen': , 'scipy.sparse.linalg._onenormest': , 'scipy.sparse.linalg._expm_multiply': , 'scipy.sparse.linalg._matfuncs': , 'scipy.sparse.linalg._norm': , 'scipy.sparse.linalg.isolve': , 'scipy.sparse.linalg.dsolve': , 'scipy.sparse.linalg.interface': , 'scipy.sparse.linalg.eigen': , 'scipy.sparse.linalg.matfuncs': , 'scipy.sparse.linalg': , 'scipy.sparse.csgraph._laplacian': , 'scipy.sparse.csgraph._tools': , 'scipy.sparse.csgraph._validation': , 'scipy.sparse.csgraph._shortest_path': , 'scipy.sparse.csgraph._traversal': , 'scipy.sparse.csgraph._min_spanning_tree': , 'scipy.sparse.csgraph._flow': , 'scipy.sparse.csgraph._matching': , 'scipy.sparse.csgraph._reordering': , 'scipy.sparse.csgraph': , 'scipy.sparse.base': , 'scipy.sparse.bsr': , 'scipy.sparse.compressed': , 'scipy.sparse.construct': , 'scipy.sparse.coo': , 'scipy.sparse.csc': , 'scipy.sparse.csr': , 'scipy.sparse.data': , 'scipy.sparse.dia': , 'scipy.sparse.dok': , 'scipy.sparse.extract': , 'scipy.sparse.lil': , 'scipy.sparse.sparsetools': , 'scipy.sparse.sputils': , 'scipy.sparse': , 'scipy.linalg._sketches': , 'scipy.linalg._decomp_cossin': , 'scipy.linalg.decomp': , 'scipy.linalg.decomp_cholesky': , 'scipy.linalg.decomp_lu': , 'scipy.linalg.decomp_qr': , 'scipy.linalg.decomp_svd': , 'scipy.linalg.decomp_schur': , 'scipy.linalg.basic': , 'scipy.linalg.misc': , 'scipy.linalg.special_matrices': , 'scipy.linalg._flinalg': , 'scipy.linalg._flinalg_py': , 'scipy.linalg.flinalg': , 'scipy.linalg.matfuncs': , 'scipy.linalg': , 'scipy.special._sf_error': , 'scipy.special._ufuncs_cxx': , 'scipy.special._ufuncs': , 'scipy.special._specfun': , 'scipy.special._comb': , 'scipy.special._basic': , 'scipy.special._logsumexp': , 'scipy.special._orthogonal': , 'scipy.special._spfun_stats': , 'scipy.special._ellip_harm_2': , 'scipy.special._ellip_harm': , 'scipy.special._lambertw': , 'scipy.special._spherical_bessel': , 'scipy.special._add_newdocs': , 'scipy.special.add_newdocs': , 'scipy.special.basic': , 'scipy.special.orthogonal': , 'scipy.special.specfun': , 'scipy.special.sf_error': , 'scipy.special.spfun_stats': , 'scipy.special': , 'scipy._lib._uarray._uarray': , 'scipy._lib._uarray._backend': , 'scipy._lib._uarray': , 'scipy._lib.uarray': , 'scipy.fft._basic': , 'scipy.fft._realtransforms': , 'scipy.fft._fftlog': , 'scipy.fft._fftlog_multimethods': , 'scipy.fft._pocketfft.pypocketfft': , 'scipy.fft._pocketfft.helper': , 'scipy.fft._pocketfft.basic': , 'scipy.fft._pocketfft.realtransforms': , 'scipy.fft._pocketfft': , 'scipy.fft._helper': , 'scipy.fft._backend': , 'scipy.fft': , 'scipy.signal.windows._windows': , 'scipy.signal.windows.windows': , 'scipy.signal.windows': , 'scipy.signal._waveforms': , 'scipy.signal._max_len_seq_inner': , 'scipy.signal._max_len_seq': , 'scipy.signal._upfirdn_apply': , 'scipy.signal._upfirdn': , 'scipy.signal._spline': , 'scipy.interpolate._fitpack': , 'scipy.interpolate.dfitpack': , 'scipy.interpolate._fitpack_impl': , 'scipy.optimize._minpack2': , 'scipy.optimize._linesearch': , 'scipy.optimize._group_columns': , 'scipy.optimize._numdiff': , 'scipy.optimize._hessian_update_strategy': , 'scipy.optimize._differentiable_functions': , 'scipy.optimize._optimize': , 'scipy.optimize._trustregion': , 'scipy.optimize._trustregion_dogleg': , 'scipy.optimize._trustregion_ncg': , 'scipy._lib.messagestream': , 'scipy.optimize._trlib._trlib': , 'scipy.optimize._trlib': , 'scipy.optimize._trustregion_krylov': , 'scipy.optimize._trustregion_exact': , 'unittest.util': , 'unittest.result': , 'unittest.case': , 'unittest.suite': , 'unittest.loader': , 'unittest.signals': , 'unittest.runner': , 'unittest.main': , 'unittest': , 'numpy.testing._private': , 'numpy.testing._private.utils': , 'numpy.testing._private.extbuild': , 'numpy.testing.overrides': , 'numpy.testing': , 'scipy.optimize._constraints': , 'scipy.optimize._trustregion_constr.projections': , 'scipy.optimize._trustregion_constr.qp_subproblem': , 'scipy.optimize._trustregion_constr.equality_constrained_sqp': , 'scipy.optimize._trustregion_constr.canonical_constraint': , 'scipy.optimize._trustregion_constr.tr_interior_point': , 'scipy.optimize._trustregion_constr.report': , 'scipy.optimize._trustregion_constr.minimize_trustregion_constr': , 'scipy.optimize._trustregion_constr': , 'scipy.optimize._lbfgsb': , 'scipy.optimize._lbfgsb_py': , '_moduleTNC': , 'scipy.optimize._moduleTNC': , 'scipy.optimize._tnc': , 'scipy.optimize._cobyla': , 'scipy.optimize._cobyla_py': , 'scipy.optimize._slsqp': , 'scipy.optimize._slsqp_py': , 'scipy.optimize._minimize': , 'scipy.optimize._minpack': , 'scipy.optimize._lsq.common': , 'scipy.optimize._lsq.trf': , 'scipy.optimize._lsq.dogbox': , 'scipy.optimize._lsq.least_squares': , 'scipy.optimize._lsq.givens_elimination': , 'scipy.optimize._lsq.trf_linear': , 'scipy.optimize._lsq.bvls': , 'scipy.optimize._lsq.lsq_linear': , 'scipy.optimize._lsq': , 'scipy.optimize._minpack_py': , 'scipy.optimize._spectral': , 'scipy.optimize._nonlin': , 'scipy.optimize._root': , 'scipy.optimize._zeros': , 'scipy.optimize._zeros_py': , 'scipy.optimize._root_scalar': , 'scipy.optimize.__nnls': , 'scipy.optimize._nnls': , 'scipy.optimize._basinhopping': , 'scipy.optimize._highs': , 'scipy.optimize._highs.cython.src._highs_wrapper': , 'scipy.optimize._highs._highs_wrapper': , 'scipy.optimize._highs.cython.src._highs_constants': , 'scipy.optimize._highs._highs_constants': , 'scipy.optimize._linprog_highs': , 'scipy.linalg._interpolative': , 'scipy.linalg._interpolative_backend': , 'scipy.linalg.interpolative': , 'scipy.optimize._remove_redundancy': , 'scipy.optimize._linprog_util': , 'scipy.optimize._linprog_ip': , 'scipy.optimize._linprog_simplex': , 'scipy.optimize._bglu_dense': , 'scipy.optimize._linprog_rs': , 'scipy.optimize._linprog_doc': , 'scipy.optimize._linprog': , 'scipy.optimize._lsap': , 'scipy.optimize._differentialevolution': , 'scipy.spatial._ckdtree': , 'scipy.spatial._kdtree': , 'scipy.spatial._qhull': , 'scipy.spatial._voronoi': , 'scipy.spatial._spherical_voronoi': , 'scipy.spatial._plotutils': , 'scipy.spatial._procrustes': , 'scipy.spatial._distance_wrap': , 'scipy.spatial._hausdorff': , 'scipy.spatial._distance_pybind': , 'scipy.spatial.distance': , 'scipy.spatial._geometric_slerp': , 'scipy.spatial.ckdtree': , 'scipy.spatial.kdtree': , 'scipy.spatial.qhull': , 'scipy.constants._codata': , 'scipy.constants._constants': , 'scipy.constants.codata': , 'scipy.constants.constants': , 'scipy.constants': , 'scipy.spatial.transform._rotation_groups': , 'scipy.spatial.transform._rotation': , 'scipy.spatial.transform._rotation_spline': , 'scipy.spatial.transform.rotation': , 'scipy.spatial.transform': , 'scipy.spatial': , 'scipy.optimize._shgo_lib': , 'scipy.optimize._shgo_lib._vertex': , 'scipy.optimize._shgo_lib._complex': , 'scipy.optimize._shgo': , 'scipy.optimize._dual_annealing': , 'scipy.optimize._qap': , 'scipy.optimize._direct': , 'scipy.optimize._direct_py': , 'scipy.optimize._milp': , 'scipy.optimize.cobyla': , 'scipy.optimize.lbfgsb': , 'scipy.optimize.linesearch': , 'scipy.optimize.minpack': , 'scipy.optimize.minpack2': , 'scipy.optimize.moduleTNC': , 'scipy.optimize.nonlin': , 'scipy.optimize.optimize': , 'scipy.optimize.slsqp': , 'scipy.optimize.tnc': , 'scipy.optimize.zeros': , 'scipy.optimize': , 'scipy.interpolate._bspl': , 'scipy.interpolate._bsplines': , 'scipy.interpolate._fitpack_py': , 'scipy.interpolate._polyint': , 'scipy.interpolate._ppoly': , 'scipy.interpolate.interpnd': , 'scipy.interpolate._interpolate': , 'scipy.interpolate._fitpack2': , 'scipy.interpolate._rbf': , 'scipy.interpolate._rbfinterp_pythran': , 'scipy.interpolate._rbfinterp': , 'scipy.interpolate._cubic': , 'scipy.interpolate._ndgriddata': , 'scipy.interpolate._pade': , 'scipy.interpolate._rgi_cython': , 'scipy.interpolate._rgi': , 'scipy.interpolate.fitpack': , 'scipy.interpolate.fitpack2': , 'scipy.interpolate.interpolate': , 'scipy.interpolate.ndgriddata': , 'scipy.interpolate.polyint': , 'scipy.interpolate.rbf': , 'scipy.interpolate': , 'scipy.signal._bsplines': , 'scipy.signal._filter_design': , 'scipy.signal._fir_filter_design': , 'scipy.integrate._quadrature': , 'scipy.integrate._odepack': , 'scipy.integrate._odepack_py': , 'scipy.integrate._quadpack': , 'scipy.integrate._quadpack_py': , 'scipy.integrate._vode': , 'scipy.integrate._dop': , 'scipy.integrate._lsoda': , 'scipy.integrate._ode': , 'scipy.integrate._bvp': , 'scipy.integrate._ivp.common': , 'scipy.integrate._ivp.base': , 'scipy.integrate._ivp.bdf': , 'scipy.integrate._ivp.radau': , 'scipy.integrate._ivp.dop853_coefficients': , 'scipy.integrate._ivp.rk': , 'scipy.integrate._ivp.lsoda': , 'scipy.integrate._ivp.ivp': , 'scipy.integrate._ivp': , 'scipy.integrate._quad_vec': , 'scipy.integrate.dop': , 'scipy.integrate.lsoda': , 'scipy.integrate.vode': , 'scipy.integrate.odepack': , 'scipy.integrate.quadpack': , 'scipy.integrate': , 'scipy.signal._lti_conversion': , 'scipy.signal._ltisys': , 'scipy.ndimage._ni_support': , 'scipy.ndimage._nd_image': , 'scipy._lib.doccer': , 'scipy.ndimage._ni_docstrings': , 'scipy.ndimage._filters': , 'scipy.ndimage._fourier': , 'scipy.ndimage._interpolation': , '_ni_label': , 'scipy.ndimage._ni_label': , 'scipy.ndimage._morphology': , 'scipy.ndimage._measurements': , 'scipy.ndimage.filters': , 'scipy.ndimage.fourier': , 'scipy.ndimage.interpolation': , 'scipy.ndimage.measurements': , 'scipy.ndimage.morphology': , 'scipy.ndimage': , 'scipy.signal._arraytools': , 'scipy.signal._sosfilt': , 'scipy.signal._signaltools': , 'scipy.signal._savitzky_golay': , 'scipy.signal._spectral': , 'scipy.signal._spectral_py': , 'scipy.signal._wavelets': , 'scipy.stats._warnings_errors': , 'scipy.stats._distr_params': , 'scipy._lib._finite_differences': , 'scipy.stats._constants': , 'scipy.stats._censored_data': , 'scipy.stats._distn_infrastructure': , 'scipy.special.cython_special': , 'scipy.stats._stats': , 'scipy.stats._tukeylambda_stats': , 'scipy.stats._ksstats': , 'scipy.stats.beta_ufunc': , 'scipy.stats._boost.beta_ufunc': , 'scipy.stats.binom_ufunc': , 'scipy.stats._boost.binom_ufunc': , 'scipy.stats.nbinom_ufunc': , 'scipy.stats._boost.nbinom_ufunc': , 'scipy.stats.hypergeom_ufunc': , 'scipy.stats._boost.hypergeom_ufunc': , 'scipy.stats.ncf_ufunc': , 'scipy.stats._boost.ncf_ufunc': , 'scipy.stats.ncx2_ufunc': , 'scipy.stats._boost.ncx2_ufunc': , 'scipy.stats.nct_ufunc': , 'scipy.stats._boost.nct_ufunc': , 'scipy.stats.skewnorm_ufunc': , 'scipy.stats._boost.skewnorm_ufunc': , 'scipy.stats.invgauss_ufunc': , 'scipy.stats._boost.invgauss_ufunc': , 'scipy.stats._boost': , 'scipy.stats._continuous_distns': , 'scipy.stats._biasedurn': , 'scipy.stats._discrete_distns': , 'scipy.stats._levy_stable.levyst': , 'scipy.stats._levy_stable': , 'scipy.stats._entropy': , 'scipy.stats.distributions': , 'scipy._lib._bunch': , 'scipy.stats._stats_pythran': , 'scipy.stats._stats_mstats_common': , 'scipy.stats._mstats_basic': , 'scipy.stats._common': , 'scipy.stats._hypotests': , 'scipy._lib._docscrape': , 'scipy.stats._axis_nan_policy': , 'scipy.stats._resampling': , 'scipy.stats._binomtest': , 'scipy.stats._stats_py': , 'scipy.stats._variation': , 'scipy.stats._statlib': , 'scipy.stats._fit': , 'scipy.stats._relative_risk': , 'scipy.stats._crosstab': , 'scipy.stats._odds_ratio': , 'scipy.stats.contingency': , 'scipy.stats._morestats': , 'scipy.stats._sobol': , 'scipy.stats._qmc_cy': , 'scipy.stats._qmc': , 'scipy.stats._multicomp': , 'scipy.stats._binned_statistic': , 'scipy.stats._mvn': , 'scipy.stats._kde': , 'scipy.stats._mstats_extras': , 'scipy.stats.mstats': , 'scipy.stats.qmc': , 'scipy.stats._covariance': , 'scipy.stats._rcont.rcont': , 'scipy.stats._rcont': , 'scipy.stats._qmvnt': , 'scipy.stats._multivariate': , 'scipy.stats._rvs_sampling': , 'scipy.stats._page_trend_test': , 'scipy.stats._mannwhitneyu': , 'scipy.stats._sensitivity_analysis': , 'scipy.stats._survival': , 'scipy.stats.biasedurn': , 'scipy.stats.kde': , 'scipy.stats.morestats': , 'scipy.stats.mstats_basic': , 'scipy.stats.mstats_extras': , 'scipy.stats.mvn': , 'scipy.stats.statlib': , 'scipy.stats.stats': , 'scipy.stats': , 'scipy.signal._peak_finding_utils': , 'scipy.signal._peak_finding': , 'cmath': , 'scipy.signal._czt': , 'scipy.signal.bsplines': , 'scipy.signal.filter_design': , 'scipy.signal.fir_filter_design': , 'scipy.signal.lti_conversion': , 'scipy.signal.ltisys': , 'scipy.signal.spectral': , 'scipy.signal.signaltools': , 'scipy.signal.waveforms': , 'scipy.signal.wavelets': , 'scipy.signal.spline': , 'scipy.signal': , 'sndfileio.dsp': , 'sndfileio.resampling': , 'sndfileio': , 'appdirs': , 'yaml.error': , 'yaml.tokens': , 'yaml.events': , 'yaml.nodes': , 'yaml.reader': , 'yaml.scanner': , 'yaml.parser': , 'yaml.composer': , 'yaml.constructor': , 'yaml.resolver': , 'yaml.loader': , 'yaml.emitter': , 'yaml.serializer': , 'yaml.representer': , 'yaml.dumper': , 'yaml._yaml': , 'yaml.cyaml': , 'yaml': , 'configdict.configdict': , 'configdict': , 'csoundengine.config': , 'cachetools.keys': , 'cachetools': , 'emlib': , 'emlib.common': , 'emlib.dialogs': , 'emlib.iterlib': , 'emlib.envir': , 'emlib.misc': , 'xxhash._xxhash': , 'xxhash.version': , 'xxhash': , 'csoundengine.internalTools': , 'csoundengine.linuxaudio': , '_jack': , 'jack': , 'csoundengine.jacktools': , 'csoundengine.state': , 'emlib.textlib': , 'emlib.mathlib': , 'ctcsound7': , 'csoundengine.csoundlib': , 'csoundengine.tools': , 'csoundengine.dependencies': , 'emlib.net': , 'pitchtools': , 'tabulate.version': , 'tabulate': , 'emlib.containers': , 'csoundengine.engineorc': , 'csoundengine.termui': , 'csoundengine.errors': , 'csoundengine.engine': , 'csoundengine.session': , '_cython_0_29_34': , 'bpf4.arraytools': , 'bpf4.config': , 'bpf4.core': , 'bpf4.util': , 'bpf4.api': , 'bpf4.version': , 'bpf4': , 'ipywidgets._version': , 'ipywidgets.comm': , 'ipywidgets.widgets.utils': , 'ipywidgets.widgets.widget': , 'ipywidgets.widgets.trait_types': , 'ipywidgets.widgets.widget_layout': , 'ipywidgets.widgets.widget_style': , 'ipywidgets.widgets.domwidget': , 'ipywidgets.widgets.valuewidget': , 'ipywidgets.widgets.widget_core': , 'ipywidgets.widgets.widget_description': , 'ipywidgets.widgets.widget_bool': , 'ipywidgets.widgets.widget_button': , 'ipywidgets.widgets.docutils': , 'ipywidgets.widgets.widget_box': , 'ipywidgets.widgets.widget_int': , 'ipywidgets.widgets.widget_float': , 'ipywidgets.widgets.widget_color': , 'ipywidgets.widgets.widget_date': , 'ipywidgets.widgets.widget_datetime': , 'ipywidgets.widgets.widget_time': , 'ipywidgets.widgets.widget_output': , 'ipywidgets.widgets.widget_selection': , 'ipywidgets.widgets.widget_selectioncontainer': , 'ipywidgets.widgets.widget_string': , 'ipywidgets.widgets.widget_controller': , 'ipywidgets.widgets.interaction': , 'ipywidgets.widgets.widget_link': , 'ipywidgets.widgets.widget_media': , 'ipywidgets.widgets.widget_tagsinput': , 'ipywidgets.widgets.widget_templates': , 'ipywidgets.widgets.widget_upload': , 'ipywidgets.widgets': , 'ipywidgets': , 'csoundengine.jupytertools': , 'csoundengine.baseevent': , 'csoundengine.instrtools': , 'csoundengine.instr': , 'csoundengine.abstractrenderer': , 'csoundengine.synth': , 'csoundengine.tableproxy': , 'csoundengine.sessioninstrs': , 'csoundengine.offlineorc': , 'emlib.filetools': , 'csoundengine.offline': , 'csoundengine.busproxy': }\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + "--Csound version 6.19 (double samples) Oct 1 2023\n", + "[commit: 593ac80dd986b58f24e3d59242243ba6266edda7]\n", + "\u001b[mlibsndfile-1.2.0\n", + "\u001b[msr = 48000.0,\u001b[m kr = 750.000,\u001b[m ksmps = 64\n", + "\u001b[m0dBFS level = 1.0,\u001b[m A4 tuning = 442.0\n", + "\u001b[maudio buffered in 1024 sample-frame blocks\n", + "\u001b[mreading 8192-byte blks of shorts from adc:Built-in Audio Pro: (RAW)\n", + "writing 2048 sample blks of 64-bit floats to dac:Built-in Audio Pro:\n", + "SECTION 1:\n" + ] + } + ], + "source": [ + "from csoundengine import *\n", + "\n", + "e = Engine()\n", + "s = e.session()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "9f4f0be5-245e-4c33-8a79-f010bb738b58", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Instr test
\n", + "    ibus:p5=0
\n", + "
\n", + "
ibus = p5\n",
+       "kfreq = busin:k(ibus)\n",
+       "outch 1, oscili:a(0.05, lag(kfreq, 0.01))\n",
+       "
\n", + "
" + ], + "text/plain": [ + "Instr(test, ibus:5)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.defInstr('test', r'''\n", + "ibus = p5\n", + "kfreq = busin:k(ibus)\n", + "outch 1, oscili:a(0.05, lag(kfreq, 0.01))\n", + "''')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "188cf072-5178-4f4f-8a77-8265b153294e", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f879d9655ed24ceda538fff663e17b3d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(description='Stop', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "eb433ce49c10417485c463aecec55f85", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "

Synth(â–¶ test:501.0002, 5:ibus=0)

" + ], + "text/plain": [ + "Synth(â–¶ test:501.0002 start:0.513 dur:-1.000 p4=0 ibus:5=0)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bus = s.assignBus(value=1000)\n", + "synth = s.sched('test', ibus=bus.token)\n", + "# e.writeBus(bus.token, 500)\n", + "bus.set(500, 0.001)\n", + "synth" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "65391b07-4bdf-4849-a26e-c529adab656f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "here 0 0\n" + ] + } + ], + "source": [ + "bus.set(600)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "add70581-6463-473a-9b0f-1bc6234e2b56", + "metadata": {}, + "outputs": [], + "source": [ + "buses = [e.assignBus(value=600) for _ in range(200)]\n", + "e.sync()\n", + "for bus in buses:\n", + " synth = s.sched('test', dur=1, ibus=bus)\n", + " e.writeBus(bus, 500, 0.001)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "3853c1b4-f152-4a98-8231-77e27b6f7c3b", + "metadata": {}, + "outputs": [], + "source": [ + "buses = [s.assignBus(value=600) for _ in range(200)]\n", + "s.engine.sync()\n", + "for bus in buses:\n", + " synth = s.sched('test', dur=1, ibus=bus.token)\n", + " bus.set(500, 0.002)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "25978d18-c6a6-4d44-82f4-9856b2d1c9cb", + "metadata": {}, + "outputs": [], + "source": [ + "e.writeBus(bus.token, 1500)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "658c6bc6-c3b3-4822-97d8-ff21dd150e18", + "metadata": {}, + "outputs": [], + "source": [ + "bus.set(1600)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "c0bbe2fa-452a-49f1-af20-681a8be23c99", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[mend of section 1\t sect peak amps: 0.10000 0.00000\n", + "SECTION 1:\n" + ] + } + ], + "source": [ + "e.unschedAll()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "773a206e-7e8d-498a-b130-938d43ca2277", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Instr receiver
\n", + "    ibus:p5=0, kgain:p6=0
\n", + "
\n", + "
ibus  = p5\n",
+       "kgain = p6\n",
+       "asig = busin:a(ibus)\n",
+       "asig *= a(kgain)\n",
+       "outch 1, asig\n",
+       "
\n", + "
" + ], + "text/plain": [ + "Instr(receiver, ibus:5, kgain:6)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.defInstr('sender', r'''\n", + "ibus = p5\n", + "ifreqbus = p6\n", + "kfreq = busin:k(ifreqbus)\n", + "asig vco2 0.1, kfreq\n", + "busout(ibus, asig)\n", + "''')\n", + "\n", + "s.defInstr('receiver', r'''\n", + "ibus = p5\n", + "kgain = p6\n", + "asig = busin:a(ibus)\n", + "asig *= a(kgain)\n", + "outch 1, asig\n", + "''')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "9173e2b2-c037-493e-bd4a-54bb6758dfa4", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "47319385f33a496ebc4ba5d0fdf33ad1", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(description='Stop', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "56cd88664cdc4127a9e99e49a7e4261d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "SynthGroup - start: 0.000, dur: inf, synths: 2\n", + "

getInstr: sender - 1 synths

\n", + "
p1startdur45:ibus6:ifreqbus
501.0004 â–¶-0.013-1.000045
\n", + "

getInstr: receiver - 1 synths

\n", + "
p1startdur45:ibus6:kgain
502.0004 â–¶-0.013-1.000040.5
" + ], + "text/plain": [ + "SynthGroup(n=2)\n", + " Synth(â–¶ sender:501.0004 start:29.335 dur:-1.000 p4=0 ibus:5=4 ifreqbus:6=5)\n", + " Synth(â–¶ receiver:502.0004 start:29.335 dur:-1.000 p4=0 ibus:5=4 kgain:6=0.5)" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bus = s.assignBus()\n", + "freqbus = s.assignBus(value=600)\n", + "\n", + "chain = SynthGroup([s.sched('sender', ibus=bus, ifreqbus=freqbus),\n", + " s.sched('receiver', ibus=bus, kgain=0.5)])\n", + "e.writeBus(freqbus.token, 400, delay=1)\n", + "chain" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "e3145656-b556-4449-ad8b-49e064177f5f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- direct access 5 2\n", + "--- direct access 5 2\n" + ] + } + ], + "source": [ + "e.writeBus(freqbus.token, 800)\n", + "freqbus.set(500)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "c0609397-ed96-4858-8d59-e8a035d7a266", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- direct access 5 2\n" + ] + } + ], + "source": [ + "freqbus.set(500)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "2f07c06a-f4d7-4721-8d68-def4fa9660fe", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[mBus token=5, bus=2, kind=k, value=500.000000, refs=1\n" + ] + } + ], + "source": [ + "e._dumpbus(freqbus.token)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "9fdae011-9468-4eae-ba14-26a5820a71d4", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[mINIT ERROR in instr 32 (opcode initerror.s) line 691: \u001b[m\n", + " itoken -1 has no bus assigned to it\n", + "\u001b[m\n", + "\u001b[m\tiniterror.s\t#S1\t\n", + "\t\t T 69.377 - note deleted. i32 had 1 init errors\u001b[m\n" + ] + } + ], + "source": [ + "freqbus.release()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "8fd39926-80f5-40ed-b959-7cf24efbd70d", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[maudio bus 0, token 0, refs before release 0\n", + "\u001b[mINIT ERROR in instr 32 (opcode initerror.s) line 679: \u001b[m\n", + " Bus pool is full!\n", + "\u001b[m\n", + "\u001b[m\tiniterror.s\t\"Bus pool is full!\"\t\n", + "\t\t T 67.841 - note deleted. i32 had 1 init errors\u001b[m\n" + ] + } + ], + "source": [ + "bus.release()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "65d74632-3661-48fb-aac3-fd114f34d4d9", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[maudio bus 0, token 0, refs before release 3\n", + "\u001b[mscalar bus 0, token 1, refs before release 2\n", + "\u001b[maudio bus 0, token 0, refs before release 2\n" + ] + } + ], + "source": [ + "chain.stop()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "eb1b40b4-8f92-4846-9b70-f9bc72b6bf19", + "metadata": {}, + "outputs": [], + "source": [ + "del freqbus" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "f3066c5c-495c-48ee-b112-a9f93d34fc67", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gc\n", + "gc.collect()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "54e72390-f718-49fb-8e0e-341589cbc76d", + "metadata": {}, + "outputs": [], + "source": [ + "nan = float('nan')\n", + "e.automateBus(freqbus, (0, nan, 2, 800, 2.1, 1000))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "d46eeff6-bfab-47ac-b38d-9d4dc8803dcb", + "metadata": {}, + "outputs": [], + "source": [ + "chain.stop()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e8c984d0-59dc-449c-9186-6c3dc92b2e71", + "metadata": {}, + "outputs": [ + { + "ename": "KeyError", + "evalue": "\"Unknown parameter: 'kfreq'. Possible parameters for this event: {'kgain'}\"", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[7], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mchain\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkfreq\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1000\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/dev/python/csoundengine/csoundengine/baseevent.py:96\u001b[0m, in \u001b[0;36mBaseEvent.set\u001b[0;34m(self, param, value, delay, **kws)\u001b[0m\n\u001b[1;32m 94\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m kws:\n\u001b[1;32m 95\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m kws\u001b[38;5;241m.\u001b[39mitems():\n\u001b[0;32m---> 96\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mparam\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdelay\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdelay\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 98\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m param:\n\u001b[1;32m 99\u001b[0m tabkeys \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_controlNames()\n", + "File \u001b[0;32m~/dev/python/csoundengine/csoundengine/baseevent.py:105\u001b[0m, in \u001b[0;36mBaseEvent.set\u001b[0;34m(self, param, value, delay, **kws)\u001b[0m\n\u001b[1;32m 103\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_setp(param\u001b[38;5;241m=\u001b[39mparam, value\u001b[38;5;241m=\u001b[39mvalue, delay\u001b[38;5;241m=\u001b[39mdelay)\n\u001b[1;32m 104\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 105\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnknown parameter: \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mparam\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 106\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPossible parameters for this event: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdynamicParams()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n", + "\u001b[0;31mKeyError\u001b[0m: \"Unknown parameter: 'kfreq'. Possible parameters for this event: {'kgain'}\"" + ] + } + ], + "source": [ + "chain.set(kfreq=1000)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a7de02d2-b40e-4228-940b-ff99f0ccf80b", + "metadata": {}, + "outputs": [], + "source": [ + "chain.stop()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "028c86c6-3b00-4b9a-9a0c-8fa6ed18079d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'kgain'}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chain.dynamicParams()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8f0814bd-5406-4b68-a82b-0081ecea939a", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/test/test-offline-render.ipynb b/notebooks/test/test-offline-render.ipynb new file mode 100644 index 0000000..1f31bf4 --- /dev/null +++ b/notebooks/test/test-offline-render.ipynb @@ -0,0 +1,925 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "c38fd294-3dc5-4fef-ad37-1e3ac559d0ad", + "metadata": {}, + "outputs": [], + "source": [ + "from csoundengine import *" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "0379d9c0-47d4-4ed6-ad19-3b12116bd08d", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + "--Csound version 6.19 (double samples) Oct 1 2023\n", + "[commit: 593ac80dd986b58f24e3d59242243ba6266edda7]\n", + "\u001b[mlibsndfile-1.2.0\n", + "\u001b[msr = 48000.0,\u001b[m kr = 750.000,\u001b[m ksmps = 64\n", + "\u001b[m0dBFS level = 1.0,\u001b[m A4 tuning = 442.0\n", + "\u001b[maudio buffered in 512 sample-frame blocks\n", + "\u001b[mreading 4096-byte blks of shorts from adc:Built-in Audio Pro: (RAW)\n", + "writing 1024 sample blks of 64-bit floats to dac:Built-in Audio Pro:\n", + "SECTION 1:\n" + ] + } + ], + "source": [ + "s = Engine().session()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d4eeffc5-8c58-4783-97b6-5d0b377bac11", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Instr foo
\n", + "     controls = {'kfreq': 800}\n", + "
\n", + "
; foo instr\n",
+       "; Args:\n",
+       ";   kfreq: frequency\n",
+       "if changed2(kfreq) == 1 then\n",
+       "    println "kfreq: %f", kfreq\n",
+       "endif\n",
+       "outch 1, oscili:a(0.1, kfreq) * linsegr:a(0, 0.01, 1, 0.01, 0)\n",
+       "
\n", + "
" + ], + "text/plain": [ + "Instr(foo, tabargs={'kfreq': 800})" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.defInstr('foo', r'''\n", + "; foo instr\n", + "; Args:\n", + "; kfreq: frequency\n", + "if changed2(kfreq) == 1 then\n", + " println \"kfreq: %f\", kfreq\n", + "endif\n", + "outch 1, oscili:a(0.1, kfreq) * linsegr:a(0, 0.01, 1, 0.01, 0)\n", + "''', args={'kfreq': 800})\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e24f7760-ebe5-466a-91a3-3dbe2d1d2cb7", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ffbb98908c47426eb68fc9af762c12fb", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(description='Stop', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "546b892b119547ba97facd92144dde9e", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "

Synth(â–¶ foo:501.0002)

" + ], + "text/plain": [ + "Synth(â–¶ foo:501.0002 start:2.647 dur:10.000 p4=9990)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sy = s.sched('foo', 0, 10, kfreq=1000)\n", + "sy" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "22345c7f-9dba-4ff0-a733-8e56a10d38e0", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[mkfreq: 400.000000\n" + ] + } + ], + "source": [ + "sy.set(kfreq=400, delay=0.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "e0bc97e0-394a-4b29-b40e-052ec4cf1ffa", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Forwarding to sched callback\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "UnifiedCSD: /tmp/tmpkq8u70l0.csd\n", + "instr _releaseDynargsToken uses instrument number 7\n", + "instr _stop uses instrument number 8\n", + "instr _automateControlViaPargs uses instrument number 9\n", + "instr _automatePargViaPargs uses instrument number 10\n", + "instr _pwrite uses instrument number 11\n", + "instr _chnset uses instrument number 12\n", + "instr _setControl uses instrument number 13\n", + "instr _setDynamicControls uses instrument number 14\n", + "Elapsed time at end of orchestra compile: real: 0.016s, CPU: 0.016s\n", + "\u001b[msorting score ...\n", + "\t... done\n", + "Elapsed time at end of score sort: real: 0.017s, CPU: 0.017s\n", + "\u001b[m--Csound version 6.19 (double samples) Oct 1 2023\n", + "[commit: 593ac80dd986b58f24e3d59242243ba6266edda7]\n", + "\u001b[mlibsndfile-1.2.0\n", + "\u001b[mgraphics suppressed, ascii substituted\n", + "sr = 48000.0,\u001b[m kr = 750.000,\u001b[m ksmps = 64\n", + "\u001b[m0dBFS level = 1.0,\u001b[m A4 tuning = 442.0\n", + "\u001b[mftable 101:\n", + "ftable 101:\t16000 points, scalemax 0.000\n", + "ftable 102:\n", + "ftable 102:\t1000 points, scalemax 0.000\n", + "ftable 103:\n", + "ftable 103:\t100 points, scalemax 0.000\n", + "ftable 104:\n", + "ftable 104:\t10000 points, scalemax 0.000\n", + "ftable 105:\n", + "ftable 105:\t1000 points, scalemax 0.000\n", + "ftable 106:\n", + "ftable 106:\t10000 points, scalemax 0.000\n", + "orch now loaded\n", + "\u001b[maudio buffered in 256 sample-frame blocks\n", + "\u001b[mwriting 2048-byte blks of floats to /tmp/tmpcuf2tvlu.wav (WAV)\n", + "SECTION 1:\n", + "\u001b[mftable 1:\n", + "ftable 1:\t16000 points, scalemax 0.000\n", + "new alloc for instr _setDynamicControls:\n", + "\u001b[mWARNING: \u001b[minstr _setDynamicControls uses 5 p-fields but is given 6\u001b[m\n", + "\u001b[mnew alloc for instr 520:\n", + "\u001b[mnew alloc for instr 2419:\n", + "\u001b[mB 0.000 .. 0.500 T 0.500 TT 0.500 M: 0.10000 0.00000\n", + "new alloc for instr _setControl:\n", + "\u001b[mkfreq: 400.000000\n", + "\u001b[mB 0.500 .. 1.500 T 1.500 TT 1.500 M: 0.10000 0.00000\n", + "kfreq: 800.000000\n", + "\u001b[mB 1.500 .. 10.000 T 10.000 TT 10.000 M: 0.10000 0.00000\n", + "B 10.000 .. 10.012 T 10.012 TT 10.012 M: 0.09707 0.00000\n", + "Score finished in csoundPerform().\n", + "inactive allocs returned to freespace\n", + "end of score.\t\t overall amps:\u001b[m 0.10000 0.00000\n", + "0 errors in performance\n", + "\u001b[mElapsed time at end of performance: real: 0.075s, CPU: 0.074s\n", + "\u001b[m512 2048 sample blks of floats written to /tmp/tmpcuf2tvlu.wav (WAV)\n" + ] + }, + { + "data": { + "text/html": [ + "Renderer(sr=48000, renderedJobs=[RenderJob(outfile='/tmp/tmpcuf2tvlu.wav', samplerate=48000, encoding='', starttime=0.0, endtime=10.0)])
Soundfile: '/tmp/tmpcuf2tvlu.wav', duration: 10, sr: 48000, numchannels: 2)
\n", + "
\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with s.rendering() as r:\n", + " sy = s.sched('foo', 0, 10, kfreq=1000)\n", + " sy.set(kfreq=400, delay=0.5)\n", + " sy.set(kfreq=800, delay=1.5)\n", + "r" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "73cd1de9-8bb6-4457-b900-f0dc120fdeb6", + "metadata": {}, + "outputs": [], + "source": [ + "from csoundengine import *\n", + "r = Renderer()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "4febcd7b-c03d-4bca-bb49-d18a14409a46", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Instr vco
\n", + "    ifreqbus:p5=0
\n", + "
\n", + "
ifreqbus = p5\n",
+       "kfreq = busin:k(ifreqbus)\n",
+       "if changed(kfreq) == 1 then\n",
+       "    println "kfreq: %f", kfreq\n",
+       "endif\n",
+       "asig vco2 0.1, kfreq\n",
+       "outch 1, asig\n",
+       "
\n", + "
" + ], + "text/plain": [ + "Instr(vco, ifreqbus:5)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r.defInstr('vco', r'''\n", + "ifreqbus = p5\n", + "kfreq = busin:k(ifreqbus)\n", + "if changed(kfreq) == 1 then\n", + " println \"kfreq: %f\", kfreq\n", + "endif\n", + "asig vco2 0.1, kfreq\n", + "outch 1, asig\n", + "''')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "89687448-7898-407a-890f-16b7752e09a7", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "UnifiedCSD: /tmp/tmpb0fdgtgh.csd\n", + "instr _releaseDynargsToken uses instrument number 7\n", + "instr _stop uses instrument number 8\n", + "instr _automateControlViaPargs uses instrument number 9\n", + "instr _automatePargViaPargs uses instrument number 10\n", + "instr _pwrite uses instrument number 11\n", + "instr _chnset uses instrument number 12\n", + "instr _setControl uses instrument number 13\n", + "instr _setDynamicControls uses instrument number 14\n", + "Elapsed time at end of orchestra compile: real: 0.024s, CPU: 0.024s\n", + "\u001b[msorting score ...\n", + "\t... done\n", + "Elapsed time at end of score sort: real: 0.024s, CPU: 0.024s\n", + "\u001b[m--Csound version 6.19 (double samples) Oct 1 2023\n", + "[commit: 593ac80dd986b58f24e3d59242243ba6266edda7]\n", + "\u001b[mlibsndfile-1.2.0\n", + "\u001b[mgraphics suppressed, ascii substituted\n", + "sr = 44100.0,\u001b[m kr = 689.062,\u001b[m ksmps = 64\n", + "\u001b[m0dBFS level = 1.0,\u001b[m A4 tuning = 442.0\n", + "\u001b[mftable 101:\n", + "ftable 101:\t16000 points, scalemax 0.000\n", + "ftable 102:\n", + "ftable 102:\t1000 points, scalemax 0.000\n", + "ftable 103:\n", + "ftable 103:\t100 points, scalemax 0.000\n", + "ftable 104:\n", + "ftable 104:\t10000 points, scalemax 0.000\n", + "ftable 105:\n", + "ftable 105:\t1000 points, scalemax 0.000\n", + "ftable 106:\n", + "ftable 106:\t10000 points, scalemax 0.000\n", + "orch now loaded\n", + "\u001b[maudio buffered in 256 sample-frame blocks\n", + "\u001b[mwriting 2048-byte blks of floats to /home/em/tmp/vcotest.wav (WAV)\n", + "SECTION 1:\n", + "\u001b[mftable 1:\n", + "ftable 1:\t16000 points, scalemax 0.000\n", + "new alloc for instr 5:\n", + "\u001b[m********* New bus: 0, token: 1, kind: 1\n", + "\u001b[mnew alloc for instr 520:\n", + "\u001b[m----------- busin control, token=1\n", + "\u001b[m---------------- busin bus: 0\n", + "\u001b[mnew alloc for instr 2419:\n", + "\u001b[mkfreq: 500.000000\n", + "\u001b[mB 0.000 .. 1.000 T 1.000 TT 1.000 M: 0.11545 0.00000\n", + "new alloc for instr 6:\n", + "\u001b[mkfreq: 1000.000000\n", + "\u001b[mB 1.000 .. 10.000 T 10.001 TT 10.001 M: 0.11334 0.00000\n", + "Score finished in csoundPerform().\n", + "inactive allocs returned to freespace\n", + "end of score.\t\t overall amps:\u001b[m 0.11545 0.00000\n", + "0 errors in performance\n", + "\u001b[mElapsed time at end of performance: real: 0.086s, CPU: 0.083s\n", + "\u001b[m512 2048 sample blks of floats written to /home/em/tmp/vcotest.wav (WAV)\n" + ] + }, + { + "data": { + "text/html": [ + "Renderer(sr=44100, renderedJobs=[RenderJob(outfile='/home/em/tmp/vcotest.wav', samplerate=44100, encoding='', starttime=0.0, endtime=10.0)])
Soundfile: '/home/em/tmp/vcotest.wav', duration: 10, sr: 44100, numchannels: 2)
\n", + "
\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "freqbus = r.assignBus(value=500)\n", + "s1 = r.sched('vco', 0, 10, ifreqbus=freqbus)\n", + "freqbus.set(1000, delay=1)\n", + "r.render(\"~/tmp/vcotest.wav\")\n", + "r" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "63223919-704d-4a87-9ab1-125d42b13e97", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "UnifiedCSD: /tmp/tmpmfqb9v8c.csd\n", + "instr _releaseDynargsToken uses instrument number 7\n", + "instr _stop uses instrument number 8\n", + "instr _automateControlViaPargs uses instrument number 9\n", + "instr _automatePargViaPargs uses instrument number 10\n", + "instr _pwrite uses instrument number 11\n", + "instr _chnset uses instrument number 12\n", + "instr _setControl uses instrument number 13\n", + "instr _setDynamicControls uses instrument number 14\n", + "Elapsed time at end of orchestra compile: real: 0.016s, CPU: 0.016s\n", + "\u001b[msorting score ...\n", + "\t... done\n", + "Elapsed time at end of score sort: real: 0.021s, CPU: 0.021s\n", + "\u001b[m--Csound version 6.19 (double samples) Oct 1 2023\n", + "[commit: 593ac80dd986b58f24e3d59242243ba6266edda7]\n", + "\u001b[mlibsndfile-1.2.0\n", + "\u001b[mgraphics suppressed, ascii substituted\n", + "sr = 44100.0,\u001b[m kr = 689.062,\u001b[m ksmps = 64\n", + "\u001b[m0dBFS level = 1.0,\u001b[m A4 tuning = 442.0\n", + "\u001b[mStrsets[20]: 'linear'\n", + "ftable 101:\n", + "ftable 101:\t16000 points, scalemax 0.000\n", + "ftable 102:\n", + "ftable 102:\t1000 points, scalemax 0.000\n", + "ftable 103:\n", + "ftable 103:\t100 points, scalemax 0.000\n", + "ftable 104:\n", + "ftable 104:\t10000 points, scalemax 0.000\n", + "ftable 105:\n", + "ftable 105:\t1000 points, scalemax 0.000\n", + "ftable 106:\n", + "ftable 106:\t10000 points, scalemax 0.000\n", + "orch now loaded\n", + "\u001b[maudio buffered in 256 sample-frame blocks\n", + "\u001b[mwriting 2048-byte blks of floats to /home/em/tmp/vcotest.wav (WAV)\n", + "SECTION 1:\n", + "\u001b[mftable 1:\n", + "ftable 1:\t16000 points, scalemax 0.000\n", + "new alloc for instr 5:\n", + "\u001b[mnew alloc for instr 520:\n", + "\u001b[mnew alloc for instr 2419:\n", + "\u001b[mB 0.000 .. 1.000 T 1.000 TT 1.000 M: 0.11545 0.00000\n", + "new alloc for instr 6:\n", + "\u001b[mB 1.000 .. 2.000 T 2.000 TT 2.000 M: 0.11331 0.00000\n", + "new alloc for instr 1:\n", + "\u001b[mWARNING: \u001b[minstr 1 uses 7 p-fields but is given 1897\u001b[m\n", + "\u001b[mB 2.000 .. 5.780 T 5.780 TT 5.780 M: 0.11594 0.00000\n", + "WARNING: \u001b[minstr 1 uses 7 p-fields but is given 1117\u001b[m\n", + "\u001b[mB 5.780 .. 7.997 T 7.998 TT 7.998 M: 0.11594 0.00000\n", + "B 7.997 .. 10.000 T 10.001 TT 10.001 M: 0.11575 0.00000\n", + "Score finished in csoundPerform().\n", + "inactive allocs returned to freespace\n", + "end of score.\t\t overall amps:\u001b[m 0.11594 0.00000\n", + "0 errors in performance\n", + "\u001b[mElapsed time at end of performance: real: 0.074s, CPU: 0.073s\n", + "\u001b[m512 2048 sample blks of floats written to /home/em/tmp/vcotest.wav (WAV)\n" + ] + }, + { + "data": { + "text/html": [ + "Renderer(sr=44100, renderedJobs=[RenderJob(outfile='/home/em/tmp/vcotest.wav', samplerate=44100, encoding='', starttime=0.0, endtime=10.0)])
Soundfile: '/home/em/tmp/vcotest.wav', duration: 10, sr: 44100, numchannels: 2)
\n", + "
\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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/PnzEQgE4n+1tbVH/DWJiIgoc3IP5UFz587Fiy++iDfeeANDhgyJ315ZWYlwOIympiZHFaWhoQGVlZXxad555x3H88lRPnIandfrhdfrPZRZJSIioj6oRxUUy7Iwd+5cLFmyBK+++ipGjBjhuH/8+PHIy8vD8uXL47dt3boVu3btQlVVFQCgqqoKGzduRGNjY3yaZcuWwefzYcyYMYfzXoiIiOgY0aMKSnV1NZ588kk8//zzKCkpifcZ8fv9KCgogN/vx5w5czBv3jyUlZXB5/Ph+uuvR1VVFSZPngwAmDZtGsaMGYNrrrkGd999N+rr63HbbbehurqaVRIiIiIC0MNhxllZWa63P/bYY/jWt74FQByo7eabb8af/vQnhEIhTJ8+HQ8++KCj+ebTTz/Fddddh9dffx1FRUWYPXs27rrrLuTmppeXOMyYiIio7+nJ9vuwjoOSKQwoREREfc9ROw4KERER0ZHAgEJERETGYUAhIiIi4zCgEBERkXEYUIiIiMg4DChERERkHAYUIiIiMg4DChERERmHAYWIiIiMw4BCRERExmFAISIiIuMwoBAREZFxGFCIiIjIOAwoREREZBwGFCIiIjIOAwoREREZhwGFiIiIjMOAQkRERMZhQCEiIiLjMKAQERGRcRhQiIiIyDgMKERERGQcBhQiIiIyDgMKERERGYcBhYiIiIzDgEJERETGYUAhIiIi4zCgEBERkXEYUIiIiMg4DChERERkHAYUIiIiMg4DChERERmHAYWIiIiMw4BCRERExmFAISIiIuMwoBAREZFxGFCIiIjIOAwoREREZBwGFCIiIjIOAwoREREZhwGFiIiIjMOAQkRERMZhQCEiIiLjMKAQERGRcRhQiIiIyDgMKERERGQcBhQiIiIyDgMKERERGYcBhYiIiIzDgEJERETGYUAhIiIi4zCgEBERkXEYUIiIiMg4DChERERkHAYUIiIiMg4DChERERmHAYWIiIiMw4BCRERExmFAISIiIuMwoBAREZFxGFCIiIjIOD0OKG+88QYuu+wyDB48GFlZWXjuuecc91uWhdtvvx2DBg1CQUEBpk6dim3btjmmOXDgAGbNmgWfz4fS0lLMmTMHLS0th/VGiIiI6NjR44DS2tqKcePGYeHCha7333333bj//vuxaNEirF69GkVFRZg+fTo6Ojri08yaNQubN2/G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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from csoundengine import *\n", + "from matplotlib import pyplot as plt\n", + "import numpy as np\n", + "import bpf4\n", + "\n", + "r = Renderer()\n", + "r.defInstr('vco', r'''\n", + "ifreqbus = p5\n", + "kfreq = busin:k(ifreqbus)\n", + "asig vco2 0.1, kfreq\n", + "outch 1, asig\n", + "''')\n", + "\n", + "freqbus = r.assignBus(value=500)\n", + "s1 = r.sched('vco', 0, 10, ifreqbus=freqbus)\n", + "dur = 6\n", + "vibfreq = bpf4.linear(0, 50, dur, 2)\n", + "times = np.arange(0, dur, 0.004)\n", + "vibfreqs = vibfreq.map(times)\n", + "freqs = np.sin(times*2*np.pi*vibfreqs) * 30 + 440\n", + "freqbus.set(1000, delay=1)\n", + "freqbus.automate((times, freqs), delay=2)\n", + "r.render(\"~/tmp/vcotest.wav\")\n", + "plt.plot(times, vibfreqs)\n", + "plt.plot(times, freqs)\n", + "r\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "abfb7186-7941-4459-ada3-1063bee81ba5", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[m\n", + "\n", + "--Csound version 6.19 (double samples) Oct 1 2023\n", + "[commit: 593ac80dd986b58f24e3d59242243ba6266edda7]\n", + "\u001b[mlibsndfile-1.2.0\n", + "\u001b[msr = 48000.0,\u001b[m kr = 750.000,\u001b[m ksmps = 64\n", + "\u001b[m0dBFS level = 1.0,\u001b[m A4 tuning = 442.0\n", + "\u001b[maudio buffered in 512 sample-frame blocks\n", + "\u001b[mreading 4096-byte blks of shorts from adc:Built-in Audio Pro: (RAW)\n", + "writing 1024 sample blks of 64-bit floats to dac:Built-in Audio Pro:\n", + "SECTION 1:\n" + ] + } + ], + "source": [ + "r = Engine().session()\n", + "\n", + "r.defInstr('vco', r'''\n", + "ifreqbus = p5\n", + "kfreq = busin:k(ifreqbus)\n", + "asig vco2 0.1, kfreq\n", + "outch 1, asig\n", + "''')\n", + "\n", + "freqbus = r.assignBus(value=500)\n", + "s1 = r.sched('vco', 0, 10, ifreqbus=freqbus)\n", + "dur = 6\n", + "vibfreq = bpf4.linear(0, 2, dur*0.5, 40, dur, 2)\n", + "times = np.arange(0, dur, 0.004)\n", + "vibfreqs = vibfreq.map(times)\n", + "freqs = np.sin(times*2*np.pi*vibfreqs) * 30 + 440\n", + "freqbus.set(1000, delay=1)\n", + "freqbus.automate((times, freqs), delay=2)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3ff8b0ef-33ce-401c-92f2-92fdbe17dfe8", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + "--Csound version 6.19 (double samples) Oct 1 2023\n", + "[commit: 593ac80dd986b58f24e3d59242243ba6266edda7]\n", + "\u001b[mlibsndfile-1.2.0\n", + "\u001b[msr = 48000.0,\u001b[m kr = 750.000,\u001b[m ksmps = 64\n", + "\u001b[m0dBFS level = 1.0,\u001b[m A4 tuning = 442.0\n", + "\u001b[maudio buffered in 512 sample-frame blocks\n", + "\u001b[mreading 4096-byte blks of shorts from adc:Built-in Audio Pro: (RAW)\n", + "writing 1024 sample blks of 64-bit floats to dac:Built-in Audio Pro:\n", + "SECTION 1:\n" + ] + }, + { + "data": { + "text/html": [ + "Instr vco
\n", + "    ifreqbus:p5=0
\n", + "
\n", + "
ifreqbus = p5\n",
+       "kfreq = busin:k(ifreqbus)\n",
+       "asig vco2 0.1, kfreq\n",
+       "outch 1, asig\n",
+       "
\n", + "
" + ], + "text/plain": [ + "Instr(vco, ifreqbus:5)" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from csoundengine import *\n", + "import numpy as np\n", + "import bpf4\n", + "\n", + "s = Engine().session()\n", + "\n", + "s.defInstr('vco', r'''\n", + "ifreqbus = p5\n", + "kfreq = busin:k(ifreqbus)\n", + "asig vco2 0.1, kfreq\n", + "outch 1, asig\n", + "''')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "45754bcd-fd27-4556-91b0-482c067b7536", + "metadata": {}, + "outputs": [], + "source": [ + "freqbus = s.assignBus(value=500)\n", + "dur = 6\n", + "s1 = s.sched('vco', 0, dur+1, ifreqbus=freqbus)\n", + "times = np.arange(0, dur, 0.004)\n", + "freq = bpf4.halfcos(0, 440, dur*0.5, 880, dur, 440)\n", + "freqs = freq.map(times)\n", + "freqbus.automate((times, freqs), delay=0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "ebd9e3fb-88d6-402c-b313-0ba2e416a7cc", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGdCAYAAAAxCSikAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABa4UlEQVR4nO3deVxVdeL/8de97LKJIpvgiqKmoqIZammKSvUt7ddUOio1Y1mGlS3aON+maaZmUNtXl5Zp1MyWSVsmt0yxckvc0BRXxAVQUbgsst17f39gzJfJBRA4l8v7+Xicx2M493Mu73sn731z7ueej8lut9sRERERcWBmowOIiIiIXIkKi4iIiDg8FRYRERFxeCosIiIi4vBUWERERMThqbCIiIiIw1NhEREREYenwiIiIiIOz9XoAHXBZrNx8uRJfH19MZlMRscRERGRarDb7eTn5xMWFobZfPlzKE5RWE6ePElERITRMURERKQWjh07Rnh4+GXHOEVh8fX1BSoesJ+fn8FpREREpDosFgsRERGV7+OX4xSF5ZePgfz8/FRYREREGpnqTOfQpFsRERFxeCosIiIi4vBUWERERMThqbCIiIiIw1NhEREREYenwiIiIiIOT4VFREREHJ4Ki4iIiDg8FRYRERFxeFdVWGbOnInJZGLq1KmXHffpp5/SpUsXPD096dGjB998802V2+12O8888wyhoaF4eXkRFxfHgQMHriaaiIiIOJFaF5affvqJefPm0bNnz8uO27BhA2PHjmXixIls376d0aNHM3r0aHbv3l05Zvbs2bz++uvMnTuXzZs34+3tzciRIykuLq5tPBEREXEitSosBQUFjBs3jnfeeYeAgIDLjn3ttdeIj49n2rRpdO3aleeee44+ffrw5ptvAhVnV1599VWefvppRo0aRc+ePVmwYAEnT55k2bJltYknIiIiTqZWhSUxMZFbbrmFuLi4K47duHHjr8aNHDmSjRs3AnDkyBGysrKqjPH396d///6VY/5bSUkJFoulyiYi4iiOnS3i9TUHyCsqMzqKiNOo8WrNS5YsYdu2bfz000/VGp+VlUVwcHCVfcHBwWRlZVXe/su+S435b0lJSfzlL3+paXQRkXqXV1TG+Pc2czSniPQzhbx8dy+jI4k4hRqdYTl27BiPPvooH374IZ6envWV6YpmzJhBXl5e5Xbs2DHD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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "freqbus = s.assignBus(value=440)\n", + "dur = 6\n", + "s1 = s.sched('vco', 0, dur, ifreqbus=freqbus)\n", + "\n", + "# vibfreq = bpf4.halfcos(0, 2, dur*0.5, 10, dur, 2)\n", + "vibfreq = bpf4.linear(0, 2, dur*0.6, 4, dur, 2)\n", + "\n", + "vibfreq.plot()\n", + "times = np.arange(0, dur, 0.05)\n", + "vibfreqs = vibfreq.map(times)\n", + "freqs = np.sin(times*(2*3.141592)*vibfreqs) * 10 + 440\n", + "# freqbus.set(1000, delay=1)\n", + "freqbus.automate((times, freqs), delay=0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "0dd2a5b8-b2d7-4ed4-8442-98fc8a56f330", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib import pyplot as plt\n", + "plt.plot(times, freqs)\n", + "plt.plot(times, vibfreqs)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "e8257273-3ce4-42e2-9716-cdae27f093bd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Instr receiver
\n", + "    ibus:p5=0, kgain:p6=0
\n", + "
\n", + "
ibus  = p5\n",
+       "kgain = p6\n",
+       "asig = busin:a(ibus)\n",
+       "asig *= a(kgain)\n",
+       "outch 1, asig\n",
+       "
\n", + "
" + ], + "text/plain": [ + "Instr(receiver, ibus:5, kgain:6)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r.defInstr('sender', r'''\n", + "ibus = p5\n", + "ifreqbus = p6\n", + "kfreq = busin:k(ifreqbus)\n", + "if changed(kfreq) == 1 then\n", + " println \"kfreq: %f\", kfreq\n", + "endif\n", + "asig vco2 0.1, kfreq\n", + "busout(ibus, asig)\n", + "''')\n", + "\n", + "r.defInstr('receiver', r'''\n", + "ibus = p5\n", + "kgain = p6\n", + "asig = busin:a(ibus)\n", + "asig *= a(kgain)\n", + "outch 1, asig\n", + "''')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "8e405909-0174-4958-8279-9e50abcf281d", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "UnifiedCSD: /tmp/tmpibeaeliq.csd\n", + "instr _releaseDynargsToken uses instrument number 7\n", + "instr _stop uses instrument number 8\n", + "instr _automateControlViaPargs uses instrument number 9\n", + "instr _automatePargViaPargs uses instrument number 10\n", + "instr _pwrite uses instrument number 11\n", + "instr _chnset uses instrument number 12\n", + "instr _setControl uses instrument number 13\n", + "instr _setDynamicControls uses instrument number 14\n", + "Elapsed time at end of orchestra compile: real: 0.016s, CPU: 0.016s\n", + "\u001b[msorting score ...\n", + "\t... done\n", + "Elapsed time at end of score sort: real: 0.017s, CPU: 0.016s\n", + "\u001b[m--Csound version 6.19 (double samples) Oct 1 2023\n", + "[commit: 593ac80dd986b58f24e3d59242243ba6266edda7]\n", + "\u001b[mlibsndfile-1.2.0\n", + "\u001b[mgraphics suppressed, ascii substituted\n", + "sr = 44100.0,\u001b[m kr = 689.062,\u001b[m ksmps = 64\n", + "\u001b[m0dBFS level = 1.0,\u001b[m A4 tuning = 442.0\n", + "\u001b[mftable 101:\n", + "ftable 101:\t16000 points, scalemax 0.000\n", + "ftable 102:\n", + "ftable 102:\t1000 points, scalemax 0.000\n", + "ftable 103:\n", + "ftable 103:\t100 points, scalemax 0.000\n", + "ftable 104:\n", + "ftable 104:\t10000 points, scalemax 0.000\n", + "ftable 105:\n", + "ftable 105:\t1000 points, scalemax 0.000\n", + "ftable 106:\n", + "ftable 106:\t10000 points, scalemax 0.000\n", + "orch now loaded\n", + "\u001b[maudio buffered in 256 sample-frame blocks\n", + "\u001b[mwriting 2048-byte blks of floats to /tmp/tmp7pl2126x.wav (WAV)\n", + "SECTION 1:\n", + "\u001b[mftable 1:\n", + "ftable 1:\t16000 points, scalemax 0.000\n", + "new alloc for instr 520:\n", + "\u001b[m********* New bus: 0, token: 2, kind: 1\n", + "\u001b[mBus not found (token 2, kind=1). Assigned bus 0\n", + "\u001b[m----------- busin control, token=2, ibus=0\n", + "\u001b[m********* New bus: 0, token: 1, kind: 0\n", + "\u001b[mBus not found (token 1, kind=0). Assigned bus 0\n", + "\u001b[mnew alloc for instr 521:\n", + "\u001b[mnew alloc for instr 2419:\n", + "\u001b[mB 0.000 .. 10.000 T 10.001 TT 10.001 M: 0.00000 0.00000\n", + "Score finished in csoundPerform().\n", + "inactive allocs returned to freespace\n", + "end of score.\t\t overall amps:\u001b[m 0.00000 0.00000\n", + "0 errors in performance\n", + "\u001b[mElapsed time at end of performance: real: 0.077s, CPU: 0.076s\n", + "\u001b[m512 2048 sample blks of floats written to /tmp/tmp7pl2126x.wav (WAV)\n" + ] + }, + { + "data": { + "text/plain": [ + "('/tmp/tmp7pl2126x.wav',\n", + " )" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r.render()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "ca16ed83-efe5-43c9-ad7e-117b14cd7d83", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Renderer(sr=44100, renderedJobs=[RenderJob(outfile='/tmp/tmp8n0idwwq.wav', samplerate=44100, encoding='', starttime=0.0, endtime=10.0)])
Soundfile: '/tmp/tmp8n0idwwq.wav', duration: 10, sr: 44100, numchannels: 2)
\n", + "
\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "68040a03-fe52-4e94-847b-8148efecde68", + "metadata": {}, + "outputs": [], + "source": [ + "r = Renderer()\n", + "r." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}