From 33797cc6b3b7c772d0301f6ed62f0e9391525dd4 Mon Sep 17 00:00:00 2001 From: RLKRo Date: Wed, 27 Dec 2023 16:53:46 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20deeppavl?= =?UTF-8?q?ov/dialog=5Fflow=5Fframework@e101fb315c86d0d59bf68ce05f3d69ea75?= =?UTF-8?q?0f9476=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .buildinfo | 4 + .doctrees/about_us.doctree | Bin 0 -> 3588 bytes .../dff.context_storages.database.doctree | Bin 0 -> 59330 bytes .../apiref/dff.context_storages.json.doctree | Bin 0 -> 37358 bytes .../apiref/dff.context_storages.mongo.doctree | Bin 0 -> 34163 bytes .../dff.context_storages.pickle.doctree | Bin 0 -> 31868 bytes .../dff.context_storages.protocol.doctree | Bin 0 -> 9670 bytes .../apiref/dff.context_storages.redis.doctree | Bin 0 -> 29225 bytes .../dff.context_storages.shelve.doctree | Bin 0 -> 30903 bytes .../apiref/dff.context_storages.sql.doctree | Bin 0 -> 39797 bytes .../apiref/dff.context_storages.ydb.doctree | Bin 0 -> 39365 bytes .../dff.messengers.common.interface.doctree | Bin 0 -> 72380 bytes .../dff.messengers.common.types.doctree | Bin 0 -> 10282 bytes .../dff.messengers.telegram.interface.doctree | Bin 0 -> 55582 bytes .../dff.messengers.telegram.message.doctree | Bin 0 -> 59217 bytes .../dff.messengers.telegram.messenger.doctree | Bin 0 -> 59937 bytes .../dff.messengers.telegram.utils.doctree | Bin 0 -> 13822 bytes .../apiref/dff.pipeline.conditions.doctree | Bin 0 -> 46654 bytes .../dff.pipeline.pipeline.actor.doctree | Bin 0 -> 86856 bytes .../dff.pipeline.pipeline.component.doctree | Bin 0 -> 76123 bytes .../dff.pipeline.pipeline.pipeline.doctree | Bin 0 -> 128595 bytes .../dff.pipeline.pipeline.utils.doctree | Bin 0 -> 31507 bytes .../apiref/dff.pipeline.service.extra.doctree | Bin 0 -> 49316 bytes .../apiref/dff.pipeline.service.group.doctree | Bin 0 -> 53504 bytes .../dff.pipeline.service.service.doctree | Bin 0 -> 42991 bytes .../apiref/dff.pipeline.service.utils.doctree | Bin 0 -> 25137 bytes .doctrees/apiref/dff.pipeline.types.doctree | Bin 0 -> 263792 bytes ...f.script.conditions.std_conditions.doctree | Bin 0 -> 84676 bytes .../apiref/dff.script.core.context.doctree | Bin 0 -> 94650 bytes .../apiref/dff.script.core.keywords.doctree | Bin 0 -> 44796 bytes .../apiref/dff.script.core.message.doctree | Bin 0 -> 150305 bytes .../dff.script.core.normalization.doctree | Bin 0 -> 33179 bytes .../apiref/dff.script.core.script.doctree | Bin 0 -> 76340 bytes .../apiref/dff.script.core.types.doctree | Bin 0 -> 50386 bytes .../dff.script.extras.conditions.doctree | Bin 0 -> 3516 bytes .../apiref/dff.script.extras.slots.doctree | Bin 0 -> 3466 bytes .../dff.script.labels.std_labels.doctree | Bin 0 -> 63136 bytes ...dff.script.responses.std_responses.doctree | Bin 0 -> 8120 bytes .doctrees/apiref/dff.stats.cli.doctree | Bin 0 -> 21198 bytes .../dff.stats.default_extractors.doctree | Bin 0 -> 20153 bytes .../apiref/dff.stats.instrumentor.doctree | Bin 0 -> 31062 bytes .doctrees/apiref/dff.stats.utils.doctree | Bin 0 -> 42339 bytes ...ff.utils.db_benchmark.basic_config.doctree | Bin 0 -> 58557 bytes .../dff.utils.db_benchmark.benchmark.doctree | Bin 0 -> 116313 bytes .../dff.utils.db_benchmark.report.doctree | Bin 0 -> 12820 bytes .../dff.utils.testing.cleanup_db.doctree | Bin 0 -> 26065 bytes .../apiref/dff.utils.testing.common.doctree | Bin 0 -> 20774 bytes ...f.utils.testing.response_comparers.doctree | Bin 0 -> 10354 bytes .../apiref/dff.utils.testing.telegram.doctree | Bin 0 -> 52677 bytes .../dff.utils.testing.toy_script.doctree | Bin 0 -> 11203 bytes ...urn_caching.singleton_turn_caching.doctree | Bin 0 -> 14926 bytes .doctrees/apiref/index_caching.doctree | Bin 0 -> 5168 bytes .../apiref/index_context_storages.doctree | Bin 0 -> 21636 bytes .doctrees/apiref/index_db_benchmark.doctree | Bin 0 -> 7738 bytes .../apiref/index_messenger_interfaces.doctree | Bin 0 -> 13547 bytes .doctrees/apiref/index_pipeline.doctree | Bin 0 -> 23739 bytes .doctrees/apiref/index_script.doctree | Bin 0 -> 23538 bytes .doctrees/apiref/index_stats.doctree | Bin 0 -> 9238 bytes .doctrees/apiref/index_testing_utils.doctree | Bin 0 -> 10731 bytes .doctrees/community.doctree | Bin 0 -> 6602 bytes .doctrees/development.doctree | Bin 0 -> 6682 bytes .doctrees/environment.pickle | Bin 0 -> 6166746 bytes .doctrees/examples.doctree | Bin 0 -> 3144 bytes .doctrees/get_started.doctree | Bin 0 -> 13893 bytes .doctrees/index.doctree | Bin 0 -> 16502 bytes .../tutorials.context_storages.1_basics.ipynb | 132 + ...orials.context_storages.2_postgresql.ipynb | 165 + ...tutorials.context_storages.3_mongodb.ipynb | 163 + .../tutorials.context_storages.4_redis.ipynb | 162 + .../tutorials.context_storages.5_mysql.ipynb | 165 + .../tutorials.context_storages.6_sqlite.ipynb | 169 + ...s.context_storages.7_yandex_database.ipynb | 170 + ...s.context_storages.8_db_benchmarking.ipynb | 7231 +++++++++++++++++ ...utorials.messengers.telegram.1_basic.ipynb | 212 + ...orials.messengers.telegram.2_buttons.ipynb | 298 + ...ers.telegram.3_buttons_with_callback.ipynb | 287 + ...als.messengers.telegram.4_conditions.ipynb | 263 + ...ers.telegram.5_conditions_with_media.ipynb | 350 + ...sengers.telegram.6_conditions_extras.ipynb | 244 + ....messengers.telegram.7_polling_setup.ipynb | 170 + ....messengers.telegram.8_webhook_setup.ipynb | 167 + ...ssengers.web_api_interface.1_fastapi.ipynb | 233 + ...s.web_api_interface.2_websocket_chat.ipynb | 231 + ...interface.3_load_testing_with_locust.ipynb | 279 + ...s.web_api_interface.4_streamlit_chat.ipynb | 441 + .../tutorials.pipeline.1_basics.ipynb | 226 + ...s.pipeline.2_pre_and_post_processors.ipynb | 216 + ....3_pipeline_dict_with_services_basic.ipynb | 232 + ...e.3_pipeline_dict_with_services_full.ipynb | 302 + ...peline.4_groups_and_conditions_basic.ipynb | 260 + ...ipeline.4_groups_and_conditions_full.ipynb | 389 + ...ynchronous_groups_and_services_basic.ipynb | 188 + ...synchronous_groups_and_services_full.ipynb | 313 + ...ials.pipeline.6_extra_handlers_basic.ipynb | 258 + ...rials.pipeline.6_extra_handlers_full.ipynb | 392 + ...line.7_extra_handlers_and_extensions.ipynb | 287 + .../tutorials.script.core.1_basics.ipynb | 307 + .../tutorials.script.core.2_conditions.ipynb | 379 + .../tutorials.script.core.3_responses.ipynb | 364 + .../tutorials.script.core.4_transitions.ipynb | 483 ++ ...als.script.core.5_global_transitions.ipynb | 378 + ....script.core.6_context_serialization.ipynb | 239 + ...cript.core.7_pre_response_processing.ipynb | 709 ++ .../tutorials.script.core.8_misc.ipynb | 299 + ...pt.core.9_pre_transitions_processing.ipynb | 351 + .../tutorials.script.responses.1_basics.ipynb | 252 + ...tutorials.script.responses.2_buttons.ipynb | 394 + .../tutorials.script.responses.3_media.ipynb | 255 + ...als.script.responses.4_multi_message.ipynb | 283 + ...utorials.stats.1_extractor_functions.ipynb | 289 + ...torials.stats.2_pipeline_integration.ipynb | 274 + .../tutorials/tutorials.utils.1_cache.ipynb | 203 + .../tutorials.utils.2_lru_cache.ipynb | 201 + .doctrees/reference.doctree | Bin 0 -> 3086 bytes .doctrees/tutorials.doctree | Bin 0 -> 6975 bytes .../tutorials/index_context_storages.doctree | Bin 0 -> 3660 bytes .doctrees/tutorials/index_interfaces.doctree | Bin 0 -> 4632 bytes .doctrees/tutorials/index_pipeline.doctree | Bin 0 -> 3886 bytes .doctrees/tutorials/index_script.doctree | Bin 0 -> 4523 bytes .doctrees/tutorials/index_stats.doctree | Bin 0 -> 3260 bytes .doctrees/tutorials/index_utils.doctree | Bin 0 -> 3235 bytes ...utorials.context_storages.1_basics.doctree | Bin 0 -> 11844 bytes ...ials.context_storages.2_postgresql.doctree | Bin 0 -> 12990 bytes ...torials.context_storages.3_mongodb.doctree | Bin 0 -> 12675 bytes ...tutorials.context_storages.4_redis.doctree | Bin 0 -> 12485 bytes ...tutorials.context_storages.5_mysql.doctree | Bin 0 -> 12877 bytes ...utorials.context_storages.6_sqlite.doctree | Bin 0 -> 13358 bytes ...context_storages.7_yandex_database.doctree | Bin 0 -> 13383 bytes ...context_storages.8_db_benchmarking.doctree | Bin 0 -> 406847 bytes ...orials.messengers.telegram.1_basic.doctree | Bin 0 -> 13870 bytes ...ials.messengers.telegram.2_buttons.doctree | Bin 0 -> 19295 bytes ...s.telegram.3_buttons_with_callback.doctree | Bin 0 -> 19148 bytes ...s.messengers.telegram.4_conditions.doctree | Bin 0 -> 20134 bytes ...s.telegram.5_conditions_with_media.doctree | Bin 0 -> 20861 bytes ...ngers.telegram.6_conditions_extras.doctree | Bin 0 -> 18608 bytes ...essengers.telegram.7_polling_setup.doctree | Bin 0 -> 10967 bytes ...essengers.telegram.8_webhook_setup.doctree | Bin 0 -> 11086 bytes ...engers.web_api_interface.1_fastapi.doctree | Bin 0 -> 22614 bytes ...web_api_interface.2_websocket_chat.doctree | Bin 0 -> 15646 bytes ...terface.3_load_testing_with_locust.doctree | Bin 0 -> 18719 bytes ...web_api_interface.4_streamlit_chat.doctree | Bin 0 -> 28028 bytes .../tutorials.pipeline.1_basics.doctree | Bin 0 -> 18031 bytes ...pipeline.2_pre_and_post_processors.doctree | Bin 0 -> 18596 bytes ..._pipeline_dict_with_services_basic.doctree | Bin 0 -> 18041 bytes ...3_pipeline_dict_with_services_full.doctree | Bin 0 -> 29073 bytes ...line.4_groups_and_conditions_basic.doctree | Bin 0 -> 21977 bytes ...eline.4_groups_and_conditions_full.doctree | Bin 0 -> 42590 bytes ...chronous_groups_and_services_basic.doctree | Bin 0 -> 14556 bytes ...nchronous_groups_and_services_full.doctree | Bin 0 -> 22636 bytes ...ls.pipeline.6_extra_handlers_basic.doctree | Bin 0 -> 19547 bytes ...als.pipeline.6_extra_handlers_full.doctree | Bin 0 -> 42505 bytes ...ne.7_extra_handlers_and_extensions.doctree | Bin 0 -> 22812 bytes .../tutorials.script.core.1_basics.doctree | Bin 0 -> 27020 bytes ...tutorials.script.core.2_conditions.doctree | Bin 0 -> 37149 bytes .../tutorials.script.core.3_responses.doctree | Bin 0 -> 29981 bytes ...utorials.script.core.4_transitions.doctree | Bin 0 -> 45739 bytes ...s.script.core.5_global_transitions.doctree | Bin 0 -> 34970 bytes ...cript.core.6_context_serialization.doctree | Bin 0 -> 14024 bytes ...ipt.core.7_pre_response_processing.doctree | Bin 0 -> 204019 bytes .../tutorials.script.core.8_misc.doctree | Bin 0 -> 23595 bytes ....core.9_pre_transitions_processing.doctree | Bin 0 -> 67098 bytes ...utorials.script.responses.1_basics.doctree | Bin 0 -> 20178 bytes ...torials.script.responses.2_buttons.doctree | Bin 0 -> 33578 bytes ...tutorials.script.responses.3_media.doctree | Bin 0 -> 26057 bytes ...s.script.responses.4_multi_message.doctree | Bin 0 -> 25113 bytes ...orials.stats.1_extractor_functions.doctree | Bin 0 -> 25246 bytes ...rials.stats.2_pipeline_integration.doctree | Bin 0 -> 20939 bytes .../tutorials/tutorials.utils.1_cache.doctree | Bin 0 -> 13137 bytes .../tutorials.utils.2_lru_cache.doctree | Bin 0 -> 13403 bytes .doctrees/user_guides.doctree | Bin 0 -> 8160 bytes .../user_guides/basic_conceptions.doctree | Bin 0 -> 65413 bytes .doctrees/user_guides/context_guide.doctree | Bin 0 -> 56731 bytes .../user_guides/optimization_guide.doctree | Bin 0 -> 22530 bytes .doctrees/user_guides/superset_guide.doctree | Bin 0 -> 39161 bytes .nojekyll | 0 _images/annotations.png | Bin 0 -> 64834 bytes _images/benchmark_compare.png | Bin 0 -> 40604 bytes _images/benchmark_mass_compare.png | Bin 0 -> 84227 bytes _images/benchmark_sets.png | Bin 0 -> 68422 bytes _images/benchmark_view.png | Bin 0 -> 63389 bytes _images/databases.png | Bin 0 -> 94621 bytes _images/general_stats.png | Bin 0 -> 122816 bytes _images/overview.png | Bin 0 -> 152260 bytes _images/service_stats.png | Bin 0 -> 26817 bytes _images/user_actor.png | Bin 0 -> 72168 bytes _misc/benchmark_schema.json | 184 + _misc/benchmark_streamlit.py | 403 + _modules/dff/context_storages/database.html | 843 ++ _modules/dff/context_storages/json.html | 697 ++ _modules/dff/context_storages/mongo.html | 698 ++ _modules/dff/context_storages/pickle.html | 686 ++ _modules/dff/context_storages/protocol.html | 617 ++ _modules/dff/context_storages/redis.html | 673 ++ _modules/dff/context_storages/shelve.html | 652 ++ _modules/dff/context_storages/sql.html | 804 ++ _modules/dff/context_storages/ydb.html | 849 ++ _modules/dff/messengers/common/interface.html | 822 ++ .../dff/messengers/telegram/interface.html | 816 ++ _modules/dff/messengers/telegram/message.html | 703 ++ .../dff/messengers/telegram/messenger.html | 839 ++ _modules/dff/messengers/telegram/utils.html | 643 ++ _modules/dff/pipeline/conditions.html | 693 ++ _modules/dff/pipeline/pipeline/actor.html | 1031 +++ _modules/dff/pipeline/pipeline/component.html | 843 ++ _modules/dff/pipeline/pipeline/pipeline.html | 974 +++ _modules/dff/pipeline/pipeline/utils.html | 718 ++ _modules/dff/pipeline/service/extra.html | 806 ++ _modules/dff/pipeline/service/group.html | 850 ++ _modules/dff/pipeline/service/service.html | 825 ++ _modules/dff/pipeline/service/utils.html | 658 ++ _modules/dff/pipeline/types.html | 845 ++ .../dff/script/conditions/std_conditions.html | 839 ++ _modules/dff/script/core/context.html | 907 +++ _modules/dff/script/core/keywords.html | 683 ++ _modules/dff/script/core/message.html | 854 ++ _modules/dff/script/core/normalization.html | 724 ++ _modules/dff/script/core/script.html | 746 ++ _modules/dff/script/core/types.html | 696 ++ _modules/dff/script/labels/std_labels.html | 779 ++ .../dff/script/responses/std_responses.html | 612 ++ _modules/dff/stats/cli.html | 847 ++ _modules/dff/stats/default_extractors.html | 685 ++ _modules/dff/stats/instrumentor.html | 791 ++ _modules/dff/stats/utils.html | 803 ++ .../dff/utils/db_benchmark/basic_config.html | 819 ++ .../dff/utils/db_benchmark/benchmark.html | 1034 +++ _modules/dff/utils/db_benchmark/report.html | 646 ++ _modules/dff/utils/testing/cleanup_db.html | 713 ++ _modules/dff/utils/testing/common.html | 674 ++ .../dff/utils/testing/response_comparers.html | 603 ++ _modules/dff/utils/testing/telegram.html | 885 ++ .../turn_caching/singleton_turn_caching.html | 638 ++ _modules/index.html | 623 ++ _sources/about_us.rst.txt | 8 + .../dff.context_storages.database.rst.txt | 6 + .../apiref/dff.context_storages.json.rst.txt | 6 + .../apiref/dff.context_storages.mongo.rst.txt | 6 + .../dff.context_storages.pickle.rst.txt | 6 + .../dff.context_storages.protocol.rst.txt | 6 + .../apiref/dff.context_storages.redis.rst.txt | 6 + .../dff.context_storages.shelve.rst.txt | 6 + .../apiref/dff.context_storages.sql.rst.txt | 6 + .../apiref/dff.context_storages.ydb.rst.txt | 6 + .../dff.messengers.common.interface.rst.txt | 6 + .../dff.messengers.common.types.rst.txt | 6 + .../dff.messengers.telegram.interface.rst.txt | 6 + .../dff.messengers.telegram.message.rst.txt | 6 + .../dff.messengers.telegram.messenger.rst.txt | 6 + .../dff.messengers.telegram.utils.rst.txt | 6 + .../apiref/dff.pipeline.conditions.rst.txt | 6 + .../dff.pipeline.pipeline.actor.rst.txt | 6 + .../dff.pipeline.pipeline.component.rst.txt | 6 + .../dff.pipeline.pipeline.pipeline.rst.txt | 6 + .../dff.pipeline.pipeline.utils.rst.txt | 6 + .../apiref/dff.pipeline.service.extra.rst.txt | 6 + .../apiref/dff.pipeline.service.group.rst.txt | 6 + .../dff.pipeline.service.service.rst.txt | 6 + .../apiref/dff.pipeline.service.utils.rst.txt | 6 + _sources/apiref/dff.pipeline.types.rst.txt | 6 + ...f.script.conditions.std_conditions.rst.txt | 6 + .../apiref/dff.script.core.context.rst.txt | 6 + .../apiref/dff.script.core.keywords.rst.txt | 6 + .../apiref/dff.script.core.message.rst.txt | 6 + .../dff.script.core.normalization.rst.txt | 6 + .../apiref/dff.script.core.script.rst.txt | 6 + _sources/apiref/dff.script.core.types.rst.txt | 6 + .../dff.script.extras.conditions.rst.txt | 12 + .../apiref/dff.script.extras.slots.rst.txt | 12 + .../dff.script.labels.std_labels.rst.txt | 6 + ...dff.script.responses.std_responses.rst.txt | 6 + _sources/apiref/dff.stats.cli.rst.txt | 6 + .../dff.stats.default_extractors.rst.txt | 6 + .../apiref/dff.stats.instrumentor.rst.txt | 6 + _sources/apiref/dff.stats.utils.rst.txt | 6 + ...ff.utils.db_benchmark.basic_config.rst.txt | 6 + .../dff.utils.db_benchmark.benchmark.rst.txt | 6 + .../dff.utils.db_benchmark.report.rst.txt | 6 + .../dff.utils.testing.cleanup_db.rst.txt | 6 + .../apiref/dff.utils.testing.common.rst.txt | 6 + ...f.utils.testing.response_comparers.rst.txt | 6 + .../apiref/dff.utils.testing.telegram.rst.txt | 6 + .../dff.utils.testing.toy_script.rst.txt | 6 + ...urn_caching.singleton_turn_caching.rst.txt | 6 + _sources/apiref/index_caching.rst.txt | 11 + .../apiref/index_context_storages.rst.txt | 19 + _sources/apiref/index_db_benchmark.rst.txt | 13 + .../apiref/index_messenger_interfaces.rst.txt | 16 + _sources/apiref/index_pipeline.rst.txt | 20 + _sources/apiref/index_script.rst.txt | 21 + _sources/apiref/index_stats.rst.txt | 14 + _sources/apiref/index_testing_utils.rst.txt | 15 + _sources/community.rst.txt | 21 + _sources/development.rst.txt | 23 + _sources/examples.rst.txt | 4 + _sources/get_started.rst.txt | 74 + _sources/index.rst.txt | 97 + _sources/reference.rst.txt | 9 + _sources/tutorials.rst.txt | 30 + .../tutorials/index_context_storages.rst.txt | 16 + _sources/tutorials/index_interfaces.rst.txt | 28 + _sources/tutorials/index_pipeline.rst.txt | 19 + _sources/tutorials/index_script.rst.txt | 29 + _sources/tutorials/index_stats.rst.txt | 10 + _sources/tutorials/index_utils.rst.txt | 10 + ...tutorials.context_storages.1_basics.py.txt | 42 + ...rials.context_storages.2_postgresql.py.txt | 47 + ...utorials.context_storages.3_mongodb.py.txt | 45 + .../tutorials.context_storages.4_redis.py.txt | 44 + .../tutorials.context_storages.5_mysql.py.txt | 47 + ...tutorials.context_storages.6_sqlite.py.txt | 51 + ....context_storages.7_yandex_database.py.txt | 52 + ....context_storages.8_db_benchmarking.py.txt | 241 + ...torials.messengers.telegram.1_basic.py.txt | 92 + ...rials.messengers.telegram.2_buttons.py.txt | 192 + ...rs.telegram.3_buttons_with_callback.py.txt | 181 + ...ls.messengers.telegram.4_conditions.py.txt | 143 + ...rs.telegram.5_conditions_with_media.py.txt | 204 + ...engers.telegram.6_conditions_extras.py.txt | 124 + ...messengers.telegram.7_polling_setup.py.txt | 64 + ...messengers.telegram.8_webhook_setup.py.txt | 61 + ...sengers.web_api_interface.1_fastapi.py.txt | 113 + ....web_api_interface.2_websocket_chat.py.txt | 116 + ...nterface.3_load_testing_with_locust.py.txt | 150 + ....web_api_interface.4_streamlit_chat.py.txt | 188 + .../tutorials.pipeline.1_basics.py.txt | 84 + ....pipeline.2_pre_and_post_processors.py.txt | 95 + ...3_pipeline_dict_with_services_basic.py.txt | 97 + ....3_pipeline_dict_with_services_full.py.txt | 167 + ...eline.4_groups_and_conditions_basic.py.txt | 125 + ...peline.4_groups_and_conditions_full.py.txt | 214 + ...nchronous_groups_and_services_basic.py.txt | 65 + ...ynchronous_groups_and_services_full.py.txt | 153 + ...als.pipeline.6_extra_handlers_basic.py.txt | 123 + ...ials.pipeline.6_extra_handlers_full.py.txt | 192 + ...ine.7_extra_handlers_and_extensions.py.txt | 144 + .../tutorials.script.core.1_basics.py.txt | 167 + .../tutorials.script.core.2_conditions.py.txt | 228 + .../tutorials.script.core.3_responses.py.txt | 213 + ...tutorials.script.core.4_transitions.py.txt | 309 + ...ls.script.core.5_global_transitions.py.txt | 221 + ...script.core.6_context_serialization.py.txt | 89 + ...ript.core.7_pre_response_processing.py.txt | 135 + .../tutorials.script.core.8_misc.py.txt | 167 + ...t.core.9_pre_transitions_processing.py.txt | 106 + ...tutorials.script.responses.1_basics.py.txt | 110 + ...utorials.script.responses.2_buttons.py.txt | 259 + .../tutorials.script.responses.3_media.py.txt | 127 + ...ls.script.responses.4_multi_message.py.txt | 149 + ...torials.stats.1_extractor_functions.py.txt | 136 + ...orials.stats.2_pipeline_integration.py.txt | 136 + .../tutorials/tutorials.utils.1_cache.py.txt | 77 + .../tutorials.utils.2_lru_cache.py.txt | 75 + _sources/user_guides.rst.txt | 39 + .../user_guides/basic_conceptions.rst.txt | 388 + _sources/user_guides/context_guide.rst.txt | 250 + .../user_guides/optimization_guide.rst.txt | 107 + _sources/user_guides/superset_guide.rst.txt | 191 + _static/auto-render.min.js | 1 + _static/basic.css | 925 +++ _static/binder_badge_logo.svg | 1 + _static/broken_example.png | Bin 0 -> 21404 bytes _static/check-solid.svg | 4 + _static/clipboard.min.js | 7 + _static/copy-button.svg | 5 + _static/copybutton.css | 94 + _static/copybutton.js | 248 + _static/copybutton_funcs.js | 73 + _static/css/custom.css | 45 + _static/doctools.js | 156 + _static/documentation_options.js | 13 + _static/drawio/dfe/user_actor.png | Bin 0 -> 72168 bytes _static/file.png | Bin 0 -> 286 bytes _static/images/additional_stats.png | Bin 0 -> 31560 bytes _static/images/annotations.png | Bin 0 -> 64834 bytes _static/images/benchmark_compare.png | Bin 0 -> 40604 bytes _static/images/benchmark_mass_compare.png | Bin 0 -> 84227 bytes _static/images/benchmark_sets.png | Bin 0 -> 68422 bytes _static/images/benchmark_view.png | Bin 0 -> 63389 bytes _static/images/databases.png | Bin 0 -> 94621 bytes _static/images/general_stats.png | Bin 0 -> 122816 bytes _static/images/logo-colab.svg | 24 + _static/images/logo-deeppavlov.svg | 22 + _static/images/logo-dff.svg | 39 + _static/images/logo-download.svg | 10 + _static/images/logo-github.svg | 15 + _static/images/logo-simple.svg | 39 + _static/images/overview.png | Bin 0 -> 152260 bytes _static/images/service_stats.png | Bin 0 -> 26817 bytes _static/jupyterlite_badge_logo.svg | 3 + _static/katex-math.css | 50 + _static/katex.min.js | 1 + _static/katex_autorenderer.js | 10 + _static/language_data.js | 199 + _static/logo-simple.svg | 39 + _static/minus.png | Bin 0 -> 90 bytes _static/nbsphinx-broken-thumbnail.svg | 9 + _static/nbsphinx-code-cells.css | 259 + _static/nbsphinx-gallery.css | 31 + _static/nbsphinx-no-thumbnail.svg | 9 + _static/no_image.png | Bin 0 -> 4315 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 152 + _static/scripts/bootstrap.js | 3 + _static/scripts/bootstrap.js.LICENSE.txt | 5 + _static/scripts/bootstrap.js.map | 1 + _static/scripts/pydata-sphinx-theme.js | 2 + _static/scripts/pydata-sphinx-theme.js.map | 1 + _static/searchtools.js | 574 ++ _static/sg_gallery-binder.css | 11 + _static/sg_gallery-dataframe.css | 47 + _static/sg_gallery-rendered-html.css | 224 + _static/sg_gallery.css | 342 + _static/sphinx_highlight.js | 154 + _static/styles/bootstrap.css | 6 + _static/styles/pydata-sphinx-theme.css | 1 + _static/styles/theme.css | 2 + _static/vendor/fontawesome/6.1.2/LICENSE.txt | 165 + .../vendor/fontawesome/6.1.2/css/all.min.css | 5 + .../vendor/fontawesome/6.1.2/js/all.min.js | 2 + .../6.1.2/js/all.min.js.LICENSE.txt | 5 + .../6.1.2/webfonts/fa-brands-400.ttf | Bin 0 -> 181264 bytes .../6.1.2/webfonts/fa-brands-400.woff2 | Bin 0 -> 105112 bytes .../6.1.2/webfonts/fa-regular-400.ttf | Bin 0 -> 60236 bytes .../6.1.2/webfonts/fa-regular-400.woff2 | Bin 0 -> 24028 bytes .../6.1.2/webfonts/fa-solid-900.ttf | Bin 0 -> 389948 bytes .../6.1.2/webfonts/fa-solid-900.woff2 | Bin 0 -> 154840 bytes .../6.1.2/webfonts/fa-v4compatibility.ttf | Bin 0 -> 10084 bytes .../6.1.2/webfonts/fa-v4compatibility.woff2 | Bin 0 -> 4776 bytes _static/webpack-macros.html | 31 + about_us.html | 593 ++ apiref/dff.context_storages.database.html | 1134 +++ apiref/dff.context_storages.json.html | 1045 +++ apiref/dff.context_storages.mongo.html | 1031 +++ apiref/dff.context_storages.pickle.html | 1027 +++ apiref/dff.context_storages.protocol.html | 931 +++ apiref/dff.context_storages.redis.html | 1017 +++ apiref/dff.context_storages.shelve.html | 1017 +++ apiref/dff.context_storages.sql.html | 1057 +++ apiref/dff.context_storages.ydb.html | 1042 +++ apiref/dff.messengers.common.interface.html | 1142 +++ apiref/dff.messengers.common.types.html | 929 +++ apiref/dff.messengers.telegram.interface.html | 1049 +++ apiref/dff.messengers.telegram.message.html | 1070 +++ apiref/dff.messengers.telegram.messenger.html | 1086 +++ apiref/dff.messengers.telegram.utils.html | 946 +++ apiref/dff.pipeline.conditions.html | 1012 +++ apiref/dff.pipeline.pipeline.actor.html | 1131 +++ apiref/dff.pipeline.pipeline.component.html | 1141 +++ apiref/dff.pipeline.pipeline.pipeline.html | 1151 +++ apiref/dff.pipeline.pipeline.utils.html | 994 +++ apiref/dff.pipeline.service.extra.html | 1049 +++ apiref/dff.pipeline.service.group.html | 1061 +++ apiref/dff.pipeline.service.service.html | 1042 +++ apiref/dff.pipeline.service.utils.html | 975 +++ apiref/dff.pipeline.types.html | 1413 ++++ .../dff.script.conditions.std_conditions.html | 1115 +++ apiref/dff.script.core.context.html | 1197 +++ apiref/dff.script.core.keywords.html | 1054 +++ apiref/dff.script.core.message.html | 1388 ++++ apiref/dff.script.core.normalization.html | 991 +++ apiref/dff.script.core.script.html | 1093 +++ apiref/dff.script.core.types.html | 1072 +++ apiref/dff.script.extras.conditions.html | 910 +++ apiref/dff.script.extras.slots.html | 910 +++ apiref/dff.script.labels.std_labels.html | 1065 +++ .../dff.script.responses.std_responses.html | 926 +++ apiref/dff.stats.cli.html | 993 +++ apiref/dff.stats.default_extractors.html | 966 +++ apiref/dff.stats.instrumentor.html | 1008 +++ apiref/dff.stats.utils.html | 1036 +++ .../dff.utils.db_benchmark.basic_config.html | 1094 +++ apiref/dff.utils.db_benchmark.benchmark.html | 1248 +++ apiref/dff.utils.db_benchmark.report.html | 937 +++ apiref/dff.utils.testing.cleanup_db.html | 994 +++ apiref/dff.utils.testing.common.html | 959 +++ .../dff.utils.testing.response_comparers.html | 931 +++ apiref/dff.utils.testing.telegram.html | 1056 +++ apiref/dff.utils.testing.toy_script.html | 959 +++ ...s.turn_caching.singleton_turn_caching.html | 946 +++ apiref/index_caching.html | 881 ++ apiref/index_context_storages.html | 929 +++ apiref/index_db_benchmark.html | 887 ++ apiref/index_messenger_interfaces.html | 902 ++ apiref/index_pipeline.html | 938 +++ apiref/index_script.html | 935 +++ apiref/index_stats.html | 894 ++ apiref/index_testing_utils.html | 895 ++ community.html | 613 ++ development.html | 637 ++ examples.html | 601 ++ genindex.html | 2398 ++++++ get_started.html | 676 ++ index.html | 656 ++ objects.inv | Bin 0 -> 20640 bytes py-modindex.html | 816 ++ reference.html | 883 ++ search.html | 580 ++ searchindex.js | 1 + tutorials.html | 811 ++ tutorials/index_context_storages.html | 744 ++ tutorials/index_interfaces.html | 791 ++ tutorials/index_pipeline.html | 741 ++ tutorials/index_script.html | 782 ++ tutorials/index_stats.html | 696 ++ tutorials/index_utils.html | 696 ++ .../tutorials.context_storages.1_basics.html | 793 ++ .../tutorials.context_storages.1_basics.ipynb | 132 + ...torials.context_storages.2_postgresql.html | 804 ++ ...orials.context_storages.2_postgresql.ipynb | 165 + .../tutorials.context_storages.3_mongodb.html | 803 ++ ...tutorials.context_storages.3_mongodb.ipynb | 163 + .../tutorials.context_storages.4_redis.html | 802 ++ .../tutorials.context_storages.4_redis.ipynb | 162 + .../tutorials.context_storages.5_mysql.html | 804 ++ .../tutorials.context_storages.5_mysql.ipynb | 165 + .../tutorials.context_storages.6_sqlite.html | 807 ++ .../tutorials.context_storages.6_sqlite.ipynb | 169 + ...ls.context_storages.7_yandex_database.html | 810 ++ ...s.context_storages.7_yandex_database.ipynb | 170 + ...ls.context_storages.8_db_benchmarking.html | 1107 +++ ...s.context_storages.8_db_benchmarking.ipynb | 7231 +++++++++++++++++ ...tutorials.messengers.telegram.1_basic.html | 824 ++ ...utorials.messengers.telegram.1_basic.ipynb | 212 + ...torials.messengers.telegram.2_buttons.html | 920 +++ ...orials.messengers.telegram.2_buttons.ipynb | 298 + ...gers.telegram.3_buttons_with_callback.html | 906 +++ ...ers.telegram.3_buttons_with_callback.ipynb | 287 + ...ials.messengers.telegram.4_conditions.html | 875 ++ ...als.messengers.telegram.4_conditions.ipynb | 263 + ...gers.telegram.5_conditions_with_media.html | 948 +++ ...ers.telegram.5_conditions_with_media.ipynb | 350 + ...ssengers.telegram.6_conditions_extras.html | 857 ++ ...sengers.telegram.6_conditions_extras.ipynb | 244 + ...s.messengers.telegram.7_polling_setup.html | 802 ++ ....messengers.telegram.7_polling_setup.ipynb | 170 + ...s.messengers.telegram.8_webhook_setup.html | 796 ++ ....messengers.telegram.8_webhook_setup.ipynb | 167 + ...essengers.web_api_interface.1_fastapi.html | 838 ++ ...ssengers.web_api_interface.1_fastapi.ipynb | 233 + ...rs.web_api_interface.2_websocket_chat.html | 857 ++ ...s.web_api_interface.2_websocket_chat.ipynb | 231 + ..._interface.3_load_testing_with_locust.html | 917 +++ ...interface.3_load_testing_with_locust.ipynb | 279 + ...rs.web_api_interface.4_streamlit_chat.html | 986 +++ ...s.web_api_interface.4_streamlit_chat.ipynb | 441 + tutorials/tutorials.pipeline.1_basics.html | 824 ++ tutorials/tutorials.pipeline.1_basics.ipynb | 226 + ...ls.pipeline.2_pre_and_post_processors.html | 837 ++ ...s.pipeline.2_pre_and_post_processors.ipynb | 216 + ...e.3_pipeline_dict_with_services_basic.html | 839 ++ ....3_pipeline_dict_with_services_basic.ipynb | 232 + ...ne.3_pipeline_dict_with_services_full.html | 895 ++ ...e.3_pipeline_dict_with_services_full.ipynb | 302 + ...ipeline.4_groups_and_conditions_basic.html | 860 ++ ...peline.4_groups_and_conditions_basic.ipynb | 260 + ...pipeline.4_groups_and_conditions_full.html | 933 +++ ...ipeline.4_groups_and_conditions_full.ipynb | 389 + ...synchronous_groups_and_services_basic.html | 811 ++ ...ynchronous_groups_and_services_basic.ipynb | 188 + ...asynchronous_groups_and_services_full.html | 875 ++ ...synchronous_groups_and_services_full.ipynb | 313 + ...rials.pipeline.6_extra_handlers_basic.html | 871 ++ ...ials.pipeline.6_extra_handlers_basic.ipynb | 258 + ...orials.pipeline.6_extra_handlers_full.html | 994 +++ ...rials.pipeline.6_extra_handlers_full.ipynb | 392 + ...eline.7_extra_handlers_and_extensions.html | 885 ++ ...line.7_extra_handlers_and_extensions.ipynb | 287 + tutorials/tutorials.script.core.1_basics.html | 906 +++ .../tutorials.script.core.1_basics.ipynb | 307 + .../tutorials.script.core.2_conditions.html | 983 +++ .../tutorials.script.core.2_conditions.ipynb | 379 + .../tutorials.script.core.3_responses.html | 987 +++ .../tutorials.script.core.3_responses.ipynb | 364 + .../tutorials.script.core.4_transitions.html | 1076 +++ .../tutorials.script.core.4_transitions.ipynb | 483 ++ ...ials.script.core.5_global_transitions.html | 1004 +++ ...als.script.core.5_global_transitions.ipynb | 378 + ...s.script.core.6_context_serialization.html | 847 ++ ....script.core.6_context_serialization.ipynb | 239 + ...script.core.7_pre_response_processing.html | 1222 +++ ...cript.core.7_pre_response_processing.ipynb | 709 ++ tutorials/tutorials.script.core.8_misc.html | 932 +++ tutorials/tutorials.script.core.8_misc.ipynb | 299 + ...ipt.core.9_pre_transitions_processing.html | 960 +++ ...pt.core.9_pre_transitions_processing.ipynb | 351 + .../tutorials.script.responses.1_basics.html | 885 ++ .../tutorials.script.responses.1_basics.ipynb | 252 + .../tutorials.script.responses.2_buttons.html | 1026 +++ ...tutorials.script.responses.2_buttons.ipynb | 394 + .../tutorials.script.responses.3_media.html | 888 ++ .../tutorials.script.responses.3_media.ipynb | 255 + ...ials.script.responses.4_multi_message.html | 925 +++ ...als.script.responses.4_multi_message.ipynb | 283 + ...tutorials.stats.1_extractor_functions.html | 859 ++ ...utorials.stats.1_extractor_functions.ipynb | 289 + ...utorials.stats.2_pipeline_integration.html | 881 ++ ...torials.stats.2_pipeline_integration.ipynb | 274 + tutorials/tutorials.utils.1_cache.html | 833 ++ tutorials/tutorials.utils.1_cache.ipynb | 203 + tutorials/tutorials.utils.2_lru_cache.html | 831 ++ tutorials/tutorials.utils.2_lru_cache.ipynb | 201 + user_guides.html | 662 ++ user_guides/basic_conceptions.html | 994 +++ user_guides/context_guide.html | 859 ++ user_guides/optimization_guide.html | 730 ++ user_guides/superset_guide.html | 813 ++ 606 files changed, 207798 insertions(+) create mode 100644 .buildinfo create mode 100644 .doctrees/about_us.doctree create mode 100644 .doctrees/apiref/dff.context_storages.database.doctree create mode 100644 .doctrees/apiref/dff.context_storages.json.doctree create mode 100644 .doctrees/apiref/dff.context_storages.mongo.doctree create mode 100644 .doctrees/apiref/dff.context_storages.pickle.doctree create mode 100644 .doctrees/apiref/dff.context_storages.protocol.doctree create mode 100644 .doctrees/apiref/dff.context_storages.redis.doctree create mode 100644 .doctrees/apiref/dff.context_storages.shelve.doctree create mode 100644 .doctrees/apiref/dff.context_storages.sql.doctree create mode 100644 .doctrees/apiref/dff.context_storages.ydb.doctree create mode 100644 .doctrees/apiref/dff.messengers.common.interface.doctree create mode 100644 .doctrees/apiref/dff.messengers.common.types.doctree create mode 100644 .doctrees/apiref/dff.messengers.telegram.interface.doctree create mode 100644 .doctrees/apiref/dff.messengers.telegram.message.doctree create mode 100644 .doctrees/apiref/dff.messengers.telegram.messenger.doctree create mode 100644 .doctrees/apiref/dff.messengers.telegram.utils.doctree create mode 100644 .doctrees/apiref/dff.pipeline.conditions.doctree create mode 100644 .doctrees/apiref/dff.pipeline.pipeline.actor.doctree create mode 100644 .doctrees/apiref/dff.pipeline.pipeline.component.doctree create mode 100644 .doctrees/apiref/dff.pipeline.pipeline.pipeline.doctree create mode 100644 .doctrees/apiref/dff.pipeline.pipeline.utils.doctree create mode 100644 .doctrees/apiref/dff.pipeline.service.extra.doctree create mode 100644 .doctrees/apiref/dff.pipeline.service.group.doctree create mode 100644 .doctrees/apiref/dff.pipeline.service.service.doctree create mode 100644 .doctrees/apiref/dff.pipeline.service.utils.doctree create mode 100644 .doctrees/apiref/dff.pipeline.types.doctree create mode 100644 .doctrees/apiref/dff.script.conditions.std_conditions.doctree create mode 100644 .doctrees/apiref/dff.script.core.context.doctree create mode 100644 .doctrees/apiref/dff.script.core.keywords.doctree create mode 100644 .doctrees/apiref/dff.script.core.message.doctree create mode 100644 .doctrees/apiref/dff.script.core.normalization.doctree create mode 100644 .doctrees/apiref/dff.script.core.script.doctree create mode 100644 .doctrees/apiref/dff.script.core.types.doctree create mode 100644 .doctrees/apiref/dff.script.extras.conditions.doctree create mode 100644 .doctrees/apiref/dff.script.extras.slots.doctree create mode 100644 .doctrees/apiref/dff.script.labels.std_labels.doctree create mode 100644 .doctrees/apiref/dff.script.responses.std_responses.doctree create mode 100644 .doctrees/apiref/dff.stats.cli.doctree create mode 100644 .doctrees/apiref/dff.stats.default_extractors.doctree create mode 100644 .doctrees/apiref/dff.stats.instrumentor.doctree create mode 100644 .doctrees/apiref/dff.stats.utils.doctree create mode 100644 .doctrees/apiref/dff.utils.db_benchmark.basic_config.doctree create mode 100644 .doctrees/apiref/dff.utils.db_benchmark.benchmark.doctree create mode 100644 .doctrees/apiref/dff.utils.db_benchmark.report.doctree create mode 100644 .doctrees/apiref/dff.utils.testing.cleanup_db.doctree create mode 100644 .doctrees/apiref/dff.utils.testing.common.doctree create mode 100644 .doctrees/apiref/dff.utils.testing.response_comparers.doctree create mode 100644 .doctrees/apiref/dff.utils.testing.telegram.doctree create mode 100644 .doctrees/apiref/dff.utils.testing.toy_script.doctree create mode 100644 .doctrees/apiref/dff.utils.turn_caching.singleton_turn_caching.doctree create mode 100644 .doctrees/apiref/index_caching.doctree create mode 100644 .doctrees/apiref/index_context_storages.doctree create mode 100644 .doctrees/apiref/index_db_benchmark.doctree create mode 100644 .doctrees/apiref/index_messenger_interfaces.doctree create mode 100644 .doctrees/apiref/index_pipeline.doctree create mode 100644 .doctrees/apiref/index_script.doctree create mode 100644 .doctrees/apiref/index_stats.doctree create mode 100644 .doctrees/apiref/index_testing_utils.doctree create mode 100644 .doctrees/community.doctree create mode 100644 .doctrees/development.doctree create mode 100644 .doctrees/environment.pickle create mode 100644 .doctrees/examples.doctree create mode 100644 .doctrees/get_started.doctree create mode 100644 .doctrees/index.doctree create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.1_basics.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.2_postgresql.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.3_mongodb.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.4_redis.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.5_mysql.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.6_sqlite.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.7_yandex_database.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.context_storages.8_db_benchmarking.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.1_basic.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.2_buttons.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.4_conditions.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.5_conditions_with_media.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.6_conditions_extras.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.7_polling_setup.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.telegram.8_webhook_setup.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.1_fastapi.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.1_basics.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.2_pre_and_post_processors.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_full.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_basic.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_full.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.1_basics.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.2_conditions.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.3_responses.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.4_transitions.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.5_global_transitions.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.6_context_serialization.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.7_pre_response_processing.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.8_misc.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.core.9_pre_transitions_processing.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.responses.1_basics.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.responses.2_buttons.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.responses.3_media.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.script.responses.4_multi_message.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.stats.1_extractor_functions.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.stats.2_pipeline_integration.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.utils.1_cache.ipynb create mode 100644 .doctrees/nbsphinx/tutorials/tutorials.utils.2_lru_cache.ipynb create mode 100644 .doctrees/reference.doctree create mode 100644 .doctrees/tutorials.doctree create mode 100644 .doctrees/tutorials/index_context_storages.doctree create mode 100644 .doctrees/tutorials/index_interfaces.doctree create mode 100644 .doctrees/tutorials/index_pipeline.doctree create mode 100644 .doctrees/tutorials/index_script.doctree create mode 100644 .doctrees/tutorials/index_stats.doctree create mode 100644 .doctrees/tutorials/index_utils.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.1_basics.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.2_postgresql.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.3_mongodb.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.4_redis.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.5_mysql.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.6_sqlite.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.7_yandex_database.doctree create mode 100644 .doctrees/tutorials/tutorials.context_storages.8_db_benchmarking.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.1_basic.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.2_buttons.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.4_conditions.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.5_conditions_with_media.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.6_conditions_extras.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.7_polling_setup.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.telegram.8_webhook_setup.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.web_api_interface.1_fastapi.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.doctree create mode 100644 .doctrees/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.1_basics.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.2_pre_and_post_processors.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.4_groups_and_conditions_full.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.6_extra_handlers_basic.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.6_extra_handlers_full.doctree create mode 100644 .doctrees/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.1_basics.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.2_conditions.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.3_responses.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.4_transitions.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.5_global_transitions.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.6_context_serialization.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.7_pre_response_processing.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.8_misc.doctree create mode 100644 .doctrees/tutorials/tutorials.script.core.9_pre_transitions_processing.doctree create mode 100644 .doctrees/tutorials/tutorials.script.responses.1_basics.doctree create mode 100644 .doctrees/tutorials/tutorials.script.responses.2_buttons.doctree create mode 100644 .doctrees/tutorials/tutorials.script.responses.3_media.doctree create mode 100644 .doctrees/tutorials/tutorials.script.responses.4_multi_message.doctree create mode 100644 .doctrees/tutorials/tutorials.stats.1_extractor_functions.doctree create mode 100644 .doctrees/tutorials/tutorials.stats.2_pipeline_integration.doctree create mode 100644 .doctrees/tutorials/tutorials.utils.1_cache.doctree create mode 100644 .doctrees/tutorials/tutorials.utils.2_lru_cache.doctree create mode 100644 .doctrees/user_guides.doctree create mode 100644 .doctrees/user_guides/basic_conceptions.doctree create mode 100644 .doctrees/user_guides/context_guide.doctree create mode 100644 .doctrees/user_guides/optimization_guide.doctree create mode 100644 .doctrees/user_guides/superset_guide.doctree create mode 100644 .nojekyll create mode 100644 _images/annotations.png create mode 100644 _images/benchmark_compare.png create mode 100644 _images/benchmark_mass_compare.png create mode 100644 _images/benchmark_sets.png create mode 100644 _images/benchmark_view.png create mode 100644 _images/databases.png create mode 100644 _images/general_stats.png create mode 100644 _images/overview.png create mode 100644 _images/service_stats.png create mode 100644 _images/user_actor.png create mode 100644 _misc/benchmark_schema.json create mode 100644 _misc/benchmark_streamlit.py create mode 100644 _modules/dff/context_storages/database.html create mode 100644 _modules/dff/context_storages/json.html create mode 100644 _modules/dff/context_storages/mongo.html create mode 100644 _modules/dff/context_storages/pickle.html create mode 100644 _modules/dff/context_storages/protocol.html create mode 100644 _modules/dff/context_storages/redis.html create mode 100644 _modules/dff/context_storages/shelve.html create mode 100644 _modules/dff/context_storages/sql.html create mode 100644 _modules/dff/context_storages/ydb.html create mode 100644 _modules/dff/messengers/common/interface.html create mode 100644 _modules/dff/messengers/telegram/interface.html create mode 100644 _modules/dff/messengers/telegram/message.html create mode 100644 _modules/dff/messengers/telegram/messenger.html create mode 100644 _modules/dff/messengers/telegram/utils.html create mode 100644 _modules/dff/pipeline/conditions.html create mode 100644 _modules/dff/pipeline/pipeline/actor.html create mode 100644 _modules/dff/pipeline/pipeline/component.html create mode 100644 _modules/dff/pipeline/pipeline/pipeline.html create mode 100644 _modules/dff/pipeline/pipeline/utils.html create mode 100644 _modules/dff/pipeline/service/extra.html create mode 100644 _modules/dff/pipeline/service/group.html create mode 100644 _modules/dff/pipeline/service/service.html create mode 100644 _modules/dff/pipeline/service/utils.html create mode 100644 _modules/dff/pipeline/types.html create mode 100644 _modules/dff/script/conditions/std_conditions.html create mode 100644 _modules/dff/script/core/context.html create mode 100644 _modules/dff/script/core/keywords.html create mode 100644 _modules/dff/script/core/message.html create mode 100644 _modules/dff/script/core/normalization.html create mode 100644 _modules/dff/script/core/script.html create mode 100644 _modules/dff/script/core/types.html create mode 100644 _modules/dff/script/labels/std_labels.html create mode 100644 _modules/dff/script/responses/std_responses.html create mode 100644 _modules/dff/stats/cli.html create mode 100644 _modules/dff/stats/default_extractors.html create mode 100644 _modules/dff/stats/instrumentor.html create mode 100644 _modules/dff/stats/utils.html create mode 100644 _modules/dff/utils/db_benchmark/basic_config.html create mode 100644 _modules/dff/utils/db_benchmark/benchmark.html create mode 100644 _modules/dff/utils/db_benchmark/report.html create mode 100644 _modules/dff/utils/testing/cleanup_db.html create mode 100644 _modules/dff/utils/testing/common.html create mode 100644 _modules/dff/utils/testing/response_comparers.html create mode 100644 _modules/dff/utils/testing/telegram.html create mode 100644 _modules/dff/utils/turn_caching/singleton_turn_caching.html create mode 100644 _modules/index.html create mode 100644 _sources/about_us.rst.txt create mode 100644 _sources/apiref/dff.context_storages.database.rst.txt create mode 100644 _sources/apiref/dff.context_storages.json.rst.txt create mode 100644 _sources/apiref/dff.context_storages.mongo.rst.txt create mode 100644 _sources/apiref/dff.context_storages.pickle.rst.txt create mode 100644 _sources/apiref/dff.context_storages.protocol.rst.txt create mode 100644 _sources/apiref/dff.context_storages.redis.rst.txt create mode 100644 _sources/apiref/dff.context_storages.shelve.rst.txt create mode 100644 _sources/apiref/dff.context_storages.sql.rst.txt create mode 100644 _sources/apiref/dff.context_storages.ydb.rst.txt create mode 100644 _sources/apiref/dff.messengers.common.interface.rst.txt create mode 100644 _sources/apiref/dff.messengers.common.types.rst.txt create mode 100644 _sources/apiref/dff.messengers.telegram.interface.rst.txt create mode 100644 _sources/apiref/dff.messengers.telegram.message.rst.txt create mode 100644 _sources/apiref/dff.messengers.telegram.messenger.rst.txt create mode 100644 _sources/apiref/dff.messengers.telegram.utils.rst.txt create mode 100644 _sources/apiref/dff.pipeline.conditions.rst.txt create mode 100644 _sources/apiref/dff.pipeline.pipeline.actor.rst.txt create mode 100644 _sources/apiref/dff.pipeline.pipeline.component.rst.txt create mode 100644 _sources/apiref/dff.pipeline.pipeline.pipeline.rst.txt create mode 100644 _sources/apiref/dff.pipeline.pipeline.utils.rst.txt create mode 100644 _sources/apiref/dff.pipeline.service.extra.rst.txt create mode 100644 _sources/apiref/dff.pipeline.service.group.rst.txt create mode 100644 _sources/apiref/dff.pipeline.service.service.rst.txt create mode 100644 _sources/apiref/dff.pipeline.service.utils.rst.txt create mode 100644 _sources/apiref/dff.pipeline.types.rst.txt create mode 100644 _sources/apiref/dff.script.conditions.std_conditions.rst.txt create mode 100644 _sources/apiref/dff.script.core.context.rst.txt create mode 100644 _sources/apiref/dff.script.core.keywords.rst.txt create mode 100644 _sources/apiref/dff.script.core.message.rst.txt create mode 100644 _sources/apiref/dff.script.core.normalization.rst.txt create mode 100644 _sources/apiref/dff.script.core.script.rst.txt create mode 100644 _sources/apiref/dff.script.core.types.rst.txt create mode 100644 _sources/apiref/dff.script.extras.conditions.rst.txt create mode 100644 _sources/apiref/dff.script.extras.slots.rst.txt create mode 100644 _sources/apiref/dff.script.labels.std_labels.rst.txt create mode 100644 _sources/apiref/dff.script.responses.std_responses.rst.txt create mode 100644 _sources/apiref/dff.stats.cli.rst.txt create mode 100644 _sources/apiref/dff.stats.default_extractors.rst.txt create mode 100644 _sources/apiref/dff.stats.instrumentor.rst.txt create mode 100644 _sources/apiref/dff.stats.utils.rst.txt create mode 100644 _sources/apiref/dff.utils.db_benchmark.basic_config.rst.txt create mode 100644 _sources/apiref/dff.utils.db_benchmark.benchmark.rst.txt create mode 100644 _sources/apiref/dff.utils.db_benchmark.report.rst.txt create mode 100644 _sources/apiref/dff.utils.testing.cleanup_db.rst.txt create mode 100644 _sources/apiref/dff.utils.testing.common.rst.txt create mode 100644 _sources/apiref/dff.utils.testing.response_comparers.rst.txt create mode 100644 _sources/apiref/dff.utils.testing.telegram.rst.txt create mode 100644 _sources/apiref/dff.utils.testing.toy_script.rst.txt create mode 100644 _sources/apiref/dff.utils.turn_caching.singleton_turn_caching.rst.txt create mode 100644 _sources/apiref/index_caching.rst.txt create mode 100644 _sources/apiref/index_context_storages.rst.txt create mode 100644 _sources/apiref/index_db_benchmark.rst.txt create mode 100644 _sources/apiref/index_messenger_interfaces.rst.txt create mode 100644 _sources/apiref/index_pipeline.rst.txt create mode 100644 _sources/apiref/index_script.rst.txt create mode 100644 _sources/apiref/index_stats.rst.txt create mode 100644 _sources/apiref/index_testing_utils.rst.txt create mode 100644 _sources/community.rst.txt create mode 100644 _sources/development.rst.txt create mode 100644 _sources/examples.rst.txt create mode 100644 _sources/get_started.rst.txt create mode 100644 _sources/index.rst.txt create mode 100644 _sources/reference.rst.txt create mode 100644 _sources/tutorials.rst.txt create mode 100644 _sources/tutorials/index_context_storages.rst.txt create mode 100644 _sources/tutorials/index_interfaces.rst.txt create mode 100644 _sources/tutorials/index_pipeline.rst.txt create mode 100644 _sources/tutorials/index_script.rst.txt create mode 100644 _sources/tutorials/index_stats.rst.txt create mode 100644 _sources/tutorials/index_utils.rst.txt create mode 100644 _sources/tutorials/tutorials.context_storages.1_basics.py.txt create mode 100644 _sources/tutorials/tutorials.context_storages.2_postgresql.py.txt create mode 100644 _sources/tutorials/tutorials.context_storages.3_mongodb.py.txt create mode 100644 _sources/tutorials/tutorials.context_storages.4_redis.py.txt create mode 100644 _sources/tutorials/tutorials.context_storages.5_mysql.py.txt create mode 100644 _sources/tutorials/tutorials.context_storages.6_sqlite.py.txt create mode 100644 _sources/tutorials/tutorials.context_storages.7_yandex_database.py.txt create mode 100644 _sources/tutorials/tutorials.context_storages.8_db_benchmarking.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.1_basic.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.2_buttons.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.4_conditions.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.5_conditions_with_media.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.6_conditions_extras.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.7_polling_setup.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.telegram.8_webhook_setup.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.web_api_interface.1_fastapi.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.py.txt create mode 100644 _sources/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.1_basics.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.2_pre_and_post_processors.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.4_groups_and_conditions_full.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.6_extra_handlers_basic.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.6_extra_handlers_full.py.txt create mode 100644 _sources/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.1_basics.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.2_conditions.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.3_responses.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.4_transitions.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.5_global_transitions.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.6_context_serialization.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.7_pre_response_processing.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.8_misc.py.txt create mode 100644 _sources/tutorials/tutorials.script.core.9_pre_transitions_processing.py.txt create mode 100644 _sources/tutorials/tutorials.script.responses.1_basics.py.txt create mode 100644 _sources/tutorials/tutorials.script.responses.2_buttons.py.txt create mode 100644 _sources/tutorials/tutorials.script.responses.3_media.py.txt create mode 100644 _sources/tutorials/tutorials.script.responses.4_multi_message.py.txt create mode 100644 _sources/tutorials/tutorials.stats.1_extractor_functions.py.txt create mode 100644 _sources/tutorials/tutorials.stats.2_pipeline_integration.py.txt create mode 100644 _sources/tutorials/tutorials.utils.1_cache.py.txt create mode 100644 _sources/tutorials/tutorials.utils.2_lru_cache.py.txt create mode 100644 _sources/user_guides.rst.txt create mode 100644 _sources/user_guides/basic_conceptions.rst.txt create mode 100644 _sources/user_guides/context_guide.rst.txt create mode 100644 _sources/user_guides/optimization_guide.rst.txt create mode 100644 _sources/user_guides/superset_guide.rst.txt create mode 100644 _static/auto-render.min.js create mode 100644 _static/basic.css create mode 100644 _static/binder_badge_logo.svg create mode 100644 _static/broken_example.png create mode 100644 _static/check-solid.svg create mode 100644 _static/clipboard.min.js create mode 100644 _static/copy-button.svg create mode 100644 _static/copybutton.css create mode 100644 _static/copybutton.js create mode 100644 _static/copybutton_funcs.js create mode 100644 _static/css/custom.css create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/drawio/dfe/user_actor.png create mode 100644 _static/file.png create mode 100644 _static/images/additional_stats.png create mode 100644 _static/images/annotations.png create mode 100644 _static/images/benchmark_compare.png create mode 100644 _static/images/benchmark_mass_compare.png create mode 100644 _static/images/benchmark_sets.png create mode 100644 _static/images/benchmark_view.png create mode 100644 _static/images/databases.png create mode 100644 _static/images/general_stats.png create mode 100644 _static/images/logo-colab.svg create mode 100644 _static/images/logo-deeppavlov.svg create mode 100644 _static/images/logo-dff.svg create mode 100644 _static/images/logo-download.svg create mode 100644 _static/images/logo-github.svg create mode 100644 _static/images/logo-simple.svg create mode 100644 _static/images/overview.png create mode 100644 _static/images/service_stats.png create mode 100644 _static/jupyterlite_badge_logo.svg create mode 100644 _static/katex-math.css create mode 100644 _static/katex.min.js create mode 100644 _static/katex_autorenderer.js create mode 100644 _static/language_data.js create mode 100644 _static/logo-simple.svg create mode 100644 _static/minus.png create mode 100644 _static/nbsphinx-broken-thumbnail.svg create mode 100644 _static/nbsphinx-code-cells.css create mode 100644 _static/nbsphinx-gallery.css create mode 100644 _static/nbsphinx-no-thumbnail.svg create mode 100644 _static/no_image.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/scripts/bootstrap.js create mode 100644 _static/scripts/bootstrap.js.LICENSE.txt create mode 100644 _static/scripts/bootstrap.js.map create mode 100644 _static/scripts/pydata-sphinx-theme.js create mode 100644 _static/scripts/pydata-sphinx-theme.js.map create mode 100644 _static/searchtools.js create mode 100644 _static/sg_gallery-binder.css create mode 100644 _static/sg_gallery-dataframe.css create mode 100644 _static/sg_gallery-rendered-html.css create mode 100644 _static/sg_gallery.css create mode 100644 _static/sphinx_highlight.js create mode 100644 _static/styles/bootstrap.css create mode 100644 _static/styles/pydata-sphinx-theme.css create mode 100644 _static/styles/theme.css create mode 100644 _static/vendor/fontawesome/6.1.2/LICENSE.txt create mode 100644 _static/vendor/fontawesome/6.1.2/css/all.min.css create mode 100644 _static/vendor/fontawesome/6.1.2/js/all.min.js create mode 100644 _static/vendor/fontawesome/6.1.2/js/all.min.js.LICENSE.txt create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-brands-400.ttf create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-brands-400.woff2 create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-regular-400.ttf create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-regular-400.woff2 create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-solid-900.ttf create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-solid-900.woff2 create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-v4compatibility.ttf create mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-v4compatibility.woff2 create mode 100644 _static/webpack-macros.html create mode 100644 about_us.html create mode 100644 apiref/dff.context_storages.database.html create mode 100644 apiref/dff.context_storages.json.html create mode 100644 apiref/dff.context_storages.mongo.html create mode 100644 apiref/dff.context_storages.pickle.html create mode 100644 apiref/dff.context_storages.protocol.html create mode 100644 apiref/dff.context_storages.redis.html create mode 100644 apiref/dff.context_storages.shelve.html create mode 100644 apiref/dff.context_storages.sql.html create mode 100644 apiref/dff.context_storages.ydb.html create mode 100644 apiref/dff.messengers.common.interface.html create mode 100644 apiref/dff.messengers.common.types.html create mode 100644 apiref/dff.messengers.telegram.interface.html create mode 100644 apiref/dff.messengers.telegram.message.html create mode 100644 apiref/dff.messengers.telegram.messenger.html create mode 100644 apiref/dff.messengers.telegram.utils.html create mode 100644 apiref/dff.pipeline.conditions.html create mode 100644 apiref/dff.pipeline.pipeline.actor.html create mode 100644 apiref/dff.pipeline.pipeline.component.html create mode 100644 apiref/dff.pipeline.pipeline.pipeline.html create mode 100644 apiref/dff.pipeline.pipeline.utils.html create mode 100644 apiref/dff.pipeline.service.extra.html create mode 100644 apiref/dff.pipeline.service.group.html create mode 100644 apiref/dff.pipeline.service.service.html create mode 100644 apiref/dff.pipeline.service.utils.html create mode 100644 apiref/dff.pipeline.types.html create mode 100644 apiref/dff.script.conditions.std_conditions.html create mode 100644 apiref/dff.script.core.context.html create mode 100644 apiref/dff.script.core.keywords.html create mode 100644 apiref/dff.script.core.message.html create mode 100644 apiref/dff.script.core.normalization.html create mode 100644 apiref/dff.script.core.script.html create mode 100644 apiref/dff.script.core.types.html create mode 100644 apiref/dff.script.extras.conditions.html create mode 100644 apiref/dff.script.extras.slots.html create mode 100644 apiref/dff.script.labels.std_labels.html create mode 100644 apiref/dff.script.responses.std_responses.html create mode 100644 apiref/dff.stats.cli.html create mode 100644 apiref/dff.stats.default_extractors.html create mode 100644 apiref/dff.stats.instrumentor.html create mode 100644 apiref/dff.stats.utils.html create mode 100644 apiref/dff.utils.db_benchmark.basic_config.html create mode 100644 apiref/dff.utils.db_benchmark.benchmark.html create mode 100644 apiref/dff.utils.db_benchmark.report.html create mode 100644 apiref/dff.utils.testing.cleanup_db.html create mode 100644 apiref/dff.utils.testing.common.html create mode 100644 apiref/dff.utils.testing.response_comparers.html create mode 100644 apiref/dff.utils.testing.telegram.html create mode 100644 apiref/dff.utils.testing.toy_script.html create mode 100644 apiref/dff.utils.turn_caching.singleton_turn_caching.html create mode 100644 apiref/index_caching.html create mode 100644 apiref/index_context_storages.html create mode 100644 apiref/index_db_benchmark.html create mode 100644 apiref/index_messenger_interfaces.html create mode 100644 apiref/index_pipeline.html create mode 100644 apiref/index_script.html create mode 100644 apiref/index_stats.html create mode 100644 apiref/index_testing_utils.html create mode 100644 community.html create mode 100644 development.html create mode 100644 examples.html create mode 100644 genindex.html create mode 100644 get_started.html create mode 100644 index.html create mode 100644 objects.inv create mode 100644 py-modindex.html create mode 100644 reference.html create mode 100644 search.html create mode 100644 searchindex.js create mode 100644 tutorials.html create mode 100644 tutorials/index_context_storages.html create mode 100644 tutorials/index_interfaces.html create mode 100644 tutorials/index_pipeline.html create mode 100644 tutorials/index_script.html create mode 100644 tutorials/index_stats.html create mode 100644 tutorials/index_utils.html create mode 100644 tutorials/tutorials.context_storages.1_basics.html create mode 100644 tutorials/tutorials.context_storages.1_basics.ipynb create mode 100644 tutorials/tutorials.context_storages.2_postgresql.html create mode 100644 tutorials/tutorials.context_storages.2_postgresql.ipynb create mode 100644 tutorials/tutorials.context_storages.3_mongodb.html create mode 100644 tutorials/tutorials.context_storages.3_mongodb.ipynb create mode 100644 tutorials/tutorials.context_storages.4_redis.html create mode 100644 tutorials/tutorials.context_storages.4_redis.ipynb create mode 100644 tutorials/tutorials.context_storages.5_mysql.html create mode 100644 tutorials/tutorials.context_storages.5_mysql.ipynb create mode 100644 tutorials/tutorials.context_storages.6_sqlite.html create mode 100644 tutorials/tutorials.context_storages.6_sqlite.ipynb create mode 100644 tutorials/tutorials.context_storages.7_yandex_database.html create mode 100644 tutorials/tutorials.context_storages.7_yandex_database.ipynb create mode 100644 tutorials/tutorials.context_storages.8_db_benchmarking.html create mode 100644 tutorials/tutorials.context_storages.8_db_benchmarking.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.1_basic.html create mode 100644 tutorials/tutorials.messengers.telegram.1_basic.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.2_buttons.html create mode 100644 tutorials/tutorials.messengers.telegram.2_buttons.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.3_buttons_with_callback.html create mode 100644 tutorials/tutorials.messengers.telegram.3_buttons_with_callback.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.4_conditions.html create mode 100644 tutorials/tutorials.messengers.telegram.4_conditions.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.5_conditions_with_media.html create mode 100644 tutorials/tutorials.messengers.telegram.5_conditions_with_media.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.6_conditions_extras.html create mode 100644 tutorials/tutorials.messengers.telegram.6_conditions_extras.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.7_polling_setup.html create mode 100644 tutorials/tutorials.messengers.telegram.7_polling_setup.ipynb create mode 100644 tutorials/tutorials.messengers.telegram.8_webhook_setup.html create mode 100644 tutorials/tutorials.messengers.telegram.8_webhook_setup.ipynb create mode 100644 tutorials/tutorials.messengers.web_api_interface.1_fastapi.html create mode 100644 tutorials/tutorials.messengers.web_api_interface.1_fastapi.ipynb create mode 100644 tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.html create mode 100644 tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.ipynb create mode 100644 tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.html create mode 100644 tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.ipynb create mode 100644 tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.html create mode 100644 tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.ipynb create mode 100644 tutorials/tutorials.pipeline.1_basics.html create mode 100644 tutorials/tutorials.pipeline.1_basics.ipynb create mode 100644 tutorials/tutorials.pipeline.2_pre_and_post_processors.html create mode 100644 tutorials/tutorials.pipeline.2_pre_and_post_processors.ipynb create mode 100644 tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.html create mode 100644 tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.ipynb create mode 100644 tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.html create mode 100644 tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.ipynb create mode 100644 tutorials/tutorials.pipeline.4_groups_and_conditions_basic.html create mode 100644 tutorials/tutorials.pipeline.4_groups_and_conditions_basic.ipynb create mode 100644 tutorials/tutorials.pipeline.4_groups_and_conditions_full.html create mode 100644 tutorials/tutorials.pipeline.4_groups_and_conditions_full.ipynb create mode 100644 tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.html create mode 100644 tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.ipynb create mode 100644 tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.html create mode 100644 tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.ipynb create mode 100644 tutorials/tutorials.pipeline.6_extra_handlers_basic.html create mode 100644 tutorials/tutorials.pipeline.6_extra_handlers_basic.ipynb create mode 100644 tutorials/tutorials.pipeline.6_extra_handlers_full.html create mode 100644 tutorials/tutorials.pipeline.6_extra_handlers_full.ipynb create mode 100644 tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.html create mode 100644 tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.ipynb create mode 100644 tutorials/tutorials.script.core.1_basics.html create mode 100644 tutorials/tutorials.script.core.1_basics.ipynb create mode 100644 tutorials/tutorials.script.core.2_conditions.html create mode 100644 tutorials/tutorials.script.core.2_conditions.ipynb create mode 100644 tutorials/tutorials.script.core.3_responses.html create mode 100644 tutorials/tutorials.script.core.3_responses.ipynb create mode 100644 tutorials/tutorials.script.core.4_transitions.html create mode 100644 tutorials/tutorials.script.core.4_transitions.ipynb create mode 100644 tutorials/tutorials.script.core.5_global_transitions.html create mode 100644 tutorials/tutorials.script.core.5_global_transitions.ipynb create mode 100644 tutorials/tutorials.script.core.6_context_serialization.html create mode 100644 tutorials/tutorials.script.core.6_context_serialization.ipynb create mode 100644 tutorials/tutorials.script.core.7_pre_response_processing.html create mode 100644 tutorials/tutorials.script.core.7_pre_response_processing.ipynb create mode 100644 tutorials/tutorials.script.core.8_misc.html create mode 100644 tutorials/tutorials.script.core.8_misc.ipynb create mode 100644 tutorials/tutorials.script.core.9_pre_transitions_processing.html create mode 100644 tutorials/tutorials.script.core.9_pre_transitions_processing.ipynb create mode 100644 tutorials/tutorials.script.responses.1_basics.html create mode 100644 tutorials/tutorials.script.responses.1_basics.ipynb create mode 100644 tutorials/tutorials.script.responses.2_buttons.html create mode 100644 tutorials/tutorials.script.responses.2_buttons.ipynb create mode 100644 tutorials/tutorials.script.responses.3_media.html create mode 100644 tutorials/tutorials.script.responses.3_media.ipynb create mode 100644 tutorials/tutorials.script.responses.4_multi_message.html create mode 100644 tutorials/tutorials.script.responses.4_multi_message.ipynb create mode 100644 tutorials/tutorials.stats.1_extractor_functions.html create mode 100644 tutorials/tutorials.stats.1_extractor_functions.ipynb create mode 100644 tutorials/tutorials.stats.2_pipeline_integration.html create mode 100644 tutorials/tutorials.stats.2_pipeline_integration.ipynb create mode 100644 tutorials/tutorials.utils.1_cache.html create mode 100644 tutorials/tutorials.utils.1_cache.ipynb create mode 100644 tutorials/tutorials.utils.2_lru_cache.html create mode 100644 tutorials/tutorials.utils.2_lru_cache.ipynb create mode 100644 user_guides.html create mode 100644 user_guides/basic_conceptions.html create mode 100644 user_guides/context_guide.html create mode 100644 user_guides/optimization_guide.html create mode 100644 user_guides/superset_guide.html diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000000..8d6151f21f --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 07023cba63ba37048badfd1a7682fb0c +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/about_us.doctree b/.doctrees/about_us.doctree new file mode 100644 index 0000000000000000000000000000000000000000..509e065af41a56f09847d8ee8434e6a3e357c7da GIT binary patch literal 3588 zcmb_fTZ<&O6`tLh?&+RO&(7Mr7`)?@32U$MPIn%X*bc^EG7O1_3}M&ogTct^Ds@X~ zl~mDXE(U{xvGIW3R{0_RNzQ-BgWvqAs;j$a;#z9&#m?*XECgSBj-XEhN<{*41>h(gtWu? z{Y}eqC$w5z=N;bVn;*wVydOGFILTIyLht>t_Ac`_CLXYCe8?`6?v;}-V`E3RqR{Fh z-w%DVFq5x`?%cZ5upxzF@zjrL*rLuEG4>8#B`?-RVUxw1xun*Dh;>KNvRU;CUoAId zn$HZIBpx3&9i675$oKfme1|{a>--=*8*yE-k?~3~GdkC1HYx;_dP*izpOcBfjh~|G z+>RQvM>K_icsn!}&b@MS+m8{5KD?z=zE^;z~VcdoL38jT9js+u;W;=NDEu+GXOen0%> z*U}s3*+eKuO(;+KD@a)K7$IlKFmTplk9WeuUu0DG#-cUCn~{u|(dzY4hh z7T-gBuj6|Ic-W}(d`(E`!YXe>4EKI8O40K-`CG}G+J~;AX3Cbu0|#FEvG_JNx5k96 zW%MI$O}jyD4Q-9$A0+iBVQUe(BA(ouTXR3$8meBN03%bwY}1uHPCF{&$y(TIc^DwP=99i#VUT;1 zdOlfn_??#0bo$V<%sHW^c)Io%Z_&hP<(MjB=su&;qs6xkC3MkiEAQed-#ZQcDMRHwp=~%&^^>Z@rP&?K+*4^hTspDDJ>Qa~Z?kiPlbO$5swcZiU_S zBr0E$i-|TR>N5;1o~DZAx=iiZLgdR0g-KRZ$hmNwv@aDj&M(ZLuG6q%Sf!04G9fsg z+zwlu%Eh)5_SuC%)Esr*woIMSDcIOgp>A+ajY8DGVHhnz=_C9(OHReF!$2s+h@chg z0$efly_+1qeP{*N53U~)W{ft3qf{g_hwkNG(wjK zv{xToKe%x-+(`}qXqF>B5)Q?%E2)}#I%NoVf&Fa^F5v~ka%~ENHxV#_8Uc))hHkFa z1U@1hq5x3YL|jDP4Fl?(CQDMdEr6}v!j~0U;15x)2?EeFipnH#ucp+35V|{OBNHK; z8RvdlL5XFiE<~o1v;z6w#)OAFHCy0wKNS~XqozQi6s2(SgSBt}+X;h;Rb=tjBzJZa zWlUjxs*Uhc`$&Rpht;LyS`D?Cj_`ga&e{ZU630p;$RQy;&<`K}?)Ql3z)bQR;uB>l z{k7w)D`Vg2|9pC}W2rKU|WrXhD0ftqs63RLhVOyCSd$5ptO zgKI`uNrfaB>QkSs&EB7n<$$Z4G+pf~tTT0%hUL&}x(Uh`U=*qlC=W-PQKlZ0_hA&k zIq{%Tr(foc0G|CkgO|4%Hk-zZ!(l56Dc1-VY(wotkBMFPw;{mH>xiC#Bv3+eUtUVeWzZ#t6f>EhmDQ#t7Tc%%4m1}!q~!gWXl+25kYK&eb{EyJJY+}t(oa@ zcaK&}u*+ORVsXtYp44Fi7y<_bxEydKPzfXlhYdwtFiBCNE^tNg@y>B^U2?z?sJh?( zd-V79b9!c1(u#_zcGT1Jz5f62|NMPlfBneF?|ZLej` z`rUTh@@E%4|LAPPF`M2(ZNBL(*5-YTxa{uy{A`*-vywwIouz#kdjJNv7YuK{4?pe8 z4z0C!*z4^}?e*O`dsj3TSoP5H+L_s(!jB`N6E-dFr)cACa%MFZrwJ_fVbWCN%m373@vI|ba>4216F#%Y&Q%KcYT8- zX~wwQb^_Uz)2=tWGa_#n z40_?iaax_GMFx)#7ZlWVi-gi8idD;NlIwP5ZT6JazB{5jO7*)-hn#~KJtf+Qb{3e6y+5wA;+K z?T@ymWm_ADUp!gxacnHny3P{pVrOZZ$!X8h-38ga4rZ}gW*DPU&;;uaH)wVoT+f!f zK{$FU-!h$c&weNx!?$p$11~zlM-Xko9qV|f>C~ODcY+mIH2pR%$Dz{P()6N>`t$;l zxcc`FvlfGnRd?o{I(#1uKzPm^_7Typz0*DfH?%$$;lKLTvKUIC6E?ysb$>6@xWe3E zcTQE9LQEIC-HR<5d1!Y{8HEssuLWnBgBNYCi_XWK!_6z})TqrZ)mWhPP%k(VJaW*eZEi~_)^#T>#!#@=B8QKgfn`YfWg&}q9GT|NU@7doc z7XDDN(Eb6%?rfaf**Ga6ZCP+$O()Rv6w0tdo6o)!>$t2gB8hUFW0_3TuN6ZW#M+MK z$sI=kTuf@Tww)0vcZ{m+aM$C%GT$dy;I3uG?O*mQ8=c?kHbbXIDP1k57hl1g6U57Z z$?`HfTV&5r(3xY7wOB_A-HW!!%bMA)+n%p6jc3M%raa;QF0XNi8j#m6&fwsk;WQ~> z{Bi8>Z5pwAIVWA{5Vv8!rd?#1)o1dGQni^EGAbh*U=CO=}4yR zUzeUGy5LqM{J}m$3)>zx=jt=J+(G3z1EU+3XwSq6Rt zs(8e>?bdW^iH!0fmDLj8mKTJE1)QrL0<1A$YHhC($Yi>+gs*MmNW-azM|dJSGjRaf zErI~b)15YQZ>kyUS>*GIN2bZ$aY2+sPV9T6utp<{0O{J-gBq>gBdK~xc}=@^clyHHGg9;X4!bNK=Yk(ZsxC zH5=Rys;EZzF+hCm=ZuFV^iR}G#{(0ukby@aCr`hnc>AeArqKNpD!s$~1pUVy2}x!= ziaD>blo_S+9`}A5^(Zzmrl9wGjOl439;U(W2e#L3Hb^xCD>N1z6eW1;m3JPLDlK!Y zq$w}~<-t84XBZOI@T~{C$i)FDdBAfS$VA9hgWCxhk{2I036a`obYMXi5D`Dve7+eh zwdFa~rd4z@X32X9CtV_5^k;((+D<}r%_b_AE% zrr$6czJpt2Z7dUr-n>EhmQQGwBqx|y^12MqVz?p8)t6WoO|Qe21!vkORMKjealHXwrmN z4LP1+BTm-U&3{qI@hs{MA9AcGQpijq+;Bfkgj{xL1S%c#Z|xq9(hU3dM=YDx<#k2!jT)L%?NRw5?XC12Pl`mU2(vU zIZ#^7y$$Sv>5>f7*qF9tQyd@}k1a(SnG$PN?!QIX(HPJxwp``@7JX&VsQ$g}P4kT^ zSh#9?@^Vt%o~EUTB`jr~C4Q9Ox1odppn|y2mbNGF$#T>Z^@sc*MC{2?!#`v3#}00o zB)iC>3~N$%RIsMk3}{WM$znsge>sMfH{H*MJ||;CdA+3hEJcz(D5Ni6bjywA`{KIM z6RX&03SJV5uQbek7Y4t=_Of6)xT*XMDOYw;LnKbpN`4llq?P;=VlTIn@1e^IR&x4C z>?)72WZUb8*c2jC={UV>%&`qE0^U_Y`zEcr1Q|3_t_jzN}|RWcctRkD6S%j*6vdUStCACJ<< zkLcq>eDy|LopAph`;6Go>=UeHMn3l4DoUG+oz)NcY9**`2D6bvR1hO`Z zZQw1-v4NuPenv2}OgtkhCavIzb{9D>|E2_O!}_G4DNDgtdrE`HHF4eOJ*(IbN`9sc z;m;v)D{Kghri5F<^TDn>ODN_ZBgQT0L3~2 zgU|$)Xz+~^2qUSa2rA_$Td?@Y<6{ndDU z`MX-&SEp(uZKnOrylpKmb;AOI5jN^&4WK#v0Ez<%xd{aOXxzhb2hks`V#}VCu^!nE zuvh^olj#B+MM>XQcI)*q-FbGaJS$Kj zs;LI~?@I^io`Yu65-4}UJcg=eW;MAB#(hhL;_hYWPwsfp1V>|nyIZ5|WNvARF6m>2 zdfHM1e5}~=qK!Je>%~0?7OZTP;C>cO@`&I`T;)XsX#o|XLA0X}c~g7Xf(SuPQUsyQ zhtNx5rj1G!Jip~nQ|5UTU05Q8CVGSDXsGiCV4aL zkumjBtg)I{ab>ID@{2(~0dv$I8WFO>7LBpN%@WJ1?$cTq$_i%9-A@OiNGziM6Dl!p zn_NVt+j?59ZQi<2TSR>rxE!Q?MpBhoQQfow?QmzZQ5MoH^k({5+as0?5UMV#j-!<_ zW3Ab;#7?gBP;bCxRWd|2-^sNlMSHx&`VA_>HqyH>cN0sj8Rq6JvF4Q7D;Zcxc9hvj zH&q8UpnV$^wvLF-z9S7#d=)i$aH>_Tdjy@(@_VX7+P z{=*=|F10_$>6$47x)iQt*fiMia%5?=6(M}pjl5Be!Aj$JH;d`=a0!j87$INEeTBTUY z4=~|+VACHfc{Wuer7`(f33Zc?l?*P;JuQ1Yc z6qCS_o&Z<5NKb0i#Yj)Gpoa8F1wz32ZDER#z-KoV=}6C15z<4!7vVf2z>mYL>J^mq z{${E4>gJRO!K)kBN%EiBPjLLWpb;F;;yV3vLbbg(4!!kTikEL4gqJeC-fo1`y749DYGprL&`g(%l8-h|HlNQ*otI?zO+gA zy(CaO+;>-KRe)IJo6^ujT8IU}`o;>a3Q$D4lDe%-@F!!s2j4lOc;^0RY9@__s4XJP+&S{)(m|G@ zAWxxcncGdFAfK;LJc%ddGU0UM38|^p;tFz(mt*xB9#4%rgD1QWELdSY;aN1v@r0k@ zDi=>kjk*|5NEX!a1Sx``?qT#o2CgrjaAgsm;9D&mOj*2fWbleg<<^WP&2P$>YKNs_ z!szLvGtDAl27ak#;H2UU&l!Z55?|O(m3B&-1@n-HFQ`Y^4%6O{3fo3-jwwzunO~A1 zRJ?P9?L~szT6F4JZVnY&%Ir3hD+Z!aq>SZcJ?R1>>q*^K#`14sx(CmC6wlnhre;oB*7JkXL6&Ac-$B&@ zvYx-MP&}FSrtc5WIgWy3syMmncOI|o^x@PoAsndU7YnK3u;-9 z6hXw??-cUVH|zQJqO1p}NwEj;aJUqX@bYn%mln(ha)%o`6fC=wZG~G^%6c)lryK5+ z89u}ErQ}S?_1FspjhMS^zO<72?5`PwnKEIzk}B<#<_?ynJYhOiF=49P79MbR=CcVC zURuDnQx2Lfy>uY*M7DGrD&=HLbX%7@ZMA8j<<PA4Y}D;B|%aKCEadutRz#VTl#QUOO;4h zDyB-)tZ4t;7Kz>VLXr~q6ls4ze6PIPDt6$%ohnsV?+tUF*GzA}->PlDr{6PM>_0)B za4p~ss6l_SbkJ2b;A3c|EauTdf&^ah7pOP925?$PPUtv4A@;P2`cXkt*^s1o{ZXHx zYvM(7wZh^RZ<-g=6Mt7T^j$%W%+!nR3=LI?)iYG7x>((Mx8KDPo$Mt%J}!dTEr`eX z*eRJyMjUzUHEuVXbowX7DvM4awkH5WTZyI=@jn@ac(%#@pV%aoGf5yT#H4}dv(#A0 zP4+UJkn>euNo=y0@uQlvA&`|z#wD_1&=o^g*wyJnR(3V5b`?-%(8KxSW|x7dT$tHf zAGeAipA>S+US;PF+<gfg!E#=W$5N7+IE5~bHE&M$aeB!{UF}Vz06jW6u(o9Te`=TLCQfCR`VgFO7cjhFfEU( zX&DMkNaPmf`Nqcw;iL=<|ClPpf&?pH4kxU~yA{*vhJJK7e$HeYU!pF!9b?ti+<&=r z#8s1xr_f4SWUtwPM6&TU)Eh9_AO#lbHY0`fkR2UP_j!u_dAekJ*iVvoxPOVVWg{n( zC1O*Wr;4%ZM_AGRscf8E6z3ZMB8aJ^oKmEIMwP0I)W!6`ZhwQ*ub7gmvnKcqR2nqP z5ynxY;ye&>1INVlB<{XL>ovYWPkjN>hg*5F7aYN#?Bgl zXPM7r!L(& zC(j%e97?8!nn`qS$Iw?e(fJ~p*j~IFiB8m^?WIEM2=;7yG2j_5f0dmaa;m#ks`Pci85ueB3p#h65k3P`{xvn_ zLnTi7Gq57S)o&>d{;xqeC}Z3oQl*_z|KUG!(kAy0@z7E78NaFW=l)LZp=e{9xKdRT z9r-lidQ{3;pQYOgAacmvtQSx_JXg#+6z!r^H%V!)nlPTvXh_zrvOc>T^#)8B$q@Ei zpZzYC;mKpn-NgEAhPgTGvpHpkef%}uRIzWQ^p_4rThoW3lL&S>B40kiWWFDQR+Xc#U0WICqYw-3Rkp~D$YBRV>lbR8_A`5A8T|3oF zQr=@-8S5-fQ-{e@nrLP_m|2%mkgTc`TZF9~M?FndHn1L|O?WLK-rU}F>JHv;%znqq z^xC}>coA%lro=?iXb5HznnFvuinVL*(}*r%?XsRqeyiej&Y^U_SB=#h!D{wy#C%@A zc}QNrGs$c5O601{uKZMT9`n~eP{#ZHQNoO6<|fCC<&?QeiotN|u2eYPc7MC}8+~RZ zW7kTXlutPSoSDF4ouXC+>PKNlMYQRA+_3gN1$F>H`CFx8t(yTFve;?xO{&xxM| z*=Whak|+OhAF4Fjq={Z(*{py_?*aRC-&w9kLMAV#O4ViZz`#dH8lIoDPVqX~inOI< zci$l7vl)FMYV?_TX>Ev21I=i;xf9s7Oyp#mQC>-4+cM!-vo-{_T?aiJ+iuVm!?xMg z>BF{n0pd6r`(NT_mw|In=K)J%uo>7kyCLRk?L{1P2K*rJ)X2Qg;vr0!uIBwWw!9%# zBV`!!H?~kWWfCuUIXnr|xDlE620sP%|(?KkcnwL8kjydx$w4@)m!n@~)0 zAE##0`$|q0{{OMkF_+^1A4SzN1DV2$Kg5c!JpTWs;VJk6AJUr;0ZO>32<-pc@?IWC z6A8GT{JlW?MKABxdnrZvzf<1VhtqxahxYjpiXBMqRFxM`Li@Smd+MP5>`o@7v06My zlOlF9sR3sI{t)b6VSsUo$8Y=FjeAiiy&mos!l9hW40{8^A;_*523;JI<2p?r? zJ57~#O2-DLaR!3^hXx{C;FvE#r5w_b^KYNr_VH&fjtWxi^@{s5yPSyzWJ zH2a#^C3Y0`G$gZ1zD~xmALze_%5cy>=57Kl%P=u4<(K8S9e!Un*sglw%(SeEQ5glAERc9LH|#rdP&NAtSjZ9{~t37 zl2xmy%4bkdQ_lQ z{`(}a2Q*8SLH|7FCqVxU?^B?E&hI0}GmkuGXbT59WmXLIPq*FQuKj+W8OhkS(k3P7 ze{+Ra1?W#(NRXR!|f~+>UyhWjx8+N}&I>g5I*xVgeaNd{rN+XrhH|(nPPYY*qmM zTY?w~Ay<+~mnv14$rS$co6d0jQ%E@rgAok86`FiG^6F_PJsT;g<;a8 zo$^Wo^p}ahnzbQ7{||y54*GwHt{CXgu1+85zoXu?Ouu|f`?UjZX=hCqg8k8ZR`JGg zG4#vmjpik<1AlI2IYO|JZ?M*0(F}76{>sh9;+s;R&qEG$Sxl-$IiCF&aosb5rR?3+ zYPbDBPjM8y8f*sl{4@r?!no)6(Ins4{ExWG!##!2 zNzAiYcFE_`lbe#oaMgcK+%DSOtVK&onhO@8o#NzNv)MFo zGDG3hoF}7crGP&b1Xgn2@LxOKKcgBDKyc@uW9}sNR!>MtFoX}0%+y$%_HO;(PB^(m z`j9Pj#e4|6T80l1G?CF8_6>!**-TeiKHfKsH{lHz`;-r?cAp{%=;v83&i5>mvBJNs zvZEgMKoWH?)_+C(s#J}X{^YNSQ#TCi%`C|eK7a$m51=?+)R*LU#T`Uvj&L#`trq1s zX-X|an8ZD0NAHcv9eiP4vC6%Nnn^Fr4-_ioHg@WkNwX`8IuG*$1~ueNz;FrpvBCkv z>(C?*7=9a9c>zOWie=c)&oIg0LCzrDl1c}wdhaFUd zhYu%W{-n%ba;a2?50ae-A0(3p4g{GHO2Ogn9( zzI5vJWwJP5AtV}X!=Q5^iAF&Fau zd+8>&Z=q@#)SKEF^^FR}lRKl-47qHJW%Y`U(Gc~XxbkN-?owTlAaw*K5E6?+cZtxqwDZ7Ls!f{v#Vja9x%~kF-qh&8 zEr2(*d9#kIrNJEC3(6f`K_B_ipZP9Y4J_lLZ$_mR zcF{Br?xH_VSM*i7=<^G7OmozdbC|IGs9ET!r!-*xd#}XF#|2H(`g^yj@zOFgBYrD z&MonEf~D4+hb05w>EKOi#_oNyv%BLk;zz&g0J5bh)CpOs?AM0?Tpkh_!YE;@XDs%34uYNWlKNAXh;?tiDQ_&%sg z)fHLa7?!M!AnWU>TowXQ7%#R1e=Y7u@CAW$Vsmh`!wtOlKvX}gsIE|1(fohnvE&6k zIchDZavU`O@0Fx^XUC}@Z4NfqW82hRSE;V(9;ccN)*6uR3D7-)$}2Y4)4_vHC$ye# zIv&3oXx=YY92l@6#S3FtUTgv{E?h}oTcNm1$Lf zfg-+NO-1bsho$x`PInZl1T24Dn^wlrC@~Z3jPie|urYIkz6~%?a z!*XFWxNyfxa$&l)1i62{NzY8TmcR?&^WZMwJhl11=9(+7o5e|o;yh7h?dysW12&|1 zVGYZRN$|p4NnTvnL8!3cTQNgA3uFz%%`{V9aP2i$<}&5AiYddksJQdGVY#yf+&R9I z+__-E@6^E$Wfrc!>Y8i$*R+DXO|hV~nxgZuVd>loI^VLAbY4Vsk`>G&bRtD*bYWR( zUU+|>LW&6=9+nB)z=RJhj|s)Oel$AQZ6XotMQf+&xfuRX!A=>9Q23>yN)^K2>j8PV z9f_gHO=Z#!5k7?BIS(N#6A)d(bao2j%#Kcc1!*u7UqDNw zqs%}~xlhAV#Ain+^f(74{>Om^EuM+|2UN;=fS7LUNr?7Lr2bL~3_f%C;ri`y=CdBZ zYe3Bi{Zg3ORDIHCEm|o{aWtee@wo67)En?gAA%|Ew;i@0ix?#YAJJil0x~!s5*f2E z@q}=OdpS=C=aku&l>wzV>GH)siKARQ+#j&1Ek(oR!$Tyx>Gir)hAkg#`x+~{q7Sy+ zS}GUmafk=oevK+s*S4+couxefP{-Q6NP9Ko!{v*0>83I&@NZ~r9O%jRtETk6Qo5_^ z!#!wa7=5r%Z)km(8H_{mBf~;kEmEqZFIbW!~6polMuKTcO{QJh^3yC|Ms>#?^#(9^Xn8VwM@)vaFS zFLM#rs|T~Zty#0mXf}I?)$n51g=W|d)ZLMWHP>B0^+`Gk7+gaMZ1!v6&N$d#w}`0TqtT?(29Ii1yYA6@ z(R;{1t@NUcQop2{aG!!w zM3cN-H3nJx!sHLB%F$M$fn_sbQ4=)vqRmaSz0jqN9-s%`*IDgebhb|$ej2rg)q$j- z8;3D=6#2+J$OK2624s~M@~~$knl!su5m2|Hbq>U9bEDhp)M60?W7!S7nalEVls3)O z7IudTH%-5~)d{R_!>b){kw|St_U8pwO|QwMq#o9eIe|m37eQM!AeJWH2Ma>PD95B~ zxbG*fodtRV=mS$V)YvRavUQB0_dqW?mn~*s0o3xDI$CXNuz^|Mh@H=sO<)6>)oQECi10UN;Fi|RH~+&X5TD;?&OF%hMYc01@|5~B;9 z5HrY)!3l_vS9jX;5Cmx*wv)XGx^t;=PKzYC>6u(5H!#x#!NJ=D8_?q=APTkx+~P#^ zoH|M!tywM8Y1WW_leNY89*wq9%VdKCt2xhY+lgqs)jrn4s!+6%+Y~4<cs+f*V+S!BMK{{4OA;e_Gmcv4J`UvaJ7hIvInG1<4oNw?3(2ER0I_hg zo9Co%#-+y-Eso1xS*7iX_Td2hkUY+F(rt-f;CEru>Nu?*GTVzb)v-B&%Lx1$4r1Z= zAH$5ip?4=#69^8J98(-X7F$H2PyzCXI-rP!h2 zlVD>D28o?13V~4R62Y1nl-^(Y0|`=T~dDcny(4C~y!!HcBvS-=W%F*o^V~j1ogarm$;UIqTFv@CfckX6J`(kER z(m{kV#Ka;^#jyvdN>Y>yQ#h0{sXz#!9Fs~_szNFx5FU0pkfeYV4^u!Dggh$G@9)QS z&+N?X?%l~cT;8kJwDJUGFyR>r3^;#Y(N+3hk3&H3-|jwPXhsFKD+SRuXw;^RqbP^I>Fl*+gh9 zQQeU<$;LYtx)w&xCN^1(d4XT!k_Gc@wBfewXui9^rYS?{HiC-e-gs#FOSa~nVumvf z4mdlGM9wb!e=hz%AOF9IIN%0oXY?Q&Lx0_R(RR)B)pZW4@6wMK>m6n z@9dd(E(K4mTvicZu0!@~MD}&UpN*U^lh7J#$+tR=+5Knla_kbZK&oP?)Lo7ni02X>xy zmuLjoC9730`8JK2<911^K&ftpR>^IlW@=ESbX!=m8qlMF*ZHbjZ>93K6}XM%sXk;X zT%u*?Aba_WIv8ou&zqu$E!oq^(01v$;yihxuR5TqTzmSOuk%d=bpk!_A*Qq8wQHQ!XEzib?R!oY)NvN|rF=khHR zY%b+(T5cuKe{fV>NR>oVVSjvbKN3I4ZxSf==HnIyLA6UyONeV8dX4k6=%T?}YPDSj3%(rj= zr{DsdasZ}I3ID51Y;G6Wgy|v21B@S-VRr4Ewhw>dzTH}A*wTKK%3OcQ5ag=HzKG@f z%t{8)NcvH5VN!EJm~)KjQ5d|MIU+ecAmlJjZ>oU{=NoqYgy(okMm^;#t{^M6Pnw?% zY&$P+wOZ}aN_i!A)x9_DAyjanw3l~z?@jwlH>momLC31u2TF04(%zeHf|G)yBC{q3 znbxIGoA$wMxFBS7j*XOrF*-<3n!?j2g`|aHBPSv&ZB3p6BR_4bq0&92b8PZtvvGj; zgUpg|2eyCQjz|^%2xXrX^|23}br6xQF#s0O@C|H|i-Zpf4Jp_;8PZp5&3vaB{cJv? z%WN}rZI)LCoD1FKj|ofee8u@H@$l=KhtAgs2JzPJ;;kiL-?ZUq8g5`hJvJ^BRJ2s7 zcbwbQ5;G@_gq^WwwmWcOaN}m~jaOWudQXqKvp>)8EE{R}YSqustDo?mY>O*Q^L~`Z zn5s_vh%5BQM>cFIsAbs>0z0RpueSJ^|Op#{&5K2c!jDleThA;xN+)8kN&3 zJFin-jQ#R0fV;r~6X3qHvs|}Yp#V7~aWZVLyzB^L&CCzu)aR$ML-aM!jskWgOCi?TfkhH*JQMS6Yf@K)p-Lud2mN^5*{tc5vh!`{J9&7=V3hYU zA|p`G_v40)k}e5k@Z*d`Zw!Sp(qUFbN!`k)3tQ>!#Ot)!C64euhj&G0R7oCC!u!ks zdA%8AQm`SL1>U8|qB?e_Z~-gz8_JR4AvAC>nw-WC-u-B|fDhiw@#tNHKMCo32ar-U zOW@sr49;`jja2+Q^yen}^F#c}2I(xRn7%4deX}{p2Bp`McGg6?5U3 zkZHBm2Wrt5 zm%O^Lh8$cXi63O=X7*aQpE8<(v=Q;8R)~~CBPgS_!kZ%k!b5AW?|R2x1h~Gn7qeb` zc7HEs6S)fa?XHz-P*PcQx_bnLx(nXR@sG02Y~;pRU^f~9YZub@UWwN|E?-Ja)Y4yK zrwXem>;gt{7VosYs10i*FD+{C0^Vzi@7KaXXG4g@I2G>u_fTz~`%Yw+?%Vr)6p%9j zvEo4;Uo4pd707VUI`D6bk>AC{7OitFwtc?n#H-q03Y>PgQ7k6b_?hr*`U-UyabVAu1n2*rOU`p$eFbSdK4Y_CfXo6@Q?Jw zJHVe-(gD3rzG8^?3R?e#8q(s(aH~T5^QSm^X(sWVS{f71x(JiKsFzf^V}(xd9L8F% z@Ob|Q*_igdzqk3{REgA}&7QZQYSJ2HYMtrqe;QZ7qO(75(JPkTnTlOmnZ$fW)+=q8 z&e@dYev+5PNLjPV+eKu0W-Um2g#9&UE#kz~tVNtovlje^ZsoqhRu;}$T!x}WhEvI% zW-Vq0$eWzC$Yj9_GHc)_mk!b~K(QE;$7ri@nBmmD`$+#CyO;{bhl5xGclChF1 zjRg*ysuAO`U>A(Hlxj_S6b`n|Q3I7CRX4OHvCi=}lpAuLgT(Ee;zGt!M`buJ#Va7| z*SJDcNkfVph5~BuAyx>W_9l81t8*HHAHJ>GY1p){GcecRdeyab!VR6$QQGoyv}B3h zVYD9%8!HL8H?2?u>@5aS1J1rrHXsJdTB`@y#-$hLA|ljZZ$Fr-Z)JM>FsQ6VZy!au zRp{+IAB5`mj!Kd%EzhlM z&X(@t8=XswZo@9!eaCH;(yLEeWMU5RovjDv=I9OIiLLAfHpIy7nb@iAw=sXM878ro z9PDY}^{+#9^{1k%KgK^?IX9NdhGJ53j?3L{xLmYQ>_ITx=;l!r73OFY-Wx=x=uPe> z=0SG|jDyNbEYP_qw+ah%ANH1@H`3yGQq!@s(~DU+vd`#j4+pVfuJrA9Jz{Kk<0Vao z08PI*Ut5h8$QJ*=n7bFm67Zr&;XX#uwwIy2D7 zR9dx>3JtDRyXjl9{??{nHr?p+hiNp-$&7anN(?9m>fBIrD1?We1Zc`oC_Wb#l6#z# zx!1hL#|p`kMSGmYD%H*Ck65KTNKbr~ia)Jnl}g~XRqsW@Hm54S=W7mzG_M~DX(nl} z0&dP`;Ep8m@-cgPe+hdhyLK=7oKEIdGa~6^t<`Uac+AKuXE{;|mD;XZjAm9PF>#+=Kn!fIh4( z_WvX(3he(Uc*@59=^?KIfIWSCXzZO;?1$RjL6R6G3Ml7A0R;Fd1dxb72K<8;(7OA1 z*&5~9l4i?PFTzrU?SEk`6nOoV=5;T??~lOD30?`3%_PmmuMWdSg~Pr~h4!eC3A2@j z?k{6o7Vt$FJZ|cvMm=FYNpHAAHYRR+f`gl2hD+twT7g5K9rLMT^`k_ul1CLt)x!74 zL5NTAY&lo#{mh6zgxOZX16g^^ke?345H&N5LRmAzDOyH!bCEGK{7yt+7!?)OtDaD2 zd>s51q0VNN$!PLsdcEqo;!#j3azJ^jth-Qd$asfLmX3F}r@9}{8-J0qiP-1IiowZw z<1~M>=8b#v>{mP-NPV-|d7r zZO6COkvp{SlJ=4HjDa^2T`>kGWFBJ(yg5~ClI4Sj{CD#%CCi$<&l>_Ylv~vh_@zGF zNDqlIC``=%#E|G=f5wo=$g{IojkMmU^Y_>L8~QMkPd}J?Ur5sX7m@W_e2C#ZmNM#%0$jMoslvgkz5W zj#G!kIwpl5d zVHvUlRK5K4!bX@k57i@ywy#H_j0lsGO(iqX_D~V#okS-;!n`|GP1?B)wvYE$c^{Hx z&2eBDvcx{#D#{HBugMGz5Ml12Y$C#p8JvLAJ^amp(;0bI8eyhM6#`7Yz;taNo*I~# z2E~Aw_)?y=|0qr@8B6_1q-k^bFtIv!lEPF2YO-8L{%tBW_&AOOL*5jp)MerqWWPAqYRy8sP4m{;Zp}_Mo+2x`JLxx;EAMMjILp@2>YpkB} zy0em>T9?*p`Ayjw71HHfCqpftqe6qL?jV}H5VrW)x}O{I;VBX zJ#M#XQYuCuD=Dfw_oHDt$K~}r7eX-;(xoxYaC)HiRXma$xLyGol4f~d?n7&^p0grY?z-wd&D9w2Wr#MbihZlX4xI6rJJsx>5IdRG2(cCW;pz90BnAnwugnXveY=VC$@3%Z;R|YW za7wmLxr#!swT=Vqq$E^;{dUd!-T=ElGB;OyCHgUwG#4KphKn&Sr$T$wNQGG_j<4rw znRb8`TpVPNlRFoe)&78Z5tnZv2A^y?$|G}yE1qra-IVkAP(76K_G2iN5pPqn>4H`o zZ$CwJ^5gBNQ`IC@d(f!jbG#49vSy%VShYmF{Z}YAWK=;mX@Ge9w0 z6#(Y(Nd=fE=!pYn{&W@rGlf?;_BS{a8$6S=*BCG-iRS?3WTqG}r;@cgmmn9@S|v?E zF<`zZF1tdYx#H;YU5c3%qeLYuEhY%y3IX+ z`2zG|Z2|KUP!xdK##0VpPBps-FekGbfLXC0fcZj_#2|qAb$Nh!5odf7UOwUA7-)PY zh2x?%8Vb}b5JgpCTU1aOaW=HW2l{!p@Q0;mRc{=Udy$tcMrox zg|+XaLVMI8?~An$4~VsEj$J!eau>CB$qkcq`;(Zg92RJQXsGTpW}!SURzyC6y_Wrn~k$@qO4; zuJ2Ky!AJP$Lc84%;7>1c?J)LM()*tMlOt28L<|H$KsS05y~=I$po8H5I5&qM1lv&i zss@4R4mlniZ{tbLr-iEjlENqgVZvX{c>mF-^@fI#xYk(123V-Nx==`_wV|fU_0yM9 zp}{rlmb?6}O+JC32OfghImoRt*neMISk~)Q`%Aat0DrsGrUEBi99E`+lC>bEHT2cP zbe>y`TTr5p+|>uL#H69*S!l1+LY4v*3NjTJl5x4hk6LCch|62(kJu~PrY9bk^QW^H zm+z}JY|9@kD8F{7uPzP3xe+;gbX|U$m}q+6gXJ^!u^I#rj*xLTPa(l|DlyO1s7$2k z;dL5%Qse-NuK0K$F8d3?W`6CO-ncr{StPov-iN5yFJQ=>b!LYtUjt#1`Iie+y1_m1 z_I>EU+Q!?T1V#BpBA&A2?S%fRV4Ghbdnj>yaK-4G5os%~!?(Yi1dtbL8=uVFnHOmD z8Yt4Hm=GVF@R$cj67I)Ew{p!2=iT#D#q*9SIU}_7sQkR_qVgd5&`N-qJ>LCP0$K_F zJQee&u$a2lM6nZ&M=?3=68nGg|8>+U9M3cK#2pWRT7~10eWGhOR(iD5o@!tnxBDF{ zb=6RAhm*{8IAXLFok{)T40A4!gby!z|v%+Cri>GXdC8erdRnf2| zBTUC;DS<(=zb`c#>*E=>Sxlb-UfY2)k5bpOkOPSnX8AViC%^CDc6#Dw znLn+TlF=af1>VO!8YvcDZrG047-xfJs(l)1#`tNq(C8$xZU- z>4}?U{@Li0Cq7rq#Gfj_OJ3;Gh8WGhVj#Kwbm z*RSD@?ba$$V!Ia130iYj$HgVubjh|lfB+{+^P}klandyIn~T`FxB#scH27Up)sEj@ z^6}kZ1ozFx!ggpiqQe{5l*(h*@ssZ1c1GBAt?T>P(^i#DpJ!WD3f(mx&Ex)far0sj z;l}oMtsA>$zd^`#pZ+F8^H;m?;>*m?ylHHPbyWFKC8~C-2ZsA_AYRBj;DjpNJL9$(o?RMB|HIyU+7{~-Aik%Aq1Jf%tt)Kz|;FB*>;WdXXkk0)&P?M~ar z(J=OL8|>T2rW~sg{~TjG?UOFJ7FuC9P?^TqSlwReE`i?k3CnLGc&B5(ZL5itNwB|W zQ@f)F*|ggNkE(VHcd{cFE*|fOi?i3x@(a%|O1`YxzTft%j@7C+Y#$t_rs6Jiwq0=A zpfbj(MC{_!n-mG}KQSQKw4kfoph{nqe32^5c2FOnYk>n6HPEMsZEIMqr7q?sz;U`` zexu!r*g3w9b2IAIy4``MpcXb)MYH>_BLptUB(J)4=~w;?V}3iqEzNO$(##ZCwoR0IWKP{}w;1jdsnF%)Pkg z;I4ogq%Q^?_{^Dz(#N_TR56X#i5u#KF*pqs!e>mlS5I4qU1TqU?m{Y`+awJp&&-G9 zC^t<|92^E*$2eX_6CB$PQOS8V4X_vORP!}GsQ2iQNFlqR@(C`PDIy<+9dxU?&~C))$FrWBN{n+) zCMZs-T6v*e3HmVcen>v$yfiKO2A&mGtJdz4O^Vo-S{rAIaV>!7!Uvxs{Sol|f#?nl zzK-Q%7(<8w)J;?v8!s~%*Hlag%K;q*Dl^AU))`BmK_-76WVgN+mnHk8x+S4lrAu(< zWVd0@=0b=|XdM+^74yn+z}D5F|G=XQTQ_V77LtL8iF(A;?u=JOzM}O^HYQ!^2pi>x zI`8~q=8=FcXo`S04?^OUL&cSsH1-S>>~|Jd%Z?Rw4AOLn!|Y*n4G z%XU;-l}^KHM%_ochu_tGpj%>7fqg1$b%Ki1Wn;)ualLvqaGKqFyCrvwO?b_!b2`rM zPPmiq_ItZ*+K!^YTkS-sma5t6RYMeE+beZD43UWIiKg8US39bmw*IkdS55{_P2@*o z0*~h^v2AVJ3%cw;qgCzHoolUXt+rHYH6!PAR1Tw7V6QphQlr&eYjxS2$h4S~$DLe> zx^{J_f|Ez8o?UOPm236Zsd6nqi}O-zwIgZS9O1HAYHuu~;UVPOT(erWJTbag zofvoL+^y~bcWY@L@_xFjs0 zl~y}wt$Q#z%NFT3-LSZ7hfdX6cY+Y&rD2IsXc=S0EoS+?rJHWJQRw=eLe=lH_?@Nc zyIe06*A^~1R87>f$RHfcZdR?pAro46EU6Dx)sAe-YwCwDP2Un(b{%>Z^2gqE^UYL+ zV~1XSqgYL~R?x5`l*S*l!u8f%Dq6AY_G;akrgosZ4XT#3);i@y?oyW&qvRfEM@N=W zS1ZwqsYLKiJKIjP3LP(>hHV)`!uIEil{bo1z3xR$VAqY3?$2>eKF;=}2g7K_+stMp zbr~*#^YTP&?m&>*$h&g)9t!f@uKb-p5c@oG;uiv1r$2lWiQBk1Ue%$wY$Qr3)@b` zt9cc;HhQ{rj2VKX?!MWbcTd3AY(=->0H6?G{y(7HeKga_b#HGlM8Vx0#Br;bi`|L4 zJvbBYNN&1;tjvZPRh|0AA{qUH)q=t=ih0UfY2A7I8@Q#DV~OqZWV3auX~9@6FAAl3 zdQkKY?kU<%!0otMakxw1J|r~!g|za}Yj|}#AY*?0owuzlSPlCmO(tH{YvkOaXpggQ z!x!OkaBy&f@Rp4Rm8{#%wGPeS!c#QYy`a@3BoZ!J*H^0^%{g#T8w<)`W;hw%g^Jy@ zTzH$hgE}!8TXv(>K{b4$gWu!zlXtS}aEW!E9yoTD7d{oh)b=LuhO2{GSKCNzFGS$uOm#E0-I~%tINH|Vcx`wZrH6&+# zHh!vWr?vL0kn@*JO;y^dl#)%IZq%1~KL{=aPUr;dPM37`3n=@9cpm%J3xFzQs}$%1 zj9`pS@j>BsqnM>T!7j>B4<*>lds@`r?=R{S+W}=<v%C1jcgz(ftld@q1c| z?stjo@Ye3*ttB+yZ~y`8UT9J}cCe5J#|kX$Bd*QVBM{oi6+IqfyJE#n%gM-goJcUr z#FFs00uuBW1{-ho=$$`KMdsXR@&Kli(9_8HpODIbDM!Yx)MlD#x}xL$7Ca;_Gp)<0 z0XCC#Z!XX6jX#UqX)}`D@rh{h;oBPv5`ZYM!Glbhj~`Plz?FXRLhggvc&k^8*HDo; z_1uGO(rfai0Yk$t&hl;Q`PnyhlaA##3HnmAJN2l%Zr3|bvU%*Hu+wh00<4QP>>&F2 zPKy>|&Oqh;Yt2^cNiywvQsbYWkzLk6L%cF|zZ`2ie!_6*q3(}+?F>y6%TMs%OY5F< zs)9ABF59gx%XYKkCWda%6l(H}`LbXwA@QO<3nAb?nAd61<;j>%xgCSH!b5;-81L#4xY_2psm)@7L0gDD+$e>V0B*BUH*q({2n(}@cwTz;?UqQK1mG{Aip})OL zW;C+T1r4QvhF3k#CWY$c>A*p@n=gWE#%N-XsaWe22G}mu(5Um6`BsAOa&={}5Y5l%pvU(y`XV)}0(rl;v2F=5h>#;sUwRX2KCiQ6-)n30_*yMNS+ zDZ)5qtQs|Xi)-JsLYUnuVaw&PwYX^AB&SmAO?TX~Wc|!(n>^Pt_6E2|T0U|F%Xz_a z8yjUqQmdn%nv2IIm$if@5evf z47OM$LtQD^2i<4zd#ppLt z--vRf`nq=j6{0KBxB1d;u&}M=H-6aYX^;4hvkB|F?|j5qSKuWRB0kQZ-$#dXYWDvQ z%C8U;yGFU9f$AoQ?KmqHRZyc5cJ4r$g8_*tXOi<4zdh3RL#kE7h? zTJHqZB9>pmdV9o|VZ9l77KYLlJ@VCO_uRF>4ic$#_I^kv%3daW_7lbU7vW^D2Q|mC-b_>JoaOR?WW{mwK6A zAs5{kW{G@K6fr#SGc>4%>v8`qep2?DxIeKqSt2#O-%PLOxmXnU=`ndqqZX&I2=4zR zZW8<01-cGy4pUdIGXGO7xS5202#1CKGNu!Lty}ow+!p4p-!7nN9y3*gjumOYR3NYa7WfLa`k38)|EFG; zz8LRB;q4@=xmfkq@P>ihEwnuTnv-q4^yTsf_rOS2ym6$mT9s>%gz4*2p38WP4`W74 zRL>p%gAu66-eClO+%p3HPkWL|{{I+hY~~IJo4rkozegldU?NS+@%~}t=u4u0nhM1# z1Ha(!hRP)M#8}0?=q9fc-2>vaVBN-7;%}*{onF1*e5pZ4A4J2k$G$}6dU)xF>EXf= zZ=(#x1lY~(Oi^h2OQMWl zIB#m^YS?NniTxz6x}?;(M@he><+?*g@Qvh5*vy z&LuW*-*f(%0iC6(S+W{(Pk8{9vPxFdDNw6qHOeO|gUD^NzX5-2Or_de;w6S;$&%RC zniLEsy-6uw4E6VKBZGkAai8vAK|lHH6Xx$`Yf-%MkGDjdEp<7ok{9VMrVYF|x>Md% zzxN`C+>Q+6OuL&cm8SAhP4v9bi6Z!Cv3vX}J`K+ax+Gr`ADQtjqH4ZiTgL0i%}PJg z7qh)%L$bYO^=Co&GPz{3cH(>s7T^C@)KBw@*<@aYiqgq?qP`v@-XHMfvx{SKS@!sa z%EHp}NHd^mEln=0lJU|@OnC}3p}S*=WPR0;%Y^Pi(Yz_mWI}J`d5xA%h}S`A%1yS_ zxB=cKf9cV0kKW$;(Ctn7Cv#Pg`j%vFTDAP!sEvHso+ajXAdB6k^vD2f26@x1?jdil zMlUv#y!{I56XfktT=gMuX|q@SEpu5Z*+YZEsR6*evrJ>b(c%CKSGu13tcwk*RwtCJ zX#5Rydb^z7{RYLOmpIk?)~t8|t-X)S)~Km7i6u=1Q)KPA;0xYCE+91+Z^`E+gXPNWAF+iX+OUTW}Kj&HV&EP6Np<5-X;M@+B zva8L-Ol2Q1;UAhvDrtWWpax5YpGTn#g{R~`3cp|~JYngu5_s(hAMOT@`g(Us_NT`H zuBCc~0c@9f4E;ZrdTO!as@zp_Go$;^ce-H7$CI0s?|9cJp`y%>_9=n@M zo$+n^xunj?>d%5YAIgI5$=c2BQiC%mGsT=am8=cr_c1o6<4d}ce9rv4aoG!(Gp9O! zj&=>d5=&xeuKWcQEy|UjD3CYFJ@pXzpQkpSckY=Q4+EQ#f0G-By45}0^JD16W^&Je zMSX&M{t#FFxM!->x!g0E*WjLN05B2$4vj?-?)j2_+|#a9oRGe<6sH?hdr0UACAC-h ziEN*mHIiN-H7oJ0!wZ&;CWnK+y?_CDN)JFU8!ZjqJ~X*!E*+hn%=51)Nh&%zLxtv* z#lk&g&{1Ra@Y&^=^F#GW!tN_kC?T2CmM?Gb+zaSCxx2`F_>q0|ZJlf&|B8 z5e32V4xV+e2`6^@rSc@wv^!iUQ5$cK_16JvvU~#|q(a4wIHrfZDSCVQtmx+ls11GT z=Ld7URn#ork6Q8oOh2>u2+ECa7KQ1jG!vqq56S-KwU#&s?WO+WfLt-#dY$fbgB_QL#3+TT3W#8Ibo~f*%3}@qBD^A@hEHF zy3?d}sdx>1l%l$Ge>qI&_;`Jt4?@0SN?$@k7;3z7J(+r=S0M^D9{GhN(N;K6kI4u` z`={uSAlgsU6(`#K>O2x{9O`o}iFUI3%_iE(+WQdgWTu#Cr;@cwU%WkU4#_9ld*ZSe zF40bP{2USO7sZkonrI(F(LB#@Zc5J=$eSeEdWif3)W-8pv{U0@%)&HvNusS=-9xlz z(2LC^+P9-VLA2k3tA0c~)#_ZLoy=QW z%hstmBX|0`uxWO3Fci&xn-+gB%^nQV3$yI?VFanbP)LR5mAS$<uymV!MbDVCRlfma5GqUMxNJX?(P=VCGAquRp-J` z!E^=)*kn39Yi^Zli>h6qR=Gu`oP_d%`SnZWtQ@;G;1Q7X570<~od1okICAD!=Mgzq z@G=q3IStRz+nvekHyb%8Ywv@clbK@VoJ!Uzy=_O*T_t@%K5`z5%U-z1Io0uVgq&X( zOJZo`{CpHGikvShkT;2(^$_{{sEy|xIj6=W8#(J%_aNt|;Y&6XIbRQ{2;_VVuKFS8 zRI785b26`ioYepTIX{D56hh9o_CwA!yj@Sg`IL(fkDUMq)EbxwXZOzDrVWd@?;omr5^W_4G&FA4)wYJyRAt9_|CY56QAc z5cfw>Zb-yU4s8(PE>j+XxMS%i5O1I&W!_(-LdDH{+iI&-7YI=AcxTO0%FI9e@ z9wMwjRG=IEWNxF2a?bCemOQ{?K!U_h?+;OKbPEuD!T8gma=ui1+PC@#*{QrHQ8C)L z`u2dP8|p=4waMxg?^DU)iGS-6x^!v;wYr1~6<4bp?g}~%%?5-!a1qASf_!ZTuj5;* z8&(WE7Ob1?I-(4;sK6-?hlDCxvKdwB&L1A8^L#w7Mu`FAuJ*`DNJEWhuCr46S_)1K z#m*IY)MGXRJHG?{5$ya%RJL zr*1!+RCa&XE5o{D#*{@$#97v&?d&nxZslwHV{kFu z&p%g83S;u99+Q!1X#%C@BiGLiBSwW>|BwpBT7-!-e>Z5WM?v-oglgbwo+N_XJ-GER z=n(?9^5S~nzmePGqOkRAs3i|87(O5YTmKg2hJ>wT!;-l1u8=+wYW+B+3$pg7bjgiy zkQ&eVe}cSuEl2eV<8k-iKDP);SrJf-P6j!M$=xwXP z-eyoX-RQl;G@7H$S(GR^4%E4!#-R|}R9-^KIlqwH3sUZ0%X$Q~xs0w0w0SLEakR;= z&L7&mrc!t8pdj8H_E1No?!Jig!aWcy(Rzxx>E@g~nR&#UQ9}kWo-uAKXq-sXR`#Y` zE6WGRx5s6lE28ERhDLpZGonFj;KCwV+t_(X(Y zfA#K(F*dF8I92?l;7sl~o2_&Liqc(dvek*&ov6Fw9$jHmYYswg^SEL7fg{@;oG8+0Q(#;1K#Fs95ZQ4Dtg-yFQ0))w*6Kt<@ z+M`hE2-Fzr)QPII+F3(=vlR3f9*M$9ICcXmQxJc}p-v%=@2uB^jLHau*`keU1f%Li zwZ&I2@+erBCvTRWAZP_;5s4Ks+i{e1KqqOk-9pkvEfc(!F592Fld8i1dsqaU74_;i zsM41wZ=?#dJ=6#2TIfPVb@ZvrcBz=NkT^vi+k&9>?4rQI!4%bU)uG_gcnrm!UtyE* z(KQ77f<(M3bQNL4P6PI_S-TUp$~uW{@t|J2s+~r=9IGG%%M-w9od8j6slweng)27= zzfNk0PN&)`Bkm(|?LmOiR_K(?l3Ys=l62h*Jqm4yy2@2Aq$6_B5!uS^$~62ZNNPLL zpAhHii2#~V9GSCR^Xljy;?O^juJ9ZL9--GOF+5Zu1*V?~>{IbiXz5-a=NUpvz$GNS9qg zIe8P1vy5me7^4VdvIFUh2VeYh2z557RZ`Vcimv`@RXqh+AiX{51WSlDT;tDx7dYZZ zjXEASg+OL7r7FTGp4h?mLoplW*hb?>uQKZA8MX(LdQsn}7mIv) z@yMseS-#rr6AJYSrFPgZQwMlscOe|Qn4Qp2kwW&a@`>J?DWsn~6*|*cZPjD7;)xfh z664%ci5jQWQ+c6%iTdHXgNWveOVV}8JD4%yjVcuK8Y9MLbRZJUNcculq(1^#zNdQ! zj0*7uVV)SAkb-ZMC)gJ|B{LbJj%LG+5SFP@(bj{dac`(0(JPOQ2vCb6LfH0jj)tW^626%|(=aCFVxt%Ug+I6LL}A`&&tQ_GiA#CC^*NghtOe`I45Hnu0QtwpB0M|%((^Z;2q?;A& HVCjDW@WU1= literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.context_storages.pickle.doctree b/.doctrees/apiref/dff.context_storages.pickle.doctree new file mode 100644 index 0000000000000000000000000000000000000000..74147299f08a1207a265580a4fe3ba060daae2c5 GIT binary patch literal 31868 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.context_storages.shelve.doctree b/.doctrees/apiref/dff.context_storages.shelve.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c340becbaea4d90932f1f9173333fbff702e3e15 GIT binary patch literal 30903 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.context_storages.sql.doctree b/.doctrees/apiref/dff.context_storages.sql.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fe8412f4d8d578233a85b85d5031f3ac8876e9c1 GIT binary patch literal 39797 zcmeHQdypkndEeK}?#%AaJ^%$_p_gUZS(pc}AS^6yKq;5Uh=715c#25<_AUl`@q-Or*qUK*ea8XlYr9S}8FV1xZY*Ocha#CKB`e&ZE!i z=j}T)yE{pRDrWnhKIc2<`_A_~-|2JiANqj%&?@#{v?b`+PW$MT*=V%Ah86Up4Gpi} zZCUNG_h4`D+k5x*#-kD6JQ8?azi#!SRj5(7oo2(g+P%AbVEwapfP+R*5B)Q?%Se#p1xczq1UcUZ0Q zXkEv2{9a_VyhgWaU1c=p=BDaiJG735wIK9-bKVN3f_t02=p0^Uvap6dJQMcJZnQo$ z=c(tOJrWIfOduBa?6uKIEv5v14GRLyMC+PP+v?49XQMHy5IW6ZO3-dNH2rx?QBIP= z9s~aN*1LQ5cKm-T{(l+%Kb`P*0t~bFKr{qwokq_-yK5Wv`Sz~pZPT{bvZnoRyKVW? zM?C+~bi*;5-h6GY=^d%f`519o>D=6Onl96z%T#A!ABG)(qV0LZn=2-uecp|$?Va{o z`&@f%ch=q=tq-hv=y>hSOpoK`Q0RnBOM4Zqz3ufk^@tJhcHQlmAH3v+@9Z(Y0`RK{ zxV>w}J`eOX3&}(@xf0bc=hasPZPqZFjDTOvdEe~V8tQkQzIxTF+ilAL1q7oS9p5|b zK)?)>N+)N{z-kzWEk6K3X&ORQ--o$jva#=;saIcn9p~!XI8)zaus2hqx7$v@pA9^8 z2~6l2#QK(Dwi||Tk+2-L3^Dsg!wgMh&i7huIP{A;52i*BhKAV$F9odgS6_cU0kX`% zX)g4I=d^*yoaeX95UueCW3ioio0`_mra9ZRMrkwvw?JTtQ;j1|XiqVg7`G2Zmo9=r zJ;gdRI_p3SZR%L<26(!56q2M(Mzo`ptdc|5H=WS(&8F7UeiP%~1JTy>WN5>9vp$R@ z2SZu0u|#V+3(%UKg-JGrJxkXB#M-|J*1oHZ|D$2x1gV8mGdm8Rrwf%Dlr>dtnNGWB zJJEXl3Ku$1+(W$cXd_Cjqn)Nxcf#H=R^f>0xA8av_TxIU7oA?*0TAI_+M8j(f{s;p z=A1f|81*ewU=Gm;)jRB6_KnaiYk@LE9&GS;|7RGxfH$pDwRV$65T@Qhl$*KTwTJHd zaET%zjbY9@;9DkPb=&g-i-|HBPY464l?9k>1FxLA#dN^v%?nUJ6UHrG5YGD+d-i2O+T=k@@!nXm z>d=6Ng(_%R&=pL5d63*mZeF3inkLy8v&r-p(^R~BYIUgX9cikEa3aNI8iCcEnsf3}pIzPng?r**WH(+$!M>CP&_hHpzQr+v019XwuO zN_UyXqWATpm*>8Pk9Z$Cvd04`iczU3 zxW`?nXrlGH3q2gbOu|=-4mhoj=Z7_?9a#7W@?0Yq6GIx`YmCFhb8ArOBJS-)mlWBF zsY2L2;dg^1BZ?&41%w@62PdhnTVWPVP@FMFZ)$-9XPsnIs}r4D*xR_kXs_@)Rz)KW z45PA)aO|Pzj6w+9LpV@YLvhp>iaBaL+JLc7vW^jD0T=d|@CKrhqpjw?pkq>~wV~r% zn3%&>kJ#t)pw;6Xdi24Q92=BPE}{l-=Bj8rBQv?jEeoDi(+TvrC|WP(g;Q5fZd_fT z+;r8=k`K73Xp@+%c|didCg|DX35r&?duCehzYns1ugo{IpR&J6^YdL){7%1$(HX67 zGjwVcLe^qr@e{;3Mo_+`X4!t4A~1xRr-&FGA=K1i$2w9+px%qN$j6%5hPn1NiuKb5 zx|_DM#)Ui}mohhEgzE?eMX~7@V?WgH(qMn32Ft})X+--`lT;xoMrR&N0mS*Z?p&sAMgz7WU z#f;3r;j|I>%s0JRI5R;V zUXIbQM37=2=p+9P6Bk%*1IEK_)@`e`U8KuUK7Ygn%#<9M$*O;6%t}ACSW>!Vyi{&%;?eiLZr9VX=9P3ww z-<<>D_XdvN>+uipIuNZf##JosQnAj4_MOtdiMD7#JjQtsC;Hv;y?cn7(pu92Xq?d3 zfVNUVQ!%=2R|(HuhmAPdRyP%zX4E5a_Xyez5`^1t;hOBe8T)M<6H>H@n%#>D4;DBx zIx+IC-m4*+q27UL$awbt2aWPNuP9*=HO*<@nx;=JY0`La0uRshp&079HxW*p-F0_b zI?5$#CStD))q)|wZX+Ol^4J%!Dzizvl)ty3hA>S*Txm<&lV!3VL8ATw zD-7Z9bNAwtOuQ%#5o@lC3nA>kjD8JE2G=E4D2;Kp!UVHd7BE~;7%*f2mIexsNzvy@ zeBAzPSrA>9fi&JRLwmwt%NEQv*uRI7>u4D4nK0^Ite&=N4d20f?EdS`W?-pkVGHvG z%y!!g*}{ab9xwTgt9Mc2VV|*wp}yyu3FGS6Ib~k_J|nJT?78L|C@3f?TKyD0jgqkM z5d&&ASPyt=JR;ES&uT-O9Xu%@|C9ofR9MmKBN+$R{UJ5k=~DM;e%BS8aC6=7^6KA- zJBr?avV)P#boaR9Y(E*Z#I~F|+*;(kQRMt(jAdSiV%+|k{q;onCSw7_YObP?`(Ffx z$3@?chjh`PJSkY`nHU06VWG|0;0Jky2Pj#F8VaB7Ymz*cWDontdC`wMhDQD38dCZQ zfZS15*H&XZEm!6QDr(fDs+#0$y+~nj!D28tpO0!)v@I4+c;mi_oQW>ZtM|*k@ua%k zSK4K?+RMt+71U&>EBf6X4Lfa?G}HumRB0gDt6rqKzp=b~1jBPCV#?ZKv)Q$hLqX)& z?XVS|poJ*u-mXWfSc)^e$ zmG~!?gM!HnO5wY&!RxdTxMDU%FE{AD3^8jVu@b)&Hg7NQ?T&PB{U?kMVvq?duWP>~ zmmTsImb(hNOA_@stt+_yjXpF7nv@Ba7PJASR~Ou;(1I^8xZCjPZpWX5CU##&FpINT zE~RMgVfPGbP5ryCpg(_s8DT%))pO61uV_42D2UZKhW0exk+BBXorA|Df%FA}Yp z@qKz~_pP}ekj%?w6Td>Fu$m=cX}al?DF)LbrmM7wX;EF;D!Td{b;IptNiNiVGBui{ zc^R)5YCQocW%fqnltifYRkRy0)S~IO?_(2=aBFI?iD3&!h|E^10|YiD_9%1eh_kVp z<9?6mz_xq1pP)y+5QfDMwoWtFg8HzT`O^x1ZW39eR*;A?k;D+33fi;gi!EM+} zHDMgGtPU-Lv{1m4;n*Z$*e14QAs;|{B^n;~6!69YwnExSn(x^&iu6HfnQYevGO^f` zgK@~W(|ZUaWenyVw4`AR#p&Lm(MJS)La(KxzdHt+5V2HyD;ni2)l#v}!kXjJZ>iR$ zrd;!;mTH?Rph>x?>Oa_Q#L2e0OcnVLhtX~c$~LuJE2L~4WG^ORV!1X$!JOsVoH~!4 zL?(Uq{y$t*%BQF>{p|f8%;8m~{L(m;sxP*Z{JK693MJ{@Osuohy@6GAXYh|y>q2M5 zd#a*~)mnoR{o5g0l;e?GFF$oh=m!V*e)aBIKQO+M~w$p9< zbN9o22sa>iKb%-^F~(;-ugNlj2iayoh-OGz1BE3Du*KZ)U|0NjyPd(;!BH_bM`U+= ztM0Y1sSjJ^ki52niBTjLV3DxBF5bsLP;d9U%+Ad&bg;>vnJk`!N3Pqd9}04XDYYCV z_%v0ji2Ue(s9$eSfJS1&INs$NP#y00a1 z+3CKf0#uRQy^K{Yhbof07gvBPlDl%5B3=hr)K*C3F)xG~V{t+aUn;cgwDB>MD>ATy z&Gs7D?s#SH5)p!dsZ67(B;aH+Q;WyM#>bL;=0rc(Hb7x>2Yu; zAYH6@>>Z^{U7qxMTiiB!c*Ug!Gc%G-$&D&HibYqI$Xbhce4SrqtyCFyozQzl#6OA& zk(W6v$YcCI8kMPgJsb0Ttge=68{!EdW;@jo^-?HhUPle{(Zvk&;{y+~So#SiEeE0a z$9+Eyjm^-B$U#K3u|K(=AASbrT)u6>ngpb_LoE7(kF#Qn|D(DfDHs%>5ZvHxsPdg(6`Q~ z#Y{j07D2Mb2Am0!saS`ltvgNVJWt+nQ1_iqh;Q27I@_e$RBWX9K3%^* z-_Q0TWQOlcLCQ#SV+E)pk|ayiFWn^~$^T$gizl7NDk4c~e5GwDA2r`59J@x!Fycd< zWJ|GGc$mkI$*scf<4D@L-va9H6ZG_Ldireq^f^2ob3f1iKFR)mf&Kj(_VI|+!r){jxn*lCRjdT$-!Lb-&Py^= zc^Le!aod&Xgr-o=>`YaT)S|=Rq2V&(6@K z+NWSIj7EIW5_h9q$8-)iYttr z?wkA26!qlCaU>LJ-!cVKejIlLtJ+_RH{NRD00rzPqJx11|0K$kF8nl+x-gHK9>>*i zN}**Qqej)`I1c^TP}FkDl0wUG&=?9s%cn}wsv25;9Z<@g5Y4hDR#%=uyCq3R<7D>f@t=15`$ zqEqzOOf4BP3Zm6;GePvt82+*b(GLP3527E!Q+^Pg8gWSwovf(^(UR=I?sYT+Rg$w8 z6$R10)xwda$j%BICsvDNBQ|(LWx_rpMknn-arD4ljun}#O-_Rhp&wR+&xX+beQ*7g z7~!AlMT&%<9)yH4f_{t|?ULdNMNl3=&s5C9;;_bc=*%t1b(T00%d-5SlSOAX=4PqX zVq#{G%-09PP(;*UL8F|Anu_%}Ww8rhfVqZOcvypq%tQU#X77kMSA)s+k{!X=*AAYI}~dSWgydpe0Oah;#N8Z7%R%Ov3C zb%~R(3tZx4rPw7-6)RT09&@5=s-zkycZsi!+pa{HIEC`@aEb4Z2{3?5{6;jY>Jq=9 zLS4-zRukghPD4AXE^&(fniY{Qu^Mj1CEkzWFRM%Z4glmX@w@Sq?-Hj*T;dWZYicgB zBs*N>pX{Q~GDB4w<3WL!v?NK5 zp*s#M*qKgFpme6+r=~3HOfP3X>dywDq4cI7p+>u;WcT%^Z>;D|vk##RXD;ha<6|lw zj1B5ae|8}Bge(0SG|F+MsaQ8qi*==+A~?ma^wX(sl3ZQYmHr09A=y@!2u%qlTq=MRC8bKza7&$1=0|_34}mp5n#85z z((;E{)&9|PA}b}BDN&|S+d7hD+hU%eA&X4aW@=Pj!ue-$Y#b_0)%P>OJ=6&og!E^E zdrJphRS0$iN|}RGBm|eD-I9bL`I(^Ld`dR$6nK@5iW{q)?%91tuW=Yn*D`ZhoLmw! z6#rJ7^(KK#CHpHm>rQG^owKfG-_61%kl$g^r4`qSJ-}kG3p+4kLFJkz40iMw|9JO^ z6R0yumIIVR{?H)EGmT-hNh%jVv7?iSG|+sO>MNOyl1_!3ukuDB@|Mn{nzKbj-aX*M zlTja_Cl-0Lr;`_XpWn3Fm4fce2KclwhPi}zdq;L3XABnpJ&EJEc7o?f{8EP4T8U!U zkAv>I^O9u4^62`{M~yTStv-U0FKe{=Gyw8w^%*?nMyndX$w0La4-+DEaG<0!aQYaLyh@C^ zzbHl(_q$P;+V0}gBA<>dNv3ebAq)77V~J3dTsZdW`b>rKpl?c&s{%BJ4KX8~VDSRI;z8MnK&xy}oQHS1 z!+i#idU9V4O;tr#=HFS>{=rY|iWa-3*9v4RiKXPKS5c$tTy-|>gX*tp`c+emb=x3= zW-jF|)#rhb8)zQNy+e`Ak%~gnxxA5ZDW$Ggv|fZu`P;yUyOj6Q6LTrq)5&uwan8SG z`jwo@%Li~OHK>JdW%MU2&oN7ko9?l-OV08*C+h=g?Q{IzjoNGJ`6kMgT>SwUq)cI# zomT%~+;-)Ym|ZZoNbgtS={`azpE&O~$5+&+RIF>08>%{_ir%w7Z-m|;FL14 zrwJDuv$MyF9OL5xTZ!V=1d7sL^mUir_fiXRBk1#$m_DV=#FaHMIW;1u4PgIoQJ+Jf z+|2xto|u_oPfIW}0w>ali#?rbx>omb6RTCD3tVgLP{uwdH0>Y2;$(pr8XhizWt#o` ztY*)`mkQo}2470Z12ZD+9vPEPQW@wT8P-DEa{H3t9?5#{^LkeW_r?ruEHfSM3jmS1 z7C~GbL;a=sO^*k~+Jn3}<`?nsqK~dTTb`Y<>|HY3^D6NOD({t23a=<7a{1bnBAa^# zfmzZLP%f|&a>~+qRfHsOEl3SHV+(%@j#^e*cnt{5ZQ=EJ%C&`g6D>_*RYf2zqnuA@ z{+|iqK%k$!R-$lqkD^c!a!3HM1rlspHv8LxI|+YwF2P;&#B2e3T7oSQ`g5^%V6sNv zvvxbUB?Gn~Y_SW9GrXkE>APwWE06-c1RF4&8PZf{;Nr4nLPD%^A4g+wFD6hA2`U+b zg;b-Y7gA~rsJ}GBl^BCo+*9=76=)1HjKQ_8I$LpTdUj=mmVKej!0*OLbD>C*x7-XU zg1PS@FljTeQR6N?7IlO}_MJK=F#GO6lqgff|7hv(3yyYp7>&vn++>1+?wR`I3U#$D zc)27wA;v7{SiKBC4{g9q`NJCF2&x~DEWBYY# z=3&!mnzIh>kXYyw&s;NzCCfrzf-$=+$Czb17*Cuxp3U2yl7q6;lDY4crg=%Qk&I*p zQIx-k+eVM9K+BS)ql`1ux>oA=bCv{9+C1;A(&u?^4@9X_Md?#FCEbK1r3-ZWRy3-r z(>GP9tLbz#d+tUW8Z&bzM5pJRE|tf?Ici;vIiuEp3T9kZwZ0ET;cER_JmsqOT-lPE zeNQ#fR?1z@0>vmovKAks#G5C;UB7PiqSg{sqE`>5Ijm{3 z~ABum(Zsx#3B9B)qdTL(Sd?&{UMq0_`#i3}dV|CPh8H^pNWENMQ)<{C4)9oHEXz^4RaJ?PBx%?a`#1-fv98tTs;MzN)-6>C3w0tmH76Mc7MQlf zRui3#AY%YgYTy#=8#hEdz?iLCETfoOY_-K{(&BdYW6@SDzK7<~n(fTnP5cigUf1-9 z|2MGj)6bCI=^p(D}!TT zAsi^vo&zID?XaEnMbMp1)pJ_J!A;NPBDs#KCNK{6fHfe;3mAfJSs^+(t&UoUYE}zT zM$K$ANZVraABeUQWYWPbox%Vdi`H80!#yNvq77W9K#0MQ^d%G|Bt+81N6^PuXB!3u z<_e)?0RtCLlMauzCrarOEmjO@bMcR1lA{Kd+h-&48#jY!J-rlVAF>|`q7f>fBdJ)m z4;>5atrRIfWM6KdjsG9DA7|J8vTK1|I$ob0zwgq4i0r^bmriwHr#`s!F`G*tyScPc zkZmM%DP_u1sxB=UyR@L}QoQX_JnoW<=8_B7jW+8X!cf^k>7AGZGnd=MMhUhX+vHG3Lo_6P<6pSzuOlPIJtg~6XaJ{efz;&v{e;7dHpaAJ!h)5u Xdb8Ug;hZNGJK7-AB2+M62$}jH_CC6b literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.context_storages.ydb.doctree b/.doctrees/apiref/dff.context_storages.ydb.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7027d7898cbe58ed1dc8238e869f0683921f1242 GIT binary patch literal 39365 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 XO1)jBAvsT?o2b%+A`CAFm^1$i>h`a{ literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.messengers.common.interface.doctree b/.doctrees/apiref/dff.messengers.common.interface.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8855262d2e4435b94d69ed2e54cc94506f6bbc20 GIT binary patch literal 72380 zcmeHw3zQsJd8Quo(2SmzAK1o^mL;RH(Tr?kyjaFYvcSZaEDIqv&T8dWO?S;ym%6)} zu4;`Y#;keRLD_->ag$vy0Rk*9!wGB*gvT1og3B^<5PE#JpWJP$Xm27g*p?X=X7X{&O)ZO`!X z7)-myN=<}AEvwe4X-&>YX)|E#-ahgfR~&s zD(H+H2)b4$91W~l8b{X|3rAWOrWtgd)!|qbvrb}A_C=tURUlH+#|aCJ_bM9M@$HLtwhi>9?ANd%5aw%T!t>JIOkBmVn<{Q(6|H8|3#?pldc2xFT*tK?*q9Ud3x7-502;Mm1><))njjlqqH|waT zkC->4k9cKC5+9ya3vbg~h%?e~lcfa!dYHe|>k=L&HS=rwhsX3te1({;m*^090+ zD~{LJu!7@y#BtJV2{s|bm~f)Z_Z@#HNYErsK#&pg%Ol|ko*-I44zpS{JX2kxz(!O1 zoSGV^QpFRUjzxonGzmaK#w2ig(=Iq#HwL9}gb%hGUS8Crq$+15Tr<vx^R%uEVb(E(q3v0hqb0|jaPE{WG<^Q8 z79`^&z=9G$7w}oqq~P@hg~b0ht904Ag`6i8r zL$-@0rA8$>j|w<5&h#{7?B&6c0K@N^*e?MZQiZ!78lDi-|4JaHLc9OEmsBt=x3z7? zqnm*bxlhO&N}k{%-Hg}PWID+CrD;2uv+ZW7RcqO#0+p<0mC8Z~8^1j$)%+3|f6Ht7 zwduND;`O1sFeM?XOyyZc*~*TR<(KB{dY%5IN^SeK9or8kMPm?T+g8)JSTlYkP5!b> zC)y+2^Jw*Y)^M=i%LjWUHV!05I(~R1_$ndN#8st?|VySC7CnfWia^ijRMfk$>cx00k62;40hnKSAo1)6IN-ngfp=|-li$z0-j#8Mk z{P||3xP}rY*T`-Zn|EK5z&q!y(fG3EM|XFkMtpB@9?lXVSvS}zA<(i>FK7UV1|NVX zRwPU@QpkeD>Rump5Psxr7g{B{b-6(3d^lRZ(FnK6&axX;IDzYm>C8qG%`&S@IFCA? zitXtVNRUJ|Ah|QtjFg=>Gf{}F8z4-(U9b7NK`h*uAPX)*OU)~)rU@vyRo1hfAP;i+ zOq0~JJK3FXNrB=`Mo@$+n<>S}eFIh5;@*dUOfrrDntLxVKG#F>@S;Yi9@NUT&yqaK zL5ZJ$fQA5^`;ED-cOYL)s|2uII z>jM7A?qvHB1gaC>aTv$u90*N~q$Q5zB^dGos~OZ_GpjP8NDwGVTlfqq$ePBIJ9c$y z{7#tXriHnU#3UG0Ncu-LlHA&`jdMXuc7!6;n%}Bh^Hgfqh7p;}g&qX8Ch9ksks=bO zmerUQ&3-{Fh}@|YJ5j=pK{C_wV&}lQ&nld|G8~_&+4U-C1B%-TDu>mbebzXqlvkpf zOpjGH!|{WXw+L(e?$|2@>2LP~Y4-^#y~X_o{S#3Tcq9~1F@8ndW%#wZW{0S9jjiS zFV%wWq!N+9R+a;R&?#Hzs}ar*;+zVWgH3YqcBAFMf8guGzaSgV($1ClSxshSReS(OnskS#^cHs| z{xNN#x@~|P9Wsmo%v#`lOIP{bHE5U_4t$uvYcsV<_bu)iK*Tl)cbtIr2yyzSF^CAF zE3YyE6e4Wtsrw(&EUK(#4CuSVLyL%%Pu>48p`~e1(JF^~$oxYp5$sB&4@o@Ec#umy z6+?J#g>s⁣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 Cgo{D| literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.messengers.common.types.doctree b/.doctrees/apiref/dff.messengers.common.types.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f6946fe0b80a57e0c70dcdbd9a3b3f201dbf4b57 GIT binary patch literal 10282 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 CK=%v) literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.messengers.telegram.message.doctree b/.doctrees/apiref/dff.messengers.telegram.message.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3bc3073cb8ea1f9c978793669f02cbf5c76d2427 GIT binary patch literal 59217 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 D-l@E> literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.messengers.telegram.messenger.doctree b/.doctrees/apiref/dff.messengers.telegram.messenger.doctree new file mode 100644 index 0000000000000000000000000000000000000000..25e0f1bf46726f2cd8b5179a6e81f8c7d83c1f9c GIT binary patch literal 59937 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�ob*eaup}t~Bg!2b6FCQK-IY6kKZXZO%e>_@2TT z@UoAey2RK5SW>j(GyLF>#J2I3S7(Mnf5s}YM+e&i-Tvv@8QW2XdV z0kE<_>dgoGk*Gk|_c0M9qIxRUlwXD+*UB*DAv`g{_Ymd;w+a0GB$46xIVCD7I`Cb%= z4AbGm0yxc6S*^`F(BY{~xqVG%TIlh9uhw;J4(qh%-04#p>h{0n-Odv4-A@TPcJx`8;zh7hACe{;F zJOccEn#g41?+=V#bP(+kf4|2#(3@(S2v4hL%U0bzuSPnQnDKU_9t1P zABm`Vc8ip(sH7mqCc52QhCX|xwjMfVNR8(Yw;~5y{TBWer2`YPd4Zxk;z8y zHygd^5ZohrpJyECO*Ku;K<~Gs-LM!FXSfWExfC z1HGxHof#hP7PPxm9_~6ouavCj;c_I~vxi%dVl_S7iQYuo#lsyRP^S0kG98_V%MfTJ z=Ds{!OA62MaKT7q*BnrG4-F%`G!LiCO!IIFB{V!-%Ke0gOR4kR!|B+jxHq%aWpi&I z$(?KsK%OD@W{SpiZ|42(?rmciRZO_IT$0`x-?`=Vu*vJ^*zXMEq)o==3$?0fX#h|2 zs;7IP`W;?X?5h^rBlAc78@!R&D=+svuQo?kh&Ihq5|Eyg={x(p>n5;I{|Shczp(ry zU9lII+0}4w`)0EcPWX*>tBeP2=ZE~>L8I)?b6WFwB#5NleD}RzEj&!e`v@(3U$M%b z9TuCd#xjmh^E(fA3gLLr2ujt?F?>Ws)Uhl0*~Y{=tHarHyVb(7z8JBv5Uv*`bb@AQ zA)LY%z5rV${7$%;o>2yF)t_5xv6X$L6HdIgRK;fzI*)ev9;a{upDk~;gU*8UvW0M( zKj91-El`?9o(=oTOSL9`tm7RPDS3dOGttj>tBPM6f=0PWXA03>bUcm`wpKdfmZe4` zs5b&zxp{1LxWUKU#`SiscoCb^YaNu#;`yH2#LF2qdZg-u*?ejLow8Q4bZhqHIz(4{AHV%>O36Ix^>8?XxGb)3Tk!2>2|QR|E2qV7uVP6H;ZZEUxM#4Gr{#;$k5tu4FUXjQP0w`tca=*DG|o~eJDqVq~HDL#t*x#mjX;3bVlYk9sCK8I?uA)sb4uxps3 z0CO^h^8LGB@Dd1hwzX6?$Ww_Vf3qM@nQ_wFb9QUawSy(r2T)+%32IezHXW1}VM>+2 z=^UF1uZLpdZ4hCjF#|=vNow*)xXE9^28WA9$6a=+_#a9gJO!eAw8CXh z!uiuj*v*IA&L;Q_=W*v2XFLA?mh%*=?|qb7K1qMRM}H2In>|8*UO0(Ax6q$Y)1S}M zpPQ!eXAk}P5dHZm{h^cBJvyGU7BPV3PpY(4rSqDP-i^ys@>9(}yaqi?==^kEqGKA=bM3%0`zsx~sQ zZ792Zj}2J>FCpX+_4qufCA=PH2ijX(Y*b?fXH~Zug>mg^jpDTEl{MO;(T5Xh1?07! zW73N5z;^=|%Z)Z+S0`Lo#uw|kp20Ux9*)W%#pJ)Ea}wr_mjVG4P!rk#&pV9aQ7v|M z!BMXGzz9(qyK!fnzhCCuCAKa{zYm5BcS3JkSvnBhx1}isOu5ZDA<3k@2 zwpHe$l?Ou66?i3oF*{8_5evP-a31w?AIgnKPJ4AYMmi3VIlAzwyUBC%IL&!6+Y)6% n<`muroL;yt780}2b#A>}ZC3~pmdQA0D&)^1+^5V7_ILe%l)Y9U literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.messengers.telegram.utils.doctree b/.doctrees/apiref/dff.messengers.telegram.utils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..bd3c9368ea70c236a68127370357b9b18d270dc4 GIT binary patch literal 13822 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%0A}Jwr8btW;w?kT=d+i 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

L!5kFLa)TN?jlE&aP2^Xv+TEZ(*D9S@B$nD3 zoM^YY0eA3-nv6>-z0$E7F3n;rdK%8lb}4WJfQV5}$f;3(5n*i|;OSyMu&IW2*Nc*+ zd0ePPmUnmtJ)s|j(y{4?OSRD89H_pwQ$7xA@t@$*O*F;8Jk160VxzWL>kVFd%Ab9A zEZooz+9hBH*LEQ?k04q{Z|KYyn<3#@)n2dN-M?=iUU!S_C3sw##a3rw-yqydCD{-# zmr6Y(O@mkfO;+Rm-dz`84y11A%vY@D>5Xds`LcP;*fR0$(V$bT1-*IJ2c*EhYHzWD z&ertGvzSVAz3SlL>TnwvbFmc7(Fg#3Iu}O3M#Rkb$|p+I+CsH~|G~to8ZF}gb=^gH z=}NEZV{&(asx9m{|5<{Qt1OVaty0Ae=M}i8_@o1#84^+ZXupjvHehtUS`QT9!r(Em zP^(gF&Vv!8bl6PtqT8Rf%GDN$gBz_fpOUMXXaeIb&IWUs$4eMOH3)j>WNQVbj+O$P zookfJb8{qZ*|0ZJ%Or!lL1UiFw#UMiLG#!E3%PJLmni`W!;Q7(9K<`gj~i5sbv9v8 zV6Gm7EZV?nJ(A(!X5(!W_q(&#Xl*|FF;4Snj^0Eu;)wxP1KsJM{M<>AJJ#%2zjc z$abJj@lT+f&(RW&3H7-mTt$qB>3++hn{Fo^#?7VbWe@;lXJ8)&R_w=ld*Rv$Lu{_B ctu-r+{v6HC1(L9nbEH{>1SVUtKU@6&0i{{UYXATM literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.pipeline.pipeline.utils.doctree b/.doctrees/apiref/dff.pipeline.pipeline.utils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2a72a7942e8823316b610a4a9015fe9c14994899 GIT binary patch literal 31507 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 WL!Z{jDo$3&8wjgOlfu?&@qYmV;N^b+ literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.pipeline.service.extra.doctree b/.doctrees/apiref/dff.pipeline.service.extra.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0fc5dc41c97864b30232f906e40bbe5cd2e55ddd GIT binary patch literal 49316 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 Jl?T7-{|^xl`K15= literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.pipeline.service.group.doctree b/.doctrees/apiref/dff.pipeline.service.group.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ec41fbcf42a9e9a7572525865dc2d421960b335e GIT binary patch literal 53504 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.pipeline.service.service.doctree b/.doctrees/apiref/dff.pipeline.service.service.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6df3f78e90ba0399413bf936447e486b457b936e GIT binary patch literal 42991 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�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 Kv8EZ5@&6Bew^xDy literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.core.context.doctree b/.doctrees/apiref/dff.script.core.context.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f0a017f6560c9b56f6be57ce92aace8f3c9e9adf GIT binary patch literal 94650 zcmeHw37A}0b*7f?mbxXiK;p2N7|47{#sRW`(U36zxy!pt zy?5)qs*>ILCjLIRUcGmhbI(2J-1DEi-97y9+9gYu(0{?&My*(?9GcD*3YBWXYqW!v zg=)Sv?^T-Z!|kp2wC`+B1f%ub!A7-J&wK4)2~y;XrE;O}RoZ*o6U8OLaH&%84u#2! z!^M%}ioNY%EZ1z-OS7#eilt(fmkJGJ30CCGxkdvo@jP6~&GV;~g;q`dn9b$)*S$HO z9>mm3EY(CXRLhm>?cntJYN1v3F3J?<=B69@da2f&&R6Rm{#2UYp=LYS$Wu(kB`A*U zZnkr+U_~>xkLqm~M}v`C4$W$|i_3%2Y{&=v8WGLk9SoIA6|cR!H5-gmf@Z1Qm=>HH zY3AztJjFN3h~hX}UtG7hT|5^5ACLb}!2c&v>q`w#*}gv*Mq5jTc5!2?m?@rJ+#KAw zy;z<1w%1#gidWx$uv*{0y->=PtNXHZn6=dGUXXChd->tsHj^z>auHQh+`PMZCb*i5WfpPfLL|R{Ctm~{TE;jt3Yp36tLJJ( zjRCiQ9Qw60BO042H8QzOA=k`h!1`9c*{XY)W--^K53Pn*$TX|?f{x0RDs$EPe2!S1 z$<0<J651dh9BrsQsQ-%QWjyAxcXHppyEQ21>8B znv-^s`&f~z9<9*HOs-PE{|lKaKGnx`$|UV|uk0PjfiTdo(+T282|1-)Zl}j?0v(be zwR-hH3FbyNq*9{hm5{4Gm&kmP_jby}phQeZ}Eh_dphO(Y4e#l;j44uAVDr_InGN zIWI>#&V+M5x8LiOWhS#;eR^z{lH`1@LW(LSlxa|C7)TLQs$ggzCdV4Be36((c0lM7 z@vyahkPnSH8V@iiLNoA3q-5h|fkYG|U8ON!YBs&XWJXH*)i++h+r`mF z?trOje0;!=2fc;=E446Gq7029bt$j^pEh1ek)K|Q#+4L#p_?}WI3Rt+jh^(7)ytf8 zmdXD+4<#_4R9Ng~!O7mC8a&f1{AUj?Qr;_MXBV=}pTDymoEZ5Pj`p2!wTlxC82T}3 z=s9Q!>5`Pl>Vp+J3K?m@3xUfUoCk+L3pmrvG7vPeH8WAFWH|JQ^RBnHgR^5$$+THq zTYwZaom5aXoqNgvUPJJp@|xGln?R6koW5imB_JCbh_p1pDP|QDg%We@bM=L-%>AM4 zqbxh)q6C4(;b7d%DV(K_*GfiyEnY?@f|a0did6x~32ND+XTYP;L-XYwjT#(6fX*89 z(yJfv+9U|?1vlQsOAmq<6)JV~7?2ahYDsV`;~{~Ac@Ku8j4@U3hB3u=&Pds5VU8}T z*T^pB(ysMWN70uB`YY8xPsR67u(Z<7>77Ab|2=U12^U5y{$}xGl<-qX_{nYwgOlf5 z3hu97cS>l*92 zsr4u;Gy)B|S_#jTCo&R2P5Gv33fEp`0E-Xh z$kre{0);@(gw&!s>%*wEO>G$A#KEe?)f5b~$O^1RuyU?dE;E%XJ`#*&o7FtAxY=kI ze^h+r&25A?=oMGLb*5fVY-K9;4%k@6b&&or2?~?y)lBM`#nvK3GSV@j{N~_>>t~xe z*h0cvWFX{tSkY3H8S3Ot+~KQ-ihL6 z!RcK}Zif=?FNgE43pqj&Ygw>D4H%lN1gmwTq9I9#m-w&b* zgGYE;l?Ffr9DV?35s6`*Ou2;7GgrHQ8EKl_rqYRIQ!otu5gnrmM>` z6IxmH+OQ}~g4H#zQh-00J%nLECve>k#9Nt3-l1y@qN$=$T4MiRDwy|~txykGb(*#Y zF>zLLu&lN~e$v7e9|erj16twVN5yRN--v%)V{4IP>h?hcoUp8@ouH(hj?iyBV8J{#+NHQu7MbF0MtbS!a>{^*rgd ztW^I7{3C|}VFLV{wRgcPF?zC&5i(@FQ%(DyRC3aIyDt>~4=Gcq_`avrE!?XxT!u*= znm>UY`)|;a1#2}`KngyP`S)u{{J)`ExB{?36w%+NFR?^V_=oX5sq{aCw7p3Gb5utP z>GvNcqJQLn5dZAIBm(W5&4V$0|q1AJ( z3ZH#6#ogrrzpO&fMIL3_$YrL zgA@YrG{Qt{D^>YUrlXRmzJ}Lq!W-Zi_As+s6uJ=;oV^8{iVp_cE*Fz(6Kr?~oN~mM zPLF|z)1nY(U`b5-D^T}NIr;=^MgECx+bCYDB1UT&F3eRB5oW<%&9ez!w&&u_G?}p@ zvxSkq<g|2^D5eYpAxh^f4)~8!F}(W6!|F%4B=K(gbmVJ-0mp>$ zLbJX(Oi$?&wrtxr+0XQ-DF2L;@?dGTv!kD+ESvn_!9Q^SKO0gsL;^2s;XhP8f8wmC z_{FGDny4b)L`pUyn&v;w$T8*Amb>EDW!Nl+>(9u>2(K-6T}p33G5^CLQbP}LL@4m3 z5o5=`{5z0?hrfzHDE^ZvL_drVbQPaR3x3S%D<1KWpb+-_=63NX?15@V{3?_<5OF6G zaSyBbQ9UM;o|@JQ~uW)w+tl56DkmfwEk#gx1dnN?eb8sr_W$h2$!;?&I$A zi7||)=%m1ki^-@$#;Dg_g9C{rLR0=0>L(aNWci5_ONF6cxwGp!AwFBF76?TwxRJJM zK&2^TH|-QN-71L&FS2fmw7#1Dw?U@E-4wPm3 z<_Z=P&Ae`pKCHD`rNZ>hH(#}DW>OzbDfVN$Kv;K1y8BCl<3l&EMv$-7fhCsikez@h z)dvScK1O+{!O~i%pVy=;oBSI7L1Q1(8ykZf?sZn;{}&Wt`*{*Jh+2%0*hz7WWGysD z{)ee*E_}m`+gjV-?j%c(j;%m!n0c{=qea812n`=*%!v0g;|BfrBcC?tbMH7lGR$IQ zkz@X9U81ys9_}6=FF7MAQnE*50ln27AJg4BAzCgY*!(FfhqHNzWLK-=39AZ|NjjIi zN8o=OW%c4)eIEHVHg}D{$MbnKR8J?9mrd%Z+0Eqy5#Dbo_F56%X9mdKul2~?zZ)2L ztw3+5@G8Cv3)Gl3MOJ4fS;z=kT{;xX>T)E}M0GiR84wKkX^+fY0~!V+s;qI!~F2#KWUtfy% z7*$vDzLW7QSnJI`gv&Sj9V+ z!|I#K4AxE}ii*|q`#kJ4!4k&;773FFJVPepyqSzF6YF{l(_`$HSb<4z*vfzGG~nwc z@urSdoWC#QQ^AInN3+Cm?>K`%y_G1zs|~TjxOCAWW+Yz zlsK50?TZGsY=g^))~=q3xvei^Zj_6J2PvY;+q7Gy%!IvaQ~+TAwZf!8lg|?^b2$K% z4U;3G)@!!FjxUHQlF<-VnXATp4_>MNHq`0Q(bHji+7~_*@$`USVt;-1cR%}EW`F0| z-wORDio{$7hhUpUn+Q?$3JXsu=VrZfBN`gUE|HZOjc1OBhv%k(hqAP85OLhD-hzoE zvLNn8%AZPj{+m;>-Ei?EVcr*ed6UfrHe8yJ@ir4OvN(ytjI=M;v~P5MUv{J%I5_EHi5ZWM;WXX5Rh+GIOtv#%*g5?dY&h{&bq#!&fti1PxKOM)OR9~7eqd|=0<^2=tpPdLM7muNZ& z5LoQ7Wn1LSv8)2G>B z%BI(qn%GZU1;jfMWE8~?3Qlai98o9H6ziixYS2mV7xkcxX9cTf%hmk;>}{=T)7TYv z;S}4rJ;lQv;?xA%k}^Ful{t_rBa(t|tRH7G*frgx9ntJN$MjS(cHGcrKy#xP{1Ao^ z&I(59OBSoy=k=v4C(?fLh-!JU;heDl4Qd4|2_4V#Xr1wl#Y?j@9H9Sit&E8}fofwC zvqo<8<(yE0Xw#Fp!)U_sYpi%TB~KIGoBXe`r2b#ypU~q!EkSoFzK)D2zOIxxHO{W2 z@0vGfa(0Cf3Eo>+uEr!p%f8mi?rxP3a;lT@cia*+#bBGP#0(w+*M?a6Zc+>e$CnD%&@B#M+8k~dk&h&xPUDUI9{uPMJUtP@qguH zd!i^wJ!D?$C`kob6GlnycGu#Hl89Oi@XkP{e8)xy z%iKjRZwNcZm^rrlB;M_?u&Nqi{CVQ7ja6^P%f7H`#3*{iA6Y@N8=_S;Y%;vM0$(Lw zl|;c&x|QgQoJH0bLBDcF4pA<|swJv>d9QQ;@O5^9VOtD0ViTYRVaHS^=`kz9)p&m_ zsMpPoX&ZFIsUgF0YBIstQynl?(*sJcS7JK$2`N3(DkL4HC*Z81D9$NP*hIz)r3AjO z5h94*UL}abF#Kg5AYGIQ>k1i&Lc9J~wBiK7H8EIHRQpOIF&5Rn%HposMGjQE+sc@z zTc|cSsHfLUCI3A9Au}U@tZC>>F_OC+jrN*~^fvgGf?ccg}i1GiN^u@-vPvB)=_%>=JJ>r)c4?}>fjhqbO&QsTj8CgjdJf_bGjfRWq zn2~)s+*>h9xgajXu^BBbbA~NUyUP9^H_RUb#qkzFH<#pY3U|3l%_LO2$$@G)otkG( zx%8?`;FOr+U$TlZZJ3kdcYvefZ74OFOOYBO01~Srro`W9D)F>ch`V`0`>5tFVAUorF{cTveuU$GZCBUkdOKE0&%@V9i(+k~}2DvA&x_VTC)iw0Qz$$y{2dwfo^#fKNFmLcn zivx}dc6IJ(zBc7dt6FnzE>GWCSx7afx+7#!YRq{7vL?iwSGsF)VNOv?&zSR8syZ5T z{=Ac_bfD-K#tc(9b(bU#a~6!|?FUu)s+T~^U1 zbJDT*c9hi%=DZ*I2E*RCg}WhJP0Z=$E87F!skqEzFlSGHO=B-~TXP{ENzC4^tIprs zBX>V)a<}(Y=VM}F1huf$xoINgu>m1%7RUPp7KBv8f`2|S(T0$x;bmVC(i-lL_+Mg- z3eh7U;}~%KGQOb2Y=f;N2L4fo=;}H(`dc$Jo`jf@F6GI$aLmg*-^QA`i8i;g+vsSk zYoY2jDqEW3QXecBEnp)Kj>^DY3p7^qFlh;I9QgC%wEDP2t4TP7tF8Ls5z9UhE-4>~8loHNcu6NwA~<_G<$zp6l>S^~1}DOG zrooko&KC;L5DM?bi9JJTa0RMn|C7~hXQ%7UCNQI#ZB92|AW{6z`fLez^+5QUc+=tK z`s!-)Gv5;49lxK#*Fu|_GpuYb+F=*?qhshIK5)8nDR!))3>xrE%#IPTV+At122fHP zf$fG^QWHg=DCc|4mWd;zRHHJgQL$N6i_Yk^MJv#vjcHpHuQicqRj3d#Z%Klx1X|T{ zDG7|Pne>&WR;9g%>dH}|C$xGsDCJYD*U%F~tL&*Cw94Dm4_e&_@hL&g=!Un*lee~Y z!>p=+c;x!>RLE5?u^WCpR^nGZlZ9f(tZx{1^jAviJ@ibx9=j23F3cOeb#WkCz10yj ztfxfc+SzJVo>-Y^&U`bp~s--vIdW%Ea$?mq$4(#1RE=9A=%$ zpU^NuTAV1d+dldq%19}LV+&9G$VkHtVSP<#KTq<@hMRcJqih5@iP za$G=9405oiejo>LQ$LX7%sIO1lFm8CU0paxE@n~ZOKl;`TZ=mFV&dV)C8^*?XSv-# z$Vn1}bY``n$hycB7>_zXD8ah{z2`6<&TAE}4f6)Sx;S7-CkGrc z(v4xi$e0mt3ggDGw;*5oF^paOVBH$fZBmXi5}G-}65OHrc0QH+mBL7(cJ!! zRf)-~blm;`%Id{q_!#oNz}z;DYj!hQKYS}@3iJz#zt$A!9}kedf7l~?zcMiP#!Z2S zLTpZfy7`)X3iLURz2+3?_Y$+W>lEle^vK;Go7_EWQ=p2+#*s!gkK?^XD~_T@Z2uRC zi*_943cTzqj^glEj`*jpCY2APDV=V~eRTNn2BeZP6-gu<*QZ+QBcM9 z0$6B;ox+NXF*3PA0o#2rH^|&WyrA1MwDJ6|ga~qGi!5Zir|e_ccZsPsL<$hSDB)lY zHj_H<6-pqCrrrt&*bt>G3PRzL&W25o?VQ8(tA4q`U2??TV=|qBq5Rb?kPdx(G>0xd)<6JX zObKr$k)p`V85EguOM*5QQ#QRWb1WWIc;+IiB|bcJiA99j;B;g4g^Uko2|CN-Jfl}3 zU;43{)O`@)nJa~*f)NNiat$WjmHNHleU_z8iSM%#lPB*e2c5kUY6eC zxjNRkn7&7Aa*wm4bk&HmCM%`+b&+YHrSfZxMJ7#FZ`z*I)??M|}O*@VL= zs~7otKl1e}U+i|4M$OCPPJn#-etzXz*j{3}xQ;u@1e_c@z9sICL7DJRtKN!=us=D# z?)se`yXy}I&|SQLdWo<{_1{YAQn_Dzw%F%6m_R6q`Bs9^PbcxtTzC9 zW|wr3H5N<7Hn61TQZbslW#^Mdv{3O$O@I5ZP%Z49SG93RuWcMd8!t%P#&{`JHUlR0Kdu~Rub>h3yj;|w_$W0p9fmQ;(& z$jwVAUSZum&M8lG1Nkb}WS&nOf?kgf(-l6^4T5j7GMRADd4nL;XUmvwR;*~#p|GZ) zy*TEF%znf9Dzqi5s18dRw-fMz*?z6e(L2K?M$Or{SM@3O`0t=%I5Fy0@-Zb=JTjtg zChz#9t_bh=gawIOL5lSM?j$|ty70%4$u&v{2`JKa;U7wnR=X}dnjO!`BbE6PU&R4m z7ap7tt?I&*Pe}y{Zi2n`zqeVzxkcr6i<$;+xDmFNt-vBvi-040o>5{mGmTv(2%S|t4*^Ro%EC%3L{Ys= zj)fm_VXC~Sm_nA5V~9D5+t^rvxjK@EX|N6qHRQytZyC1TK!gYpqFWzHi)Qq`E1D$N zW|=!mR_j#DfMT=)JZBYT8baN!k?$iyiBvlaCFYJkOO&qKZC0WebJ^D-Hn@<=XG5v< zuR*}xRPhP_hKP4JYwv=w8*;SF1Cj4W*u~l_#kbYt<^bvL;+s$hs2inBo25-gZ~LBB zxv)dw=7->1r6w8X32eOiOyfd$%ZAT$@mu}VCZ!;IxZ8-Dn z-G}x2Y$MWa>>@i#yzR{0%)%!BlrC(f<`tA0xSTyodOc4%!b>FuOI|o!guj)_XK51 zE^!-d)$SM+U?bd#6v1CkLon-uFEYlu8z!`$8kVXLoVLfmni~o^@Jk*$GqEU#bYK;e zf!NG!;`Y%I0gsJ)<@wd4&!aIs#PMT#Vj&Lp)JKRzL<@SocJ#D-uF-S^HM$<>Lizg$ zWo(hShtZL59=c>V{Q1euwp@K*1OIH>e~_MD*m%aVYfYn{D4ubOmB|!uXFP-Iv!zLQ zDy(?Mcv#b7Iar1ZfgQyd;;+T%#C|BNu{~@=`iO;MfIm&e*b$49W95jA_7g=F!B{Di ziZ3dFu^eBdbHJVz?XPsw9uuoFmKV!Hs*8n zCc96p(WYyX{T!7lsWQ!_-T*yZa|z><)#~i%h|KKvqXNCfc-lu z(`M-elY8k55&s%o+RVhw70iw75x8rTox?SWW$4&vM*iVm9yX>kx1?ER3zae1qRcDS zBAM2COccjLYFLg~$zUZ*b0H&N3sVjo%~xpC+{+yH%JZ=TuW9doB{ClE@WWr5if1AM zeKRseM4;)lu34r{kGQOzu`wzVJx?WZvp&ocX-1-I)e>*iyY3m;&)Q)Ypo>YIO?IhY&^yR*PfvcpFJ7ML=4p4@Kq_vzP4A*x+Wi^Gy7_xkEOp10GTx5HYSE zPTU3EZ*+gK$3A$E*#`-4bdTzUjx+Hs{^%RkBl~4ip9OIDOOkl>Cl&AQX_((0AmcyL zBjcYM7~?ypVcgsmy3m+4?Mj0EeNQWnTKoIHHb92{WseN~?!Xvo?eCL=uxUj?X^r9M zIH3d#Hali$EQ>M@|EAb!hd_Rsn4crHg(=k1He$SF0q^7S<^S6wH%E^#Z1ZxegDpqsOXB@)A|DKIr2W^Jdh1M;X}g0gz?s4q0Ty|>}O4YQ;=(b=t%jItk$A9uj*5wu|L<9qnA}Py z|NnrpTp|>Qe}9a8eanBc!FCm-UGkL;w!Mb1WFb<@y4(A2b>WVtI3$g!6vtV+Tw);u zXURyWjU;l$L1{)0ODtY`tXyJo4n46Y7VPQ8TVk;hCp~1vjlud#3%*VS8%JK!ZR3bm zKp#sjHVDHptra&R=o0HIv@Hm$v{Z7k&v>V7;ML%?!-aO9-E~EnH+X1q?9DLRZLcf{ zZ+>PrPAwxa->d0k^ZjLHckG*^b0G(!7DB|#m+nO-m+{jl)L)w*tu|k(dc?n#NaHLx z+ViEyMF?lq<_ASx$F%8AP}|qE>3!7PBmRTKLmnsGC5V;96Wz6el z`OlYR&Y4kjpJS>nZSa4)pi>%ab1y@p3(((Z6=4qTw%;yxF;Km1U_3dty@RFlV|`J% zfgPwD!}G+1uCsebn%8l&*R%pZ*B9Bw24=gfor5{ehAmdR4E1UYwqV|?bN@znRGN7E z#R}$d?{c&^TiUZaW~g#UFh-=WE1uzV9RK7b9kCcT3d14?9f{mj4`Q55!o0 zyIxvvE;jT*?G?@$yiA!yZBfFdJ9EFSMw1c0}B3R8B zxHi#mG`%=MktD4X5UtiJmqWJsQpxCDPMvV?$G$zx8@z2XK_ba<8xyG;hAmKJeNd># z`fypGUMLnm9I_z=E_w)=Tozo%MQ=%vR>MWATl|1Xdtq?V@ljG51&kDV9l)psa{B^C zPf&Z0_@Bc+8Za_tpCO}g7rU-28Z?rOgQ^~+GP^>f!cH9;aS3!{Bbj7?;OLJ9rP6qt zLuA4$xBuKK#61`ZctkZPherdU^Sgb~nG_(oN$mk3{irXp4S;0R<{qmFAT3ra4K4d4 z!Iz_rkWM(>9C+R0EfCUilxefHrjT?uLfRq6W*Z`Lop*YVG%`*221Zh2jsO?xg&Krj zlB!(-C2c{b2$V#xb?0QTDCuXY^jMU%)2iF-pL7#1m$2rUCFov$97?(d`O>2#8g%+W zNo%R)93_SQVxT0uTcS{sou;QDz;pJ2&Ow@-5kr7oa|)bfXYFRlHu-0E=~->kh;%n0 zPFk0sRDqMExspSzn`FXC(v47dqz9bz4p7K((mUyi;UxC-;^CwXBqrc-2$36#Epu6Bg`8-xOh;JV6hE}hQ)ib z$7+&Df2+Wd{uT#w@SKWgUkKZs0tS5^nUcbwrxK*qV36tu|FcBe3j>3W(P0p0kv7Z_ z{HK$#6m1K$@5{0Ax&KF*-H$Bl!hNAEVN`qMy1#KeVou z&ad1tbJz54+(~#XnTD6$gxzlrIK&9x7dpmFTG&$&-6o2DD(IF5+Vo*gbx_F+gL(bv z=z1`LyDZ~oo3!}uDoUh#|?_#IW)sK&Rb@lR}z+CiEc$3!@0#^8w9Q^`>iWL*Z`+fubnz`l88ihzCe zS~p;($&A=o#u^(n5q2+?#O>uUOQb2yeO4`fn8`P?c9;d|S{G*~A40x<&7`rhjJHvl zM=9lW(wSnmv9Zj}>;$`QKB9PR?Y4O=F^9YF8~ad?EdHd);)H8=t)YnV*xqd;42a3v zaJS8b;CQ?oCt&TL#Ip9w17z(V_sH6(Ur^Q>dv9!^#h_?JC?dXh?7gwmm=TJuWA2Zf zJ)mnpsiTNZ*mZ*LGqGq1XEAg!$O_%qMRXhKHu-*+{w4avTrLeZ31bwuBq&wHDCGDm zU0^rK6r+&Nz8d&?h*4}iLB=RvLQgD4!Jb~c7zMi=y`04owYkzhbu4Z;W&2!~9s*7wd#}c;2Ex9@!F94ySV+PY)J$q}|_^4oqf6sCP@yDaY z6Y&2@d)aE3CSF3xZbDYLlMfolYh`3OYN@`*`rv3%dUJ$d)P*poF>z#9ImL za5vTe{*6>d1izQvai{QUleG2?7A2-II?tuM3t7R_7C7AP$g;P(YjO3Qs3l2T-s`T# z)pNWS^c-=1S- zL{O1SMOy(liD*+l z_qLprFMGLqv%TOGGz!dR5wm z;K3($d1YJ_!Ye!iXbaQ5RQN{=EGLXZk9BR@NU-#_+(!MtdEo*t#~(^)<;U3B(}>~_lJE^zDkql z#PqH)Bwx}QGg>{}7ky(&uM(3t!ZlFRHAMQTW&Vf02wEu>TPxAsyIsinx4y_ZiIWpy zS=1L&O`B|?{dy&~_#l|Iy4ea;4niyEj z<+zcCM9g+Zep4d!@>EO_v$f|U6B{wii>TGNlAg7x0@l^LUlTJ!4763$46jtDoC6offn(__25xm>HC%UhPt&Dj%fg~mDfS>;p;L5bpJKML z-oef66ZJFm#c92e$SAY*S;gz+NTQjo-%rfx?&}^t(<7_DXtKHwvqh(7Axu3@ZS1sO zF`O3s@8R&)?`Uj=9njeNw*zGBvpur)`vYUEy__UUa+kvjY7B6TF0&KtMhL8U6@5k~ zG)i_?o*deVAxfiFGDe?b4V!Kzx(n|J%5sI^;_Srn$fwzfK7@Cb#)ua}dM6cQt;JB& z1LW(r9{Ku;f$=qo^e)@GSCcDScrgkZ&Q8Sl4reDK&A90nI4U$p)x^j1y-xLLcnGF) z1AbwEz54S#_G)nuy{fIY4x8C&?N(I7;gBhjpxswdG7`9hohXXkoSzaQ4LD7*C)ACoTp+BaO*>>%cIggHJpR>5sB=-;50EwCqO|3wm_nFBoU=-Weu#Tx! z_S*gtEYX7=F6?0LecS&qeusneCSSD1Ty(Z4>>2$UnJvz?B{)``OaG6IOd;@ zY|8B~KF`=Gxy7m&G?OMnCQWMMdzF*?Buq-OGVe9+T3jphT;gkWh3Bkg5p@M0a0nIX zsA0iL{-C$DGw9lq-J| zN-?yYSJSte$NS2$o`N@c`F%d-iXh;12MGX&umNDM5^{9V_@38P}J*ph9 z0ZM*P46N`Uto5k+%87Y#A!xYr!Li90vGg%Yr^h|R3r54MMfu%8bOD{5dZ!smc43`b z^RUjYR+IgwEpaiyc*Wo>l07Jq@Fsfs} zMZ5T%?g9AULq0X01 z-CV(TENT_K6ZO$6?Evu+PK?$IH(E?Imp833$d<0eDy=PAQG2YS;;ob>9#lWG5$lQa z4yI_uyD3c|FY|rTH!fD^h<+I)VZYcHVK2?36ph5BuhxY~cK#Ued=f0JpojWuf^mL= z-Oq_tkXA1!6?A8#JrvS|L5x!RHFjV}?4eL`C*#gQzJ=oBXgZHleuAD@l#)I55v3HP zXg^yh*wUTwu-?dER`4cC_&gjGQ$eJ*YIkv&&FFPen)DnrJ-j#?oo0@4* zx&6;U6Z;C`#En@;`~%>i7R9kF9}DChL=t%3ERZ8D7u=vf5SFDgkfUuZ-e(6?!tEC` zv;#8kJd`4WbC)G8CT2-^ruUnzLd?Nb7dZ{BP|Xajtg~CK`NAFK={7M) z9NBmm5y(SJA>>yh*t?zN>oKM7Yop%5S{2WLxV2FqM85Qq4U*L8s8ZNW;<#9u{CSd2 z9!?6G9~s%`;Ch#*ZVi*;slOxw zWAW6}PV&>?sjskB#WNrdPkkHt(&H%-(&Tt*8MTw+sgU`Rc&dZzY4FsKsg~Gz_in;q z<0&^O2~Vb2wXq+PqS2I1m@-OnXi8)M?+6|xK~vJ608L3NV>_Km(9|S&z|qtcJux)J zp87#kyh(kbDKUYaWfRyFazCwH?49H!QoV#lkETpw6Qe0J+Y5rGUS%mwA~bcqmB}=O zPEU>MvjtnX7M5pld05k8K~rWQb)YHpvp`eEONFKiVdK)HDa9B+PsK!_snhQYk9M5L z;X>0tn`?O2(Rsd^)NAYyI4O0as5-JHL{V>Y*Wz-TMJ>AD5TdBju;E$=_ifI)bcsxk zqfU(Bce{^SsTAz{ptDI%trWE+!B3C7YjNSH6m9u^cP+h&f{ma4)LBhJDL4xFiE}F6 z*@(50nlVth{Y%iy!QdyulHqW+@1tZLKN;T{e)<7YNcj8#-a z^eNVDP6tAkpe&bb83#hfkuN<6p`O-22s>ovR0m`94e&ohtmcq}xX$pPu_Daw3nja8 zZnjqBzlx4@@j^~oNU?*PErrqcMv}PM=YoaY%|4Hwn48U>`f;;)llpP9UtT@n)eqK7 zO)sk}B2KloZBov2HncZ(K+6UYw?$3DFo22lPU{ zI?vucGa0p9MUy2~UfXr(afb>QA1i*;SVJgmb@9EhdRK*cgI`}9OX`wwio3b$VBc}G z2l&cSb(3P`XLVd{ki{W1UQ+BTve-ACCBM!#|ookW9D8PYC2bpy?zMsU7ty zI{>|S1<}9{i*RgMx(jCu8OvE%Oae!H&0cDCXno#m7ORC!wSv|82dnk{ z4Xn}6D2s}7Su1%uj=zzCY4WDzvX@M*Qb00qs#(uf8YN1xRqbFp)j@~mro2luDs)qf zDBU`nV!4PrUYQ=T3N*pH?(=G4T%v*v+czE!mMBfPTdPDg#u4}rXGbBYZ&z}vc9Cqk z341zn`6l*&bZqyaO%wTIuCh;_`iqsXiPJ0QK9Q#9=`2tG)0BhX&aH?(x<_b!ISrA% zI70J_lxedx#*oyABQ&+OZkL*Bo|y1$9*#2lIrI#Ngs-M21_{|yACS;?)1t;eYQUXX zKF6iPf0Q1XKWesHpjxpv)c`1blT$XNeg5;;CSYamDvSKgp2pVUu(2+jZiS$tTuDy_BBg_F`33I;Aabx zSX>&6OHeHc-yN)$Z_1^L*WMkhgi1Amu^a8+80^t*HB05jH0}|=bu*O$T=H9T<(AiI zA8zx_qrphE)vUFe?cK!-cL$^Uyo!f=ovL+|G>Y5AJ#56Aui?ikUSSrs?8nbB@v~Jg z5*k2j-Wf8L`;weJtcOBL`a z>s9jA0#dbu(N=SA>J?KsO{yJiFh6F!dc9iD!dEJky*fBfq~_7-YdNR2QifS6?cg-) zi&cdG7N|oo&dXIa$lM#u4_4-29krnWMis%LGTPLpElZVst=vAuXvnq)%e+cEIF4UB zku7*NND8XK$;05o2*NP9^olrADnM4fxzZs-S%UFgt69yeSHZFp#A{8VHDAkyA_&H^ z7dQ#pt53v$`x6m8vcIb+G@0?0exVqhH}@4l-apb8SUHK4o;va)YG8Dma7$X4;5HI zudk}-4u(G=rN@wpL3k?rAdBVFe5u*Kddc7X>oCFwUJbh-=RE9?Mu-d5tfn`!nC;4v zh6E=So6TBd$M)@b-I%T|0LxXTtMz@`+rfHD$w)xTY!f>aU>49PEAf8nte2h#rjFO= z@>cQmMiqayEFK!0Be~u0)u&5dbB@&kE3m!ToG+uY(PnNIs#Ite+t;iNPJ>|1XG0wg z8^8}p!u@aDi$-hKN>`dE2`*Q2 zTqTE?X@cP3Sos31DqaU)Iwn#eVR74%WOyR&$EBN(L@beI-PcIN|);ySu$?)KsZ#f|v?q2jyz zJ804R-Sp=*xPj5%OMgBvgg+mlKR1uy&mQ{o#0va*ivFB7ia(p_&z>>-$$KuZw^rv+k{@hM~K7t$M{okNJbcvx)H&Xg^*^W<_@vuW= zd^&)Q?M3owFC$w&=hOOIHWTF2+%b#zuy|xESffiJgWb3AzJI{W3s!}!VfwfV2VRt01=9b0WW~n{ QUcSn2q=YNOB5>3H4-{;ekpKVy literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.core.keywords.doctree b/.doctrees/apiref/dff.script.core.keywords.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fd9ba24b0b4047e9d112a2299fad494ebaca2d31 GIT binary patch literal 44796 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 z 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.core.message.doctree b/.doctrees/apiref/dff.script.core.message.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3b98886fdce98926d9b5f814b67cc3e8c20da8ef GIT binary patch literal 150305 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.core.normalization.doctree b/.doctrees/apiref/dff.script.core.normalization.doctree new file mode 100644 index 0000000000000000000000000000000000000000..35211849a8e795d5713fa826b8d887f74a70cdae GIT binary patch literal 33179 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.core.script.doctree b/.doctrees/apiref/dff.script.core.script.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e226a3dc70ebc778b11a69ad85382fd29f8d4f57 GIT binary patch literal 76340 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.core.types.doctree b/.doctrees/apiref/dff.script.core.types.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e46b17baf9e1ce355d8e64793895aa1de2744f81 GIT binary patch literal 50386 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.extras.conditions.doctree b/.doctrees/apiref/dff.script.extras.conditions.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c7990f29429bfa3f383e01b803ab25ee0fca64fe GIT binary patch literal 3516 zcmbtX--{%*7M|Ie?w+0>Jv+PZBDm{q^{Ok{-9Gpr3cd((b=a1Bx%hI?kgiH~!lWv- zNouF(LC^=mfjkJtKg2)DKSJb!h+isI)jhK~EZERcIdyV!ethT4sc(8e{d}}l|J<=D zxhPgsnx=(HnelEfRY{ez!ulWmTi^Px{UbNj^xUXQC(OGoXe3<7RI|c=>D?%(TOrM~ z**`EWu|gHycHZNCKKRl<;zQT7!b-OB%KbCVvZ+b5DD9N3tfpp~s3H}?gc+AKIipMF z!+vbv{V!Co`#E=g=cE7qlEPc-`H35nED`b|`Gw<|@#{JdIFw@XKmq-?c;g$R?swB!cxOp7}0kKArag$5Av+VKy^HzmQl*P`0wMlIf-TTg?- zA0fWR;TRvV*SAzJ*}5y*G_L)9Os@xz7!6ML-v^_gqxe7k&EjX-EcVJQ_R4JCD>Fhw zAuJ)&^5O%4+#pxQa;&nOQ-gABx6xJ$)fWPBj0R0q3(!f2W)M}}ji5$?g%2Mf1 zx7>cK!%{4(P}prZN-7-~hID*#*h(U=xIM$HMLj^UCmmyEx^B1ByZ#qcRzP+~xqVgH zva){8kLPZ?pEGI25;>2b{LzHuO zs9CABC6Ya5NZ&2D&#CN|J$J%ZfGnc1m1&iFu9vb!wZw6wbE*qu4H}x!9Fif@pRf>= z|K5#6fgBN5Br1iLcf-nNllLb^;Q7JTmxO7pG~u*JB?EEvgR6=4?l@+8!%DBV;@!h* zZ?2i(xcs8gwFB+e2UlNQ+v#qH001<@kspbGygQP#SXQ{}knR-gTex1`UCk1uQz8u;1ME(J>ifL^?zYpt4M?Jny>^t*jzzk-H^;t)sNcOVZ&FS*-;EOs@+ngTdok zQX@Omel02ut5QW)dBD?cwknljpqcf~8X}1$PlXW?pT{H>hAw0Xr15gl_62(E5WyI9 zLfvFAdeo?qOvswr-Tm-{Lk!b(BeEh`1Bto=%ps^#Tmqjbp}7E?VhI#VkqhfT+xq3# zo*R{{BuEQGQzmuF4ufPt;eF^0_ae8pG#|`n5E~Gt<*Jw}y_|V>FKE^-K$BROqd*n~ z*@JxY`n&HTqa&Rq*USgW+WZ@>dGsm`h&^L^DwxgcGtmDtZgYvlhL$eSM5*Qebk98m zBy-YrXBPl5;6>&y-EDJGSh^xyEV;xV@ZFUvApg+h6n*xjLR%Z8>TbP`OCnW5o8&%B zIE6nbU~D(!xlST>pH(G}2=iP$q%|~f3H+!;6d6#^^1_|K6sB5S(-V1suT(TPV;HH< zJW!J_Sc(q5fD4@A2EBCm5@?+fmQx`KM$f>rwc97n@CdldEVA0A+hN7iFq*l&$R=oC zfDzLJrXN5r-pln^b^@mWE{lN_44#HT>}&Ad6=@vSAcnQ9Tl7N{Va|hm5QOph5f?n; zlz&yZVUXI35^jb`M_h7xS@BoGbB5XOE6fXz`M)c7v{}B|-ccd|g5VI&h?3B!tzL9| zQxf$sWun~qLdgyhwdxDkgq`;Aip61jYQ5>s75m^@Z3DsIyKbv_gKG{flBg6B(kYw|-v=01{xCO82;qwV9ZLVd zag69SSKPMS4Jbilemei;^Kj3^4=4V=<{RU5I~e>ed}$nXNva`zAc{m*X=tHk_{i8# O1N%2b8RnU4G5r&^$!ORB literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.extras.slots.doctree b/.doctrees/apiref/dff.script.extras.slots.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1b6c10157431ed527c0b95dd1772f50bfe8044b1 GIT binary patch literal 3466 zcmbtX&u=6(7EUJV?sR^1CId5CiJ7696)*_8n*#>~5|>2?h^7$;?PUd)yUNwJ;wl%m zYtlI&-~b|$Z)@o)U#zx9vZP}6gxDxEOzwxE%4Aydr?|CM*6pl*dU)8_oZ zu*3>gbjNv*_xa!}|CkS5&k8Hq#+G|I&9bRUv?%SAt*oYIYNWDeT+-x>E}0KUadP)d z?Bd|xANbKnulps1kJj@OHzZw9e8=^hSmth5ih}uhwV-aFTC2sPvdBS*c}Jus#5YJJ zH3mX__X?WFuf4P?*NX*Q)hr7-l^a;P3|pQb^OyJ`zt4C011D!(IdZZnfYCv3~0U+-?Q#_=!p@$;OE) zERtkmn(sX;Z?cI{-j1Qn`NNPf{xY(}UqNmDiT_ve|2qEPKnD1mb>x$%&fkJF130tg zdZI|#YNPlO7dKjR19+xIo$<$Rx1>U&{CVy8`{Ntp_wHfTnB1hm`*Z7QaPtF1)wmg> z0?zuD>Lpu)zfIoS%O~`D$cW6~QvY)>`WdSI)BjoREStran8lWu)h#h2L=?gjGA%FO z1E39(Q!K|SyD=9?{dOB;wP0Ng?zqWOSN<-hc596cx>?!%HKyCjZkP?tJc*u9qUV#^ z^GVyx>udhD@1MDLX9G|`_st0G8l1o7UIe2QM$*7Yq||DunTZYFv&vHGPq*BDtHV+( zt5C#kH%clU=!0}*ao9>CX}CSZtVIF9nI|0yX1Z>u)Vuz_sjPtAjz#;bvSnrcoFC8K zaLGUf)GF<1wFXjpLW4mB&4wnVb0 z4C%Y&_BoZ^vgc0N3K&H+wlb|!&-GHasFt{HbWU}FtU*IFnnN-~`V$s{@;|$gD3Bw< zibSQ*@@`n!Z1V2J2z=kax=EPUN)t|tR5DOQKe(D$?~Y@pH>~t(E8ac0wsXw{$9ooy zt{rHP-oLtW?WDUM0sznqM}8y%^6p5|Vp-u0L%LI}Z{fvsFKCu1osyK540Ko|f#2q? zk50@GBhn#K0F`B8<$2$YXk`^yi`*>%Y#pUlUXl)f$Z9PR;BsA184MoRk{a2e_G?jT zSd}WW$^)KmvsI}K1Fx)4)(}Z7c`A&E_&g@5Fmxe9AdQ!UwlC0QhX}@?6Y3^|(W6F< zWJ1>D?e2vyTw<868<7>k8VJ)JV6;G;;u82g3C#uA6ic8`idDF(*_uQytB|%yk znlhvpr-Iq6z61R~<2IMLY-s5MO_W;hPxssdKr$y?cXj~~ z14?B6(%m)}g{3RP#ga?>1HQXb1>_%^oTAUZsnFI2sd}Ma$0d;}p-plhB%Hz@6fm|M z@?0kor_ZVqSA-F*p1T?vxCDMwB8m(sXnEmIU0GGv#2?kHYl=Ut6?us-{Vi3bx)-C#>i7>=LJ_y42{g?}$amv50+%QP( zMF}^jF2dI zzEHA5M6LSbHDRYcykc?K-dZ2JbHzURR@*@Ecdy%OcJR!BMG{qoPWSF0QBoq+hyl;Y z;9rgW7i8i`{{{L1!!tSyF{5jm(8XQ?=6W#p_0=p&P;+U20nLXLs+p z4?ji`bimd)R(|~G`7_+3u`pvicjK;~(kc87b3f*j|C#3u2jO-9FO>d#?gY_mUbk(x z8vufy{AB*oXW@y7KZE#xn%@qm+ri);;TOa~m!BHV2ck%1m4@zFh93|6X(0ZFBf}_D HEvA0~bpupF literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.labels.std_labels.doctree b/.doctrees/apiref/dff.script.labels.std_labels.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d9217287344eb9cc340cb29a79074481fcd327b0 GIT binary patch literal 63136 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 TIR?k?c=QD}@F7UN*Yy7bv&y=` literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.script.responses.std_responses.doctree b/.doctrees/apiref/dff.script.responses.std_responses.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b89060e6da4c084633fc081df4b42992ae8a143e GIT binary patch literal 8120 zcmds6TaO$^72ezI?(Ai}>)0U?iPN!@Fbm!pBqAUV2#1IWaI!&B6bS{ZUDI7N)iXWa zov!M=JOl+r0UQ+)!p#ehT*L#)1L6h#1mYKf;4NeQ*K zbG~z_Q}48X`N0!&=AXVG6A?s*J?8sS>~opxRX_H!DUVcsFW>o5{&wEg?UWtJI7>aA z>p4((A_)DINBQl%E9P`7hshnkcMX?d>CKqkJoG=_#-ye`J$%G@G5!dv+ zzKEy1pJq|S)BZu6PWpbp!g%Bk!}!1*rr7amy~APO%Bo*Ur+-XVz2xWy4j>`#XynAh z^N3eGb!%QcDHg?5v6v0S(|Sd6PX%#wA0oOKY^gwnyfLKPua$bs2{xcvdYvDVz?wtv zmrbj^=qZJq!UNs5&q-o z;XZsv1Z`GO8D^0&ON$wgMFg2r;csPuHwll{EVaQvrF$0n&V=*Cpy8Nm$?L#TREm7S zc2&#$2cKTuU}%F<(DV!POP zCI21cK4@0k%rYV@a~7D$a=8}@DmSZU4T@i!42rH^#U^$QOJqdYl=mPK5Yk=Z^1E8y;xYllEA0~N5N{4*1NF#H-j4z~jFlCkm_@?P+WzTfLztsn{MqGPD@h&6B zgX|s#gPfntCLWC8;qv3wvTV1U>#OHjRJY6>0e(cU4zn;c)+fN;Rk24pP%;-Eiu}jO z5lvTNsfCZ&F;@6Ke6CRkcK;JXkb(M!0VBegqMW|QV(EnH82kQ9WyCx{VwNDEGTD}5 z6E00GBm_`aRk5G9#fqp+EBxUon&0*w$14n%-#EY1`NKw8aoQV_&bL~on` zX`C}m3!JZCKvS&e?sJtE-p?*cAQ>$PFPL*E+vELi9|V}?Hg zM%7G%%zCC?`(Ei~0b%R&nq8Gt$6NDrbLST9xI@%Wj@RkO!hQ~LuXZtr{iFMK*~llq zRb#mOG7$IXD_lx8;!XqDBb`RkOo7;Qj2Cl%y`P{hk zLv@tUu}C0y%FF3WakR#y@i%AztIH)KZmj*{%-Y8AY-7wPAzTT9q+t&+Jn8)BJN$@puSQYN7LtjoNTR) zTw|tEMybimz?cJZoTdaq<`t5k^^e)$RF>nmC0#xT*Cj)0!$nz=I+eNjs7yx6gr5`PnJEcj<OWxpUiI z3RkT!DTFZ@nqrlU!q*6)&=#y)DpoAaZ_Vkol7{-SM)N3d3$y2Hq%pY&jU0 zNGlhV)wipU~=R#*DsFpgCeE8ZBqHLo|RSQ}+i_mFCPIeI!&{Y_ji zp3*CT1k2Cb9v*Vj<5DruEsOYAv6xU)_4o8f%9A)%ZpimJ#J8Z=1PiNXOK`@4 z(B)|wr*4scL*lemTut-^E9nN8mf@1?$7e=nSd2d+L+e<+^&ZOEj~ySFnXI?y48WQc z5K(9<2b&>_Mi~McBu-bv1-z^1hfpGoQ{VMD3@k)1xPBnnAf$s7yId(vWBgZ=+6K;pdNFD{s2PLrW_I$AsVQM7}8tFI^LkFCQ!OfCI;|CBVaKMrbuAEJNM6zTe_3*q%N+}iID3h06h*s z7NQ>!N+t3}zmIN-2M;CUs28WBey%SQrP%@~UB!{s!t5w95OCjafdP7ceA$H%&VB8X-ddReG(+y*f6~cYo6S#VK(7rV~$k_-H zvnN@CC_ryl=6R-Y26q9W*rTd{?Hw+Xzd#vshAx;Ag2R|ulce{sNeIP+!|A4qy!_=^Ud0Gv9sGzFXXGVvz3#-P)WUA+SHF$q0_DhP;#gHX zSM9Cj9B;W-9lVer;GxJ;R@!?-wu(gX`wMe(@{H$0$}Qgj-D$a{ZWU2(UN4!n+a literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.stats.cli.doctree b/.doctrees/apiref/dff.stats.cli.doctree new file mode 100644 index 0000000000000000000000000000000000000000..57a4ef330e538f94f2bb3c72b616b81399c3e768 GIT binary patch literal 21198 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.stats.default_extractors.doctree b/.doctrees/apiref/dff.stats.default_extractors.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7fabb21643b6737632211dfa6a1161856aab8522 GIT binary patch literal 20153 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 R#ijUQTEH4M19#0;{vQWpS8D(O literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.stats.utils.doctree b/.doctrees/apiref/dff.stats.utils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..47b4471df9f451e29de757d9d1312224193eaa38 GIT binary patch literal 42339 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 U;>zQ==)KAFn?W^UmO}ae1N+4JC;$Ke literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.utils.db_benchmark.benchmark.doctree b/.doctrees/apiref/dff.utils.db_benchmark.benchmark.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6f6db401f66799eb660b5573483730aad8131aca GIT binary patch literal 116313 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

c7yB5mB)F;ExXLk=u11hna}x?0R#RdDtN9^9 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 bX!Aig==hmU*3%<1ZP?`dm5-DMFRlLp(8Ku` literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.utils.testing.cleanup_db.doctree b/.doctrees/apiref/dff.utils.testing.cleanup_db.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2a9a6b90198fcad4ef03e950d3f44a561ff53e0b GIT binary patch literal 26065 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.utils.testing.common.doctree b/.doctrees/apiref/dff.utils.testing.common.doctree new file mode 100644 index 0000000000000000000000000000000000000000..057836c440bce733825a160752f0e082bc89cb9b GIT binary patch literal 20774 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 H7}fs+!+!yh literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.utils.testing.response_comparers.doctree b/.doctrees/apiref/dff.utils.testing.response_comparers.doctree new file mode 100644 index 0000000000000000000000000000000000000000..975b4705611efdc456860cf7db9c66acee421cbb GIT binary patch literal 10354 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 literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/dff.utils.turn_caching.singleton_turn_caching.doctree b/.doctrees/apiref/dff.utils.turn_caching.singleton_turn_caching.doctree new file mode 100644 index 0000000000000000000000000000000000000000..48116b0125ce9e05b6f2cf1bf848f66e4d75da45 GIT binary patch literal 14926 zcmds8TZ|;vS>Czy%+Act?CyANY!aJVU!q>f^dQ9;JjT*S>vb+`CdqnjBd?rtP1otE zs;RE3)MYLXYh%EXM>-*hR6=+Fga|>&L!4mz#DkMJ1X55yARYnXAR!)j0il2tzW-dR zPIXWB?2K8XWu@(@I(07p`S1UK{`1SNFI`$YA^!2xS>pN8ZpU%mD0W#^@{?}dE&43V z%P*D}UM+8wZ9bPeJ6T+$T~_iF=+X83&`nuXzEHNk6TIa|F59iTdo6Fqn|-0=^G=?p z{zj2wTAF6ccQXv(v)$0iGBo136*+zRbkZ%7`enoEZl$az`vaKN7rokiI&u88@aE7-Tg{pNv9r_U~*NY9lL>&Z_3d=LOlWwva#~Nwg5-{bRd7<={ z@&6qD--Z8o6Q=wOu$Qm%7VzS`rFUQ9S>6Y{2l&@ly|~X-(;|vky1EmmTdS_`gz=`` z3*#NTmjdE(t-ao=fNj-8)#||*>?C_@*h>b2M4MLJJ0kwQ2d_+c=e;TKes8MS@E+o` z8SCbL91U?#8y{P_pNGu&#P51q)782La$A=qxl7_V44A&gb_u5=`@L2Qjs^&i5eVJ` z>)wN)k24bOgyToi{Sn#yHpBI#!0{Y7)!9s)#4}O($!ngUSyCLVZXD%~A7xgrhy*?G z6sMMwrmEFSSyqI3X2p@kfO<>vnMI7#kwm!2|Mw@ZskVOeRC~&Mz`Fu|o6^)PHdsaG zHovRl?-hc6MQs&g#kA-deZ&qmI!Z?iC2_~YnxEBrll&gGn}Dlr$SH%0=rY&d*t3P+ zxKZ*SJMb$6`Ucka+8IbTFZJ%>I$_q-j5BgaCBOX4)0dyHFMasZM=w8Zwf#sF`A9nN zLdhRJ(twV!YN-?^&@)$~hd+6I&C#5lWEO^J8V0Lt@U*l$WRjNXi=Fw<)}U@fg)B7S zgx;Y3bE3Z>k+yok{;NW*T;z=*H8Z|8ni<>tBo<#06T+eb81cv&8hviJAFgGILuU14 z0?}gWHYEcM;dOPM=@-^O}w+=pT> z`DC&O&kGH}IQVTU-Uv$3K{+CP!5~G+7tk|<7V~?4x7_D*F#FO}l>CUk6Igq1O?Z6p zgn;9>)xLjMD>*)Ky+Y`9W0!w7W|!X>NxJXoX{9m%_D*VkGUooln7Iv}Ffr);WsN@X z`wi5cR;a5M8iPLXZ*Kx2lJf!k#0v({KO6(}NQBfjPn$Juyu8x;5)tILKoF&Dyf2f3 z1_Ahr#v-4*uEp?;s_kG22$m;KoEQV*pAOLsA`mQL5EeAJ;qi(a9yXv2ZK`7=sFj2#4qi1_dz{nH9(`{EM<_O=gZOpDihz-V8t4 zE5cA1D(_W3Z|8B>hU=JTW$+0?(5s(=#t^Nl4{^^8xIKbvz(p_7zJ>ZcB@{M!m1ZDW zIW)gevC>uY;F(o9V;{8q+=5@)jr)B#ndF4R8dy#@kJHR@BG*d%gi&0TS@3MSMM^=K z#iDILjUx(MD?jvBOkI=t`SC1cC=tREIiou=_z9jBCC45PE&u zb#iBrAC%?~K7)DqEOR-Ohn%`&xxQY;KSKUHv%4X4()NY-(CanU z9pUxfMh;wKGs4N<(~_!v>z8!{Uo?8RF9@aG_I|DUykLCR8okk0%hH#XL>wHBx4kcT zztPZj+H%274t}#5%WqpmD^Gb@C`}61`z&W^NKT*OcTOrKS3&FugC6`Lp~S>Y@KtIN zmYv_B5`IXObhdrA(?!;=v3)azc zRA)E%BnEji!KY|S+Dveje*R3qey$9z;dxMYlp(F?1nPYO-K04Up2edUD@BdkfIk1E z%Ggv18^fAfLLWlkR%R8(l(}R%b68!39hAb;7S&?AjIxxlyN!g-tz4p30^d^`K3EBu zag8#l!LQQ@kx&f&qQchLRGzY_6>_}?DwL0~tZ<2BLab?BgKaDryhA@b^z#Gy*{z=T z@U$PiBz`|Det${)-Vnbpi{Dr1cfbm&Exj8Ot$MH#l;Y=& zu_g~zGqn58Zsxzl9$$|m_Cbrh2KVtNoiJm=MrN)WrA>^{QuEf2fNRqyZ!*bv1M^?i zSpMeilZr9$BJ_UnHEcsG5q{4|6e}~XGia4DG7JJgWsa@}ELJ%h5gizYYgYBwB&yzP z0{!^pI0EsBXefUY+)YEy2j}odgdAt9_2Y!44&nt9=81!&%AY!9-FSH23ypOj;xm3E zj(Lm?PZQ_r-O87Gt3N+}NuaUkAjfWRJ7K|^%fomVNfM{Io%IoyeWr-%XpNLeux3J4 zo4HXg!m{kXgg?bba0mWWyg_*&EpU>!!9C{pmiVrBr{3!AJxeo>JX#4J!so#}fF|Wt zd;>H;X|6VcZtnP19yw?gML4y}W9BL?p>G;(?GPv5|bdo?Ekxt{gL#V+v zzD>+XVY_r9@d__eu!wRCYkd|h(!Qj6c+*f1@2ST(0T?QeFZeFNAa+*%TMg@w|Mnl~ zd5irw0!{jFzfVu}s{OZxO25J>CnJtDNQF*lrT+wUBfYn_SG#ZDdxCXip{?pewy`H~ zaNV+Q>L+>DnSTyPy_psITTHlfS&saOle*R#GOpyetiAZMa9`pW$Kw^mFIFpc<}Xpy zjJ!(9tSy!x^AcGOCfrD!bZ=$HcTHcCk}txa9C9GVQDE&dwvo8Jb}RN}qyzs5#4y#2 zSLJ>APaLv+DdsqO4t+#fPH32k;M+7Uoh9SYr$QJ=TEFX?>K;E1dG3oQiI#p0|K&%W#B1XTCCqkVoiBYXf?PXbZV&2TV51<2>t}CYBwfm zO#uWc$@P@=wr1(`NH?V&yp6ePAs$Yz8bUmUsg5bcXED?iVzJI>Ar8I|sD$(ee}$*@ z;I9eFq0=W~CkU%%rx_6BN9ZWosj07q!|LBH!cYwLdJf zsP8V6|IpDwd9mWbVLX51_KASiHV(^T%anARjNWj1p`|8~dPKd|O2h_>j8P(E^VZj^ zv9}{qDP!GCDM$x|G;TATG};?sWZe#nEMIEGZdb^W;?q=GV}r;PL&s?^b#@ReOI;J) zMEBtH=xc^hHSK~vLHd6jLOFn;=_!(mRv}ak>re>w494B!5Q;#PA=Dqx6TRvXYF25s zDtywYgkAYX^poaleDeFxZ$*@GVE7<_{eKZTeO=*JTUR4;5-t{L!badIw|;<&^(M_E zRbxfWT87^mSf?q&gC3R$UmE8xhKKcSOf^oXo6O$`litQq)58+$9OhvOUNt=|8kLJE zS{elHVLeBClqV2`*7q{H7$jrU)fsTYM08;Q`!#}FL>En}3=Gr0l@>?%R$54p<6Hd` zR+YZhJM<)cEAez(-ztz>!g0yy-B;!K{8!$k?}DoLRax4l!@Xj!701c^=M zJ{X!|%J<0@7BbOd@A$cgx(<0`1S_fmRl}*2iIjNAwi(bj$>%)>>2vkk;%C{ekAyjj zPm8Q>ZMkft*u-*6lpmquOU%ohK3e90{w||U;j+b&9|1=;s<>k+(L@1Mk@r@9ZbcMh zy}$X8883!Tv{^WtsFV@s{*$=G!|zBb2kF`_qe4_HLw9Y~`3!1!dZ;-A zMtm2%iWB->gav%bDe~B^oA@M7?)joy^b@;cK_FH%_~5=Y!r>jJIW1ZQa})XNrX*v9 z8`~&{Mz1r-U&R@-&5?pjP*K0_XFeV5U@qJBGb$3sMii8@S~P-xgL>hou%8UIMzU5I zjH7zmJwL?$aHHlfdcr!WyQV{LkcTFuD>e(b@Kn8mOV5g=ddQ+p@M7rqkzD)uiGTR_ z7GFwOQrG#@j!?{-fa$RTk`R8km*+{gwz`Vu43}qeFOE8Ky182NJE^At0X^-U^+BUt zl!CKl<)NQ`7)V`8d)5R`&10A!8Zq9z@ouOM{pT;eu`|!W;UJ>Oh zqV_4EgOGp@N&@od1M>F^zG%``0I`USu(Ub=K(>$^>wa=qW()D1Xaz6yH{!5j7twfb zpt0&b*O+lmuPO#DH|B>*PIIyWcMi^_zQ7Vf%XH&{bO=h)yD^Gaf$inc7t2-f|w z*y(8X@b^=7D=Z_fQt8`49d*2bz~{5j_t_!W(VjxTUGy945x126o8Z&LND$wTtv~q* zvPtqDr}rUsI}wpQg2in)A1(oqdqUzTcz?lRbKQJHJqvvRi$m1&h5_Kti8Ll z%*@(%ic*S75Eg?F>hO+F!AC&igYY4EfslaT%Uq`X(l>(Z9NEX)fhWX$Tk5m``XxgQ@76)UNGD$THyYKz3Pij&QkoQRn_-^K2SXa1NH+33tw|Ces*E~_H$4vW zl-b-gH66PZmbdwBzGhmaLdIgWQE6q^=OST!nWuoYe=M; zDbswrkW}caGanbI?&ER~`D=WQ-yiS?gM3K&HvlJp8OnVH&s{vP;`!ENoAZ0T5BAp! zcD~Oa9Btr8D`rpAVIEUS0ud9Hv7mN<;%pZRHS3<=?0x*flZQ{AeE(_nzu)eM^X-g! z@kk#&e0cb#^AeRO36;~gtcS$hE`1f2-m6Vp)2WRJKv;zS^EQ6rXw)mb6ke0g^s1oT zm}!xcI=S8U?wW`&hhGLF)ig>~ca*1I<#-daTbjm<3jbAktW_8O%Ajm`t24l^6WpuZ zw6T1;QZFsDp~q6>*>fs$=7fk6Us0c%SaKGHn%kqcvzVVlg&)C6NDEDd1{WCG`}A7%VMI!a|B%{bD?3~}uY{P#Y{cg(?+u4m_=<&PJKmVLAC zuWVMcsSEDY1K@7ia>V%q?B{ovg(b5A;1HXwx%p)g)FO$x`2?P1`JYV_BR$O!?bqCX zW(#9B$>J!8wEeB0KBF?V=cWZyC_K>)kQ%0kKC|H63Di`M8A9_Fk#Pon&hP)fg4xkE zp!p2m*x?&;)1`y!$0b~U{hDxHu7D{pJ^d<48cc|}7fUkhF0k99Ri~z(f&2Ysk>*w{ zwRK~Wj*A3Bm;Lh*R=>Nvy3WME&A;Qe8Gx}W9e@c+4gM2zy|xR{aN?@;o#lxYRAM5~ zlGUr4uPQ3Gqcn)~kh${KS9x!gq2X$AjGCs)ACZ?aINrLpvho{C&1OO;Au+apqa1C2BwX|eZJIP|KGU&zrGGm|9lRoxgOmXzAm)1s?O@9TA}t`NLgDf z)aGKUwN+&|D`)w>xv3>hRqV@ul1VW}bx~B<4J|a%!_kUqS3E4lFn8CxW_E*Iy84`y zrSZUQR}^2qB8DoaU5|lYr!(taMiNyHQXo>m`!vo0b!7r(L*zQkwH@$2f^ONk2?+nq(Mk6&n)la)M#I9Og2{Xa~kaT)ppRmF1tB8zUifDm1H+kFJ>=S5~KaLMEuO z5(~;MdYvdkP3xN~1!1og6c#hrW+`$OX-=ws1ACPV$_4}gptBNElbD?{0Jmz|oW`?Z z!*tjr0$!TxTvbdB(+JrxA7i^+mxx?x0J)4NptJydz}$6^s&=Ck=n$3$!W9rmbh#cK z{NO-Ec)znaNtl#E5>C@FW)fJtqXx)d*9(kmQW{>0HFuY0mP8!?2;N|J3%T<%RIBeS zPAn}pd+rXfGQ|N=?3=Hhn5N^Lju{XSk)Bu4=9-t#cM2I2xEpK)+c;kwm<^Q1BU}@R zL?Nscjy|z`!|b|nLgpm18o{u3!aT{y%=iGTCq%G2nNq~Tfw}G}-mIPa=cG)rJQM^? zBDnTYCkSyoZ5(r(`3uV0GKQ zVH3rq3n$QxlNLhdTL>$&AxyO6JPVeC=*(gN2}+oER{s8vhS|+nMqFhBj|@Cys53KI zJWlT%!+eu#ovFiqA7s_brkabiC*-(q%`M02j{r`hSpo%V-yO5;;NJJ%0HV8c6fB8% zl)3oVD)Des>Wub;$zH_t$nOE??{l5R*sO)L0zdNo!ltB2b?{KSbc&n z=-hu+@m+Ko3C>|ZB8buvte^@FH(an#`EZFZN}Tz|f)@Vh+V&F*t4W3|gcDD31kO-3 zo|{_%xK0Q|RT>j~0&+ptAG=d__b}IZRD`s1v&Pa>i-c)5i+}WPU#|gth0(7C<+*qI%-$6izw9#zfs%ZBK1@xvP7VpQe!po2E;EysbM|P#N zWAYQ{ioc9kH_cyHW~Z(=FKGuwb&*LRy`VS`t@w%~*D21ZJQa#ghWMJWzN2R3WGe;!+`mfbTzNW_Nb8JG*vF z>O_v}?#`KW{&UWM`{taT^F2NIwc0|T_{Vn#o@qHNQ<`BouEBzsj~K2VRhbjU&&CHo z9bbqi_^7Wf2X5r+EarWvp_`U%_{@nP!_6_OA6j-Wl?WKt-D*>NbC91~Fs(qrf10Cc zQRq&VnZtZ7WQKC)?1ECVY^M0k^I3q7EvKxcgU~|DbrjjTVpu-YL)Wh&M|#tT{)`c^Rtp*m7kzhwka3m?{PEeKGE z?}Lt3mET5;$ZK2_HGR=%B~fQ|rE1Rvo<=Gj5qj{KSRC=;P%Bf5*esYgnEiZIO*Iqa zYAChJ;n~0lmS($UwPd@?YRQL)yi!*WrlqWD&4ZRp)0Shf6;*eg z5QSMGOyK5VXoWV*+~RwVNs-Fg zM5MIfc$*ti;S-qmVe>At-@JR?JUAZ}HS=B2w7DO4zZriA@OLZzZhI__%sb6#R6iuE zn-k{2xgiX)kM9Y!Vq|MRCSfT4!?iqK8mCus#Z0>b|eLyoD6UXgFqv{Xxl*dG5g}};x@I|n65?i23#i0kO3C#_iD8vWi~(v{`tc0^;RRu^P)O4RK#A^KH74iLJg3B=>&B%S_zWNcUDowN)*=li zy$PR(AG^y^69@yECDQ`SCa`mTCNz;FM|u!U0JC9Qrd2knsjk@+>%vhWu0~=B2$W?j zG&?CNFqyrSM8sL~y^We=r7NZ<*&W3n0%ha%#Y!bhx8RBeN?ZZl9RBx&3`w#e;^>kx z3JLN{X{9ucd9~1VoldItEPWB?keO6`Z=+gS>58dVc6ZgQHaMRk)Y*@oY@<|^UI~qg z+(;uxfdwfKfVO#pyXrb+S32NB^tFwuMEUH|E1@ot1C#zXnW8Fz>qtGFID2Zojhd*! z71I%oVM@vIq(T>%=#-IaMp4f45#%|xqRbv`Gu57OP=XIKrB!w$OxKa7kO-$#+IU_e zj18ugv}0i6QF?x)Wg;E}Y`Zoo9(#s7J4O;;Uitt7x8Q zCr_`zRJ!gQY<-kYRuiLqC@lMKVCL`cuSpl?2E4oIl?Lhl|ce(A2K|rN{X&cOK6zgNH>}#HxX~-X(@oF<} zu`=^`?h-?}FZcG5#~&4npTLrCr-!FOJcX+(SgvNf`tSyIm6~`M4goi^Gkus}7TXTv z{6Ow-kS_!#>+ zRI!RxTWmhhhjA6wJZwDlQ^$M5Vw~#--%aY+S-g>lI^Dy$x+l?agP&&IAb-CJZm>Cg`Q;vcFyE_daMUF@ z>JzDBrh9pvJ-170Pm#1kYEN%BQu`Ovu6dVCo;K|&S-R&lsa*5T-0Yo-&1CPlI{U+f z`CJc)`;U3XsV8pp#irE!&)!qB`Q3T*d-LW?9kOqIN}DSCzR{X}-^i*t-%k;CmBO~Z zz9a$vK2N`C0{(4Y0zUT|q)`r@-P!`YMz#PGRNAsE{d99pZSFQwbL9Xffu4UI+AL^Y zxe3GWF=yo`!gT=l(fkFH*dp(Msp4KcsQ%Dp%WMJZ$}Aa{e%u}BH?>`5iLqon;drhm z^n}xuqg~9>0jevf(QX}Roj0+~1l5%zLN85gB~g}*ynH_;z%G)7#EPl%fi8+pFuQWE z?6~98=ec22AlMea+O*lZ66IHHmrnHdPVHl+c(b3^eVae)rU>5tSKb(qkZGCDS54-JvPak>%gX-q_$$y-^spt*d(Q9 zJmT$KkLV4X{@TSnov^8I`vziDGP6yEO>YUsG-DH$WkWFETM3)?LQM%a{i%zl)78u$ zWXIjH>GamCK^uZiTY41lH>~;XwM-_ulid93!=~FY>>f7QDl#PVqkSFNbfn7)=e*rv zhYfGBwL_&3UY5L8JUU4>m3VYx`?b<}JL3ZLxh~Kf7@g>1k4|884(-;lQ0hFbO@&0q zg;tu8h|017m+zZ|L=|cwS4qc&!0xN02V}>ck!S~?O01H$UZ$isrPD>vmRg!#AkQR; z3oUM&?}KpLP4U`9<%u-~Onxk`11Gxt79(EP?SK^GUOTMl@>@&~GF$QD+hp6k-(rN! zj5B;E*BN?4jBjL;8(jRWi%~kk#Yq3U;38*Un+h%77HVlm3o2V1 zTHFLBC1~-tE_zP)y8a?N?uZur60x-=Xs%(=KM@$*?`OUP1*tSsfB!+pA!P}pQPw%{z2Js$NYTmaIyoG9?#o4 z7YIIr^iBF8_gvukmh#qhsIq}M7h6Ig-=7fz=E=nWKeHzP&kwC+Lnpsdh$AyNiP^al zAE4u&@!WPwJddFE!>zEy_hr~w6dTKDd8|}xJp{Ob)~8!rXDgZSHt(Qr=20=F!GUH# zn`1u2cV~K0LFtk`(I_Z;aIA6|<)P2AoITwLa&{(6BgEoFWJVMGj^qGh+h_ljoh8n% zmPT64Z_AS=-vZ{h=haEx{K~JC{7}tr&6R}TMe@fZH;gz=3kw>hwi*ztpZtyprx+im zQ?`~=>U`yA@a)gW^Oc_`pRXpLuO*+qNIrj=eEur=d_DR6wfJOwq^hkL%)?RQ6aU3O zK2WyZB2IA*>zXH+oaT7}j9-nu;ZT*IpfOP6NBHQ$|0+Ka)mvP!5h8p~!kaUh@a6=u zma;k3@1>kNbT7m3bPrs+U&3R`@YE2T3P~H(DYDE7etqa`PGAdC4;5Zm24jq5?HUZ- z5C?qc`gkF&!wg(T6iVCpSVF|3CUjf#d}mrBn6Pjd7AMY$w+#Gg<8?kXP(gro$1!lI z_hHSBV8%M5+K?NCUKGaj<}^;vCS+)?Pe*Ct_Y8zTRSy?CWQQtxS;S=_xr}@pSGy3Y zDshO>-5@rf;(JT38#->tGR1S-_%34Ta-yobLWkaCl#GEt&GJBoC5YMr2)kL9u!N6C zrJWizAw8nLk_HK>8597vHjpi;HZcStwefz4rHAAC0ulzA`6}aC^X^!Rh&gX(f7N54DvCLc`6-I2Q`*1R0bvh4<3)v zQ(*8L%`o(Wndxa12U7_hkL#DGW4@1SiXot;3T`eKC=`r)%$vOPJ@11?$NZAsBA!Yb z;_phu6F`yEE;4`0Vqs~D`atkcn_<;PXQRMy#F3zE7~u!tl~uJKp!ErWjgEX|mG22^ zAW~aV1#=VlCZd-`&c72?4@K8M8%eRR+Ze>b~PD~!~nP$!)vNVW*~@b z7=p=g{C}1216PN(s4~zC*eW=>D9MUpk0(Tda96t|Q`#!;XUxSJC2?alF!$pt-8K&ed{@?RLeegU5{Hw8Qx^q>$S7HiPI(!+6AM2#Hq4tLVHmyRS=;9soPpn8&!d9I31re_8jl| zVrI^+O_WjuK`aac)YB{Y0jNS0aSdD`@dJ?f0U)GaAjBOKSHLrK&asc3*xrVeW);Vt z_q_AY%=_`onP=WAz0>^Ug85S?Ma0~ozeOA;2puXCwc>E z2xD&3L@hwWX0GRO8YDOIa9!(5*ArWrfwCR?WBpl4UBAX$QO7?L)JZJE%`OcnCz3k# zS6{nU@3-i*zbi<&Y4qkU$PHh?TL0w25+cM@fVda|%tEi=Gw6ACU zA&zt>(cVzY5y8@B!d69_s49_?yX{!Qb=p;nt|Q=c*XdE@6#k!Wl6faN5ZP?EL&6+EB8!-)^Z+|Zj*&RZSpvPTblQ{1eY2<1X!qmwPto0Imnk};PEq0+5 zw+Z_gyvxoZ){o({fzPM#`Si^sW>2vu)Gwy$tidkqEMsyD>Xany*dyGsL(dWswF^^8 zXF1iVS~B|T)b90Lmu}zs?Ct#94EOobaH{`*a{TtCXSZL_l_O#w!5Calj9=8*tbURG zTZPAosufxmJTVrD>*tRxEL8F5bUIsU@s34$81rh?6s{jSF)Gv!14-OK)H`ut;*MV- zH)4#Bq6|6dQc)jvM5-ru12~X$V!CNSNyueG!^(|| zfDI9OWN`CBwR)Aifvl5#U{6;gj)*;pMexwCldPG7kqogMCyeD*jxeQ3CuTWRQOmN+ z!#KJty>t-(480GSdn@R2;5w2eJ5`2eaWLPyowjt1LdySM$uyyU9CFi+$18@tB+4V3e0L<0v2 zW%U71#Q|S=pabUNE_<#-mUxAc*bmKSQ&aVM^G-%E_LJ!_)=*1kE$VnQ(EG|@6K+fB zB)a_w@&Car2vp1P2)2bpotp~Y2{v)9tbpmbLk383QW%51q z_<-;rIYg8P+iCqLEo@DLZL_oCw>BsV?^5gv^F5*y@sOSWNC9)_7+iS=rBq|fqX^w8 zMu<)=E4_ekv-9lN*kH7sw`PSzE58Y)TNvz{6LtHYysf_QKZ9$&i9P^JBZvH<=#bev zFC6mGNA&kcjKu8N4iK(=gzFo5c=9)y>G8WZ7kLU>+;p@nD2)K``}s7~YahZWY2N%e zAA|ipL$)WTAzNXN1#tVv^h{~6pB@3%{x&OgLtJA&A49Ky9UZ;cFI()r7WI-3unH4K_ljFF&9G zClIOkqK>;h+t<{_6i`a%I)bC#muBY5kr1hOWlr#>fKu-&`rQXE%~{*Sf=Io~#w`d& z?XFW*AplydSgfN`TK{Rs!m zUJV?;Ud~o8KG5oCJ2u0O*-8@cJ2+NOS5iy*?3(Nx*Gc#lXum!QYU)gZWT<;#&`reF3QF)L{PK$KYJdS78 z4QwxVsAdT?2iH*Nv*XhgycyCOiF#&^X7P1NJvm!BgE6Yg`lRiqb7}Q{gM|2Q((3&- z`~IEzrfS6}eTPP%2VVLQ{?t;}3)?u3m2DCkF0Q4j;A=;=;Md-J=#0|&1-_0DhTgkI zeIgR0Oi`;&dvoLsl5=ueK4NPUQsn5KL1Y(GY{)sfk-^+R-eE{=vW9w8auNv7P(D_~ z!!B5xlxr=?P~w2Tv!JTE4t3CsbtWBC>vqgFQ)^`;X-lo<62oEQG%KjoY%^Hz+K|Nt z85BrR4LFg%PP`c5$kRj5t ztTiY0BWsv^aI6u4nxs4+z}%KPX(T4Cb@)f3NYK~`EnF8s>l7%PP*AJb(`1P)t$kOx zAY`>I3k;}cfHSfcqHIYcg}?l>q}C%ES(;-)McT$?;PWD6JZ7&8Lw%e{8Hw#?6JoIy z4I~SLt&n${i8`Y-%@m+%N$Mj&(%h5KX!EJhJO_`i^Nu}XUQ0&ipU%yrP>D|3J<7LS zDm!Kj6n~RR-@{-PY+Qn4GVO*0Nf|&963~{!~mRl-(qf;dH9$c5^RKt zS{2~wrSzAsAxY~|-`(sb$Qr**9Tf2ZQ(zSQ-Jv>TLu=2X;0HYm zmw_5&&9rOT6%W$Y>!gr&s1|9kpI~!VD=DC$f{~24GBOu*xNgv_pt;woVNysgiAx3~ z4mMj2-Rkt1G`$gn7}h$&h9))jWg6sVElhv+{)8&;{Sp5ORncNiVrnJx;83u0_^BVW zi$bjx17|F)f!<7a5?D_qx6LvViUd-+3OI}rK@{Y9gTDuDCmtlZg2e;R&9mr literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/index_messenger_interfaces.doctree b/.doctrees/apiref/index_messenger_interfaces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b71d1d45bd431c91b510bf727192416b88e1babe GIT binary patch literal 13547 zcmd^G-H#+y6`$St?%kc;S$0u`4F&Qs7`8_YF=QmDKvrR(-QY-81&ivc+kLC2x~i$h(_O!QZu&c~-aVoI$>X8VZFj3_SeENqER5xx<(W~RxgvfszT?aB#dt~1 z2gYXTMS;m;Ie{4_w;d~BZu}%}F3@~oJ7F^wFl&1Kq4j)PURdLHsNp}u)r?4ZXS>X0 zfgzZsJ@)A}tz$b(3z#3U5Q=TLt7V%ogzdRnqFl4=fSJMz23jbB$P`h)Vm|w1%;)9Q z8rz~BzlEAE#bgaR;~O}-i22d5ZODcpL}0fg0n?GGCT%N(S>&wg7-5J(yq|WBe)4Y4 ziu~fDZJ6r;>!>;NTYYCG^bIocoU%i(!Qx2H3ZqLaV&34_@<})|qrDNalNS6h=?Ftrj zu)nYwgd&zxj_tB|bt-DZ`m-VY0!QT`!>9QSd1eVWr-dyXR=OomJ(`Kt9?Hcgo?IMp zGco=WY;YI9jZgC1Tl|hz)He8gV0C^SV&HoGox$IY_`B)JIO4bRWlX;_na-E^9ji0g z?1VfajCSN0fo^(^9{S8IZ7tdLNTG5{&6g*hxbVzf7oYji#q3q7`)Hv~KKC{|WaX|8 zuiQ(S6-NEO5e)8&m3`#3X?`O+nx)&ZTr6Gbu*i^yE)1q7CK~u>bvn&F2EwLb4(lS8 znkwNN4VBe>&x(+~rsoR7c0-Ns*}`U_*6{)wb}2ZJ)56o%G6ADS=jup2(~3|@_4t9e zVFRf&fxDT!VwTFgrdkU1eHLi8%UNIxY$x#g`KtRpp{cpWus_Jo*Y*U`Ky&PN09!U2 zp9yLIwzyLpc#&oT#QaF)%C*S10A(6CT+3kraLx^}Lz)|Cp&8h|0Pb023JZn-o~b(` zFffm<0gI;T1s0Sz&^FTQc@7R+-tPMjBg7504I{94 z48u8UkzopL(-u586!}~G`1yx+?u&5VbDO!Y!eK_2l`>naMo7pu0RE2FHbUD>yrBGv zEm^DsTv5s?5J*riKU8iF5o!sxYH28FhPG)8=me$Jd40mbu^(@7%N zHpz?m;U7GAZs(b^2vJ#q-Hr4_8g;O2wp+@jBpRAofy4*u7Q!?SeMY<)%Mr8)ttHo5kRiw~1 zX?mWhg@?!oreh-%^I)QIr{Jd*s1is4&2w3UCIT=54?Dvh-*Zq;x|-v8elx4-(^XhX z(Rp6Zh%R>S?*MKpH)ubc%S81#EZMXz!Q<5i)r~Iz$Ul!-p(p)MR?J41g_3~Jl?71o zYkSsU*NsjF-sY}1reVKe=Ng=C9=(Twg!Fl7q5R~EKUneFy_KhG;aa=5_V#^GJ)sQ0 zgc5nwXMifVt8bwdD69I!KB>xFJc~*}P*BprpI0s2qC8W(-MHuozCF4lSdvrf2=cH$ zpw?}07IunRwNdyM9RAI^ZbHt$5a_&OdDEW#QH*|>CihVdWB!ty#T8{=EGJ31Jc4Vs zs6_NEcI@iyE$SV^!lZlMbttSIQfdlD#&pv%yB?O_%Qzioc|foMQh55caN zkVuPsrf}D#vb)&Gq@sg-h2PG9ipGuPJXhx*n*1y#Jp*N5s$}g~vun9><^4+5o&GN( z3KP6iHbH$43lkh1U;c7TAJltw07q@WQBP-%$v!KL_T2eBai^$8BVjI|Qb64|vMtC@ z?X!j?U|z`N^S`I4cGDsiibb28 zr8?Q(NA|FJS}%I{B#K9OMPa$0eVe`o%JBOCqPqagh|KxU1k2#E++QDASAds~jB0eN zU+3+>vg(B0uyS=DrB`wCCGvTKlQ&kn=<3!=DEWihNEr_$zqg0WMxo@(Sa$^|x##H) z97cXu8E6Z|5E=?sCd!jl#F z{)bBN)JMXBYKDJ*S)p5>75jGF*^ecPMY+}m?%@lB|_ZFi|VzU&w^G2bPr$LHTz-drm&DK<>b5&;DS zKH~SbdcQ&#el2eGex1I)lD_^Xef@3v`aAW?xI zl4wgdKqxMBz{|a#V=+MRXLuPSD0)9p(<^aN#H~D)8~ki;&oDMJl4$9EL0+Q!CGzM8 z5OSyH9LO~`dTaYtx`I0=Ph<%P?F6*GEb-`**$idSByh0~losf-e4zq9>QJf!= z3uY7$wOCJCy)Ah(8&PCia6&>Rh)M~X_F_)E2CWfnKi2}k<#EG_;I=Fo+3`H#dV-aP zR}aZ!L;`lBzP?4o%NQdIAmQ0Qc(#fU9zxjl$p~1Wim#{>(M?YYa-=I=kaDMC0Fc7H zKj zvtYZhj?P>Y6g;;J;!Y$wXYV;1+IWA%@J*csffwj0#}l@ut(xHD98YXqk}|ENfT>ft zQxVZSGKqd_A(30`AzOXJ@Quo1d4kRm!cZJ0aujd;m}9uz2zd^RTS)f9VCc(hK$!=% zR7XZ4MxciBx+Q18zU$zau!wCTN&$IWF`tnO1gv^7BoEsNtYcQx_w_vZU|2PvQp+_^ z5nA%N8c|_Q?k|S?kVTfKgWrx>CqR7iLYA<})0HYpOrdYsV8g25Jg!@INR(t8B;Dm~ zmJ~>^qc}{6G*B4^p~uo`dIsC_T6za1Aqxm`;2V-=!R1GQJozO;bdfR(k%KzL5&wNq zvL2pz?O)S!!DqfsOf6(2NbgVsQk;*7$L=XHx{jNz~e?l1=z)(g7Ju{=#P z)fO;Q7YzJdWE&CtnSb`y58e%nE(9I3BA!MH@wa8-k*Ed*?K%sZHWMAC1IfS4Mc;w4 zc@$XWkzy~-$uo$`zMdy&egF{NDMq&CiEsd(_Lk1=E_d*!sQf6?u{;`rI4<-rM#$_C zrn*L5Czrb8nMP6*)>Q=BREiaiSwT#!8YQ@Gi|qnD9E7U zB!NX3wJY=NK83I28A(3Uj||phL`}cVEF|#&Ti^^VxNUjb#H@9lfo13D`1J~btlIWs z`db8qtJ6s!ZCg$z z>aDJ-)MIAa)`sv{#D*IYc;tx_J5K@EyMG=9Bmw@lw zM|D+gcXiKX@s8OUdEH&N?mhS1^Z3rWx2w(}X0gq3K7$^%>-kR1g8X&dT%!J|=O=55z`PyyE92c+ zer?P35(EEPfnjB7c%jPz7F#KEj90F186D4OM$Dp^C79R?x`t-LO1&^Jv)rA3J$D!Ru`RYs9RDBAbTcPu@VUss($m~Mk+dz|veGp6+F1(Gk*JP( zP6Dy;dE2*=1daGU8(4k$ZNbT+;YHiBug9z-`Yi7D{fkLtk%$+B9O7-3XM8@jx-=qp zTkb>dQNCzu$>g}2(^|3D-LTKr<1Bz!*LTAB`nuy;e%LiTez;?HVvuNR4eexI(ptA7 zNV&7_1rFOaBQIjU7qGQBNppUTzUCXpvNj|>pFkH-PGKhQtUE{ASi#NN)JuI*cGhrDfbEYsC#bHJ-?Z?E%$?vsQWPV`zZdM!M_jV-$!20Gxw~!j_#|n zySw6^-Bw}`n1DT7 zeGi0v@#&9We1<$F$@+aO9z2^1nec~{zrxzrO1E>qT)HwLg^KjAedol?ObdTbr?Xb* zG-2_!XR|foy{*=k%Z$&$k-cYcy5DN<*VK-1Z!1SjM&$dkkd5&TTVT zG~e2oH9#J*CD-r*eKkH~1&+_++xQ32d1SU&f@WP126JE^WLV%Nf>YaytTrvuV+rv? z+$V!1W&Kv04Z?tyMvKLYE0op@$$=|5(6HwP5kvqvLVg0`G$%$H8rnH7h5aZD055B; z%V7+5tbXLPRl`dOJf%ECqYJ161OgkA)Uy+#6Ni10x*VFU8mZR@h^`s{fUfw$QoAm> z!VGHaAFpy{FU4v}Ow*{mK%YCQ_=5dn-BSC71hwWJ)&XiE^4uOBx;BB~YK-SbkSwAY&6r@c&swmV$nX&P3>do25^6T|0#*?d z9hw}$4+=~?xUSKG@*@`GgA_@WfMs6CvyIeBz)B21Oa(`{OzNuDj@^alMN%wRrLP;G zrY0?#!l_}%E!9JIkb*G^!D!1XRtJ^@b>bmrzKG;%TCgLcy`VuWCf6ou>{tV`^)T*Q zf%hi79qaB}fz@S3Kl4)$mX2i!OhWge{ERH{($$vbBb1ReNI1+&Jo0Waob)BADbg}& z&@QVf?szFu9pSWE_QD{I%F2lWa7(W3!J*>R0&VTzv|6!jVxwRcYogeSwRIWB#iVK^ z3E-Fc<5Z&tSCv!8T4F*mS2a}|X;d2w2DYC$z*sK;4|-7~y0G0tbS68okTnS?M-W+S zT~R@pa3}$K2w*D~LJCnAa+y%2o?mKPO`Hq@8?YXP83Rz%BG3=u!P4uCH)6p%^>1>Pc*P)gEzj&ea`C$^%fqz_{hkBCNfO%#0SFH#qU zghnZ&xY-OG%xA(Rl?77BGq#}1>hPM+x5%u8JqwSAD%dWg%o?UfhCq>#Y zEteJx6!5wMr34{auj_SPBnftwkcqrWDT{Dom}bZ8W-&FCyxu|L;fDZ4IA>@ec&-9? z`r$UBBMB~aybj<63oZ#r#3v<;2`pDrqevU6MK;z_rbZS$Bu`+V7m1Kdp|A|7##KA^ zB8f}Vf{_Uzu0zVBz#CS1SDvwfE8Ru@xSPMN%QH>`gga!3#@BmILkQS^{JM)v(7Oi8r ziABanJju1zIFjj$BZ3~?g4>84a$O2gfJ|(aD2CSsGdhLW(M;uU3NPi-!@}MeG%Ldy zsY^RV$^7Ak5^ZpQ&?4z!FKpQ^96Uj~?>pq=62s609}Pm7{}!1Yf~sT16l`P?Cb*Y|6pgEZt!Yv2_^4bjrJ?&jDuZTOYOSTjX=82w}Hv2x+^D zBMX0zyTt_z+3}pz%{N-KAN_f35PuGPP*a|n=*{r>?PiI<&z1?$=D8g@gOQ9Ljl-Rh zH)i4R@$F-bnoR_i>rVYKZmQFp&2j((Q;BjdTuher#)IsRy2g&z}~^CQuK&UXeEAefxh zPaJ*&8vgaBV+lTo_2YOZ=MP$=4pDL(q)~@HHqyEKRX&d^a_O8Or3v|QT(jNC_iQiC ze@)!pvEm@V1sx79N=V5!aXd7*C=dwWiC}8Q$UE~!Igo+fa?jnhql=CEAiSG!k7ajm zsFRyzov^X4Ld^fNd(Qn69P<#JFElBEI)5IW-oj+RQ1iuK(bxPPf}zhI_`?o;R`z~j zcc|JwFRQlsBoC^+yLS1lDebA*LI*IqZ5Z8~+Q{^2=y)rf0K!PJaF8_`gvGrf2!Bye z$|qp%6f~vLeOXg<|EUpY1;G-|es8?uSKO~m0kQwkq>Tb%-EUOD^xvijQ}>&j?jLWu z?~cJsxt;@om*1`9<#)@nZMH@@Rj+m5%#4D}ziSezhRnZdg3N1=ff}La3x~(6Bac@V zRv*eq=j3CKp@&$}J3|IK^)EhmJ5KZ-0lQQBQL}UIBUC&;I+fO2A^96lEml--jtUl+ z?f}(Vxad7kN~IrVm-(ZW%)H7@$qX(xn!!|2qxY!^x)~EVdRH)RAF-oxWd|X6^qv(0 zspQ+Dt?X~jR!SkHO{x)Dckh!EB&?!H?-O$3@mbH;b?!YpCebGo`lJS@MfA&Laqj-! z{?eqg?t{;0k#F}hQq=ngO5;5lQ?s4!15IC^fP2Le@;F2-I*dZqjXOxaj;>!NJxg@` z@Mv@`SSumy*BY&3I)we*2`U?hu;0MAeIV?_)g1_w{cRzXD#}t@*%h0umr(Z4XoN)B zw*|rG4Kt26dS8|kk4M>mCzQRUp9#=s!1uzB;Tpd0VF?W5!e7*kvDvcjdW!w+J(+*A zXYC^{OgNB{zk!cFkP-JrMS}?kGE>m3$AEt!oyr(6`s`c&&@nWEA2u4nbnySr6Ergp z{%4Nt3;vrHb|8@ddqN&n`eCBPxI52Yl``P7s4}Dtn?DM1kdb|7NnWg(GjOr*B5<2BnV?S^_ZLhgnx34+ZzEA57UN=`gJCiZGE zQ9qxf51t77uc~-idA3hI9CP@jf#jhJ$k;i1aCKLPS@-~cYW9Q=APWV z8A0~3>w9T*R4Ot?{iPP~baU}S&8Ud?;vJ)1k9vPVI+juILzSp^8($^Ec&E`Yri**O zH$hwD;@-O$w~x3tX>kW4@_kLnq#F6CZEun9TQovOzOM*^&3;Rf?|0pXm zKQuWi^c6QNu}?hiTz(tNzYx#wCiogk=|EaAT!En&K3;6Em) zXIwI{aCBeEK;y~|L?-Yuc=)~5sX zKb)Y7ae)4(7`G2VAG@jpf$HxFVN_9_+V+O(-=+}~)qh_QZ1zS%^{>l`$D{fW2-Sy1 zpdWBVi>y=i|Mw;LWqwbteTePfsTp9iH38e*mzDMX^`5M6Dwu8Vl;WjOR0SB{i65iV z1Np`ga`&G>?^o;TJ6ub?YS99Z@D)3-4CN_}*>ll!>)F`8x*9d+qENCu_$ z+@I$6mu4|jyu_}nKNgh?fNp3{V^*%~H>s%J3H8f4Rd}RAhb#Oe>fQJXn(HSuL@lzs zxsQB9lYev+o#NG5g#5CvXGv{YV^(y$%U-Ak3%d|>fR6$bH?YXC0_c8T(R((F9KF_Jo74>;ueLkr^e_Va8 ziciKD`qnP$bD#poOaFsEeyr<i}k8Q#);n1joVyzD-{q-xxls!Hc3KcQPhAx)HWK$R0J@Px9f z%S9PgRP#fDoxnjUidQWkMR*EVX52}W07*in#RFpxv9+V5j#c?^I ziCM1WvZXGw*vHjLII&5kN9k^oyPxN$J7JijI14K^Z`{XEQi0DP>zliDG?Sxc3H6`6 z2(>jueb)rU9+fTXhrz_8=lo1n9*5>q15_z$qvo7c@Q9TT*Gy=NJ>Z4^5g0~qh2Ng4xM13I>P?fyaTuGbwiskhtlB7}ale#tiOQ^?lJhgQJ2eu$1jfpjB;6qodh}z} z8@0jw6s-YPmbeg+FY3Ua^sS(qp;{Lt?x0G@5meme51>L*7&~UUG7jW02ggU%ERu-l zz)Df{a5s17_!7aoIc(xbJQ&tVC+kOMVSEs*Xh3Bl7NasIY4(26BFvi9KWvH;mN}t` zdbQ|v3iV3Dgqh`$!b39j1^TI+Dm-E^w;9w`P7!kX5vHID&!V2MLV{bcpU|d4Uqfg(O<<8^?OH#tPv+}~ zmh?v|AbdTC)%4rUffEnFg3D06<`#d@Mz8B8LvbA6M0Ga;S;6+Qsxu68^*a*MZtSyc`)yP;u5|rCt+D96Sn0N?XBCuASLg$5>MU%ugv+djwGhjGhH*? zvpwDI{@C4#aR>^Ia!`mQ?hq6#E8?dJAwc;NAtI0v5<(#U0mO$eC^8{J5Lpodp0}!N zrn+akXLf9JdmksSXS%xTt*ZCqdEe@pc|No7<$wA3ocPC2#i8T+`x};R`+?2kj32Xu zR@!5JlD(2${N?PWY>h8R)?OT>QHy1K4n10q>)8?Wv*&Shh59G17jNVOmRdotFy2|< z*RMHlY~Vl3H>@-XE_ImCA}e9GarN12M%(q65wS30F(!8Xj-eJ|C2rswa&p6VBi2fS zsBgqcl(v#IVwtn_eC90k`D<*SR{Rdm^m0bp;ESP!ttXjtB5qo|VI@iAHq!*EBUK%B z?HFp|OD)feV>IIZf^YTYyJL154lkNkYbRoD(Pw$T=WWHIMJhff^bqZ`Eagjy)u9oY z({Ro@NBOd;G?U?KQCY>>bb=n+j8Y$J-P{YJolV=dyr5&Yy0b>)UMKj9ZZ#CL2+lWPILpeU@FBPn*#9QVdJLGy^Ab7Mw-0#TsrdByQp{?G|5r zRtS>TS{+TOVSk2V4BC{2EW*oAXHoaU~rBFUE`t#GDxc=h9FTMDIm(;76?k9%R z@#q~_^VSC*-g=ZGBu;xhE9yU%361cxd7Q$_H?-RsU)8Qm=%AqY>)$*+H`l;FyWQT% zZP^NZ+a=S*8*ySoUFx#Yczp2QfR7u2kH5B&ILzn;abmc=Fo+V%PYgtOh`W9gs}9oJ zj80^Q&PL;!!}^BJ5*GE~GeSZb#If6SJvZr#F_GoRVi`s|3VLEL!Ve`+2r`lYfDvE; zk&uab)ndg0(-`=HK4d<(-8c3e26!Rjn#@qEBNIr_t%HRy^q7hR?7l5yRm?rCuATor` zjJ8E+8KVnU)wBAB)ovqfr5tU3gO;^X@Dd;~EDQh>PBOS^G_I-}CHtx_a zW^EM?Y#%;L=}*`UUJhqW6PS;@W7mq@AdO+;a+nQ(T*iZ(M~Wp;m~!a5uHW)fXl!I% zaSHugF(pyBZ``2CJvUBbQlYWOU^=|^uzRrrkL_z45`iZJ4!g}wt1U~18u({q#T&!; z7=a=vSjLgmu*?!l#kt8v@JSVieH-wDc@dt>i-k88$_Da|qBp^Ch^)MSg)s`wL9qZu zKquH-5yPwyO9}xJ2~{gHKn6(CP@bs*QOdxARLBBBFfd0{ea@oWc~%p96LBZsHX2Wf zrZOl`i^uDYJ;#N~iOXZIUErmv^JHy62BkU&*Qc2M4BBrUv zwT*V_i~0!QiyTId3Y3D20Ei(bPF<0zg#*g~5TgWM8*HCZMGc8?w-$@B-in+gLpx7M z!zl@5)e1#1O_(G=FOLm5itI;U5j9iX@ zKqJq*ln&C6N(eYzv)_2)^5qTVXJAX;>yv$CqLq+FDx_FLa(02aLT}`SgorQ^svJXj zji^iHWVBIam|YhdEAA|Zq1X!&AbBCp3ES_mK5And_papc3LdYawhk@pC^smoU{3PT z!HJ|Iy%(cs7>eXS;^3r0NOK2r9aK#nIKrrhNV|5R=sqkLdk*dWOoRugGTY*>Zl0M*Jh4NR*=%nk!e09jDRmAGvAC?TQqsG+Y+tvzBM+od8E+8YZURDDT9$|R~3qNN)#r|(kn;sS6Y6jDsM zIh~=%(S-9!@PPq?JrQMWmwDu}BIX&Y0r)k})$5IjA=BcnTz=2;-4N9&;7Sw=$hBgf zdO?P@bdX`F{!%C0g>rG9pK6x*V$z9%G#okb&`}JBaqobqp<@`b=h}&rU1`vH>lbhU z`Z&&5rhFQp4tmwcDNVq~bOCfQYzB6J>_U%5!QR*#3$Q{oItF`NMxk$sgMv1YKerY3 zw*bXkpPc5~)dug5<531Nmc95hda42KZEWA5XatWW%N@5sc;{7X1F;faZ-&FK8P zc=)l(ADm_n+3>La#p=WM8lM;Y;zzG#x*VYgEXd+j5ia^WyfN75Ui>*u1|b&t};+9+dRA zL~_D=5-3ZWY)XBQYu<1!+@wSOm3yGVml0O0&f?HAFYA_Jl_5q;|EzPt`34?;ketud znSwfh8l7ImWWQ93;a^eL*Z=39xj7)AI)75Ky?g#2mL+$<`9FU+ch?i{_$NVHs`zsq zkm{ey0+4Pdmj2n47+8<0eE{Vyfbvrc7}ZnlO625M$K`$Xc%bzBtWa)L^cfZ#zp56& zfA(#kLq_`-)C|rWc`fmSS}jqrK+QeAUF{xg&TmgqM0~5xYJ(!e`Ff#Xcys!K!TJ4d z=MT1>KjhQw>kw1~ua_%=*L4lo`z`{o+dvx6i-LcuQ>`ir{=Tj#;D2}Zwtm{1XS~~f zn}hnYd!F25>QCBkE~0n84~w1BhwB4l22g)w9N-Q=5GdgIuz4JG|JaO@N&ww`f=ovr zcCYd?8b%K%AHs6?a;=%CLgwy=CuqL{oV(9p+zj|!v8S64$=%0TsUqgp$c=mYh?gvwNu1-hR>JO&W>E^D^rvETcLzI-< z_f|<9(SZW2K6Yow9hb);{>W#cg%mP!cU&g<$lD^foL62Y%gVfRPRlDJE7F|dwOVJG zF1>tpf{m)u%hxe(hV)XuwL_3)epBe9m}RI<54w6!r7ZJDG(u*XSA@X&BRd`ocE2De zuFNtMzC1;$`z*x#<$2&{L~WFRo>qL$Klt9kxH$XqnPrt@>)T`w8Cz$y z*wWUeMb&qxb0x%17gcXeutHT-eGlVih^neh9fElJSD}ewJW-pj;d(Emcsg-p5KsR+ zLA9!C`$su(Wjyi!rjqSh@qI}3%>wPC$Na#C7&OBL#>k-OvYer#PeGIEmKGWK64%Z}DnBXYG2@MNts zOqT(km|&x-3~&|WX2<|~T{XJ3Ly!l4Qs|?Y2dGUCx_VEgJYdrZSyz2X2%KD3ZOMr% z^T2g_Q1aB>FZLC_&iq!t*q5i5ySg3w&8N5arAZB__DTU%9}PD-Yb6H?*m^9OA!|KZ zd74mP(UjkU9XX&BZjZ}bKm9gIE@!US$htCfoiCqS3X9S_;%l`YFNdB%elIKg% zF#OG0n@@+~|2e@FRTzHc=u8-1xvN8f-ro_bD55vD9SptihhlQ{{APKMG`h8p>5X5I#>dv^h`p{dF zSB|W&ky&J9y}Mk=s8wj8^*hwP5>BTJt=A^lqbjt1594MCt?F$Zg4p`1&_yw}s7=># zy+=}P{RxebvGo-paB^&Aa^lL^;(u|Q{AN?tG`G!uhPBP#mK>$t>Noi;`PT<>%zB@n z0fnp2lK4%k`04w|Su(#d4uh-Dl9Q#C5%^8A;%IFn@<1+41K{t~+I%_y{_X@*Q~~h( z{7e9>*EWS+9RmFQ521=8{!-h)@b@efljHBdPtdJ8OTHl|uEgK#-@vC>cYjnaD1C0Z zAC<4(wVq@Xxz#8EhPm}3g>+@1JLdZ%&Qm!8JcN`JD4K zKc&rLCioG%VnQ5nAE3ZTdlE67NdMOO59hy)FPv!9Z?H@BY#F~e z+Pmr(di>mIUy;)Uy-LR4H+nli&LfrQzX8wq`O#iNi2O?BSSh350pSl;NGX1l$iKg$ zn|e+?u0!Dw1b?7H!r**3PDCNoGrmM@6QGiNCi!cc zzwYL*d->~r{@NF>j34V+`!)+fvGLLW#XmmZ@q#8u43=6}C|DJ@c>|oA!?nOwyG;zn z(*_eSQ+RgwdC|S(+{54lcci3bv=qmp)}pa3{tyD>s6-gWwm1}`hAMi-0U@Qc#_tz2 zQlL2jk&&tROaw>fLJ}k(vbZwG8>$bpahXy;-osaN8W=Mtx7_9@REuDs1n&dBBuOlx zU@Ki6u#bX95CyVtgSFy0%L5JEAZq!dq*lweolOu$xaCH*#ZW3cB-HkKn)BN6c5F}tHWLoo;d-zFW#`M#kxlgP)8Cq6|Xe|WO zqM${MA?&@f1xz(Wlp32vCu1tcP|TGN$SFjj0Fa!4H^~IE4TIv2@P=b~gUbcJ%J$vF zBqp9TR-G33g3X#~2h*((c?MCIKrXX-XjvvE9!A>%y~c{*pfj1@3W(SQNApie#NS$-!4ixo6(gHq%Oh-&$LV2%aHlZmK#@ol~cxNBpZ z(1>fpOF_`LpE-+sg))FSY~n{;IMzu!?SNT?3{zX#ftkIwzWe=YEpkcB3( zv4C_E#9EjJ{5K&y9;>Io;O};lB#gH4#!AF9P})dh|xPBW4Zz7K!rd=xH%Hsfd2$7qO2N1!@UF+aoQ~Pb9>~z zUSP?1B<9_n3|`Y~G8;kM#}XXI5=?TYgM5rEg|g& zKg#^w3^fivCIJNz3}*z@uOL=zgXwE5C#62K;CR zDG`W)(g?M!2V)}}B5f@_p0~dOJ-wV=MI?aC3Ne*eJ95GSj1-!W51NJfj^|Y++@(Wo S(+!)DPACfr4@ZNvx$%D@g%$Y# literal 0 HcmV?d00001 diff --git a/.doctrees/apiref/index_stats.doctree b/.doctrees/apiref/index_stats.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b4ab8e629ea244c7ce810b705c0ce48e0b4d0c37 GIT binary patch literal 9238 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 literal 0 HcmV?d00001 diff --git a/.doctrees/community.doctree b/.doctrees/community.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3beb5f59f3356c6c245cac6986474f71fe6c41a9 GIT binary patch literal 6602 zcmds+OOG8#701VqdE7fMk7JKOe$Y{5djd1}5-CB*!jXuL4GauXY$XH~+I73@-m01I zu1;0;JQfjT5iyoZNKu+~koX87MM8>Lu*`yw0Bj=V1E4I}@UQCUy<^AY#A1P^8BL#h zojT`tPE{TMX8QMk{rZ&qXO>mUc(UIkVVH=Js@%+lBFJKz==_8H`FHbo@-@?uWKW4q z1~fNQ=n*g;g_0)uTe(@X-8GL?uN*(CXrQ@B>fvmf&9K?G@-@~m)0*puwwg@mrikM# z;rbxAozUm>J-TlfZ#TV{7n;nZ1ncUYt(cBqE6PrpnNq(kb2{P)&9|}vFDgbcFDZa zXCkJ3nI#F8{XHRf`XMKg82Q6U?D<295nm(~f$A4(_k+p^J*lv}%bO>&0Zh@scF9PR zl(kLvw|k5$uQaolO0mn~IS>2ZQJxlF$cIB}&E%yK(L*6)8L6$z6Kjk%7pxwdM8h z{X0U8BI@0SlfCaTty6Wq-*+zWLEhg?LiNh`-;7^-{neM!n|FWmotN+Xy{_YDk4KS5 zB9IC!EH<%SifeB`wWhN0&>CAcSC6Mk-dN#A+X@zA1d;_3`J>7y*y4*{M)``H`PRl; zE8l6a{Al}|(=M9L*eqrSYG#t>=DA}S()sWQ@ZAj;sWY0$5p8lN_ILGo4k>n2kz(dY z&Z8UFhdHUhsl;9>E;*`IWK zD%p+1uH`fv2Q`a(A=*>d-Xk1xCy)sDkdydjmp zgKTop%M);&X-sVa%i4ss+AL+R?FeSSb(k^c*s_|enyshot_DHXHtF#YoPQ{ShxhN% zh~gY=p{IK|x*LDqk~pbuaR-_`3rh@%HWEY8s*2dF*iy2t_^qfzP& zrHCDc&Ef9cvBnw}U;0v-RXomB+iG$6$F|WPp8=aGz~8lszsDG-X7R%@7QflB_?QVM zxt!Cbe_9!@Ejz;DpV}N+EmqB4%i+`ZR|DgRZMz;1#-)eC_|g44T>mf|ct3KNsm5j_ zT%xi;547}~Fnz?0vbc!VkXHA+_BF3-@tnA~scbaDWzQQ@qBB|DL9r&oz`c15BsB8MF*ACM@@EciY7jr;3%`yAc(F zFCd_*hp=^X4*5M%s083%<5wBp)kCJW&?L$?r%bo%L-B5y%Itb4%u(hgNJLH>3oYVZ<)@BqHaR8kU2g= z)DZwhoZ@4?SkSi>4SaUX&rC-6TGS%&ZFR=gJ5a!ZhVmdcXNN-QL}=P-+&p0xZJi{^ zVt?N~oge{WlBd44J%%bwd7+Tt4&o%fEob;ujR-521InV&mRTr{RX?(oj(qc^=`s@O z>T}wx(0vZ8X&kbukxqwnkd3h1(jJistcD);)(J_+9>LUZDnB$!Jb{gTJeNg?UZ{g* zdbsi34Lpc)b8)=Ur&0>(Gh93)Dq(S}YM^toTv)m_%e0#%H7v5gvk7I^_E~n=wly)532=<|GGRi(wY0evKdu>jWJ1$%I69!eu9Ma9j5`qEyi= z6#jl}kvfA~mr&Gik93p-+TZ1h7l`T1}5|B^KHpREjv&L$?M}K%eP2!eSjw28g3jvwU;TTmqG`Uk7Nt0biw- zkq73CI!H9x_Zc6t2tOeBbR;bN3o0g3`)_B6Yz0$2@r?v2;?Y)^cXCh@4`_%W zK7b00qWJT`oDa}z$EPvjk&l|Xy-Yi`SITlNaE*pVVtZgt(PYkc%O$h7Wov|4^)v9jL*|GVNwWUVw%$%Q`t8Bqxi9{5L%%+*#%m*Th;4SO{r{L_( zQvLx9_Fn!PLJB2(1SkHFK>?y-!8#v}iRWvv<6yq5WP!Vp%^uy*rpz+C*n0rpivI;_ C;KqLd literal 0 HcmV?d00001 diff --git a/.doctrees/development.doctree b/.doctrees/development.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e9a385c639d79f3916aa8dc1f9d439c55def9899 GIT binary patch literal 6682 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

Pzo1DqT0t*b7 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

Vz5L}{SiLAC6q|s* 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

IF$v38lWr)mCIchG?U7eNt$^#o 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 (Mw?7Lmcl)Q{PdfbB?4Rdx zBrjm`A{4v*De&zse-7Ro{25w^r^3@c{%KHxU2!^m+%WE+$v-ymk8}9PgCNoH$VcI$ zSo6>0U;Y99^M40L%|Ac|*0W7Y6 zITSZxaq*QdF;g3U4@hg6XM zXF#SJ(_xe)ctmKbS?~n5G6?kR@yncw+u1+T^#F2zCC-T*&^INFQqr*C{*4jWLk}8D zI1f(obSB{7YU7Q?1|IR-gSDRec##it@LW#QRX|g2Cg7Ed=ssf@o5g!U8lB}D^k{sS zzZ-h*pN#zDZzuUQisF8aojDh%fq^wOcI5qo+DhQSy7Tj`xf=SD{QU{%(9)554Zmf_?c-s{@LuWd z-E*)up-x?2DQdg+?b6uyLmPNgeDN9Q4fEgKjRZkfy>{GxeQ--ai23k8*!2G& zdv5|KM{(Vc>)6$?LI((eIMqmiMzC6O7z{!Z2qA$0uY|P1V2pQXXJ>b(HJVvwW+g3H z0^X+u@4#2&kjg>)!DSeX1zqB`|Hzk(Om3`Pw!~v{xomYj zTNG;EDp%x_Uk*wgxhg*aCS|BPphn=VW(Cp!*kh#WG8j{L8*JJV*Nl9QY6AOxScfe5 znjJSjplgd(?!N#v@ilbD>p>rf$^ztz=u4_5y%~K3;^df?Pe5Vj>p_{QeH*&aYqK5A z76N!}$ z3>XGb6K;WA9<jvp;AV5L`-8!K}Y~BMY$!v`DxPt|JRA+ja z(P6GzB^?!CA#DvC6~}7Y>Qv<0ulbu;v^*Gs_G)}eSAT?&Fl%gLH4sm;$U-pbvmkX` zES`j_QX2=~g~Ft9FcaHRpNIbW{;^^qSEw}(vB&$el~Uu7{S>xB9R(q~Gz!ZMaR|1v zEON<_=$X?j<&cBuJdC{c$nTLYGVlCbk4!JgQZ7kO1kM@juou(h-8^Wy#Jh;wL#f>J zZ#xpgv>EC~jL~_P)<%pgkY6%OHMZ%rcJlQUs4TTHxh569`c`QBlqfi-3UjJl)BAFHXmksFImRXC%iWGt!9N{e4)3WicMHBE!_*P{ z!R4BfFSnVyUPvp8rCn6ArD_4QFd!_*9lU`X@J!DB5<~>Mt(yD1e++_$l|pUeMxQ^o zym_G%yWT-MAc>tXVPbjn*0?a1!DXvi>uF2w*0n@~g~B#V@{%jCe-7$X{TOZEW2k)Y z$JEb`;Bl$yLzbsE5h6gtRk!B~*9VcD8^`hK8y_p?n>jvko@=%?5Y@MNA8C**AF9WH zoVG!(Sg5Z4$FOi&Lw2$rP`UVot_2#oNOZ!$pF?G-VX4nRVdfZ_sUgYFcRU0c=;I??JL-O`a;=knKu6sR?d039)8yN%avFRSG>JOgR4+x#xY(ve z8SAQ{h*7TRrBDACwfIqlgGxAa{YVJ@B+yM4tpYT##hb0By`+egT&!KBGWuregh#wfFH6Yu^)mnGEu#dTS;?d zNl3v9IfRAF8ZgKUd7G{U8mUO+h1>y^1?ZM|vyJydVdglNshL<_2=dC2biWr8os*Hh zkPjnkWd8ZRkSFjJR{=`$(+ci=kP$#rvZ)vHf1t4B+-vHE$V~HjAuZt9SDN$eU)#yE zFQv(|r`pdm)&J14EVfBe{14SY#3qn06DH@8zDQ8Q=aj4tc1ko2 zqn^r{fu2h6r__B}uWO$PAn~~`*lP#WsqTxGA~9@29QTC`3GTj}Lx>RIzFeP*`$7`R z%;r_DB`uW2CKt-|x{x z=VWA$=1s^NnSXwd<}LV&t5PNTX$ALgX9UocZ0gb61BE5$UQ>@oW}45VX#vmP*PLe` zXeZAePm^b#m`t8=m5wZ{4*CunGMM-JXC%Kos)FXdzKAciYg~OEDoaf(egg_iKCU9n zd&wh9^*gl#D>fET{7%)f$0*nHJ1H&&zf(f4$^Fh3QIwe9`4ZkSzmwe^Mt zRljTU7G4FCRqK#0fR?wwA!Ynx4(XXl8vN67Nb#OJq^II5vO~HEe{fl6X<~4adm+fk052r6 zXMZoULFSd;v%e2tX&0yNhRRYKagRb_$vM^3vzLdO&$Ev{(hNMuPpVuC@*MxNoqYRv zntc1)RQMLbbCfwZ^G0RP?AsjSQwxrzu8U}emzYV{#Pn2jGk&vIO#2>O-D(- zsPf9MB!AydPW>)TPR*@MqLNI9Kc_$!ni#Pa_)5Es*fOXrH6ymV{rr(sVJL%QsJ+c9 ztAb{NE^jBZHl@j|Yf@p>6j6Hxl~;bXx4WI38cCB=NmRgtm#UCsG(cRTs> zwlw+k(3Itm0Z#v@%Ap{f{_%G5=!rCW^f#&S$PlN`xKY`FK?~DkOvUgZqcX*#Mhjz< z>rL^{NH0wBNU`ALQ#{Y0EU_t`|HL~s#l!9nqbZ&>UOYeIzIndWG1bW(D5rJPI`c_; zwG%qOMTW?c7Ueq<9eV*^HiE11r*eL+)Rp!D#he+2n=jzJUPHv}1EBOTpv^6q#9=&Q zlQ@g2zySQynZ&_+I*BtEUy&zqo+pHS*-YXr!G0RZVqiR#PU4(pG>IdL0tZe4vHT)J?pFPHUksDf}F1!iVXdSQ9?TCH;g?bRM24E!=m+ z)*ThDb;F%A?q4wt#u@x4?VD@wKxWAto#T8=XYu;*Jp-*GGu3$hXFH>fMqC2*Rml9$ z>!2`+tr6#cRK_k8D#fKv*c6b=Ti*;rbk@d**X&i<85FPC-%eiE(&Xjssqiv-yhdiE zl)1~z8a_-im-jHTK^}Vkc+DT-EA1L}4?<9V- zpm@ON+R39&r^%zwr^2HM@c@}iQm{JX@hMQqeRw5?LVU)@!hm_ZXWPlb@1)7XAE&~? zDWVW()tV~AIrvJu6k-QdmYPC53JRN=3Ndm3`;6xN>24=~GHLSX{Py!lQiYx-3_uhy z)LyU3svsP=y`9XuI!$K1CKYB)5w%xQdF97}wRUo9EKN=wOodaez=4s~-aDJ~=fQUJ zr;#Rq-aTdcV}R2?rE(|;r+>PgJo>9NdGrsd@F+e`4>eAahtaoGCi&IeciPFK|Cc6< zzMl$ zt#)(vu`id36V`wediQNwe?rJtbQa@M(lmK$>~WYNk>*9}U0!wWBnsODQZqktrLJU? zSqwo~Z`Vg`uQN%cZkwX*OANg%7VAZs=XGfc?YF3WaCi7C=0VVnrnIr-B9xPv0R2t5gb?wk_KGDqBZm2A^kkkYeW*(Aa zDnXj^G@2PhrfJQ4;LIM$L{KulRDp{j`5q#nY6}pFq}a4gj(pV4!zd*TkvxKT43V(A z!w8Xdzlt4@-V4WxM1dp0=Ti50g+#(4_0scC-F_!{z-~Ss}SOYmX9iR)!#IE>-uFXI?MU(qu~%!NvqaR;PdGH`Tey#99IK} z)%2ht*@%ZRdW!$06X;jd*E-L{iIQunUH?ag3{B5M?m7`Nj>7cKi_ijY)&4J(4YurL zr6bcVrAZcT(!ZNF=?thKv`Hty3#3Vkode}4%V#L1iNOA+X;Xtvk|rmVo&|{}o@HTY z-?HbmY-J>0YlKSyJHpX9KOBy5oC~>#dzj{F)HSE;)*;1YEyELyUMVp{rk06quwQ|s zJ`XOUu*ELv)d6S!9THC~?wuj6~z2WtDa2%N8y4?=TV;1M$G$2`JyNNfDl@d)u= z43qgVOaM4ZLxPXMj}RJ#c!a*=s&3*&#lj=Z*rjS^hla`}II=ohgG0^W$m)smc*QF3 zb5Cn$PkO8^@F>4Oy9Z9Rvbgr(g*Zo}Er%V3`g7${4J=WAwN|cVNAlI>KHu`XRyBYQ zs*O4c_U#I~bU@Q`I%ftlDJxXids;gOpR>F*?=eS~jbdIaGuRdW8$>St$ zf&F0=FgXUXf%MAEV-iJso&gnKD&WaI0~?#lJcHeM$2D7_hn=Ov#S2+VG z;{&Vb+^}v1>W8(~O4g&58@jD^L-}g1zgigSua0GN`L&k&inVgX26a;&k!?yW#+!(2 zO8$W{I;iVP(v4jMyN9jR3U{Cq2tiG^DGi-WH^t+>w_ru}_Uc{oTQaJa9}up-OX;F3 zn;KqZ?D$@vN>2MvuyPlKUa5$DCzEqW%$!5n}I% z`*dN$nVB*(QbCtqaZ4GXdxCXrIe6>;UtmKCaLk;^q&{dimFPdJ}HrDdgI0cW^~DD-UcG6hfnO=_1_x#FAGj|s2ER*yFQ1(qx;o(^mkt^Ijj?OK)d1(@Zi z&lsC%pu@bHJIuicgbT8N7CzvF{uxweHUz2Qk@&#xp)fB#P>;AKgUJU*o|%x?Ph)51 zx*Ve?!cQ#=!%2wJVrEhW7x?syedIon2^r-+M+5+bUp?*jt9_$+i-WO!qlMh4HCiqX zRju9mi7G!c8Xk{kOGCwcrP^b`%hf!8n62ck@oIjki=8YDZ)J1*Wa;v-JYG0p8|bk% zXQ6QLya4=F@?#Y!r&OzUWi2O+1JCkf2ncJ~pmJ$1RG7sQEj;_J$GRd96&Ap`vj!`L z{IG=}3$+@&(FIlJ-QwN-FU7d*Yef&~Fk6abcU4T-AU{eP9T?$v@^LPxBL)QDLUAgNaTFHE@h!G>To5p(m06!v z55XK%`&@#u7^;2Bz^c!y%&lw< zUL72-feQz-M8m^9Txax18%BF?_sGQrdY4q2jxMRMjWF}1tAJ6;Y#QoVZCPAR_~xYQ zN02@dZ9*Rr*~lUzgY=nJsl@kGZdB^3-#dBpQ(E%6j*~iBHT`TyeVa$_Yf8^uT&>=VN-)M5^4| zWvtK!bo(0Y zp{rIxJTV_i&Gn4}^yBCeZV-36=u|}L0Xjk|B%}}B%ur)b*VY>Rw6|Q`n};v+wHj>q zV2zLY;idTAg^hept1UGWf%^+W9SKD0)Irc3D>ca1W0A5!{y3?_49bb3y`VQ`Cj`AE zhHIS|kq$H0wakrR@6tXRCW!5S!S=Gq_ZRVwMZVcx8j)|b=Fn=FNUe)}XD;8|*S~$o z=4-cZ+qJX5ciUx~wJ7DBrYOZ%Ry3$`u^CkH*AfG-oG2O8fC6=(5 zM9Q0wq$GjXXO+6@@0=3wC4hpCY4OcrOg|?+hWVY+{WLMmub}K07-sH%*~&EMzHNYE zM3YQ0%(13TGQcpRNgTtRLop0K^9-&;3Lm@(@$o`1j4J&0|6qlVp!q8K7CdbYhH0W` z7?3#+m_UI{fF5zs%=z##MKe;@IGTBy5Z46FoE?B>YGnwEp<5jCv z9?C1&B*yndKdv_w$L2`mJ09aXb=HzP5+V&sYOvW7Gg3kteb`=xGp zsdY%Bd&lNi@7UV6IU?FPzbV=XEH4`3*kpz{f@_L_IxGowXbROKk0qh+bM&Ekhm5c? zk$y?>YOs6~1hQMHtN!qmKp+}QI>y0|Le7nkLT*<`kR}Q_2xZ4WA@`Uz$pD3jCYhp; z$4r}KfI>u*I0`wJq7Z!6N))0F0Q&$|=m?q*h2-IBYfwl8#lw)ur=bNDiD-0+gGT-a zKA>ns>LRzdquA$Iv6WBi(8#_@p%w&2NMvPvYzX2l5L&@$I|5n)=kg$o136$5T@3CF z7xTHAl`TzJIhbOEs4;eGf$7K>M_j9GL`g^7ZmTSTk$JY8m-76fzn@^9;oscbB zbGn;Mk99)XF+kn1rcE*cb)re8pzbu&CK-S_(IgJ)UO_<}KJ)N~#2p{riWgc^M}pmf z6*_|EtK^3;a9RWEOq3HtcblN06x}sbHxA6Z48Ei=PwF%`;6EV>!X)T49su(&b*nO7 zDk0ng?6$gA$-;_Dp2js+Dd+OlDmOJ zo1``nb$*pja5b)Z1eo<>WQq*4t{`QVtX0P%HbV@S?n%FnB@|w zbujC6ob~A2v1@bx)f+F}eDzK(t~#qJu2M>h2Bg-T0V%bP7|7{(2|4+S(?O+$nm0K% z@;xP^=KzsxN$qP!PZBURq107xObIaLqn=}w{OISr_~_>zrSoZqwCYfH4D|DuX_E}l zk7$x9`uUJ)lMK+0Xc9+1=TY>7&svFoRMEHJh7~%3=0iVKc-k8D6RKbs-1$7zP2rAD zgE;u+3-Bt%H&VAazS)cYj1|VJ2jClZQms}Q&s%UBOuks9pk^pv%Oj?7<4$FWJ3(xU zy=y@+we0S^H3+LghPoglou#M;g{FdYiKbT5h(7-+p?7nA9sv!FW05i%`Vy%lAsV6r z0%%AQp_I_je`9+Y8u~uoF*L;PQba>8ky?j_PDMl2i)qoJ2}eDVu#j6$G$eG9ITG?} zh=GHaDmX|gOoxKz6Y@BQnqwg485uDhH_IBT`G`q^fTk&R)!#8?5RgP+$1M5r&-o5n z&7(iZDqT+#|15^GW8k0DOq*nYe?*f^@z1%YO)|hgqDdV8oKNu&KJ(19GzfgqBwqAK z6@2?Btk4lOUnRc44o6QWoc`nd+$MbVF@G#T;S#BJcq8Lve7L4T8-Hn@iMFOzD1_ zSma?SI|df{kZF?)u!v}qDHi#ZX_E}Fh-ebWBCn)a1fR7Mi>ShHKZF%Jg66{_Z-A$* z!6Ho*4Z|bffZ8b@3D6@BCV3KGrkF(P8pkAW!oJ3e$9zDCNxZZo7n0Cm3`r?+-_gRB zv~!6Lr-l=Y@EyXd<`y9Wwt6ELDPyarNF52W6%{VPR+9Logspys?Pb{N*LcUU6}w9j zTe(DP9kx2h$!^)PdFOUW9>V#^j`Vra%@e$f-3L(-&Xs1BgF%a6h zrcE+HXrf7`2yLTjlME1=Xc9+g7f^(T&pZ$z4GAB3iWe1`k@^ZtA%PA2el2rXB4$b-Q}ol9`-*LYI`&QwW(P`uy@lK?8=Vm-YKLAbq(gB zg1j}7FXbyxhB7Y5^1M?UH~=FN|zE{u<(KBRO$ zO&s+;C_4s@`jlyt3~-cak|~b*C(|Yw;3&}~j-xK5I0~P6W?dQvK8O3 z2%4{wyWweTa8#&*Vc6+8sGDLZp9XR8(s$uiikGBralG^n>}M>z^d22vaxhY^k`LIA zNCG=qSobgRlmvBnu93xajk*Gt!8!XL!RDMS6B`q_Jw#@SJnj6Df|?GC78C9NW5OLt z?Bipnd$C9vJN@G#@ZLcG5|=TNu~g4n`x5_ z0Fr1D14zh9G6?Wt;2`jUmv{(C6@0q~D|AH7SIIH(v^5Axt5O&`+5`1cbVT%qgN#b> z8bwA@cQ`US4*Tb76_C!zIZ5x=AfsW(vaXK0iPk|`)NFx2*=1l~B|A2T-@pcrxazD} zE<^k&UmB`*Th(#cSUd}RJZAUe8v+(}J8`9bSy<2pzhe~32_&tAZIv(`s!$pmuPONG zgHyQO&)oJ9Z8;JCal)(S79c{5X(<*d81<>P9aQA+#cHu>f4K>9931ORQKJ3!s5tkP1E)80o zu?IKPbj_g&9qO~Ha6nrw->BOOVMIAsUBk;-lN~F-2`6~^Nx+`pm1?bF&w#zi@nn?_ z`1h)5b|?F1Trg!X9JgZ6f}eWr+3fn84)~!9Zbd@oeD>?@@LI3EfZZ=-*G24lB)c93 zS9>vDj)u!s)9oevpJU*kUi(;fUCOS<;e#3WyiWM1(>@;m>azcPd^^!^`P-SqR^bo^P*&``*!|y>L{B(|e4D|7keF464Azl{2vpeni_{IXf ztc4#B*>m9bkbMz;GTolb{&*34@)BNt50^vsH2C#Sy9=LzUbzVV$yV*l`H#EdFMAX&ReP)V%b_Yeo(F{qpV?dRg5UGI z*W=wA@RBdV#m39JGF&#|W$_qXmf~f>P538Xeo=wTukm8xv2~~61&?jC+1a9a%8q>- zUS5s6?y-%eacf1JZO4e)8`*42BwQ13vvu^iKFnro$}m&fX4%!4r)0C-ra9>Q@;NlT zV^JVPE;gc_arjAA0~U z2LQ3{XxKw=3*`*+f94+V4y>DDNV$izsT)Ci4;cQt^a?o4s8TGHcEbWKJU7-_&W}9` z-s^uko*z;w*C66D45x{dau^)pCX}O{{|gL)tQ7m8y=8J>lsawvIyPYES|q4e1`%ZVuYQ>9e< zC-?*F+HB}r>Suf00`goxl@I8P=+bRD$*BkUi+h_3{XQz~65o@6R% zH9yT|HSfu4um7vz+)bvE)FwsKN}=sU-6U%%shu#uO$L~!;@Lp@10GF;M;Q%Y#(0z? z(2Ttj)Qx>AUY6nIM7WF#Fv=euVh`X1N<1*%2tjL&y_KsrG*Sp~bjvnI6|M z`Znq(YatzfAqdT>U2zE%8O^;D`mUe`idr;i?kx!g&pV}8pgGn_6ClT_LNFX9N9!@1 zIvlAa`7j)65Cy}rPH5pi(-bpAgvi%L2FLN!g zeF!2$_6tZy`%!RmY!OkpBQ+b$d%MP?NmwAoPa0x`DNT%GfU~YtpJEiA0n}9XLb+}~OdYX9wqc1%ZS4T3pe3(`?1dAR*w5$oLAZUxfQ3hy zmrL;fFv}1q>=`RpYFT#d0Nj@FpmOKg5S%bs9xqd)#up-F17q`bP5;tX_7MB_w_phM=0l@C0iCOHR<8hu+gA`jpF-tZcDbwg&l0 z?2yg?v9>*fg%Zm+we}TiqgEMm9x51u6VdwaE+=0ClOd$U(i-4S3vwiIp^XJ+I%Kq2^d4x&;<0Xki&xAgWA2_elzx`V1!DO4)q>0mbeoCIa-c= z3Q8nTo8$8gfumuCBDby^pcxGr`wJLro-sDjsLvUjz(^v@5C_kt3zhR(R6%b?<+BVb zGqftRU;+xlvM}=qMxZ{I{k11sC^hWWP#8HBowcMs4`;0Qj};5KLalKpdtqO;QfeHs zpTdTpC^_y$zP+KRx*GPk;hkQ7NcwTon{*sBM928S>GttRLgoX`JLrQqcsgM307iI105ulto~{V|pV#T{_gO%TqimBkZy zOGDYp5FV(DDv<}^F}+F}-&_KNRj$yuwb5*?3-y)q^p(&=_(W;t*V;KRTc6Rgqo!YTml9)nXHk~sTGwpMyF`LIy%*&Gxb?Q zTo?wlulPTRv+bAQQU#i(KFQmGN06Ug$&bM@nanCH z0~kgOWQqGeo3;vkl(6SLyuiT40BYA=aA42X?6;S(7tkm5C8EJ&l|mU#$(mT-3ovn& zGu|`y10i~|` z+oy;F<*-lqQ6P6$Dg>QRDDTpBd!*Mg_O;4;bDZMbl9=-FekMHnm_j#Kf;2p`2cf!b zU~Ygg)VtsX&XbRD-Sv$lDSn>5p0*7BCQbUBX_KCX3PPLob$Ed^>3d3(I#A|mtN2f( zVP7y#_Bzu9G(JBn193mx4Q@jrwW* zT%lGm8FmdvY-_kil>!`%dMEf8g`tN1D72@5$!iw8tLS zfPUxY0nEZ=VGmfe0Wd#1Ui8*r2tuypsnQ zT-pew!NUnt6+7VsnU#Rt&E+G!XwMr9A^yC)|`v)x!OvS z@m2`g8b%jQ$$@Z&+6@xfS`URK60)a3$m&Z1^`xWYMeOPfBoeo$eg=0kol2=1oyRAJ zDPt{ncVUAFcO7L&+wp3AF9~-|;+8w1veZ;a778QWjS{z%RS4s5C$nlM+&oTe04Zgo zbNCdA!@-tQ%jOA{&7G_O+LBw^$>V)#^7zfE@OVDKAttYBV6JY8NY=#6*ax8EliluG%tRa&F zji*3N?}b+T&DPO@sF}FhT8a00Wg)JkXoQ$K@LAH|tKQPD!L5>L?0Tyi`$g@O8FR@u z^{(yN3e1zj5nReD7x@9{>QgDwdpfj+)B8W5RN^8cDm;od*6pC`4c2dRY`T@%Hil=Y zW{Wp4dv@b0YxQbty9gDsnPk^l?6G!L;oSRBQL_reu+<_DG_vJud~U?s*e7G3KpP2@ znBsjZ(%#R6nmQBatKw>nru3_Lalw-ze&)EeX2 ze0&g&PP>7UGCD_(l>8(%K=gb(L*=8eCPaL@6EKm@_M14~nKZe0KINiV!*9yQCKfh; zdDCx<$~$HWr>`=4z0-Q;w)-rjPfiNej!}zhpS{1%P~@W7d;Jh%Y&cGD2*`NQ784T( z@WKBBrp`@*0Rl=K=~@J|ul^+Tu)w@1;st;bycJ*PMkPA7n8zcD7N|O9vVuGz1iUpx z?t19r^-yYjbTMaBwg}#2(d&d7)C@3`&Nq4m`%dgCiA*@(&_Va0AxY%mrm3N9KwYUB z%6CIysToR_HbO3a@un^=rS}kOne{~i;JmQAjLG2}cqn?Q47?Z`sR)&;t6$>P6 zV5$gYe^+>}NVhc%?#LkQvVzZe)`_&!c#N zmR!~%<#ilHBFT9jGJ}KiI->J9-W>4zu|b5pj;BJSCm+Q3l5p1~uj9|4veY!mC!sLH z-AH*IswN4HP=|6eYFo)8vJh{y|4ik*W;*p3?PUK?(q#XOsj%OCv>Rr8=o#I<8KA|to2m3bvntS( zm+^r;a}dilK^Y&(;5mV}S}K}2^P&eLUBow_caot1J)4|#k+V}|mN%i(1EoT|*>iD` zb^i;}MYg0!O)p*KQYh6C{TXVy2tEu1P(G(HU>3|t{m{>Xy#|XXIL`ToTA0`BnxVnc zvPWn-3w9l&ho;~_Z4v^~hoLYD#zjjPQBhozbP;dx&*APD;i#G}5}l(4=^_VJJ_e8A_KnLbOG?h-WD0 z@v-tOp_W-+Bmm9}d)k;BzJZ6Lm&(A4p+UTK5$ZcgA<-D6dg&r`{)r5*l+s03y%EL; zOBXo(WJ>8ltC*IA6HoKAtY({!Db*Cgi435I26h z$i+%sQzu=-rOo{v(_lUp{_`f&r&Qj^YZMZ?)8;yt%3za@YoToLRZa6oMopV!kT)Wl z6fbXNuW7@Q=Z*08ny7Lw)k7F8FK=WA!KU)Okw3*d{L{@FakPmqZ$zRthc)Z)TUYzS;ESF&^17FA-iVix z!FT&SjCb$&0Aa8M_k1C~*m)nHz$#?#B{=WnFLW)@C>Ys!F%A%Y3@S52{B+opypPX8 zVUqU}F+jwI<>8t4;pmSBNee(xazn{#-bZvfOOp5TB+8I1YMQ){Z{mBdT9c%{6|(kq zMi))VfdQ2eS^F<2EV-;j%KP{#5=qYckQp45_Ys}P@n(Ww#0C-W2IqbJ9^XsCU6Z_z z-$7-mX_C2bQn(u_??crjfuZJ5Zbr@fh|b}3@;*)hdJv8W<$bKcm)gbdWl&ja>|UJ; zyQAiPgi3(rRCsSb)D4q9^o(xbJkE$A zlLKw4aMZk{5A2x(S0Zflp(TXRuZz6Rhi^ds88KYYxXH=ecyo&M_GVUYhf*Q%>$#Xn z{r?4d8xN;QO)qcbolvSHy}rB+d>CjEeNJ7hyp4}w@dSqj=WYDCt{ECEEPHgOc^e;M z^w1O>s1QOx_NSmQ31mmh+fY$hle`UY@Qa-y2uIbtjp!UT$lLg;%EzF*jekqPL}R!7 z%V~1)Ta=42-SQ?DHh_6*-iDrcfq5HEUJuIKX!40k-iE%Y_SySsZ`PUh51;j{pW`ff=y6`nu+N73f)Qs%Q7{`ldL1ktR03G}!jpJx2Omb!-#*5hC zG)m)`%4mdZ43s7}xU6P!L>ILrnH;NCY13qKtZApXotdV%U6_ivMatwj9f>4oa>xu0 z%H)X7<9O4%*I)Rf7MP#94rkuo_{WfB;C4&`RlOpfRr zPA8LNT;+IBCda;Zvb&llyWfxsyQ5}ugi3(BgGUI$p~)Q4Wg*^Ze@NxMX0$)jPWC^L zCi~x;3j57RyJ0eip3&`_-1%!mCI`;l3a8CW=D?mgh$TWYhn5gNA1`t;hi^>&jzDr~ z+~g#4JeeZBz3G;(L8%Z8_IypG{{MnxjvuE;O)r__`%tPQy}o1)d>DvWiwVU{lR2hAU8y0l1yGoT#G)m0s6ebqGKV+#MLq!GsG7_XoudZH9H*;% z3`*w6Bw(VkbAD=?Ts((zF{X3g#KHzJPfg~~^DZ!%qsi+*$sA2SF-hjo7u7y{-)AUt z(d@mxXGX~!+G1kj03JU1E>q{4cvo2eykrivuLisiC|F>PpQ}J_d!QW++|S2&gWSIXputk~!*xT4sF_ zMSIB{hm6S~itq*=ie4%MFNOy3k~ygFAO+E5l2z*0))_zH59C3Acg?^rSi zyE}Z6IWF%X$=CW>Hb(#8M1P?)l;7W99W4yk;0#2g?2ZdVvpd47X<53*zOY&|x!V42 zYpgJqFBVF9xD$t2vg2R6twJeR$?wURYW>5-?8y4Q$~e4}o5&Rlxoojen~;A#BU>4% zc3Wqhv3noht@5V0E}+Mg)=vy;k@FcpBR>39qJw{c(r4tX#LqVQu2NV1Pp3+@NjPcU zIe9hxX4PD=&<8;lg*&x9Vww~!vkK-sOP$9$rF9HL}=vf+i2DK>LHr;+Y+T1b^1Mit}a zrb|qlWRTn>niMa&sn@h&$&;ISdrdHo`9ND7V8`_0wSd0uyvPlb`j8C35mWLRA+uK@!>twjwk(!L(7Mk^ZX-d4NZF# zQ7$ZsFis3ZAY)u@ySLJ!bEKXz%SIT?XQGK~`sg~bgv$CZjH;`gwhimzY<%E#fdn~Hd zLx)xCsv!gQ0@HySv2oYbTI^_YLhPTp{Fh+#`uyhczR?pTdl4gkdMR6 zl`Hukr~iU9`lC=@kM+ruOTo$Y2X)QT$csF;WITU=Gb50u32G265S$;IsOOg`*oo=;yz;gz1{Oe}+@>YIGBP#pzC5oq6j>{&WEE40=lT0FC+OHE0%#RtBEz}C-QjfK(ny*@pSoUOdwQ{A0&xg9@6^7l}LBPQ^ zYbZYqQ-(vKLtNBGL9Z9SCoGutR?T=bkzL;qp8=(6Ej~VsG{oz%(kze1;$;Ir$6*N_ z_$TU`q3OA7;Z3tgmNI&13N|(Hr$b?$HmFBSv-DJg{WPeEdXqFu&z_4+J;G5n%`!Si z4bm((sC*1cv%Dk$6OCcox-_|XCFNpFm=>638Ol60%~H=hru0=C(d6|Y?AGKHlQc_x zQSD2!EE!YgMaO zW<`dWR&^SZm>KmU;mf@#3XO-P?_vsx$BKPO8Xrb8vy0ft;oPxCGV7h^_hOl{ZSBDK zsa^duUA-FfC)-tHmHZw?0Zqw)BQL~r{wNeC8P=F8nUh2U-Vh-2H1b>y!)4B?Dpt=p zEevn+$y|5LP*&+bQ`PCL0UT|fV6c`1%rAe*kokcu@+n7sJ6SudZYx|1#O?LWfwPq^ zPd}TM_4H))cUcpqMw_T7p33Cr-TlR6baw&O(Q$hhRfId=rqP=wTEFn^Op-`Fbeg_#_%++t)G3sq+GN6L^J?B>E2C%Q8E zo)Pw5zQ|H$`7uEp4y?C|`BH|dhUzM7G>hl}a*VC@)>*5lOrdfMvHSjf5Ml)VkBRL+ zBSnGoZ2##{s@BEEhiTjX4OnIq+kc6!Ud`A^Wc$}K3TR3WG%O*u|4JyV)wcf#Zu@1< zskUFwIIZn(@`=v&>pxS?LR7^$YRLRR7WovXzMYIBuS!*KP$jIdS|!nv0Y|e)8b^T+ zkPgX}kMs(y@8-!MU?)?Iv?0+uKF{s=SxR^3I^8{smR+BWPA*jRJ#A9-?nWI7k4;7= zRSco+Rw4|s0=kw8hKSLMAG$MVH^hxdc=kGY%PbvaY@qLkvUNS{A16YZGGt;(AySp3?XnM5U!n z2m5>2Z5eKKvJdFU{k|b>WV~S-!+#FyG86m|xbaIUOoAKnV)#eMl+;ehFXX7>8A2)- zIjW(2`kFN5>tpFcDQW~Vpy%Wfb%m2N;dRQ#1^9}=M6=9C;YJ9kJcOL|zY6yA2+l0hqNH(lOK&p!Q92tN<`}it$5r+2GbFb>@g2=nOJ0MI? z<@e`v<29Ij;-5K>obT1YoivbDR<@EC`OqZ!gZaQGgfx#DhdDC6t_>!U9AB6~-!s<0P>8w#M{D+5IL?rHCcAPhfwCcBV0xI$O4BA8tfCZ6@~uhk zEtk|q@a!id=;xU>Ecu#b-d+<`AF|)Vk(?i@V6}G|5%s=&o7OtX?#H30S^q>-z0CwnDt2egKUZw0LMR`RMn z(68kE4H&!Dt>nd~@|C;~;vN3!tmK{RpompYba*~&_yj0XA~uf>|Bl#WQ1+1*?Ou21 z%lPCXjvEaRE@EqvS#TUrqF6hiVm50XCQWV_U@j@9xHxzM^H*_=$4FsszSM0Egsu!3 zz_-USjTQ1*U{wg_uu3T`%Ln#W1#rtLe zVjpnyKCD8X+X-HS`2k%^w1D&rxU_*So-&>lcpNG-b2O=bkk@b7pMb*5X9d{!mDXS$ zCAlDCU8^&W`6R)VMa^8Ppd`5yP3qxB(Zwvu;YR<0A|y+iw>XeM!Y|=_K|Bm2S3E@2o`k}Zi&~_^js5|N#7(rH!9j-`Mdxw6<4%5t4IyX=;dBl+TJm;<<3WcT9g8oui`|Q%veejp z3KW){-BAxW3YCE6U9cVo(TTv20U(GDvgo1^Z?IpevR<>I^`dri|CMQSe{(9_Hy`Xo zb$gnUf~Pgat_y^tYN}>*jv6G2{Z!>+P@>q+6EM*@F!SRyx%dL*V#IV!m5ogxRsi$V z^e{c|m2B|Yc@Z^iip0=*av+PYwhj}=pYtej*B)or6_5hg}xX{)mmtL7|lXQ->~7; zSf*^212$~9URSSXP{}6QSex%+6ws7xYLjzNm}HY!539QECl}h|vmf)#eA|Vi|Aw0)`qACi6bP z;ZSRj>->I-vg8F?z6+&B545POHd}OD=k$9NjN#Qo=2&OqdoibFOkMxq8_Ro$>pveF zF2RgsuD|BEPS5q9&vF0nhycYJyWYB?UmKG{41aInq3ESD@M35XFN>arQKjXnF-rBa z=xO#78DJq<^diwDQWpIsDEsWV&W(7-vgp~};gdyw?qD{Dhm@G5(Vr&eu=vyHog!P7 zN8jVrkZ~f$F%#+MI0ezU4)158>Rw~4>f)!;U#rwrzh|nX(t9Lx^EwZUT>6_7in^Jd zI=9szwRsPe4G{p-)aF}Fn`DsMESls?ZH|;nf0t>)lBYKF_L?aCkX-r#=f~vc(m!rW zL<50)H}9aSzNV)WXXWFpj0>|5%s=&o7Op{BmS^#?#Y2@nM$=uVq5Dq!)^&71 z+ec5PKlJiVrg!KUkVqzF6*(}?TF15&+AwgKXVd==kp;rlLtqfiw}~zb@kaZ-D(^L;{l0dx|L!!||7a@gHy`ap zcYCTk?R@%AstjzBPyd(gWaP)wWaQtb!pNXJkI*q|m`|@CuxjE#>+3>y&HHmG6=tElzyjj_KjhQH z+HQ@FTJ#PxL>eY>Ubfy5P^#;2Ss7}c@nIkc_JQ$O`Shn^@dS$p=hL6AYeodG-gHuZ zIirWB;6RdwIQ3^iVG}OOf=5G z+>$02`zRMTtN`Yz`Sg0;1?JN?c|9m&v&kps`Skh%+Xol+8VX+EAopc|>U(CC zPp>T|CXC=ne6F$h`!eBXu_FGEPfzSq6X)ZR6eZ2G&<}73$*1>Rf00kWlTgd7FJkO^`Sjb3$svmH1|EuDDg!Tu2J!OgX&6;X3W-swmrqX< zpvVAADWCp9Bb|Fblh!tFGZ?t;voRD*53x zp_%lRYOP_mqhNl3kC2tGyU6N5kc+>Gl%-&oS^%uYD}LE@ju_@WBjwUMKw1X&;Y& zb=oJeM<=rDNpQW>o(<3KPCRJfWcb@&h8GJjr{HC|``ZeL{B(|e4D|7k zeF464Azl{2vpeni_{IXftc4#B*>m9bkbMz;GTolb{&*34@)BNt50^vsH2C#Sy9=L< zKGzHJ>2>gSue~0wFqLvK{BxjTZ{+`M;{R;s|GaQu2EOtV{FANPm-8Rra1c6u5H3}F ztM|*Hs(l{_0typ8v*+Rkzvp-Fz&{_r%X7EE_M^G8r>C?Q1cY$-bIb*vtRf4*x*&cJP1t_&?Y3f3D;IyoUetTKEU(b0hvU&3+yH zV-LXP07U3_H0&X`g>r`ZKXZ?F1^i~{5y*!yt%^1G9x#_`>lG7Y`AV@++6|lJRz~tQ zYx$n?(0DPwI&2s&cee0_@tUvXOF2BOhp!Cb(Wk!!5vvZyz`vgD`3w|cX1?m3#r)oU zv2oS(dIuaC2pi-t2co#D%ANy^tam_P^YDt$7IWYYtYs9a*lQO!EqAj&+{_=4y}2lt z`+%;}(Ty%8Gj`3P#Dft zhmEo#kd)-CQTl*H9Mq5{W51C;sn6Zv@Qkjhl71(Ps(!6wMU3HuR*p0Hd8O2;O!FB) zUqx-zzvWU9b^(W-SoXj$X1gmmJmyE1?JE?E)?nVM!f3L@&YrM)cm=ojwDQ^9C{N4A ztR$x}-!KhN3^fldTl{0RF;Si!FZTS40sq#5?} zV7m@9>|gPJ(1_XJhf5WtDRukb0q0lLUzr;%7jk*+ab9kxseNAsV4%5q>*0k5u1KcF zP6h*Wpl6d-U%*SVW?qW25s_Um+0RJNbapxRQuub&=)DX z5DGI~t+>3oifY(%XEIN=4#LP9%-1Zw1<8r+ch)SH>}53dd@QP9CuY8X)gbwX^(is)3p1KcnN z*k_yLy2C*Ob3r>q`VNAoOWQS=PU_m8tz`G0@1q z?1i*KcAi8@$71kG{KSaq{Wntte10s0 zp9U9qx)^_vri<~J%_5U563Fh*4Ytv1p3+mk+oDYQY6eu(iQi!mmV^_(IVi#qQ8bzO z{Uxy0bmA9v9w7LR$(Z+-{$)A050%g{Q*34!@U2x#n|(f=;=^L~Wg z#y>^upWO>>DWd+*;VXQ$g`0)1;t#Gd1hWu5>c3`384jxFX&U7UztCw1)na~tk-fwl~`FItQlqLxK zUd-BJo*=f;iEA!Ux=x0IwmT-yqo`g4|Cjp{xEz(CN+fUWPY4O1+1em{^fW!uBrjk< zE0OpXqoZEHfQl@rY)Pp7MnnWjGJL0YzRn;Yh%4-)F$MXwcfx>R!GhEAjs*+YUHo7H zQ^QO|6xG+F+=!KzZQOaqrQ0^{xU88iIf3Yv9`aqwEXsUZjbl4hyRsh1FWVL6J2Ip$ z#+O|+CP|uRL?^K>7b$fmj^3D97n!pSy^T2^+L)q^VZ2~AW+!$Y|8#5&-cuWMHNGO- zm<#X+mpMi@=IpDPH5to7S|Q{cR>xs-xeAHcL)q%+U>Ob~u!ajofYtDqJ%NN_3j1cf zV+xzy9X<*><7vd5SMRz!4E>*|)7bc7B$W*baK2=34=cC=$jW2G7}u9X_ZJq>zBo`U zW2^f89mp+NzpG!8f!HA8FG*$#6#P9(UG@EKi`hsf*kb@J$QZPbrfye#-b#>!)yxlE z=@I#4<*n(K^NfRT_?wXRaiy!Sho~W|eFjvJ4byTbp(nz?&by&(X!uJf&?JQE>y;+0 zr%n2VX_LB6Y|^9`p#`K#rd0Yn(MWt^#Z;Wts>g>T(N9}Cg#%~lH8!6K}S zs6oa7CYx1@<0Cv<9rJ4j#|yn3WwGf)^nLo_o9y@9+SL>*n$S*P1Gb zZ2TALza$&FG2Aql%&udRGK71E)L}LQA=u|RaFk(y2PBpT2pjjoBRg;}U{e_$coFXy z9$)*BG>M&%$lSVyD9`JcIe6S`A z9|V;e10@_C)H}y6__4y02Y{0@RtWx{42xs&8&@qf9~Mbm!o^Bm^@D9h3|f{1;)bOw zQH8Btvxdd#AcwZL_JXr6xL{2J5V1<>eVQQRG$=a;hU$$!_yQI1ydLdQRJ{%{L?`ccux_9)H04J7U4Ip z>HzW61;u@c;>^qP!`bm-&BD=zix(Y?u+ta0P=JEbmxPm}q_xczT^M>7Q*{fmNZJ19 zNgWC8KP4~Ne~AIf?f$h+2f7QnA+qd>!-oNRJ zFw=h$4GJh@&NguM7pfIGCR%m%A3#RP=G*rr5$K1Aur(LxB$oSrrLOu!`z*JQ ze2#YX0rz{Ll__dR#t)_)KaAbSKOOCe_f$JRj<3kN;2row6z!PtsmDuR1*NR zLKmeWjNn#pDneRBaePn7!ksBtFn3cCmI#lQVa2dj0zJAHmYCxsMQ0{2j>z4|NXMGX zU2{cRKO+Q7YuL|C&=aIBV1imPKSwK(I&6XgeC{2U4^Z!t1SMDR|B8fR>iysFj;VKc zm!5j}bYW{;yEQwnxw?O6-^RYpuiD((=jiw_1;2tS_`vU5rskIfSLY~nRoVXl*&-`@ z&G%&J{fLOWB#Ay%D53#&{KJy}TdAvlYx`8bhLl>x|17jMMa9o}!xaDY2Z2lYr=$4s zo+|#|BAsN#{~Z1hPx1fL&U_Je^FXCv%kP2xN2+Yo5pNm~wt5&YjEq+}XlC1plwd(0 zt`da}BA8jIVw#v^ov!Us6s{7p6qTY1NI-m z-Gd-VSIZ7&!KP$KO5pewa^0}56n3M44J@p^*&^&xV&U#4Y=Uu|?S_LPKR&T&jg7*W ziUE50bc>9}StuMXqnnS$2!`;i5JMO`D7ZPCNm|q*b4V+Zx}C@z(oqBEP#Ras&EZNU z3^Rurykq8&-5oyWu$vFCepeX;Z0g~JH6j1;WNHi5k6UI2&sJ;7z-C3&{7^q^4Od-{ z2c>sgHy6hGF(HBd8M3LzBDE|h^vNd;{Ex}-+(-t4B&RJfmg|+e>NmH~So(?N*hyR6 z$YWU(UO4p4*y{csi_|Z@SJiz!=1H$QZ*hi^CxlnmDfDx(rG{6w!CoJIP&TMS(_`I- zO`BwJth;EE?^t&n9+YGq>?cC2nrXw5AM4KBYogzMlc?L=N!0C}AF71SCtAUwLdI6b zYmW1t^9q+O?`J}+yG)5?AXtZZM@$9l5z{6a2$pD4Ji&UuX~U8W7H@B=f)%eY%|1M; zUbnX)ja>a&1ECJu%gSV9OW0LnnD3j~s2@Z3;X!kb3z)nucQ!%w-r{#$StgtjZ_6FE z$*wB(5#|CYEJd#g+s1d-`8wX=pTcXZAEnx;%qnLE{d^!HpgoDM9Llc6GF)&SGP&Rj zpIx^M5|p>HG)LS#XX6-b*_gNdGYgmvnPoE&MV^KZd(c|UrK*nQbA{moI#897aps5h zbX}T-!f>PF6 z10$okN>8D@W(fB38_Vu3miMl4k~jN@hCQse78VD<=8yy2gX7eMw!%i0W!M_Bf;&a# z_roq7*ftj+Lby=!7OPfa7&jqA*U#a% z8G*hHn((1#z9i22HfV}<=IOauyc|8A<4~RIp7V6g&bCjzJy5)ZEE+sjGpoc)mTMq;4)j0rt> zsY{I|S@h#)M>whROIQ)n4>VotL@Ok_2uBF;tqNaL0Dqv88-$EeWff`11#M|BQB^ER=QBtA^Z?gjGI7^OA4DxtuU1+qAIIpm(PgAs5>oUhVMWYe6 zVZr)`!Dg@-;0<`kW`Nn<;WGn#CZ=ihqmk!TOCEHc`wq^6bCn^=m)4w58y$hAk zXaLUll<19DBSYO#u_TfjK~IthyHlyFor$nM61npb>O3zAg*Zq_op1|$Nu6yAe2Ezk z@`UiCq|nHnfza^7WHQ%=vd!}9LuMj}6BMSIFjD2i&Lc5gMzwvy=z6H00!^XOy$K_= z$u7HmYPS~(OL4*o+r}r19>F{O)0r?jQjvAve33*}j$XH85v~$|xSVb=if_KCzWr68 zS79m$H0x^D9n()6apl`BW`cs|im38Rzj!j*-bFgzT>FI~1reohV{*U3XJ@Y#&eO+8 z*Fu8ynUR$tdha=|2vo0?_dUIW$VIo`G;V3AwvrLUsZ|gkX{r`Uwd#5dH4h zkS3b{3n@~{3pM;Bl&TH1<3n%UOU&_w8e)fKzl~MM;Ran;_Gw*PG=@)(HyFFCPcf=! zN)8<4)DDnv`wyTnDc}&%U1e%pinlip%RYe=V%AWcsweYS-T7Y6S|)};?r4)w%;T*3 z0+YsB=RTqlToaZGWA4RS_3h;zzY=HFzV5UA(WZF0-u`=I(G>mgoL$t8TE{O?xw8v;T=ZCkCWna z2XV)+VqvfcztBhOF2_#F3Xs=82(i_W5Q%i(W~j`}3kcDDJE5@Ty6*^?l*(k3r}e}{ z<3>U(vz`b!N2ta}+XiD|_(mJbTPmY1hT8B#OBC)&raVTeUTBFr24qyF6k2)j=HLuxxxpXK$XJ^EjEr}n?7WQ6$iRKU;fxI28QeP~ z8(I{@UWwY(MaElC^ZL5LH z!ELs39oGliY(XRDyxQyWg24Z)VCv7+*u<4;1Pk?kKJXGUDP=uMOsy8`Q z;~`+A>7g39H!wJZvnS(FjZ^)HYQT}+xRFVJet)f!&B4xS)kb}V?~ILrw}Ot`_(xO$ zEQW=5k^yYNksDt_ZjvK6?nr1P-2Hj|y$v~m!~Zgk0a2O&=c6CUanxmEmzm8Ta|nzL zdVzr2=X4B-;iGv6ar~!JYJG}PKIoW^9nvu!kS(7pjt}87U~8;gh8*-^ORy2L(4BG6 zRU6ILSVlaaYmZx0z%jMXK0kxy{ch-q=PaDZ6{@>o?ijoj`~UnBi9Z{Na34JPidth1J=(5eP06&kuD$)-3+&(cK!% z7t8y4-~bw{T!B^JxXb~m&%PA{A~%|?)T-TG7=7g{7hGlu-ooo}Zm{J{t-|7g5?|CX zRv61;25(Q-W%*hb7I6+i-FT)dG!Gd)2p^TlVUYuTfK?9E#z898EtQgPXW=}5X z#p;6}_x-P;2u*RB`A0gPuLhXrNu+eWdluE1>(ZE(Jx^D543YOjOxR*496Q(JDH&|q zUYYnWlBWx9n>W~m6Ri$5wdhR!C^5`dd!wUaqv2D}#BpAfhEe!=IMgbU)~V;=V14#C z;L^JDaMq3FYyG+LN(Gko^cSfvE#3L0s)>uu<0O zzN#|0+Wv0KQ90e9Q-;e@5`nte^OhUdfmO=&R|_NkyYmzKK>w|^)~%=k``214v(<@G zZsmpz-In(jTb>}jW5IK9Qh2N@WB)csV`rVL4CgsFT;ew({##53-mIY}n=}6gTEfFU zm-69fy02oNX_E~0Rpd=l$6wgFtG-EjZ;#~-N<-@pO%YrgFcQ3pePw%}`jI|arcx8| zoJdeXp@KV}G^#sEPK!!$dlV~oa~9O(lEndo(&?OkPH zB}}qOZh^ARTw0&tdh6QvvBG>iC(LowmzE0tHyA0rp9wu4XdylBYXdzxP>E}4L7y@@ z@Sg|`o@gNrKA1iY;%P=rhEbEzns$cKX#q>p{V2g(p}rf)=S{X?m`1=jFX2e-fvekm zbh;1*phbQ{mIM1U1yA=nMrL48RO3oa!SE4jRg#w6c%|+Qy)oiN%}VFI!Mw1nCz=} zl*+YySWxYWiEPDRw@#~QtJ%5@Phkf z{AqjR)6&sWL%>P?DRPG4O5wu)f)O=FSAOP}bWG5Y5p~6y()MPKsX~V`C6%u&+GtV2 zE0Mcw=J*18F>F8<6hbHv%fLU<<$Op6ZSV6lfBU2O zm4;4v>1OAt1ja*%5L4U7;vw`ou|^XL6}FuJmd%#4-uo$=~W8? zA$J>+z$6gzHYhu_K*$}eFkc{KdcQ*)UmQq!#NZwLO}PJOE$sSx+R$|x)lk=1(WknY z$7fqegTGFn2Jy6?Cg#y(L{4_h;}#%albDCv16P0f=yU}X*1DJnHkHRbeu#JYCy99w z73_<7NQ#id?yInncrlOLvIo#lhdq=Ri$0*v14p7wx(E&+0rV|}lg>u27183kJiw>~6^r8cvN@(2?T^C9I zD+}8h1qfC*O->LdixnL$KJegFno%arj}aa?*+*X4A2}SdC9W{le+JQk%eWRajSgIE z+9ZSM0B@3s?g@zwT%t6zKE-7_FgUPC6=B7E`W_R@v0EX53#~QgGf8MbCAV#3<&z#7 zc!MDcOhN+(pzPE_0~4&UG(!UqwXo~=x1sCQ`HvSG_-G4h@Zt1n5Kr}KLIX`kp}zAR2~}m7T)2XPH5mLRRjAX1Ck!(SbIH|5ic_EhHzIL zA_K#PQlSbt5$y>LyfM5zEHu#a77>&8EFrGsn`%s6gxJ73EK-gQJWcBOLu{b&hQ@)0 z*q-+1gfWu>n=wV-)Sh2B`9b*np%S z(}@k7@W(J*S#01$ykoHec9&voz@<@(V*|x(wbqY`Y;eL!%CP~t=)*8JK$;&nHXs*r z*kul^Md@~7grsS8`p+OXa6Xg`TF^8$aD{1;3}OSkNhZ1{BsOr4($J|D8<54)S@H|q zP!k7OY=FKi??mH&On}mj3JF|ntr4Fju>qCb_G_{7NskRw4M|`U8z@8Bsl^6%v%=Dh z4ZN*|UB9CZT~8x6@SYaZ;E&U%K|Ix`i48Ovk&_)8=m+vOi4CYdaP^muPTf#g>tX}g zR301nGTz~zBsL%`XkTnV(t|uUum;O;jXEg(m@6gN^fGKdfb+iC0=60gK%}$w+*wH> z=7dESfk=YKN#;R(85YOG+395nag4%hd3UwMz{X8|+jb0i842oCazPFYw6rO7y7+5^ zdJ-h^IiHYb&iX*Z>7DFHTIRQOWoqnXSU|yZGqI(Pn>kM=B(c%j{`h1(vUk^m-I0SC z|4RA?ZBi2*uF)r$Kw?3@1Pd%6w}5S%0OAH4TVzK@D)|vOmC+G8$Z5c%9pS{Ya;ciH zy3)ee)wG~|Ld5?e9h8J31_Qwkc27f#knd$&=ktHpWj*C41Pe2Hmi@X5u zn2XHrQgo4B8nwLy$-qtKO)}9xA#U=iN<*hsf<2MT5I>nE&?_&?j&i_rVnDVj zRB(}|#(*U8lvRq`y;%9Ad&+r35}0_(StvU-Px(exSel;lffjasq77Y7!&AP$g*3P~ zeHz5mei~1?$%ve6Px%@kUlUJR?SZSmd~`Y)3TvIGj7{a9^55Yd{^@wiY*PWEqJ6Hi zqzJjId&N8;NxwEY8 zk59}aJIfY!M|PI~KhnRKp|kuw(m_cmVlYrR%N`Mhv#b&^27f$fnQ8%WmL)xrjL>YjFelH0_Ab8!$2kM4cqiG^7VKTV4LL~mF25zA zVQ}{@m-`vAYq|WI6O`eAozej~9DTp?Beu#+AUl=QMwzPN@4-|~0e7!P(XV!G8-suH_*bnm z0g1)~mu9PZ`e6ZHs0?RwaAG9P_hgH(*)}93!|rQY*ywr>Ob88iK?}rS%Hn?4xFGg2 z*a5pdVr_x9tu4;FSt~m>RxIS$ORyVvzGtL|mSn*USk!vF zo(R+%Dk)rbon+r(c_)QZ&z(?I&vf69706-7MJnZKgKpL}NF%(7PL0|Nl^H7jS+Kp@ zP&wCNdYYV=_a-RJ_|&NSG2UuMPe?%H+R`a{ev%1YCr*IhgEV9Qnm9ubx$1b1tD*=t z%UGw3&`XB84f#?2G2w~>U+t`p8CugL*!&e~v1cR)$+|IAS7LpTeg0D}$f( zsAUCCcvBE3gW0*TajdifCu}9ltzE`mK%dmFQESSeF^5e!$13H$1vr>veJ^Zu0{dUU zxk3J40f4AKhAibi=LUC|dq$a+CY#(dr7cc;B|7Wp$l4%HZ9EtJTU|-Iv1u?DjIA__ zCxy%f|5#~gy*`PKg^IZ|Jmv?^^>dHOL0;q=0HYdEdpPm;-BmBjV}tXw9Lf_L2>1#5xd_$)%0Ax3$u?H~>F5BIFmg1@vv_ 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�`+{tEw$6-NLpa`7l1T#I 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 w0|*?cE(Ac^Z1h*69hU*F*Te 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 z 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

XK!)u;e)PBvfYx=)q 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

aX#c>=2Yq<+DQU+&d3hmjPHbu! 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 ex2EE%fLo$Sq)Q`Uve@>UY2>kM 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 literal 0 HcmV?d00001 diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3432f2f1178608818b26315d522c7b1c166b8e0c GIT binary patch literal 16502 zcmeHOU5q5xRo>m%`Rm!)_3UO%7JG3ec-OP*>F)KeO*VrSd$m8wvd+kgH^DrZ>gulB zUDZ=vRj!};iR?I5ua4=~#a29@uf zY5wIKuH^+iEwfyIc zZ&d_ZPT(h& z>thUNL_v@ktt99q5o0aGb|cnF+zr;qoY@yLXPzIu%eIIKKVHPYmXXZ(OlUzsN#-1j z+ZL}`NfNnW3It37opS9M!sD|Y&x&I-;_qo6QW1a6*=bn*Xj`52h;_xA`K^Js8iy7s z!dw`!m_-{bOZjYK_2`StsX6yMQ+(c3lFjgIM(NITO(z(zW|aCqi<+bXOx@;cMb3<-1@FQ*eX@tF3C zpB|}~QUjL8y_GCp#!4S^&O1}iBWuouwX|(HKLy@8XP`U};NMyNdkFvD_d=FB=bR?G zugLDsvUB0ij39R&VzPRX6*@Xq4_~|i-M_eMyp#mCwf&ND@e?eHu_|iXkbk};h@@4` zu|eoqu^a0{%*Y|sN{-TiSxNYZ_fPmu5Pl8BF7YF)hBm}CeF(fgc7t_{%O6-VE?>HQ zWkSEh;|IAV@dkJ?U#wWIU^ZugHnOEtFq!+K7D4NZX9)MI#G46+@%jUehZ!zk#(T4I^E)ByVBBv!sGjdan_r+X(X6*M_&h}qa-1s3c zA#;A?<;=;P-z%h~Ar&O$Jgpe|{F_G(9l8teITAOGssaCPMx!JHpyHH2Z?JytCsQJw8>o?b)yIDu)54FsC-fqLWw<9ast|bl} z`lb~dHrrqx=CO@9WF5Ebb}SFUKsShF_<&FVeq96}@itdr??Zm)hg3WT3QA}YD;usfe zl;M#WWMKJ#jyxLLQVS-JDyT^q{7b?>bK)4jm81~}@j!b@Ux5`J2C6{r^4c@cUXW{F zsS$M!9v(ANczMtmQb>g$%;lFw4HH%u|q2(;r!JSKQT0k2891HetpaQsF;gS z#fgngES`0coU!3O*Y~jC?@rp73B;jK`Lx(jW=M6gt{n`JB*^-+hYua%vuH@RLu`1b zM8^ffq%CszZj!wrUT<2Fk3Z?t96kABg;@e)zn$+Cei}sm>m;JoZtRLhK%;gG@tn~lpRV4NxA0sF0zJ)u_^A>6SKu+; za{7-BjXpk#fTr~?Q1AN%N#tDlU;UqwaDkV*c)mZ-KMP|Oc9^!y5BLcHAz@=Z2SY8e zQLhwimeCEF^+koiITnyvPe9`LOCn6@>{x)p6px$or$XWHDDdt-OX8&b<-hN4 zTH*`ZP?|n|e4@rI_h;~aKVaMc7&=aZwgPYar)WqWY)xv|H`w;iPioGOdqsyJ7lVU$qM-JPj9gaaB1KTv( z7sZ604$|NvVGY=#EP;3fET@Djw!tcK4M3(XX&MR~@20-UZ8m6gSlRK4O%*m)iNslp zUW&f~@yG)kK2qJC022}RAzP0105q|?&9hW1HP+}g0Fa>5(;rTv-6%u~wA zcVA2yc9bmXl*oCMSfgpuX2D9C6YXC_gVIEPVu*Q#&xS2o)`!hXpCisG#2h*<4)$kcNDsIftpqs7D4i0rh@HqTby!2_nQd zu>s6W)Q{bW_a)MjD&iGQOMJc4_e8#?8E+TN8HHbqt(LY>g~Dt#8m}XeiweSMc7a{-{{$0Dz!>Jj{s5x^ zB~;2)0gU;=dNsJHG-~H$!yyvs=LE2LP=dwHEsM^A1y->9@7+-GZzPl|R1{51d`=Cb z>BILYitzwQ@jW5h@meqeDQ1!GIw(@q8coH93Q$~zjJ~r6DGDgwE!Hl8;z|W5e)}2M zUl$2!n+*`uAjOQ>hSJG&q(oteICMwIL0M)BIMm*g@PIPXv^zykSEQwJ(9R-cj8*(2 z4Id!D@;p4nMMyZufF3DmI%6Uz()O$6=2HR!HZ%XrsVpt-A;?(Y5sp_B-9P;$4`tFo+uVCY;Uzoe0f3l?yek2KsPG~$98v6CM#aOM^e+}y!!9#L5nigw~NIKQ@vF&)nAjQS};vBR2-@x z>_zI1iV@%-yQx*kB-+3%Cw1G z;dmqdZn1z-MvR@RM!hoOk!tW?Lj#SMBY39_m}VCSyj>XZkDN25X%F*af2RErsEbmA zifPZ6>Q#EAqJ{Y=HAKdOqzadcx0ki0@* z+6@dbsc@hgoa2Pj8sNQXZ?zPgOB5)r^6I?~tI6z6LH8(2KBg0(40)93pBoxxUv^A$ z3p<`ycHEdi+5YTm4Kh=*z}P5IhCPLJuB;ty%CZ9oijr60?|wI~78S#vLTZA~A~=eW zp`=>~YkWZ~PRL%*&_HSG{G3cQXc;GZU+#zL7ac|A6}#eNO&#RNB_@cE3vGQpWBgcN z@*&cjL{9%@@U{O6Jzk~9XXx=7J${uQJM{Q09*oZotSub7Bn}FkP>zoa4hY~t&(WS2 zw6h&PY zW4@>i$;(}eaK8ViG#3S2<=Jb|RGz&SO@M1PlxARmQ4l<8E4dr4LDI-7m;Rq)pkaCH z9GVb=l!uE_U`QH{7TCYg=T(6fO{Kt!CJ0Oor3viaf`%VZVBf+(_b9OM z8nt+!nY<0YLxvF-?wFq$bL;D{aC7DMX4#R3MUPPpUS5KVw5!UIRWzZG}iWavJH{{MRfut@^Ni&i87Dk8elg< zE&?@yxPNM1mXKPLqE*F4^;{lxVlK&OgMG_?U@nbK?X-vKjuVuEYpA6}fye+Y^OTikv?w_GSeSP#m|$XOPC~VwvEGYeQFA*WJpT z8GhWt`M+5<@gpwOYtc>zp;@RP7%LjYfin)1XuuPqMHm2yzibL)mfC@d`;6#y9}cvG zn3?*QLQ6V{x#7mHRM8Wr?ZypHR^yvM*?k--9B0sKZIJUpVxS-=5~jaRbZ*TV$w8%R%{V2#p8z zWFGvzs`MYtaYNoi61QtIewum;6428`xB~&fe$b5Tt7mcBhK@E6^9!>Cp9K@~^?Dj2 zCZ>DJB1q1WUV{i#Tl$^%K|dFqtLokuIFBXV4nl=CfhM+aSSVEWsqF zJLt7;G87PdChk-d)C#hf@~Q}^tJjslw!^2GzmXx3;d2sD5OPBq$*a*_WK$Lsi`6ZG zC@2>W(n)b_x{iyRbtfyW^2#onF~Wu^L6K){ztH( z>ffZtZ_(rP^!OG%zCn-6$oBM`^hoIOB0auFkFV0>LAdJv8G2lzG3)eLrpGxvQa(?! zQU$f}Ibz-&=j(5XDR;zlJ7TIGG0l#cVn+F6s$`^HQ73^C?#kX{#V5w{& zSW^9@ob(p5B+&}(9<&3mFaXi`o}tE~_k3lN~iN0L_99!DG)}&)Yu-<#;Xo7|b8V-2f6?1CMcPFDERpv(mg!Gz*9Q^>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "import pathlib\n", + "\n", + "from dff.context_storages import context_storage_factory\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH\n", + "\n", + "pathlib.Path(\"dbs\").mkdir(exist_ok=True)\n", + "db = context_storage_factory(\"json://dbs/file.json\")\n", + "# db = context_storage_factory(\"pickle://dbs/file.pkl\")\n", + "# db = context_storage_factory(\"shelve://dbs/file\")\n", + "\n", + "pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " # a function for automatic tutorial running (testing) with HAPPY_PATH\n", + "\n", + " # This runs tutorial in interactive mode if not in IPython env\n", + " # and if `DISABLE_INTERACTIVE_MODE` is not set\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline) # This runs tutorial in interactive mode" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.2_postgresql.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.2_postgresql.ipynb new file mode 100644 index 0000000000..91ee6f30c8 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.2_postgresql.ipynb @@ -0,0 +1,165 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b2141428", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 2. PostgreSQL\n", + "\n", + "This is a tutorial on using PostgreSQL.\n", + "\n", + "See [SQLContextStorage](../apiref/dff.context_storages.sql.rst#dff.context_storages.sql.SQLContextStorage) class\n", + "for storing your users' contexts in SQL databases.\n", + "\n", + "DFF uses [sqlalchemy](https://docs.sqlalchemy.org/en/20/)\n", + "and [asyncpg](https://magicstack.github.io/asyncpg/current/)\n", + "libraries for asynchronous access to PostgreSQL DB." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "6ae2042c", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:20.999153Z", + "iopub.status.busy": "2023-12-27T16:49:20.998957Z", + "iopub.status.idle": "2023-12-27T16:49:23.325035Z", + "shell.execute_reply": "2023-12-27T16:49:23.324227Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[postgresql]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5eb6b286", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:23.328061Z", + "iopub.status.busy": "2023-12-27T16:49:23.327778Z", + "iopub.status.idle": "2023-12-27T16:49:24.063795Z", + "shell.execute_reply": "2023-12-27T16:49:24.062861Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from dff.context_storages import context_storage_factory\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "95189175", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:24.068078Z", + "iopub.status.busy": "2023-12-27T16:49:24.067471Z", + "iopub.status.idle": "2023-12-27T16:49:24.186954Z", + "shell.execute_reply": "2023-12-27T16:49:24.186204Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "db_uri = \"postgresql+asyncpg://{}:{}@localhost:5432/{}\".format(\n", + " os.environ[\"POSTGRES_USERNAME\"],\n", + " os.environ[\"POSTGRES_PASSWORD\"],\n", + " os.environ[\"POSTGRES_DB\"],\n", + ")\n", + "db = context_storage_factory(db_uri)\n", + "\n", + "\n", + "pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5dd744bb", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:24.189978Z", + "iopub.status.busy": "2023-12-27T16:49:24.189769Z", + "iopub.status.idle": "2023-12-27T16:49:24.216608Z", + "shell.execute_reply": "2023-12-27T16:49:24.215746Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.3_mongodb.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.3_mongodb.ipynb new file mode 100644 index 0000000000..b6604fc111 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.3_mongodb.ipynb @@ -0,0 +1,163 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "272e672c", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 3. MongoDB\n", + "\n", + "This is a tutorial on using MongoDB.\n", + "\n", + "See [MongoContextStorage](../apiref/dff.context_storages.mongo.rst#dff.context_storages.mongo.MongoContextStorage) class\n", + "for storing you users' contexts in Mongo database.\n", + "\n", + "DFF uses [motor](https://motor.readthedocs.io/en/stable/)\n", + "library for asynchronous access to MongoDB." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "be2ea876", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:25.915710Z", + "iopub.status.busy": "2023-12-27T16:49:25.915045Z", + "iopub.status.idle": "2023-12-27T16:49:28.203059Z", + "shell.execute_reply": "2023-12-27T16:49:28.202308Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[mongodb]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f83f1402", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:28.206123Z", + "iopub.status.busy": "2023-12-27T16:49:28.205686Z", + "iopub.status.idle": "2023-12-27T16:49:28.907742Z", + "shell.execute_reply": "2023-12-27T16:49:28.907075Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from dff.context_storages import context_storage_factory\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ee8fa71b", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:28.911043Z", + "iopub.status.busy": "2023-12-27T16:49:28.910554Z", + "iopub.status.idle": "2023-12-27T16:49:29.002287Z", + "shell.execute_reply": "2023-12-27T16:49:29.001542Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "db_uri = \"mongodb://{}:{}@localhost:27017/{}\".format(\n", + " os.environ[\"MONGO_INITDB_ROOT_USERNAME\"],\n", + " os.environ[\"MONGO_INITDB_ROOT_PASSWORD\"],\n", + " os.environ[\"MONGO_INITDB_ROOT_USERNAME\"],\n", + ")\n", + "db = context_storage_factory(db_uri)\n", + "\n", + "pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "365916c9", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:29.005493Z", + "iopub.status.busy": "2023-12-27T16:49:29.005055Z", + "iopub.status.idle": "2023-12-27T16:49:29.036501Z", + "shell.execute_reply": "2023-12-27T16:49:29.035811Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.4_redis.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.4_redis.ipynb new file mode 100644 index 0000000000..2c01e257d0 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.4_redis.ipynb @@ -0,0 +1,162 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4f99c29d", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 4. Redis\n", + "\n", + "This is a tutorial on using Redis.\n", + "\n", + "See [RedisContextStorage](../apiref/dff.context_storages.redis.rst#dff.context_storages.redis.RedisContextStorage) class\n", + "for storing you users' contexts in Redis database.\n", + "\n", + "DFF uses [redis.asyncio](https://redis.readthedocs.io/en/latest/)\n", + "library for asynchronous access to Redis DB." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "b0de4e3f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:31.454397Z", + "iopub.status.busy": "2023-12-27T16:49:31.453837Z", + "iopub.status.idle": "2023-12-27T16:49:33.773016Z", + "shell.execute_reply": "2023-12-27T16:49:33.772252Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[redis]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "24b423b4", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:33.776076Z", + "iopub.status.busy": "2023-12-27T16:49:33.775641Z", + "iopub.status.idle": "2023-12-27T16:49:34.476653Z", + "shell.execute_reply": "2023-12-27T16:49:34.475930Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from dff.context_storages import context_storage_factory\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "3f9ffd3a", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:34.479878Z", + "iopub.status.busy": "2023-12-27T16:49:34.479372Z", + "iopub.status.idle": "2023-12-27T16:49:34.484198Z", + "shell.execute_reply": "2023-12-27T16:49:34.483470Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "db_uri = \"redis://{}:{}@localhost:6379/{}\".format(\n", + " \"\", os.environ[\"REDIS_PASSWORD\"], \"0\"\n", + ")\n", + "db = context_storage_factory(db_uri)\n", + "\n", + "\n", + "pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "4e27a64c", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:34.486791Z", + "iopub.status.busy": "2023-12-27T16:49:34.486400Z", + "iopub.status.idle": "2023-12-27T16:49:34.499578Z", + "shell.execute_reply": "2023-12-27T16:49:34.498959Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.5_mysql.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.5_mysql.ipynb new file mode 100644 index 0000000000..38035cd5d0 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.5_mysql.ipynb @@ -0,0 +1,165 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b7b9b39f", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 5. MySQL\n", + "\n", + "This is a tutorial on using MySQL.\n", + "\n", + "See [SQLContextStorage](../apiref/dff.context_storages.sql.rst#dff.context_storages.sql.SQLContextStorage) class\n", + "for storing you users' contexts in SQL databases.\n", + "\n", + "DFF uses [sqlalchemy](https://docs.sqlalchemy.org/en/20/)\n", + "and [asyncmy](https://github.com/long2ice/asyncmy)\n", + "libraries for asynchronous access to MySQL DB." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "bbd07a65", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:36.378420Z", + "iopub.status.busy": "2023-12-27T16:49:36.378066Z", + "iopub.status.idle": "2023-12-27T16:49:38.742011Z", + "shell.execute_reply": "2023-12-27T16:49:38.741161Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[mysql]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b46e038d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:38.745300Z", + "iopub.status.busy": "2023-12-27T16:49:38.744704Z", + "iopub.status.idle": "2023-12-27T16:49:39.430695Z", + "shell.execute_reply": "2023-12-27T16:49:39.430070Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from dff.context_storages import context_storage_factory\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b96328b9", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:39.433960Z", + "iopub.status.busy": "2023-12-27T16:49:39.433374Z", + "iopub.status.idle": "2023-12-27T16:49:39.476986Z", + "shell.execute_reply": "2023-12-27T16:49:39.476295Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "db_uri = \"mysql+asyncmy://{}:{}@localhost:3307/{}\".format(\n", + " os.environ[\"MYSQL_USERNAME\"],\n", + " os.environ[\"MYSQL_PASSWORD\"],\n", + " os.environ[\"MYSQL_DATABASE\"],\n", + ")\n", + "db = context_storage_factory(db_uri)\n", + "\n", + "\n", + "pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7148d7b7", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:39.480248Z", + "iopub.status.busy": "2023-12-27T16:49:39.479776Z", + "iopub.status.idle": "2023-12-27T16:49:39.510542Z", + "shell.execute_reply": "2023-12-27T16:49:39.509883Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.6_sqlite.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.6_sqlite.ipynb new file mode 100644 index 0000000000..e9e68a95c6 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.6_sqlite.ipynb @@ -0,0 +1,169 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e1d4d187", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 6. SQLite\n", + "\n", + "This is a tutorial on using SQLite.\n", + "\n", + "See [SQLContextStorage](../apiref/dff.context_storages.sql.rst#dff.context_storages.sql.SQLContextStorage) class\n", + "for storing you users' contexts in SQL databases.\n", + "\n", + "DFF uses [sqlalchemy](https://docs.sqlalchemy.org/en/20/)\n", + "and [aiosqlite](https://readthedocs.org/projects/aiosqlite/)\n", + "libraries for asynchronous access to SQLite DB.\n", + "\n", + "Note that protocol separator for windows differs from one for linux." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f3fddd8b", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:41.268874Z", + "iopub.status.busy": "2023-12-27T16:49:41.268214Z", + "iopub.status.idle": "2023-12-27T16:49:43.772277Z", + "shell.execute_reply": "2023-12-27T16:49:43.771473Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[sqlite]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "7c574825", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:43.775507Z", + "iopub.status.busy": "2023-12-27T16:49:43.774998Z", + "iopub.status.idle": "2023-12-27T16:49:44.468824Z", + "shell.execute_reply": "2023-12-27T16:49:44.468138Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import pathlib\n", + "from platform import system\n", + "\n", + "from dff.context_storages import context_storage_factory\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "2d9dd04f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:44.472098Z", + "iopub.status.busy": "2023-12-27T16:49:44.471575Z", + "iopub.status.idle": "2023-12-27T16:49:44.492461Z", + "shell.execute_reply": "2023-12-27T16:49:44.491875Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "pathlib.Path(\"dbs\").mkdir(exist_ok=True)\n", + "db_file = pathlib.Path(\"dbs/sqlite.db\")\n", + "db_file.touch(exist_ok=True)\n", + "\n", + "separator = \"///\" if system() == \"Windows\" else \"////\"\n", + "db_uri = f\"sqlite+aiosqlite:{separator}{db_file.absolute()}\"\n", + "db = context_storage_factory(db_uri)\n", + "\n", + "\n", + "pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "10bc4905", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:44.495241Z", + "iopub.status.busy": "2023-12-27T16:49:44.494908Z", + "iopub.status.idle": "2023-12-27T16:49:44.529817Z", + "shell.execute_reply": "2023-12-27T16:49:44.529098Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.7_yandex_database.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.7_yandex_database.ipynb new file mode 100644 index 0000000000..e47a1752c5 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.7_yandex_database.ipynb @@ -0,0 +1,170 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "40a3b7b3", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 7. Yandex DataBase\n", + "\n", + "This is a tutorial on how to use Yandex DataBase.\n", + "\n", + "See [YDBContextStorage](../apiref/dff.context_storages.ydb.rst#dff.context_storages.ydb.YDBContextStorage) class\n", + "for storing you users' contexts in Yandex database.\n", + "\n", + "DFF uses [ydb.aio](https://ydb.tech/en/docs/)\n", + "library for asynchronous access to Yandex DB." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a5f0795d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:46.307064Z", + "iopub.status.busy": "2023-12-27T16:49:46.306563Z", + "iopub.status.idle": "2023-12-27T16:49:48.760531Z", + "shell.execute_reply": "2023-12-27T16:49:48.759692Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[ydb]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "78bc601c", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:48.763570Z", + "iopub.status.busy": "2023-12-27T16:49:48.763295Z", + "iopub.status.idle": "2023-12-27T16:49:49.482900Z", + "shell.execute_reply": "2023-12-27T16:49:49.482249Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from dff.context_storages import context_storage_factory\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " run_interactive_mode,\n", + " is_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "729f1c20", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:49.486161Z", + "iopub.status.busy": "2023-12-27T16:49:49.485710Z", + "iopub.status.idle": "2023-12-27T16:49:49.520593Z", + "shell.execute_reply": "2023-12-27T16:49:49.519787Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "# ##### Connecting to yandex cloud\n", + "# https://github.com/zinal/ydb-python-sdk/blob/ex_basic-example_p1/examples/basic_example_v1/README.md\n", + "# export YDB_SERVICE_ACCOUNT_KEY_FILE_CREDENTIALS=$HOME/key-ydb-sa-0.json\n", + "# export YDB_ENDPOINT=grpcs://ydb.serverless.yandexcloud.net:2135\n", + "# export YDB_DATABASE=/ru-central1/qwertyuiopasdfgh/123456789qwertyui\n", + "# ##### or use local-ydb with variables from .env_file\n", + "# db_uri=\"grpc://localhost:2136/local\"\n", + "\n", + "db_uri = \"{}{}\".format(\n", + " os.environ[\"YDB_ENDPOINT\"],\n", + " os.environ[\"YDB_DATABASE\"],\n", + ")\n", + "db = context_storage_factory(db_uri)\n", + "\n", + "pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "17789555", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:49.523884Z", + "iopub.status.busy": "2023-12-27T16:49:49.523643Z", + "iopub.status.idle": "2023-12-27T16:49:49.568114Z", + "shell.execute_reply": "2023-12-27T16:49:49.567375Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.context_storages.8_db_benchmarking.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.8_db_benchmarking.ipynb new file mode 100644 index 0000000000..6d9b813224 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.context_storages.8_db_benchmarking.ipynb @@ -0,0 +1,7231 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "90e41ac7", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 8. Context storage benchmarking\n", + "\n", + "This tutorial shows how to benchmark context storages.\n", + "\n", + "For more info see [API reference](../apiref/dff.utils.db_benchmark.benchmark.rst)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f5b7bace", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:51.357969Z", + "iopub.status.busy": "2023-12-27T16:49:51.357444Z", + "iopub.status.idle": "2023-12-27T16:49:54.162793Z", + "shell.execute_reply": "2023-12-27T16:49:54.161957Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[benchmark,json,pickle,postgresql,mongodb,redis,mysql,sqlite,ydb]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "22fa2e5e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:54.165881Z", + "iopub.status.busy": "2023-12-27T16:49:54.165433Z", + "iopub.status.idle": "2023-12-27T16:49:54.968118Z", + "shell.execute_reply": "2023-12-27T16:49:54.967249Z" + } + }, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "from platform import system\n", + "import tempfile\n", + "\n", + "import dff.utils.db_benchmark as benchmark" + ] + }, + { + "cell_type": "markdown", + "id": "b21c945c", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "## Context storage setup" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d6efaf8c", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:54.973382Z", + "iopub.status.busy": "2023-12-27T16:49:54.971976Z", + "iopub.status.idle": "2023-12-27T16:49:54.978619Z", + "shell.execute_reply": "2023-12-27T16:49:54.977940Z" + } + }, + "outputs": [], + "source": [ + "# this cell is only required for pickle, shelve and sqlite databases\n", + "tutorial_dir = Path(tempfile.mkdtemp())\n", + "db_path = tutorial_dir / \"dbs\"\n", + "db_path.mkdir()\n", + "sqlite_file = db_path / \"sqlite.db\"\n", + "sqlite_file.touch(exist_ok=True)\n", + "sqlite_separator = \"///\" if system() == \"Windows\" else \"////\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "dd1bc962", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:54.983792Z", + "iopub.status.busy": "2023-12-27T16:49:54.982432Z", + "iopub.status.idle": "2023-12-27T16:49:54.988798Z", + "shell.execute_reply": "2023-12-27T16:49:54.988088Z" + } + }, + "outputs": [], + "source": [ + "storages = {\n", + " \"JSON\": f\"json://{db_path}/json.json\",\n", + " \"Pickle\": f\"pickle://{db_path}/pickle.pkl\",\n", + " \"Shelve\": f\"shelve://{db_path}/shelve\",\n", + " \"PostgreSQL\": \"postgresql+asyncpg://postgres:pass@localhost:5432/test\",\n", + " \"MongoDB\": \"mongodb://admin:pass@localhost:27017/admin\",\n", + " \"Redis\": \"redis://:pass@localhost:6379/0\",\n", + " \"MySQL\": \"mysql+asyncmy://root:pass@localhost:3307/test\",\n", + " \"SQLite\": f\"sqlite+aiosqlite:{sqlite_separator}{sqlite_file.absolute()}\",\n", + " \"YDB\": \"grpc://localhost:2136/local\",\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "57cbed02", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "## Saving benchmark results to a file\n", + "\n", + "Benchmark results are saved to files.\n", + "\n", + "For that there exist two functions:\n", + "[benchmark_all](../apiref/dff.utils.db_benchmark.benchmark.rst#dff.utils.db_benchmark.benchmark.benchmark_all)\n", + "and\n", + "[save_results_to_file](../apiref/dff.utils.db_benchmark.benchmark.rst#dff.utils.db_benchmark.benchmark.save_results_to_file).\n", + "\n", + "Note: context storages passed into these functions will be cleared.\n", + "\n", + "Once the benchmark results are saved to a file, you can view and analyze them using two methods:\n", + "\n", + "* [Using the Report Function](#Using-the-report-function): This function\n", + " can display specified information from a given file.\n", + " By default, it prints the name and average metrics for each benchmark case.\n", + "\n", + "* [Using the Streamlit App](#Using-Streamlit-app): A Streamlit app\n", + " is available for viewing and comparing benchmark results.\n", + " You can upload benchmark result files using the app's \"Benchmark sets\" tab,\n", + " inspect individual results in the \"View\" tab, and compare metrics in the \"Compare\" tab.\n", + "\n", + "Benchmark results are saved according to a specific schema,\n", + "which can be found in the benchmark schema documentation.\n", + "Each database being benchmarked will have its own result file.\n", + "\n", + "### Configuration\n", + "\n", + "The first one is a higher-level wrapper of the second one.\n", + "The first function accepts\n", + "[BenchmarkCase](../apiref/dff.utils.db_benchmark.benchmark.rst#dff.utils.db_benchmark.benchmark.BenchmarkCase)\n", + "which configure databases that are being benchmark and configurations of the benchmarks.\n", + "The second function accepts only a single URI for the database and several benchmark configurations.\n", + "So, the second function is simpler to use, while the first function allows for more configuration\n", + "(e.g. having different databases benchmarked in a single file).\n", + "\n", + "Both function use\n", + "[BenchmarkConfig](../apiref/dff.utils.db_benchmark.benchmark.rst#dff.utils.db_benchmark.benchmark.BenchmarkConfig)\n", + "to configure benchmark behaviour.\n", + "`BenchmarkConfig` is only an interface for benchmark configurations.\n", + "Its most basic implementation is\n", + "[BasicBenchmarkConfig](../apiref/dff.utils.db_benchmark.basic_config.rst#dff.utils.db_benchmark.basic_config.BasicBenchmarkConfig).\n", + "\n", + "DFF provides configuration presets in the\n", + "[basic_config](../apiref/dff.utils.db_benchmark.basic_config.rst) module,\n", + "covering various contexts, messages, and edge cases.\n", + "You can use these presets by passing them to the benchmark functions or create\n", + "your own configuration.\n", + "\n", + "To learn more about using presets see [Configuration presets](#Configuration-presets)\n", + "\n", + "Benchmark configs have several parameters:\n", + "\n", + "Setting `context_num` to 50 means that we'll run fifty cycles of writing and reading context.\n", + "This way we'll be able to get a more accurate average read/write time as well as\n", + "check if read/write times are dependent on the number of contexts in the storage.\n", + "\n", + "You can also configure the `dialog_len`, `message_dimensions` and `misc_dimensions` parameters.\n", + "This allows you to set the contexts you want your database to be benchmarked with.\n", + "\n", + "### File structure\n", + "\n", + "The files are saved according to [the schema](\n", + "../_misc/benchmark_schema.json\n", + ")." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "2a0c700f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:49:54.993985Z", + "iopub.status.busy": "2023-12-27T16:49:54.992630Z", + "iopub.status.idle": "2023-12-27T16:50:00.827059Z", + "shell.execute_reply": "2023-12-27T16:50:00.826273Z" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7721373162194f93af84cd21d7b8b89f", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/1 [00:00 ... for this example, we'll use a very simple HTML document with some JavaScript,\n", + "> all inside a long string.\n", + "> This, of course, is not optimal and you wouldn't use it for production.\n", + "\n", + "Here, [CallbackMessengerInterface](../apiref/dff.messengers.common.interface.rst#dff.messengers.common.interface.CallbackMessengerInterface)\n", + "is used to process requests.\n", + "\n", + "[Message](../apiref/dff.script.core.message.rst#dff.script.core.message.Message) is used to represent text messages." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "49b0a8f3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:50:49.745733Z", + "iopub.status.busy": "2023-12-27T16:50:49.745158Z", + "iopub.status.idle": "2023-12-27T16:50:52.118403Z", + "shell.execute_reply": "2023-12-27T16:50:52.117596Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff uvicorn fastapi" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "6ae07506", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:50:52.121759Z", + "iopub.status.busy": "2023-12-27T16:50:52.121228Z", + "iopub.status.idle": "2023-12-27T16:50:53.191665Z", + "shell.execute_reply": "2023-12-27T16:50:53.190932Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "from dff.messengers.common.interface import CallbackMessengerInterface\n", + "from dff.script import Message\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing import TOY_SCRIPT_ARGS, is_interactive_mode\n", + "\n", + "import uvicorn\n", + "from fastapi import FastAPI, WebSocket, WebSocketDisconnect\n", + "from fastapi.responses import HTMLResponse" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "601ace23", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:50:53.195204Z", + "iopub.status.busy": "2023-12-27T16:50:53.194532Z", + "iopub.status.idle": "2023-12-27T16:50:53.198836Z", + "shell.execute_reply": "2023-12-27T16:50:53.198304Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "messenger_interface = CallbackMessengerInterface()\n", + "pipeline = Pipeline.from_script(\n", + " *TOY_SCRIPT_ARGS, messenger_interface=messenger_interface\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7cd877b7", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:50:53.201438Z", + "iopub.status.busy": "2023-12-27T16:50:53.201105Z", + "iopub.status.idle": "2023-12-27T16:50:53.208177Z", + "shell.execute_reply": "2023-12-27T16:50:53.207559Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "app = FastAPI()\n", + "\n", + "html = \"\"\"\n", + "\n", + "\n", + " \n", + " Chat\n", + " \n", + " \n", + "

WebSocket Chat

\n", + "
\n", + " \n", + " \n", + "
\n", + "
    \n", + "
\n", + " \n", + " \n", + "\n", + "\"\"\"\n", + "\n", + "\n", + "@app.get(\"/\")\n", + "async def get():\n", + " return HTMLResponse(html)\n", + "\n", + "\n", + "@app.websocket(\"/ws/{client_id}\")\n", + "async def websocket_endpoint(websocket: WebSocket, client_id: int):\n", + " await websocket.accept()\n", + " try:\n", + " while True:\n", + " data = await websocket.receive_text()\n", + " await websocket.send_text(f\"User: {data}\")\n", + " request = Message(text=data)\n", + " context = await messenger_interface.on_request_async(\n", + " request, client_id\n", + " )\n", + " response = context.last_response.text\n", + " if response is not None:\n", + " await websocket.send_text(f\"Bot: {response}\")\n", + " else:\n", + " await websocket.send_text(\"Bot did not return text.\")\n", + " except WebSocketDisconnect: # ignore disconnections\n", + " pass" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "4cfbc295", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:50:53.210658Z", + "iopub.status.busy": "2023-12-27T16:50:53.210269Z", + "iopub.status.idle": "2023-12-27T16:50:53.213754Z", + "shell.execute_reply": "2023-12-27T16:50:53.213154Z" + } + }, + "outputs": [], + "source": [ + "if __name__ == \"__main__\":\n", + " if is_interactive_mode(): # do not run this during doc building\n", + " pipeline.run()\n", + " uvicorn.run(\n", + " app,\n", + " host=\"127.0.0.1\",\n", + " port=8000,\n", + " )" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.ipynb new file mode 100644 index 0000000000..a7560b20d2 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.ipynb @@ -0,0 +1,279 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "31a069e6", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Web API: 3. Load testing with Locust\n", + "\n", + "This tutorial shows how to use an API endpoint created in the FastAPI tutorial in load testing." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "fa9a226b", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:50:54.860626Z", + "iopub.status.busy": "2023-12-27T16:50:54.860405Z", + "iopub.status.idle": "2023-12-27T16:50:57.236631Z", + "shell.execute_reply": "2023-12-27T16:50:57.235703Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff locust" + ] + }, + { + "cell_type": "markdown", + "id": "73cc2762", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "## Running Locust\n", + "\n", + "1. Run this file directly:\n", + " ```bash\n", + " python {file_name}\n", + " ```\n", + "2. Run locust targeting this file:\n", + " ```bash\n", + " locust -f {file_name}\n", + " ```\n", + "3. Run from python:\n", + " ```python\n", + " import sys\n", + " from locust import main\n", + "\n", + " sys.argv = [\"locust\", \"-f\", {file_name}]\n", + " main.main()\n", + " ```\n", + "\n", + "You should see the result at http://127.0.0.1:8089.\n", + "\n", + "Make sure that your POST endpoint is also running (run the FastAPI tutorial)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "45d024d6", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:50:57.240333Z", + "iopub.status.busy": "2023-12-27T16:50:57.239686Z", + "iopub.status.idle": "2023-12-27T16:50:57.807146Z", + "shell.execute_reply": "2023-12-27T16:50:57.802300Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "################################################################################\n", + "# this patch is only needed to run this file in IPython kernel\n", + "# and can be safely removed\n", + "import gevent.monkey\n", + "\n", + "gevent.monkey.patch_all()\n", + "################################################################################" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "11e4e115", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:50:57.810314Z", + "iopub.status.busy": "2023-12-27T16:50:57.810073Z", + "iopub.status.idle": "2023-12-27T16:50:58.754052Z", + "shell.execute_reply": "2023-12-27T16:50:58.738006Z" + } + }, + "outputs": [], + "source": [ + "import uuid\n", + "import time\n", + "import sys\n", + "\n", + "from locust import FastHttpUser, task, constant, main\n", + "\n", + "from dff.script import Message\n", + "from dff.utils.testing import HAPPY_PATH, is_interactive_mode" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "3dcf13bc", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:50:58.757661Z", + "iopub.status.busy": "2023-12-27T16:50:58.757104Z", + "iopub.status.idle": "2023-12-27T16:50:58.822538Z", + "shell.execute_reply": "2023-12-27T16:50:58.796579Z" + } + }, + "outputs": [], + "source": [ + "class DFFUser(FastHttpUser):\n", + " wait_time = constant(1)\n", + "\n", + " def check_happy_path(self, happy_path):\n", + " \"\"\"\n", + " Check a happy path.\n", + " For each `(request, response)` pair in `happy_path`:\n", + " 1. Send request to the API endpoint and catch its response.\n", + " 2. Compare API response with the `response`.\n", + " If they do not match, fail the request.\n", + "\n", + " :param happy_path:\n", + " An iterable of tuples of\n", + " `(Message, Message | Callable(Message->str|None) | None)`.\n", + "\n", + " If the second element is `Message`,\n", + " check that API response matches it.\n", + "\n", + " If the second element is `None`,\n", + " do not check the API response.\n", + "\n", + " If the second element is a `Callable`,\n", + " call it with the API response as its argument.\n", + " If the function returns a string,\n", + " that string is considered an error message.\n", + " If the function returns `None`,\n", + " the API response is considered correct.\n", + " \"\"\"\n", + " user_id = str(uuid.uuid4())\n", + "\n", + " for request, response in happy_path:\n", + " with self.client.post(\n", + " f\"/chat?user_id={user_id}\",\n", + " headers={\n", + " \"accept\": \"application/json\",\n", + " \"Content-Type\": \"application/json\",\n", + " },\n", + " # Name is the displayed name of the request.\n", + " name=f\"/chat?user_message={request.json()}\",\n", + " data=request.json(),\n", + " catch_response=True,\n", + " ) as candidate_response:\n", + " text_response = Message.model_validate(\n", + " candidate_response.json().get(\"response\")\n", + " )\n", + "\n", + " if response is not None:\n", + " if callable(response):\n", + " error_message = response(text_response)\n", + " if error_message is not None:\n", + " candidate_response.failure(error_message)\n", + " elif text_response != response:\n", + " candidate_response.failure(\n", + " f\"Expected: {response.model_dump_json()}\\n\"\n", + " f\"Got: {text_response.model_dump_json()}\"\n", + " )\n", + "\n", + " time.sleep(self.wait_time())\n", + "\n", + " @task(3) # <- this task is 3 times more likely than the other\n", + " def dialog_1(self):\n", + " self.check_happy_path(HAPPY_PATH)\n", + "\n", + " @task\n", + " def dialog_2(self):\n", + " def check_first_message(msg: Message) -> str | None:\n", + " if msg.text is None:\n", + " return f\"Message does not contain text: {msg.model_dump_json()}\"\n", + " if \"Hi\" not in msg.text:\n", + " return (\n", + " f'\"Hi\" is not in the response message: '\n", + " f\"{msg.model_dump_json()}\"\n", + " )\n", + " return None\n", + "\n", + " self.check_happy_path(\n", + " [\n", + " # a function can be used to check the return message\n", + " (Message(text=\"Hi\"), check_first_message),\n", + " # a None is used if return message should not be checked\n", + " (Message(text=\"i'm fine, how are you?\"), None),\n", + " # this should fail\n", + " (Message(text=\"Hi\"), check_first_message),\n", + " ]\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "877ff904", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:50:58.825863Z", + "iopub.status.busy": "2023-12-27T16:50:58.825443Z", + "iopub.status.idle": "2023-12-27T16:50:58.861309Z", + "shell.execute_reply": "2023-12-27T16:50:58.844717Z" + } + }, + "outputs": [], + "source": [ + "if __name__ == \"__main__\":\n", + " if is_interactive_mode():\n", + " sys.argv = [\"locust\", \"-f\", __file__]\n", + " main.main()" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.ipynb new file mode 100644 index 0000000000..c2d1cec343 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.ipynb @@ -0,0 +1,441 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "da642dbc", + "metadata": {}, + "source": [ + "# Web API: 4. Streamlit chat interface\n", + "\n", + "This tutorial shows how to use an API endpoint created in the FastAPI tutorial\n", + "in a Streamlit chat.\n", + "\n", + "A demonstration of the chat:\n", + "![demo](https://user-images.githubusercontent.com/61429541/238721597-ef88261d-e9e6-497d-ba68-0bcc9a765808.png)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "0bcbb2e5", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:00.582660Z", + "iopub.status.busy": "2023-12-27T16:51:00.582465Z", + "iopub.status.idle": "2023-12-27T16:51:03.092223Z", + "shell.execute_reply": "2023-12-27T16:51:03.091179Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff streamlit streamlit-chat" + ] + }, + { + "cell_type": "markdown", + "id": "4b614e05", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "## Running Streamlit:\n", + "\n", + "```bash\n", + "streamlit run {file_name}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "212331f6", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "## Module and package import" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "48fe3037", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:03.095940Z", + "iopub.status.busy": "2023-12-27T16:51:03.095360Z", + "iopub.status.idle": "2023-12-27T16:51:03.100431Z", + "shell.execute_reply": "2023-12-27T16:51:03.099701Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "###########################################################\n", + "# This patch is only needed to import Message from dff.\n", + "# Streamlit Chat interface can be written without using it.\n", + "import asyncio\n", + "\n", + "loop = asyncio.new_event_loop()\n", + "asyncio.set_event_loop(loop)\n", + "###########################################################" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "02fa176f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:03.103673Z", + "iopub.status.busy": "2023-12-27T16:51:03.103187Z", + "iopub.status.idle": "2023-12-27T16:51:04.191108Z", + "shell.execute_reply": "2023-12-27T16:51:04.190429Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import uuid\n", + "import itertools\n", + "\n", + "import requests\n", + "import streamlit as st\n", + "from streamlit_chat import message\n", + "import streamlit.components.v1 as components\n", + "from dff.script import Message" + ] + }, + { + "cell_type": "markdown", + "id": "b431f4ae", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "## API configuration\n", + "\n", + "Here we define methods to contact the API endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "83f2c69c", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:04.194544Z", + "iopub.status.busy": "2023-12-27T16:51:04.193993Z", + "iopub.status.idle": "2023-12-27T16:51:04.197915Z", + "shell.execute_reply": "2023-12-27T16:51:04.197294Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "API_URL = \"http://localhost:8000/chat\"\n", + "\n", + "\n", + "def query(payload, user_id) -> requests.Response:\n", + " response = requests.post(\n", + " API_URL + f\"?user_id={user_id}\",\n", + " headers={\n", + " \"accept\": \"application/json\",\n", + " \"Content-Type\": \"application/json\",\n", + " },\n", + " json=payload,\n", + " )\n", + " return response" + ] + }, + { + "cell_type": "markdown", + "id": "169f79cd", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "## Streamlit configuration\n", + "\n", + "Here we configure Streamlit page and initialize some session variables:\n", + "\n", + "1. `user_id` -- stores user_id to be used in pipeline.\n", + "2. `bot_responses` -- a list of bot responses.\n", + "3. `user_requests` -- a list of user requests." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "ad6ec305", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:04.200677Z", + "iopub.status.busy": "2023-12-27T16:51:04.200299Z", + "iopub.status.idle": "2023-12-27T16:51:04.223220Z", + "shell.execute_reply": "2023-12-27T16:51:04.222625Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-12-27 16:51:04.219 \n", + " \u001b[33m\u001b[1mWarning:\u001b[0m to view this Streamlit app on a browser, run it with the following\n", + " command:\n", + "\n", + " streamlit run /home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/ipykernel_launcher.py [ARGUMENTS]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-12-27 16:51:04.220 Session state does not function when running a script without `streamlit run`\n" + ] + } + ], + "source": [ + "st.set_page_config(page_title=\"Streamlit DFF Chat\", page_icon=\":robot:\")\n", + "\n", + "st.header(\"Streamlit DFF Chat\")\n", + "\n", + "if \"user_id\" not in st.session_state:\n", + " st.session_state[\"user_id\"] = str(uuid.uuid4())\n", + "\n", + "if \"bot_responses\" not in st.session_state:\n", + " st.session_state[\"bot_responses\"] = []\n", + "\n", + "if \"user_requests\" not in st.session_state:\n", + " st.session_state[\"user_requests\"] = []" + ] + }, + { + "cell_type": "markdown", + "id": "b2c83c72", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "## UI setup\n", + "\n", + "Here we configure elements that will be used in Streamlit to interact with the API.\n", + "\n", + "First we define a text input field which a user is supposed to type his requests into.\n", + "Then we define a button that sends a query to the API, logs requests and responses,\n", + "and clears the text field." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b587df6c", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:04.225940Z", + "iopub.status.busy": "2023-12-27T16:51:04.225449Z", + "iopub.status.idle": "2023-12-27T16:51:04.230242Z", + "shell.execute_reply": "2023-12-27T16:51:04.229690Z" + } + }, + "outputs": [], + "source": [ + "def send_and_receive():\n", + " \"\"\"\n", + " Send text inside the input field. Receive response from API endpoint.\n", + "\n", + " Add both the request and response to `user_requests` and `bot_responses`.\n", + "\n", + " We do not call this function inside the `text_input.on_change` because then\n", + " we'd call it whenever the text field loses focus\n", + " (e.g. when a browser tab is switched).\n", + " \"\"\"\n", + " user_request = st.session_state[\"input\"]\n", + "\n", + " if user_request == \"\":\n", + " return\n", + "\n", + " st.session_state[\"user_requests\"].append(user_request)\n", + "\n", + " bot_response = query(\n", + " Message(text=user_request).model_dump(),\n", + " user_id=st.session_state[\"user_id\"],\n", + " )\n", + " bot_response.raise_for_status()\n", + "\n", + " bot_message = Message.model_validate(bot_response.json()[\"response\"]).text\n", + "\n", + " # # Implementation without using Message:\n", + " # bot_response = query(\n", + " # {\"text\": user_request},\n", + " # user_id=st.session_state[\"user_id\"]\n", + " # )\n", + " # bot_response.raise_for_status()\n", + " #\n", + " # bot_message = bot_response.json()[\"response\"][\"text\"]\n", + "\n", + " st.session_state[\"bot_responses\"].append(bot_message)\n", + "\n", + " st.session_state[\"input\"] = \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "c0abe5e8", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:04.232685Z", + "iopub.status.busy": "2023-12-27T16:51:04.232320Z", + "iopub.status.idle": "2023-12-27T16:51:04.239089Z", + "shell.execute_reply": "2023-12-27T16:51:04.238491Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st.text_input(\"You: \", key=\"input\")\n", + "st.button(\"Send\", on_click=send_and_receive)" + ] + }, + { + "cell_type": "markdown", + "id": "ab2bdc7b", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "### Component patch\n", + "\n", + "Here we add a component that presses the `Send` button whenever user presses the `Enter` key." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "df9ae5cd", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:04.241741Z", + "iopub.status.busy": "2023-12-27T16:51:04.241303Z", + "iopub.status.idle": "2023-12-27T16:51:04.246954Z", + "shell.execute_reply": "2023-12-27T16:51:04.246325Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [ + { + "data": { + "text/plain": [ + "DeltaGenerator()" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "components.html(\n", + " \"\"\"\n", + "\n", + "\"\"\",\n", + " height=0,\n", + " width=0,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "37ef812e", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "### Message display\n", + "\n", + "Here we use the `streamlit-chat` package to display user requests and bot responses." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "d2bcc3b8", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:04.249720Z", + "iopub.status.busy": "2023-12-27T16:51:04.249262Z", + "iopub.status.idle": "2023-12-27T16:51:04.253121Z", + "shell.execute_reply": "2023-12-27T16:51:04.252536Z" + } + }, + "outputs": [], + "source": [ + "for i, bot_response, user_request in zip(\n", + " itertools.count(0),\n", + " st.session_state.get(\"bot_responses\", []),\n", + " st.session_state.get(\"user_requests\", []),\n", + "):\n", + " message(user_request, key=f\"{i}_user\", is_user=True)\n", + " message(bot_response, key=f\"{i}_bot\")" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.1_basics.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.1_basics.ipynb new file mode 100644 index 0000000000..9f71605b7d --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.1_basics.ipynb @@ -0,0 +1,226 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "db9eea73", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 1. Basics\n", + "\n", + "The following tutorial shows basic usage of `pipeline`\n", + "module as an extension to `dff.script.core`.\n", + "\n", + "Here, `__call__` (same as [run](../apiref/dff.pipeline.pipeline.pipeline.rst#dff.pipeline.pipeline.pipeline.Pipeline.run))\n", + "method is used to execute pipeline once." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "b0da7fcf", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:06.383171Z", + "iopub.status.busy": "2023-12-27T16:51:06.382972Z", + "iopub.status.idle": "2023-12-27T16:51:08.705388Z", + "shell.execute_reply": "2023-12-27T16:51:08.704594Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "e4d432bb", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:08.708581Z", + "iopub.status.busy": "2023-12-27T16:51:08.708157Z", + "iopub.status.idle": "2023-12-27T16:51:09.560925Z", + "shell.execute_reply": "2023-12-27T16:51:09.559944Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "from dff.script import Context, Message\n", + "\n", + "from dff.pipeline import Pipeline\n", + "\n", + "from dff.utils.testing import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " HAPPY_PATH,\n", + " TOY_SCRIPT,\n", + " TOY_SCRIPT_ARGS,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "1bfabe1d", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "`Pipeline` is an object, that automates script execution and context management.\n", + "`from_script` method can be used to create\n", + "a pipeline of the most basic structure:\n", + "\"preprocessors -> actor -> postprocessors\"\n", + "as well as to define `context_storage` and `messenger_interface`.\n", + "Actor is a component of :py:class:`.Pipeline`, that contains the :py:class:`.Script`\n", + "and handles it. It is responsible for processing user input and determining\n", + "the appropriate response based on the current state of the conversation and the script.\n", + "These parameters usage will be shown in tutorials 2, 3 and 6.\n", + "\n", + "Here only required parameters are provided to pipeline.\n", + "`context_storage` will default to simple Python dict and\n", + "`messenger_interface` will never be used.\n", + "pre- and postprocessors lists are empty.\n", + "`Pipeline` object can be called with user input\n", + "as first argument and dialog id (any immutable object).\n", + "This call will return `Context`,\n", + "its `last_response` property will be actors response." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b8cd99a4", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:09.567354Z", + "iopub.status.busy": "2023-12-27T16:51:09.565707Z", + "iopub.status.idle": "2023-12-27T16:51:09.575714Z", + "shell.execute_reply": "2023-12-27T16:51:09.574863Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "pipeline = Pipeline.from_script(\n", + " TOY_SCRIPT,\n", + " # Pipeline script object, defined in `dff.utils.testing.toy_script`\n", + " start_label=(\"greeting_flow\", \"start_node\"),\n", + " fallback_label=(\"greeting_flow\", \"fallback_node\"),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "4135aa3f", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "For the sake of brevity, other tutorials might use `TOY_SCRIPT_ARGS` to initialize pipeline:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f5a5d7b1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:09.579615Z", + "iopub.status.busy": "2023-12-27T16:51:09.579113Z", + "iopub.status.idle": "2023-12-27T16:51:09.583169Z", + "shell.execute_reply": "2023-12-27T16:51:09.582382Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "assert TOY_SCRIPT_ARGS == (\n", + " TOY_SCRIPT,\n", + " (\"greeting_flow\", \"start_node\"),\n", + " (\"greeting_flow\", \"fallback_node\"),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "381728e0", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:09.586818Z", + "iopub.status.busy": "2023-12-27T16:51:09.586337Z", + "iopub.status.idle": "2023-12-27T16:51:09.598585Z", + "shell.execute_reply": "2023-12-27T16:51:09.597653Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " # a function for automatic tutorial running (testing) with HAPPY_PATH\n", + "\n", + " # This runs tutorial in interactive mode if not in IPython env\n", + " # and if `DISABLE_INTERACTIVE_MODE` is not set\n", + " if is_interactive_mode():\n", + " ctx_id = 0 # 0 will be current dialog (context) identification.\n", + " while True:\n", + " message = Message(text=input(\"Send request: \"))\n", + " ctx: Context = pipeline(message, ctx_id)\n", + " print(ctx.last_response)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.2_pre_and_post_processors.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.2_pre_and_post_processors.ipynb new file mode 100644 index 0000000000..77f50d49d1 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.2_pre_and_post_processors.ipynb @@ -0,0 +1,216 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "31543562", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 2. Pre- and postprocessors\n", + "\n", + "The following tutorial shows more advanced usage of `pipeline`\n", + "module as an extension to `dff.script.core`.\n", + "\n", + "Here, [misc](../apiref/dff.script.core.context.rst#dff.script.core.context.Context.misc)\n", + "dictionary of context is used for storing additional data." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "49c9eea7", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:11.280538Z", + "iopub.status.busy": "2023-12-27T16:51:11.279872Z", + "iopub.status.idle": "2023-12-27T16:51:13.633035Z", + "shell.execute_reply": "2023-12-27T16:51:13.632219Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "7919bdd5", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:13.636153Z", + "iopub.status.busy": "2023-12-27T16:51:13.635685Z", + "iopub.status.idle": "2023-12-27T16:51:14.369585Z", + "shell.execute_reply": "2023-12-27T16:51:14.368901Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import logging\n", + "\n", + "from dff.messengers.common import CLIMessengerInterface\n", + "from dff.script import Context, Message\n", + "\n", + "from dff.pipeline import Pipeline\n", + "\n", + "from dff.utils.testing import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " HAPPY_PATH,\n", + " TOY_SCRIPT_ARGS,\n", + ")\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "2f111735", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "When Pipeline is created with `from_script` method, additional pre-\n", + "and postprocessors can be defined.\n", + "These can be any `ServiceBuilder` objects (defined in `types` module)\n", + "- callables, objects or dicts.\n", + "They are being turned into special `Service` objects (see tutorial 3),\n", + "that will be run before or after `Actor` respectively.\n", + "These services can be used to access external APIs, annotate user input, etc.\n", + "\n", + "Service callable signature can be one of the following:\n", + "`[ctx]`, `[ctx, pipeline]` or `[ctx, actor, info]` (see tutorial 3),\n", + "where:\n", + "\n", + "* `ctx` - Context of the current dialog.\n", + "* `pipeline` - The current pipeline.\n", + "* `info` - dictionary, containing information about\n", + " current service and pipeline execution state (see tutorial 4).\n", + "\n", + "Here a preprocessor (\"ping\") and a postprocessor (\"pong\") are added to pipeline.\n", + "They share data in `context.misc` -\n", + "a common place for sharing data between services and actor." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "c7d2ea68", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:14.372785Z", + "iopub.status.busy": "2023-12-27T16:51:14.372324Z", + "iopub.status.idle": "2023-12-27T16:51:14.376176Z", + "shell.execute_reply": "2023-12-27T16:51:14.375521Z" + } + }, + "outputs": [], + "source": [ + "def ping_processor(ctx: Context):\n", + " ctx.misc[\"ping\"] = True\n", + "\n", + "\n", + "def pong_processor(ctx: Context):\n", + " ping = ctx.misc.get(\"ping\", False)\n", + " ctx.misc[\"pong\"] = ping" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "280fce52", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:14.378551Z", + "iopub.status.busy": "2023-12-27T16:51:14.378338Z", + "iopub.status.idle": "2023-12-27T16:51:14.391324Z", + "shell.execute_reply": "2023-12-27T16:51:14.390764Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " *TOY_SCRIPT_ARGS,\n", + " context_storage={}, # `context_storage` - a dictionary or\n", + " # a `DBContextStorage` instance,\n", + " # a place to store dialog contexts\n", + " messenger_interface=CLIMessengerInterface(),\n", + " # `messenger_interface` - a message channel adapter,\n", + " # it's not used in this tutorial\n", + " pre_services=[ping_processor],\n", + " post_services=[pong_processor],\n", + ")\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " ctx_id = 0 # 0 will be current dialog (context) identification.\n", + " while True:\n", + " message = Message(text=input(\"Send request: \"))\n", + " ctx: Context = pipeline(message, ctx_id)\n", + " print(f\"Response: {ctx.last_response}\")\n", + " ping_pong = ctx.misc.get(\"ping\", False) and ctx.misc.get(\n", + " \"pong\", False\n", + " )\n", + " print(\n", + " f\"Ping-pong exchange: {'completed' if ping_pong else 'failed'}.\"\n", + " )\n", + " logger.info(f\"Context misc: {ctx.misc}\")" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.ipynb new file mode 100644 index 0000000000..e5c869d0eb --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.ipynb @@ -0,0 +1,232 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f700f3a8", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 3. Pipeline dict with services (basic)\n", + "\n", + "The following tutorial shows `pipeline` creation from\n", + "dict and most important pipeline components.\n", + "\n", + "Here, [Service](../apiref/dff.pipeline.service.service.rst#dff.pipeline.service.service.Service)\n", + "class, that can be used for pre- and postprocessing of messages is shown.\n", + "\n", + "Pipeline's [from_dict](../apiref/dff.pipeline.pipeline.pipeline.rst#dff.pipeline.pipeline.pipeline.Pipeline.from_dict)\n", + "static method is used for pipeline creation (from dictionary)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "6db9e06d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:16.359431Z", + "iopub.status.busy": "2023-12-27T16:51:16.359218Z", + "iopub.status.idle": "2023-12-27T16:51:18.692148Z", + "shell.execute_reply": "2023-12-27T16:51:18.691350Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "66bfceb3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:18.695215Z", + "iopub.status.busy": "2023-12-27T16:51:18.694934Z", + "iopub.status.idle": "2023-12-27T16:51:19.421378Z", + "shell.execute_reply": "2023-12-27T16:51:19.420624Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import logging\n", + "\n", + "from dff.pipeline import Service, Pipeline, ACTOR\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "2c5e8a00", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "When Pipeline is created using `from_dict` method,\n", + "pipeline should be defined as a dictionary.\n", + "It should contain `services` - a `ServiceGroupBuilder` object,\n", + "basically a list of `ServiceBuilder` or `ServiceGroupBuilder` objects,\n", + "see tutorial 4.\n", + "\n", + "On pipeline execution services from `services`\n", + "list are run without difference between pre- and postprocessors.\n", + "Actor constant \"ACTOR\" should also be present among services.\n", + "ServiceBuilder object can be defined either with callable\n", + "(see tutorial 2) or with dict / object.\n", + "It should contain `handler` - a ServiceBuilder object.\n", + "\n", + "Not only Pipeline can be run using `__call__` method,\n", + "for most cases `run` method should be used.\n", + "It starts pipeline asynchronously and connects to provided messenger interface.\n", + "\n", + "Here pipeline contains 4 services,\n", + "defined in 4 different ways with different signatures." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "c05b9879", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:19.425523Z", + "iopub.status.busy": "2023-12-27T16:51:19.424754Z", + "iopub.status.idle": "2023-12-27T16:51:19.429814Z", + "shell.execute_reply": "2023-12-27T16:51:19.429017Z" + } + }, + "outputs": [], + "source": [ + "def prepreprocess(_):\n", + " logger.info(\n", + " \"preprocession intent-detection Service running (defined as a dict)\"\n", + " )\n", + "\n", + "\n", + "def preprocess(_):\n", + " logger.info(\n", + " \"another preprocession web-based annotator Service \"\n", + " \"(defined as a callable)\"\n", + " )\n", + "\n", + "\n", + "def postprocess(_):\n", + " logger.info(\"postprocession Service (defined as an object)\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "deac1754", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:19.433263Z", + "iopub.status.busy": "2023-12-27T16:51:19.432674Z", + "iopub.status.idle": "2023-12-27T16:51:19.437384Z", + "shell.execute_reply": "2023-12-27T16:51:19.436744Z" + } + }, + "outputs": [], + "source": [ + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " {\n", + " \"handler\": prepreprocess,\n", + " },\n", + " preprocess,\n", + " ACTOR,\n", + " Service(\n", + " handler=postprocess,\n", + " ),\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1657d594", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:19.441071Z", + "iopub.status.busy": "2023-12-27T16:51:19.440474Z", + "iopub.status.idle": "2023-12-27T16:51:19.452517Z", + "shell.execute_reply": "2023-12-27T16:51:19.451867Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline) # This runs tutorial in interactive mode" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.ipynb new file mode 100644 index 0000000000..93a6fe912e --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.ipynb @@ -0,0 +1,302 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4d0c6d93", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 3. Pipeline dict with services (full)\n", + "\n", + "The following tutorial shows `pipeline` creation from dict\n", + "and most important pipeline components.\n", + "\n", + "This tutorial is a more advanced version of the\n", + "[previous tutorial](../tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.py)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a2333f82", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:21.371663Z", + "iopub.status.busy": "2023-12-27T16:51:21.371395Z", + "iopub.status.idle": "2023-12-27T16:51:23.688307Z", + "shell.execute_reply": "2023-12-27T16:51:23.687454Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "34ce4843", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:23.691282Z", + "iopub.status.busy": "2023-12-27T16:51:23.690811Z", + "iopub.status.idle": "2023-12-27T16:51:24.429543Z", + "shell.execute_reply": "2023-12-27T16:51:24.428908Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import json\n", + "import logging\n", + "import urllib.request\n", + "\n", + "from dff.script import Context\n", + "from dff.messengers.common import CLIMessengerInterface\n", + "from dff.pipeline import Service, Pipeline, ServiceRuntimeInfo, ACTOR\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT, HAPPY_PATH\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "343df517", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "When Pipeline is created using `from_dict` method,\n", + "pipeline should be defined as `PipelineBuilder` objects\n", + "(defined in `types` module).\n", + "These objects are dictionaries of particular structure:\n", + "\n", + "* `messenger_interface` - `MessengerInterface` instance,\n", + " is used to connect to channel and transfer IO to user.\n", + "* `context_storage` - Place to store dialog contexts\n", + " (dictionary or a `DBContextStorage` instance).\n", + "* `services` (required) - A `ServiceGroupBuilder` object,\n", + " basically a list of `ServiceBuilder` or `ServiceGroupBuilder` objects,\n", + " see tutorial 4.\n", + "* `wrappers` - A list of pipeline wrappers, see tutorial 7.\n", + "* `timeout` - Pipeline timeout, see tutorial 5.\n", + "* `optimization_warnings` - Whether pipeline asynchronous structure\n", + " should be checked during initialization,\n", + " see tutorial 5.\n", + "\n", + "On pipeline execution services from `services` list are run\n", + "without difference between pre- and postprocessors.\n", + "If \"ACTOR\" constant is not found among `services` pipeline creation fails.\n", + "There can be only one \"ACTOR\" constant in the pipeline.\n", + "ServiceBuilder object can be defined either with callable (see tutorial 2) or\n", + "with dict of structure / object with following constructor arguments:\n", + "\n", + "* `handler` (required) - ServiceBuilder,\n", + " if handler is an object or a dict itself,\n", + " it will be used instead of base ServiceBuilder.\n", + " NB! Fields of nested ServiceBuilder will be overridden\n", + " by defined fields of the base ServiceBuilder.\n", + "* `wrappers` - a list of service wrappers, see tutorial 7.\n", + "* `timeout` - service timeout, see tutorial 5.\n", + "* `asynchronous` - whether or not this service _should_ be asynchronous\n", + " (keep in mind that not all services _can_ be asynchronous),\n", + " see tutorial 5.\n", + "* `start_condition` - service start condition, see tutorial 4.\n", + "* `name` - custom defined name for the service\n", + " (keep in mind that names in one ServiceGroup should be unique),\n", + " see tutorial 4.\n", + "\n", + "Not only Pipeline can be run using `__call__` method,\n", + "for most cases `run` method should be used.\n", + "It starts pipeline asynchronously and connects to provided messenger interface.\n", + "\n", + "Here pipeline contains 4 services,\n", + "defined in 4 different ways with different signatures.\n", + "First two of them write sample feature detection data to `ctx.misc`.\n", + "The first uses a constant expression and the second fetches from `example.com`.\n", + "Third one is \"ACTOR\" constant (it acts like a _special_ service here).\n", + "Final service logs `ctx.misc` dict." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "83879b4d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:24.432773Z", + "iopub.status.busy": "2023-12-27T16:51:24.432345Z", + "iopub.status.idle": "2023-12-27T16:51:24.438791Z", + "shell.execute_reply": "2023-12-27T16:51:24.438145Z" + } + }, + "outputs": [], + "source": [ + "def prepreprocess(ctx: Context):\n", + " logger.info(\n", + " \"preprocession intent-detection Service running (defined as a dict)\"\n", + " )\n", + " ctx.misc[\"preprocess_detection\"] = {\n", + " ctx.last_request.text: \"some_intent\"\n", + " } # Similar syntax can be used to access\n", + " # service output dedicated to current pipeline run\n", + "\n", + "\n", + "def preprocess(ctx: Context, _, info: ServiceRuntimeInfo):\n", + " logger.info(\n", + " f\"another preprocession web-based annotator Service\"\n", + " f\"(defined as a callable), named '{info.name}'\"\n", + " )\n", + " with urllib.request.urlopen(\"https://example.com/\") as webpage:\n", + " web_content = webpage.read().decode(\n", + " webpage.headers.get_content_charset()\n", + " )\n", + " ctx.misc[\"another_detection\"] = {\n", + " ctx.last_request.text: \"online\"\n", + " if \"Example Domain\" in web_content\n", + " else \"offline\"\n", + " }\n", + "\n", + "\n", + "def postprocess(ctx: Context, pl: Pipeline):\n", + " logger.info(\"postprocession Service (defined as an object)\")\n", + " logger.info(\n", + " f\"resulting misc looks like:\"\n", + " f\"{json.dumps(ctx.misc, indent=4, default=str)}\"\n", + " )\n", + " fallback_flow, fallback_node, _ = pl.actor.fallback_label\n", + " received_response = pl.script[fallback_flow][fallback_node].response\n", + " responses_match = received_response == ctx.last_response\n", + " logger.info(f\"actor is{'' if responses_match else ' not'} in fallback node\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5082df01", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:24.441407Z", + "iopub.status.busy": "2023-12-27T16:51:24.441028Z", + "iopub.status.idle": "2023-12-27T16:51:24.446594Z", + "shell.execute_reply": "2023-12-27T16:51:24.445868Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"messenger_interface\": CLIMessengerInterface(\n", + " intro=\"Hi, this is a brand new Pipeline running!\",\n", + " prompt_request=\"Request: \",\n", + " prompt_response=\"Response: \",\n", + " ), # `CLIMessengerInterface` has the following constructor parameters:\n", + " # `intro` - a string that will be displayed\n", + " # on connection to interface (on `pipeline.run`)\n", + " # `prompt_request` - a string that will be displayed before user input\n", + " # `prompt_response` - an output prefix string\n", + " \"context_storage\": {},\n", + " \"components\": [\n", + " {\n", + " \"handler\": {\n", + " \"handler\": prepreprocess,\n", + " \"name\": \"silly_service_name\",\n", + " },\n", + " \"name\": \"preprocessor\",\n", + " }, # This service will be named `preprocessor`\n", + " # handler name will be overridden\n", + " preprocess,\n", + " ACTOR,\n", + " Service(\n", + " handler=postprocess,\n", + " name=\"postprocessor\",\n", + " ),\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "28c6c1fd", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:24.449964Z", + "iopub.status.busy": "2023-12-27T16:51:24.449510Z", + "iopub.status.idle": "2023-12-27T16:51:24.531246Z", + "shell.execute_reply": "2023-12-27T16:51:24.530474Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.ipynb new file mode 100644 index 0000000000..9b964974d5 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.ipynb @@ -0,0 +1,260 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "cfa38c72", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 4. Groups and conditions (basic)\n", + "\n", + "The following example shows `pipeline` service group usage and start conditions.\n", + "\n", + "Here, [Service](../apiref/dff.pipeline.service.service.rst#dff.pipeline.service.service.Service)s\n", + "and [ServiceGroup](../apiref/dff.pipeline.service.group.rst#dff.pipeline.service.group.ServiceGroup)s\n", + "are shown for advanced data pre- and postprocessing based on conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "9f41b26c", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:26.378089Z", + "iopub.status.busy": "2023-12-27T16:51:26.377431Z", + "iopub.status.idle": "2023-12-27T16:51:28.738012Z", + "shell.execute_reply": "2023-12-27T16:51:28.737181Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "2e8af2bf", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:28.741048Z", + "iopub.status.busy": "2023-12-27T16:51:28.740625Z", + "iopub.status.idle": "2023-12-27T16:51:29.474595Z", + "shell.execute_reply": "2023-12-27T16:51:29.473992Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import json\n", + "import logging\n", + "\n", + "from dff.pipeline import (\n", + " Service,\n", + " Pipeline,\n", + " not_condition,\n", + " service_successful_condition,\n", + " ServiceRuntimeInfo,\n", + " ACTOR,\n", + ")\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "a93d28db", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Pipeline can contain not only single services, but also service groups.\n", + "Service groups can be defined as `ServiceGroupBuilder` objects:\n", + " lists of `ServiceBuilders` and `ServiceGroupBuilders` or objects.\n", + "The objects should contain `services` -\n", + "a ServiceBuilder and ServiceGroupBuilder object list.\n", + "\n", + "To receive serialized information about service,\n", + " service group or pipeline a property `info_dict` can be used,\n", + " it returns important object properties as a dict.\n", + "\n", + "Services and service groups can be executed conditionally.\n", + "Conditions are functions passed to `start_condition` argument.\n", + "These functions should have following signature:\n", + "\n", + " (ctx: Context, pipeline: Pipeline) -> bool.\n", + "\n", + "Service is only executed if its start_condition returned `True`.\n", + "By default all the services start unconditionally.\n", + "There are number of built-in condition functions.\n", + "Built-in condition functions check other service states.\n", + "These are most important built-in condition functions:\n", + "\n", + "* `always_start_condition` - Default condition function, always starts service.\n", + "* `service_successful_condition(path)` - Function that checks,\n", + " whether service with given `path` executed successfully.\n", + "* `not_condition(function)` - Function that returns result\n", + " opposite from the one returned\n", + " by the `function` (condition function) argument.\n", + "\n", + "Here there is a conditionally executed service named\n", + "`never_running_service` is always executed.\n", + "It is executed only if `always_running_service`\n", + "is not finished, that should never happen.\n", + "The service named `context_printing_service`\n", + "prints pipeline runtime information,\n", + "that contains execution state of all previously run services." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "2983402e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:29.477903Z", + "iopub.status.busy": "2023-12-27T16:51:29.477289Z", + "iopub.status.idle": "2023-12-27T16:51:29.481630Z", + "shell.execute_reply": "2023-12-27T16:51:29.481083Z" + } + }, + "outputs": [], + "source": [ + "def always_running_service(_, __, info: ServiceRuntimeInfo):\n", + " logger.info(f\"Service '{info.name}' is running...\")\n", + "\n", + "\n", + "def never_running_service(_, __, info: ServiceRuntimeInfo):\n", + " raise Exception(f\"Oh no! The '{info.name}' service is running!\")\n", + "\n", + "\n", + "def runtime_info_printing_service(_, __, info: ServiceRuntimeInfo):\n", + " logger.info(\n", + " f\"Service '{info.name}' runtime execution info:\"\n", + " f\"{json.dumps(info, indent=4, default=str)}\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "d9f3d2d0", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:29.484076Z", + "iopub.status.busy": "2023-12-27T16:51:29.483870Z", + "iopub.status.idle": "2023-12-27T16:51:29.487915Z", + "shell.execute_reply": "2023-12-27T16:51:29.487329Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " Service(\n", + " handler=always_running_service,\n", + " name=\"always_running_service\",\n", + " ),\n", + " ACTOR,\n", + " Service(\n", + " handler=never_running_service,\n", + " start_condition=not_condition(\n", + " service_successful_condition(\".pipeline.always_running_service\")\n", + " ),\n", + " ),\n", + " Service(\n", + " handler=runtime_info_printing_service,\n", + " name=\"runtime_info_printing_service\",\n", + " ),\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "2ca03bff", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:29.490227Z", + "iopub.status.busy": "2023-12-27T16:51:29.490024Z", + "iopub.status.idle": "2023-12-27T16:51:29.502888Z", + "shell.execute_reply": "2023-12-27T16:51:29.502321Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_full.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_full.ipynb new file mode 100644 index 0000000000..9c5f210b45 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.4_groups_and_conditions_full.ipynb @@ -0,0 +1,389 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "ef24d24e", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 4. Groups and conditions (full)\n", + "\n", + "The following tutorial shows `pipeline` service group usage and start conditions.\n", + "\n", + "This tutorial is a more advanced version of the\n", + "[previous tutorial](../tutorials/tutorials.pipeline.4_groups_and_conditions_basic.py)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3b25965a", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:31.246870Z", + "iopub.status.busy": "2023-12-27T16:51:31.246240Z", + "iopub.status.idle": "2023-12-27T16:51:33.686139Z", + "shell.execute_reply": "2023-12-27T16:51:33.685329Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b13b1543", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:33.689356Z", + "iopub.status.busy": "2023-12-27T16:51:33.688930Z", + "iopub.status.idle": "2023-12-27T16:51:34.425181Z", + "shell.execute_reply": "2023-12-27T16:51:34.424567Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import logging\n", + "\n", + "from dff.pipeline import (\n", + " Service,\n", + " Pipeline,\n", + " ServiceGroup,\n", + " not_condition,\n", + " service_successful_condition,\n", + " all_condition,\n", + " ServiceRuntimeInfo,\n", + " ACTOR,\n", + ")\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "f616ae69", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Pipeline can contain not only single services, but also service groups.\n", + "Service groups can be defined as lists of `ServiceBuilders`\n", + " (in fact, all of the pipeline services are combined\n", + " into root service group named \"pipeline\").\n", + "Alternatively, the groups can be defined as objects\n", + " with following constructor arguments:\n", + "\n", + "* `components` (required) - A list of ServiceBuilder objects,\n", + " ServiceGroup objects and lists of them.\n", + "* `wrappers` - A list of pipeline wrappers, see tutorial 7.\n", + "* `timeout` - Pipeline timeout, see tutorial 5.\n", + "* `asynchronous` - Whether or not this service group _should_ be asynchronous\n", + " (keep in mind that not all service groups _can_ be asynchronous),\n", + " see tutorial 5.\n", + "* `start_condition` - Service group start condition.\n", + "* `name` - Custom defined name for the service group\n", + " (keep in mind that names in one ServiceGroup should be unique).\n", + "\n", + "Service (and service group) object fields\n", + "are mostly the same as constructor parameters,\n", + "however there are some differences:\n", + "\n", + "* `requested_async_flag` - Contains the value received\n", + " from `asynchronous` constructor parameter.\n", + "* `calculated_async_flag` - Contains automatically calculated\n", + " possibility of the service to be asynchronous.\n", + "* `asynchronous` - Combination af `..._async_flag` fields,\n", + " requested value overrides calculated (if not `None`),\n", + " see tutorial 5.\n", + "* `path` - Contains globally unique (for pipeline)\n", + " path to the service or service group.\n", + "\n", + "If no name is specified for a service or service group,\n", + " the name will be generated according to the following rules:\n", + "\n", + "1. If service's handler is an Actor, service will be named 'actor'.\n", + "2. If service's handler is callable,\n", + " service will be named callable.\n", + "3. Service group will be named 'service_group'.\n", + "4. Otherwise, it will be named 'noname_service'.\n", + "5. After that an index will be added to service name.\n", + "\n", + "To receive serialized information about service, service group\n", + "or pipeline a property `info_dict` can be used,\n", + "it returns important object properties as a dict.\n", + "In addition to that `pretty_format` method of Pipeline\n", + "can be used to get all pipeline properties as a formatted string\n", + "(e.g. for logging or debugging purposes).\n", + "\n", + "Services and service groups can be executed conditionally.\n", + "Conditions are functions passed to `start_condition` argument.\n", + "These functions should have following signature:\n", + "\n", + " (ctx: Context, pipeline: Pipeline) -> bool.\n", + "\n", + "Service is only executed if its start_condition returned `True`.\n", + "By default all the services start unconditionally.\n", + "There are number of built-in condition functions as well\n", + "as possibility to create custom ones.\n", + "Custom condition functions can rely on data in `ctx.misc`\n", + "as well as on any external data source.\n", + "Built-in condition functions check other service states.\n", + "All of the services store their execution status in context,\n", + " this status can be one of the following:\n", + "\n", + "* `NOT_RUN` - Service hasn't bee executed yet.\n", + "* `RUNNING` - Service is currently being executed\n", + " (important for asynchronous services).\n", + "* `FINISHED` - Service finished successfully.\n", + "* `FAILED` - Service execution failed (that also throws an exception).\n", + "\n", + "There are following built-in condition functions:\n", + "\n", + "* `always_start_condition` - Default condition function,\n", + " always starts service.\n", + "* `service_successful_condition(path)` -\n", + " Function that checks, whether service\n", + " with given `path` executed successfully (is `FINISHED`).\n", + "* `not_condition(function)` -\n", + " Function that returns result opposite\n", + " from the one returned by\n", + " the `function` (condition function) argument.\n", + "* `aggregate_condition(aggregator, *functions)` -\n", + " Function that aggregated results of\n", + " numerous `functions` (condition functions)\n", + " using special `aggregator` function.\n", + "* `all_condition(*functions)` -\n", + " Function that returns True only if all\n", + " of the given `functions`\n", + " (condition functions) return `True`.\n", + "* `any_condition(*functions)` -\n", + " Function that returns `True`\n", + " if any of the given `functions`\n", + " (condition functions) return `True`.\n", + "NB! Actor service ALWAYS runs unconditionally.\n", + "\n", + "Here there are two conditionally executed services:\n", + "a service named `running_service` is executed\n", + " only if both `simple_services` in `service_group_0`\n", + " are finished successfully.\n", + "`never_running_service` is executed only if `running_service` is not finished,\n", + "this should never happen.\n", + "`context_printing_service` prints pipeline runtime information,\n", + " that contains execution state of all previously run services." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "51fa2ea3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:34.428620Z", + "iopub.status.busy": "2023-12-27T16:51:34.428007Z", + "iopub.status.idle": "2023-12-27T16:51:34.432394Z", + "shell.execute_reply": "2023-12-27T16:51:34.431762Z" + } + }, + "outputs": [], + "source": [ + "def simple_service(_, __, info: ServiceRuntimeInfo):\n", + " logger.info(f\"Service '{info.name}' is running...\")\n", + "\n", + "\n", + "def never_running_service(_, __, info: ServiceRuntimeInfo):\n", + " raise Exception(f\"Oh no! The '{info.name}' service is running!\")\n", + "\n", + "\n", + "def runtime_info_printing_service(_, __, info: ServiceRuntimeInfo):\n", + " logger.info(\n", + " f\"Service '{info.name}' runtime execution info:\"\n", + " f\"{info.model_dump_json(indent=4, default=str)}\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6cf04ea2", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:34.434861Z", + "iopub.status.busy": "2023-12-27T16:51:34.434530Z", + "iopub.status.idle": "2023-12-27T16:51:34.439527Z", + "shell.execute_reply": "2023-12-27T16:51:34.438972Z" + } + }, + "outputs": [], + "source": [ + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " [\n", + " simple_service, # This simple service\n", + " # will be named `simple_service_0`\n", + " simple_service, # This simple service\n", + " # will be named `simple_service_1`\n", + " ], # Despite this is the unnamed service group in the root\n", + " # service group, it will be named `service_group_0`\n", + " ACTOR,\n", + " ServiceGroup(\n", + " name=\"named_group\",\n", + " components=[\n", + " Service(\n", + " handler=simple_service,\n", + " start_condition=all_condition(\n", + " service_successful_condition(\n", + " \".pipeline.service_group_0.simple_service_0\"\n", + " ),\n", + " service_successful_condition(\n", + " \".pipeline.service_group_0.simple_service_1\"\n", + " ),\n", + " ), # Alternative:\n", + " # service_successful_condition(\".pipeline.service_group_0\")\n", + " name=\"running_service\",\n", + " ), # This simple service will be named `running_service`,\n", + " # because its name is manually overridden\n", + " Service(\n", + " handler=never_running_service,\n", + " start_condition=not_condition(\n", + " service_successful_condition(\n", + " \".pipeline.named_group.running_service\"\n", + " )\n", + " ),\n", + " ),\n", + " ],\n", + " ),\n", + " runtime_info_printing_service,\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "47a04f49", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:34.442200Z", + "iopub.status.busy": "2023-12-27T16:51:34.441762Z", + "iopub.status.idle": "2023-12-27T16:51:34.464363Z", + "shell.execute_reply": "2023-12-27T16:51:34.463800Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Service 'runtime_info_printing_service_0' execution failed!\n", + "model_dump_json() got an unexpected keyword argument 'default'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Service 'runtime_info_printing_service_0' execution failed!\n", + "model_dump_json() got an unexpected keyword argument 'default'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Service 'runtime_info_printing_service_0' execution failed!\n", + "model_dump_json() got an unexpected keyword argument 'default'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Service 'runtime_info_printing_service_0' execution failed!\n", + "model_dump_json() got an unexpected keyword argument 'default'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Service 'runtime_info_printing_service_0' execution failed!\n", + "model_dump_json() got an unexpected keyword argument 'default'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " logger.info(f\"Pipeline structure:\\n{pipeline.pretty_format()}\")\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.ipynb new file mode 100644 index 0000000000..f0548ac940 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.ipynb @@ -0,0 +1,188 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "cb9f5b85", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 5. Asynchronous groups and services (basic)\n", + "\n", + "The following tutorial shows `pipeline` asynchronous\n", + "service and service group usage.\n", + "\n", + "Here, [ServiceGroup](../apiref/dff.pipeline.service.group.rst#dff.pipeline.service.group.ServiceGroup)s\n", + "are shown for advanced and asynchronous data pre- and postprocessing." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "14bf07cc", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:36.367668Z", + "iopub.status.busy": "2023-12-27T16:51:36.367241Z", + "iopub.status.idle": "2023-12-27T16:51:38.783944Z", + "shell.execute_reply": "2023-12-27T16:51:38.783061Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "7e95ab44", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:38.786843Z", + "iopub.status.busy": "2023-12-27T16:51:38.786633Z", + "iopub.status.idle": "2023-12-27T16:51:39.517636Z", + "shell.execute_reply": "2023-12-27T16:51:39.517039Z" + } + }, + "outputs": [], + "source": [ + "import asyncio\n", + "\n", + "from dff.pipeline import Pipeline, ACTOR\n", + "\n", + "from dff.utils.testing.common import (\n", + " is_interactive_mode,\n", + " check_happy_path,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT" + ] + }, + { + "cell_type": "markdown", + "id": "f05e7d68", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "Services and service groups can be synchronous and asynchronous.\n", + "In synchronous service groups services are executed consequently.\n", + "In asynchronous service groups all services are executed simultaneously.\n", + "\n", + "Service can be asynchronous if its handler is an async function.\n", + "Service group can be asynchronous if all services\n", + "and service groups inside it are asynchronous.\n", + "\n", + "Here there is an asynchronous service group, that contains 10 services,\n", + "each of them should sleep for 0.01 of a second.\n", + "However, as the group is asynchronous,\n", + "it is being executed for 0.01 of a second in total.\n", + "Service group `pipeline` can't be asynchronous because `actor` is synchronous." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "00bc6768", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:39.521002Z", + "iopub.status.busy": "2023-12-27T16:51:39.520445Z", + "iopub.status.idle": "2023-12-27T16:51:39.524430Z", + "shell.execute_reply": "2023-12-27T16:51:39.523790Z" + } + }, + "outputs": [], + "source": [ + "async def time_consuming_service(_):\n", + " await asyncio.sleep(0.01)\n", + "\n", + "\n", + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " [time_consuming_service for _ in range(0, 10)],\n", + " ACTOR,\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f5932638", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:39.527052Z", + "iopub.status.busy": "2023-12-27T16:51:39.526595Z", + "iopub.status.idle": "2023-12-27T16:51:39.597327Z", + "shell.execute_reply": "2023-12-27T16:51:39.596599Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.ipynb new file mode 100644 index 0000000000..0947384208 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.ipynb @@ -0,0 +1,313 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "62ba5d02", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 5. Asynchronous groups and services (full)\n", + "\n", + "The following tutorial shows `pipeline`\n", + "asynchronous service and service group usage.\n", + "\n", + "This tutorial is a more advanced version of the\n", + "[previous tutorial](../tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.py)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "710342da", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:41.425774Z", + "iopub.status.busy": "2023-12-27T16:51:41.425208Z", + "iopub.status.idle": "2023-12-27T16:51:43.742847Z", + "shell.execute_reply": "2023-12-27T16:51:43.741802Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "0a6524a0", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:43.745957Z", + "iopub.status.busy": "2023-12-27T16:51:43.745715Z", + "iopub.status.idle": "2023-12-27T16:51:44.625917Z", + "shell.execute_reply": "2023-12-27T16:51:44.625226Z" + } + }, + "outputs": [], + "source": [ + "import asyncio\n", + "import json\n", + "import logging\n", + "import urllib.request\n", + "\n", + "from dff.script import Context\n", + "\n", + "from dff.pipeline import ServiceGroup, Pipeline, ServiceRuntimeInfo, ACTOR\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "38daa1c4", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "Services and service groups can be synchronous and asynchronous.\n", + "In synchronous service groups services are executed consequently,\n", + " some of them (`ACTOR`) can even return `Context` object,\n", + " modifying it.\n", + "In asynchronous service groups all services\n", + " are executed simultaneously and should not return anything,\n", + " neither modify Context.\n", + "\n", + "To become asynchronous service or service group\n", + " should _be able_ to be asynchronous\n", + " and should not be marked synchronous.\n", + "Service can be asynchronous if its handler is an async function.\n", + "Service group can be asynchronous if all services\n", + "and service groups inside it are asynchronous.\n", + "If service or service group can be asynchronous\n", + "the `asynchronous` constructor parameter is checked.\n", + "If the parameter is not set,\n", + "the service becomes asynchronous, and if set, it is used instead.\n", + "If service can not be asynchronous,\n", + "but is marked asynchronous, an exception is thrown.\n", + "NB! ACTOR service is always synchronous.\n", + "\n", + "The timeout field only works for asynchronous services and service groups.\n", + "If service execution takes more time than timeout,\n", + "it is aborted and marked as failed.\n", + "\n", + "Pipeline `optimization_warnings` argument can be used to\n", + " display optimization warnings during pipeline construction.\n", + "Generally for optimization purposes asynchronous\n", + " services should be combined into asynchronous\n", + " groups to run simultaneously.\n", + "Synchronous services should be expelled from (mostly) asynchronous groups.\n", + "\n", + "Here service group `balanced_group` can be asynchronous,\n", + " however it is requested to be synchronous,\n", + " so its services are executed consequently.\n", + "Service group `service_group_0` is asynchronous,\n", + " it doesn't run out of timeout of 0.02 seconds,\n", + " however contains 6 time consuming services,\n", + " each of them sleeps for 0.01 of a second.\n", + "Service group `service_group_1` is also asynchronous,\n", + "it logs HTTPS requests (from 1 to 15),\n", + " running simultaneously, in random order.\n", + "Service group `pipeline` can't be asynchronous because\n", + "`balanced_group` and ACTOR are synchronous." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "3baf85a3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:44.629502Z", + "iopub.status.busy": "2023-12-27T16:51:44.628876Z", + "iopub.status.idle": "2023-12-27T16:51:44.635146Z", + "shell.execute_reply": "2023-12-27T16:51:44.634554Z" + } + }, + "outputs": [], + "source": [ + "async def simple_asynchronous_service(_, __, info: ServiceRuntimeInfo):\n", + " logger.info(f\"Service '{info.name}' is running\")\n", + "\n", + "\n", + "async def time_consuming_service(_):\n", + " await asyncio.sleep(0.01)\n", + "\n", + "\n", + "def meta_web_querying_service(\n", + " photo_number: int,\n", + "): # This function returns services, a service factory\n", + " async def web_querying_service(ctx: Context, _, info: ServiceRuntimeInfo):\n", + " if ctx.misc.get(\"web_query\", None) is None:\n", + " ctx.misc[\"web_query\"] = {}\n", + " with urllib.request.urlopen(\n", + " f\"https://jsonplaceholder.typicode.com/photos/{photo_number}\"\n", + " ) as webpage:\n", + " web_content = webpage.read().decode(\n", + " webpage.headers.get_content_charset()\n", + " )\n", + " ctx.misc[\"web_query\"].update(\n", + " {\n", + " f\"{ctx.last_request}\"\n", + " f\":photo_number_{photo_number}\": json.loads(web_content)[\n", + " \"title\"\n", + " ]\n", + " }\n", + " )\n", + " logger.info(f\"Service '{info.name}' has completed HTTPS request\")\n", + "\n", + " return web_querying_service\n", + "\n", + "\n", + "def context_printing_service(ctx: Context):\n", + " logger.info(f\"Context misc: {json.dumps(ctx.misc, indent=4, default=str)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "30397ffb", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:44.637897Z", + "iopub.status.busy": "2023-12-27T16:51:44.637344Z", + "iopub.status.idle": "2023-12-27T16:51:44.642573Z", + "shell.execute_reply": "2023-12-27T16:51:44.641978Z" + } + }, + "outputs": [], + "source": [ + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"optimization_warnings\": True,\n", + " # There are no warnings - pipeline is well-optimized\n", + " \"components\": [\n", + " ServiceGroup(\n", + " name=\"balanced_group\",\n", + " asynchronous=False,\n", + " components=[\n", + " simple_asynchronous_service,\n", + " ServiceGroup(\n", + " timeout=0.02,\n", + " components=[time_consuming_service for _ in range(0, 6)],\n", + " ),\n", + " simple_asynchronous_service,\n", + " ],\n", + " ),\n", + " ACTOR,\n", + " [meta_web_querying_service(photo) for photo in range(1, 16)],\n", + " context_printing_service,\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "6f8ff726", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:44.645090Z", + "iopub.status.busy": "2023-12-27T16:51:44.644706Z", + "iopub.status.idle": "2023-12-27T16:51:46.534642Z", + "shell.execute_reply": "2023-12-27T16:51:46.533954Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_basic.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_basic.ipynb new file mode 100644 index 0000000000..f932d23ba8 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_basic.ipynb @@ -0,0 +1,258 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "aeed2f40", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 6. Extra Handlers (basic)\n", + "\n", + "The following tutorial shows extra handlers possibilities and use cases.\n", + "\n", + "Here, extra handlers [BeforeHandler](../apiref/dff.pipeline.service.extra.rst#dff.pipeline.service.extra.BeforeHandler)\n", + "and [AfterHandler](../apiref/dff.pipeline.service.extra.rst#dff.pipeline.service.extra.AfterHandler)\n", + "are shown as additional means of data processing, attached to services." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "4d91b1b8", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:48.351439Z", + "iopub.status.busy": "2023-12-27T16:51:48.351243Z", + "iopub.status.idle": "2023-12-27T16:51:50.926859Z", + "shell.execute_reply": "2023-12-27T16:51:50.926037Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "49a2aa33", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:50.929716Z", + "iopub.status.busy": "2023-12-27T16:51:50.929500Z", + "iopub.status.idle": "2023-12-27T16:51:51.617837Z", + "shell.execute_reply": "2023-12-27T16:51:51.617118Z" + } + }, + "outputs": [], + "source": [ + "import asyncio\n", + "import json\n", + "import logging\n", + "import random\n", + "from datetime import datetime\n", + "\n", + "from dff.script import Context\n", + "\n", + "from dff.pipeline import Pipeline, ServiceGroup, ExtraHandlerRuntimeInfo, ACTOR\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "593c8ea5", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Extra handlers are additional function\n", + " lists (before-functions and/or after-functions)\n", + " that can be added to any `pipeline` components (service and service groups).\n", + "Extra handlers main purpose should be service\n", + "and service groups statistics collection.\n", + "Extra handlers can be attached to pipeline component using\n", + "`before_handler` and `after_handler` constructor parameter.\n", + "\n", + "Here 5 `heavy_service`s are run in single asynchronous service group.\n", + "Each of them sleeps for random amount of seconds (between 0 and 0.05).\n", + "To each of them (as well as to group)\n", + " time measurement extra handler is attached,\n", + " that writes execution time to `ctx.misc`.\n", + "In the end `ctx.misc` is logged to info channel." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "4166b60d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:51.621035Z", + "iopub.status.busy": "2023-12-27T16:51:51.620675Z", + "iopub.status.idle": "2023-12-27T16:51:51.625771Z", + "shell.execute_reply": "2023-12-27T16:51:51.625135Z" + } + }, + "outputs": [], + "source": [ + "def collect_timestamp_before(ctx: Context, _, info: ExtraHandlerRuntimeInfo):\n", + " ctx.misc.update({f\"{info.component.name}\": datetime.now()})\n", + "\n", + "\n", + "def collect_timestamp_after(ctx: Context, _, info: ExtraHandlerRuntimeInfo):\n", + " ctx.misc.update(\n", + " {\n", + " f\"{info.component.name}\": datetime.now()\n", + " - ctx.misc[f\"{info.component.name}\"]\n", + " }\n", + " )\n", + "\n", + "\n", + "async def heavy_service(_):\n", + " await asyncio.sleep(random.randint(0, 5) / 100)\n", + "\n", + "\n", + "def logging_service(ctx: Context):\n", + " logger.info(f\"Context misc: {json.dumps(ctx.misc, indent=4, default=str)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "bc92f033", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:51.628301Z", + "iopub.status.busy": "2023-12-27T16:51:51.627929Z", + "iopub.status.idle": "2023-12-27T16:51:51.633183Z", + "shell.execute_reply": "2023-12-27T16:51:51.632583Z" + } + }, + "outputs": [], + "source": [ + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " ServiceGroup(\n", + " before_handler=[collect_timestamp_before],\n", + " after_handler=[collect_timestamp_after],\n", + " components=[\n", + " {\n", + " \"handler\": heavy_service,\n", + " \"before_handler\": [collect_timestamp_before],\n", + " \"after_handler\": [collect_timestamp_after],\n", + " },\n", + " {\n", + " \"handler\": heavy_service,\n", + " \"before_handler\": [collect_timestamp_before],\n", + " \"after_handler\": [collect_timestamp_after],\n", + " },\n", + " {\n", + " \"handler\": heavy_service,\n", + " \"before_handler\": [collect_timestamp_before],\n", + " \"after_handler\": [collect_timestamp_after],\n", + " },\n", + " {\n", + " \"handler\": heavy_service,\n", + " \"before_handler\": [collect_timestamp_before],\n", + " \"after_handler\": [collect_timestamp_after],\n", + " },\n", + " {\n", + " \"handler\": heavy_service,\n", + " \"before_handler\": [collect_timestamp_before],\n", + " \"after_handler\": [collect_timestamp_after],\n", + " },\n", + " ],\n", + " ),\n", + " ACTOR,\n", + " logging_service,\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "60ba3649", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:51.635647Z", + "iopub.status.busy": "2023-12-27T16:51:51.635339Z", + "iopub.status.idle": "2023-12-27T16:51:51.882976Z", + "shell.execute_reply": "2023-12-27T16:51:51.882286Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline(**pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_full.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_full.ipynb new file mode 100644 index 0000000000..2844159b90 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.6_extra_handlers_full.ipynb @@ -0,0 +1,392 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c6e4201e", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 6. Extra Handlers (full)\n", + "\n", + "The following tutorial shows extra handlers possibilities and use cases.\n", + "\n", + "This tutorial is a more advanced version of the\n", + "[previous tutorial](../tutorials/tutorials.pipeline.6_extra_handlers_basic.py)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f693f3e4", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:53.561889Z", + "iopub.status.busy": "2023-12-27T16:51:53.561686Z", + "iopub.status.idle": "2023-12-27T16:51:55.986855Z", + "shell.execute_reply": "2023-12-27T16:51:55.986049Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff psutil" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c972dd48", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:55.990032Z", + "iopub.status.busy": "2023-12-27T16:51:55.989529Z", + "iopub.status.idle": "2023-12-27T16:51:56.701350Z", + "shell.execute_reply": "2023-12-27T16:51:56.700703Z" + } + }, + "outputs": [], + "source": [ + "import json\n", + "import logging\n", + "import random\n", + "from datetime import datetime\n", + "\n", + "import psutil\n", + "from dff.script import Context\n", + "\n", + "from dff.pipeline import (\n", + " Pipeline,\n", + " ServiceGroup,\n", + " to_service,\n", + " ExtraHandlerRuntimeInfo,\n", + " ServiceRuntimeInfo,\n", + " ACTOR,\n", + ")\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "bff6cd98", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Extra handlers are additional function lists\n", + " (before-functions and/or after-functions)\n", + " that can be added to any pipeline components (service and service groups).\n", + "Despite extra handlers can be used to prepare data for certain services,\n", + "that require some very special input type,\n", + " in most cases services should be preferred for that purpose.\n", + "Extra handlers can be asynchronous,\n", + "however there's no statistics that can be collected about them.\n", + "So their main purpose should be _really_ lightweight data conversion (etc.)\n", + " operations or service and service groups statistics collection.\n", + "\n", + "Extra handlers have the following constructor arguments / parameters:\n", + "\n", + "* `functions` - Functions that will be run.\n", + "* `timeout` - Timeout for that extra handler\n", + " (for asynchronous extra handlers only).\n", + "* `asynchronous` - Whether this extra handler should be asynchronous or not.\n", + "NB! Extra handlers don't have execution state,\n", + "so their names shouldn't appear in built-in condition functions.\n", + "\n", + "Extra handlers callable signature can be one of the following:\n", + "`[ctx]`, `[ctx, pipeline]` or `[ctx, pipeline, info]`, where:\n", + "\n", + "* `ctx` - `Context` of the current dialog.\n", + "* `pipeline` - The current pipeline.\n", + "* `info` - Dictionary, containing information about current extra handler\n", + " and pipeline execution state (see tutorial 4).\n", + "\n", + "Extra handlers can be attached to pipeline component in a few different ways:\n", + "\n", + "1. Directly in constructor - by adding extra handlers to\n", + " `before_handler` or `after_handler` constructor parameter.\n", + "2. (Services only) `to_service` decorator -\n", + " transforms function to service with extra handlers\n", + " from `before_handler` and `after_handler` arguments.\n", + "\n", + "Here 5 `heavy_service`s fill big amounts of memory with random numbers.\n", + "Their runtime stats are captured and displayed by extra services,\n", + "`time_measure_handler` measures time and\n", + "`ram_measure_handler` - allocated memory.\n", + "Another `time_measure_handler` measures total\n", + "amount of time taken by all of them (combined in service group).\n", + "`logging_service` logs stats, however it can use string arguments only,\n", + " so `json_encoder_handler` is applied to encode stats to JSON." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "61ef485c", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:56.704799Z", + "iopub.status.busy": "2023-12-27T16:51:56.704137Z", + "iopub.status.idle": "2023-12-27T16:51:56.711694Z", + "shell.execute_reply": "2023-12-27T16:51:56.711090Z" + } + }, + "outputs": [], + "source": [ + "def get_extra_handler_misc_field(\n", + " info: ExtraHandlerRuntimeInfo, postfix: str\n", + ") -> str: # This method calculates `misc` field name dedicated to extra handler\n", + " # based on its and its service name\n", + " return f\"{info.component.name}-{postfix}\"\n", + "\n", + "\n", + "def time_measure_before_handler(ctx, _, info):\n", + " ctx.misc.update(\n", + " {get_extra_handler_misc_field(info, \"time\"): datetime.now()}\n", + " )\n", + "\n", + "\n", + "def time_measure_after_handler(ctx, _, info):\n", + " ctx.misc.update(\n", + " {\n", + " get_extra_handler_misc_field(info, \"time\"): datetime.now()\n", + " - ctx.misc[get_extra_handler_misc_field(info, \"time\")]\n", + " }\n", + " )\n", + "\n", + "\n", + "def ram_measure_before_handler(ctx, _, info):\n", + " ctx.misc.update(\n", + " {\n", + " get_extra_handler_misc_field(\n", + " info, \"ram\"\n", + " ): psutil.virtual_memory().available\n", + " }\n", + " )\n", + "\n", + "\n", + "def ram_measure_after_handler(ctx, _, info):\n", + " ctx.misc.update(\n", + " {\n", + " get_extra_handler_misc_field(info, \"ram\"): ctx.misc[\n", + " get_extra_handler_misc_field(info, \"ram\")\n", + " ]\n", + " - psutil.virtual_memory().available\n", + " }\n", + " )\n", + "\n", + "\n", + "def json_converter_before_handler(ctx, _, info):\n", + " ctx.misc.update(\n", + " {\n", + " get_extra_handler_misc_field(info, \"str\"): json.dumps(\n", + " ctx.misc, indent=4, default=str\n", + " )\n", + " }\n", + " )\n", + "\n", + "\n", + "def json_converter_after_handler(ctx, _, info):\n", + " ctx.misc.pop(get_extra_handler_misc_field(info, \"str\"))\n", + "\n", + "\n", + "memory_heap = dict() # This object plays part of some memory heap" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "22bf2660", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:56.714236Z", + "iopub.status.busy": "2023-12-27T16:51:56.713876Z", + "iopub.status.idle": "2023-12-27T16:51:56.719943Z", + "shell.execute_reply": "2023-12-27T16:51:56.719274Z" + } + }, + "outputs": [], + "source": [ + "@to_service(\n", + " before_handler=[time_measure_before_handler, ram_measure_before_handler],\n", + " after_handler=[time_measure_after_handler, ram_measure_after_handler],\n", + ")\n", + "def heavy_service(ctx: Context):\n", + " memory_heap[ctx.last_request.text] = [\n", + " random.randint(0, num) for num in range(0, 1000)\n", + " ]\n", + "\n", + "\n", + "@to_service(\n", + " before_handler=[json_converter_before_handler],\n", + " after_handler=[json_converter_after_handler],\n", + ")\n", + "def logging_service(ctx: Context, _, info: ServiceRuntimeInfo):\n", + " str_misc = ctx.misc[f\"{info.name}-str\"]\n", + " assert isinstance(str_misc, str)\n", + " print(f\"Stringified misc: {str_misc}\")\n", + "\n", + "\n", + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " ServiceGroup(\n", + " before_handler=[time_measure_before_handler],\n", + " after_handler=[time_measure_after_handler],\n", + " components=[heavy_service for _ in range(0, 5)],\n", + " ),\n", + " ACTOR,\n", + " logging_service,\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1bd216ca", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:56.722632Z", + "iopub.status.busy": "2023-12-27T16:51:56.722171Z", + "iopub.status.idle": "2023-12-27T16:51:56.761109Z", + "shell.execute_reply": "2023-12-27T16:51:56.760403Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Stringified misc: {\n", + " \"service_group_0-time\": \"0:00:00.006634\",\n", + " \"heavy_service_0-time\": \"0:00:00.001877\",\n", + " \"heavy_service_0-ram\": 0,\n", + " \"heavy_service_1-time\": \"0:00:00.000948\",\n", + " \"heavy_service_1-ram\": 0,\n", + " \"heavy_service_2-time\": \"0:00:00.000886\",\n", + " \"heavy_service_2-ram\": 0,\n", + " \"heavy_service_3-time\": \"0:00:00.000925\",\n", + " \"heavy_service_3-ram\": 0,\n", + " \"heavy_service_4-time\": \"0:00:00.001030\",\n", + " \"heavy_service_4-ram\": 0\n", + "}\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "Stringified misc: {\n", + " \"service_group_0-time\": \"0:00:00.005602\",\n", + " \"heavy_service_0-time\": \"0:00:00.001043\",\n", + " \"heavy_service_0-ram\": 0,\n", + " \"heavy_service_1-time\": \"0:00:00.000935\",\n", + " \"heavy_service_1-ram\": 0,\n", + " \"heavy_service_2-time\": \"0:00:00.000907\",\n", + " \"heavy_service_2-ram\": 0,\n", + " \"heavy_service_3-time\": \"0:00:00.000893\",\n", + " \"heavy_service_3-ram\": 0,\n", + " \"heavy_service_4-time\": \"0:00:00.000936\",\n", + " \"heavy_service_4-ram\": 0\n", + "}\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "Stringified misc: {\n", + " \"service_group_0-time\": \"0:00:00.005418\",\n", + " \"heavy_service_0-time\": \"0:00:00.000920\",\n", + " \"heavy_service_0-ram\": 0,\n", + " \"heavy_service_1-time\": \"0:00:00.000896\",\n", + " \"heavy_service_1-ram\": 0,\n", + " \"heavy_service_2-time\": \"0:00:00.000887\",\n", + " \"heavy_service_2-ram\": 0,\n", + " \"heavy_service_3-time\": \"0:00:00.000920\",\n", + " \"heavy_service_3-ram\": 0,\n", + " \"heavy_service_4-time\": \"0:00:00.000912\",\n", + " \"heavy_service_4-ram\": 0\n", + "}\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "Stringified misc: {\n", + " \"service_group_0-time\": \"0:00:00.005465\",\n", + " \"heavy_service_0-time\": \"0:00:00.000905\",\n", + " \"heavy_service_0-ram\": 0,\n", + " \"heavy_service_1-time\": \"0:00:00.000936\",\n", + " \"heavy_service_1-ram\": 0,\n", + " \"heavy_service_2-time\": \"0:00:00.000921\",\n", + " \"heavy_service_2-ram\": 0,\n", + " \"heavy_service_3-time\": \"0:00:00.000924\",\n", + " \"heavy_service_3-ram\": 0,\n", + " \"heavy_service_4-time\": \"0:00:00.000890\",\n", + " \"heavy_service_4-ram\": 0\n", + "}\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "Stringified misc: {\n", + " \"service_group_0-time\": \"0:00:00.005352\",\n", + " \"heavy_service_0-time\": \"0:00:00.000902\",\n", + " \"heavy_service_0-ram\": 0,\n", + " \"heavy_service_1-time\": \"0:00:00.000879\",\n", + " \"heavy_service_1-ram\": 0,\n", + " \"heavy_service_2-time\": \"0:00:00.000926\",\n", + " \"heavy_service_2-ram\": 0,\n", + " \"heavy_service_3-time\": \"0:00:00.000912\",\n", + " \"heavy_service_3-ram\": 0,\n", + " \"heavy_service_4-time\": \"0:00:00.000886\",\n", + " \"heavy_service_4-ram\": 0\n", + "}\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline(**pipeline_dict)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.ipynb new file mode 100644 index 0000000000..2b0edac5a1 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.ipynb @@ -0,0 +1,287 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f2c7f897", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 7. Extra Handlers and Extensions\n", + "\n", + "The following tutorial shows how pipeline can be extended\n", + "by global extra handlers and custom functions.\n", + "\n", + "Here, [add_global_handler](../apiref/dff.pipeline.pipeline.pipeline.rst#dff.pipeline.pipeline.pipeline.Pipeline.add_global_handler)\n", + "function is shown, that can be used to add extra handlers before\n", + "and/or after all pipeline services." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "70d6ef06", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:51:58.409083Z", + "iopub.status.busy": "2023-12-27T16:51:58.408535Z", + "iopub.status.idle": "2023-12-27T16:52:00.716401Z", + "shell.execute_reply": "2023-12-27T16:52:00.715432Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5cfec7de", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:00.719346Z", + "iopub.status.busy": "2023-12-27T16:52:00.718905Z", + "iopub.status.idle": "2023-12-27T16:52:01.508830Z", + "shell.execute_reply": "2023-12-27T16:52:01.508001Z" + } + }, + "outputs": [], + "source": [ + "import asyncio\n", + "import json\n", + "import logging\n", + "import random\n", + "from datetime import datetime\n", + "\n", + "from dff.pipeline import (\n", + " Pipeline,\n", + " ComponentExecutionState,\n", + " GlobalExtraHandlerType,\n", + " ExtraHandlerRuntimeInfo,\n", + " ServiceRuntimeInfo,\n", + " ACTOR,\n", + ")\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT\n", + "\n", + "logger = logging.getLogger(__name__)" + ] + }, + { + "cell_type": "markdown", + "id": "490a3e49", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Pipeline functionality can be extended by global extra handlers.\n", + "Global extra handlers are special extra handlers\n", + " that are called on some stages of pipeline execution.\n", + "There are 4 types of global extra handlers:\n", + "\n", + " * `BEFORE_ALL` is called before pipeline execution.\n", + " * `BEFORE` is called before each service and service group execution.\n", + " * `AFTER` is called after each service and service group execution.\n", + " * `AFTER_ALL` is called after pipeline execution.\n", + "\n", + "Global extra handlers have the same signature as regular extra handlers.\n", + "Actually `BEFORE_ALL` and `AFTER_ALL`\n", + " are attached to root service group named 'pipeline',\n", + " so they return its runtime info\n", + "\n", + "All extra handlers warnings (see tutorial 7)\n", + "are applicable to global extra handlers.\n", + "Pipeline `add_global_extra_handler` function is used to register\n", + " global extra handlers. It accepts following arguments:\n", + "\n", + "* `global_extra_handler_type` (required) - A `GlobalExtraHandlerType` instance,\n", + " indicates extra handler type to add.\n", + "* `extra_handler` (required) - The extra handler function itself.\n", + "* `whitelist` - An optional list of paths, if it's not `None`\n", + " the extra handlers will be applied to\n", + " specified pipeline components only.\n", + "* `blacklist` - An optional list of paths, if it's not `None`\n", + " the extra handlers will be applied to\n", + " all pipeline components except specified.\n", + "\n", + "Here basic functionality of `df-node-stats` library is emulated.\n", + "Information about pipeline component execution time and\n", + " result is collected and printed to info log after pipeline execution.\n", + "Pipeline consists of actor and 25 `long_service`s\n", + "that run random amount of time between 0 and 0.05 seconds." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "c7e62598", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:01.512867Z", + "iopub.status.busy": "2023-12-27T16:52:01.512101Z", + "iopub.status.idle": "2023-12-27T16:52:01.522983Z", + "shell.execute_reply": "2023-12-27T16:52:01.522157Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "start_times = dict() # Place to temporarily store service start times\n", + "pipeline_info = dict() # Pipeline information storage\n", + "\n", + "\n", + "def before_all(_, __, info: ExtraHandlerRuntimeInfo):\n", + " global start_times, pipeline_info\n", + " now = datetime.now()\n", + " pipeline_info = {\"start_time\": now}\n", + " start_times = {info.component.path: now}\n", + "\n", + "\n", + "def before(_, __, info: ExtraHandlerRuntimeInfo):\n", + " start_times.update({info.component.path: datetime.now()})\n", + "\n", + "\n", + "def after(_, __, info: ExtraHandlerRuntimeInfo):\n", + " start_time = start_times[info.component.path]\n", + " pipeline_info.update(\n", + " {\n", + " f\"{info.component.path}_duration\": datetime.now() - start_time,\n", + " f\"{info.component.path}_success\": info.component.execution_state.get(\n", + " info.component.path, ComponentExecutionState.NOT_RUN\n", + " ),\n", + " }\n", + " )\n", + "\n", + "\n", + "def after_all(_, __, info: ExtraHandlerRuntimeInfo):\n", + " pipeline_info.update(\n", + " {\"total_time\": datetime.now() - start_times[info.component.path]}\n", + " )\n", + " logger.info(\n", + " f\"Pipeline stats: {json.dumps(pipeline_info, indent=4, default=str)}\"\n", + " )\n", + "\n", + "\n", + "async def long_service(_, __, info: ServiceRuntimeInfo):\n", + " timeout = random.randint(0, 5) / 100\n", + " logger.info(f\"Service {info.name} is going to sleep for {timeout} seconds.\")\n", + " await asyncio.sleep(timeout)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "58821d8e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:01.527288Z", + "iopub.status.busy": "2023-12-27T16:52:01.526697Z", + "iopub.status.idle": "2023-12-27T16:52:01.532437Z", + "shell.execute_reply": "2023-12-27T16:52:01.531767Z" + } + }, + "outputs": [], + "source": [ + "pipeline_dict = {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " [long_service for _ in range(0, 25)],\n", + " ACTOR,\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "30f2d749", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:01.535295Z", + "iopub.status.busy": "2023-12-27T16:52:01.534847Z", + "iopub.status.idle": "2023-12-27T16:52:01.838842Z", + "shell.execute_reply": "2023-12-27T16:52:01.838155Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline(**pipeline_dict)\n", + "\n", + "pipeline.add_global_handler(GlobalExtraHandlerType.BEFORE_ALL, before_all)\n", + "pipeline.add_global_handler(GlobalExtraHandlerType.BEFORE, before)\n", + "pipeline.add_global_handler(GlobalExtraHandlerType.AFTER, after)\n", + "pipeline.add_global_handler(GlobalExtraHandlerType.AFTER_ALL, after_all)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.1_basics.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.1_basics.ipynb new file mode 100644 index 0000000000..842ac40c0d --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.1_basics.ipynb @@ -0,0 +1,307 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a67a7f1c", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Core: 1. Basics\n", + "\n", + "This notebook shows basic tutorial of creating a simple dialog bot (agent).\n", + "\n", + "Here, basic usege of [Pipeline](../apiref/dff.pipeline.pipeline.pipeline.rst#dff.pipeline.pipeline.pipeline.Pipeline)\n", + "primitive is shown: its' creation with\n", + "[from_script](../apiref/dff.pipeline.pipeline.pipeline.rst#dff.pipeline.pipeline.pipeline.Pipeline.from_script)\n", + "and execution.\n", + "\n", + "Additionally, function [check_happy_path](../apiref/dff.utils.testing.common.rst#dff.utils.testing.common.check_happy_path)\n", + "that can be used for Pipeline testing is presented.\n", + "\n", + "Let's do all the necessary imports from DFF:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "aedb0aa1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:03.574390Z", + "iopub.status.busy": "2023-12-27T16:52:03.573913Z", + "iopub.status.idle": "2023-12-27T16:52:05.887926Z", + "shell.execute_reply": "2023-12-27T16:52:05.887038Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c8b43a72", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:05.891107Z", + "iopub.status.busy": "2023-12-27T16:52:05.890667Z", + "iopub.status.idle": "2023-12-27T16:52:06.597943Z", + "shell.execute_reply": "2023-12-27T16:52:06.597242Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "from dff.script import TRANSITIONS, RESPONSE, Message\n", + "from dff.pipeline import Pipeline\n", + "import dff.script.conditions as cnd\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "bb66202c", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "First of all, to create a dialog agent, we need to create a dialog script.\n", + "Below script means a dialog script.\n", + "A script is a dictionary, where the keys are the names of the flows.\n", + "A script can contain multiple scripts, which is needed in order to divide\n", + "a dialog into sub-dialogs and process them separately.\n", + "For example, the separation can be tied to the topic of the dialog.\n", + "In this tutorial there is one flow called `greeting_flow`.\n", + "\n", + "Flow describes a sub-dialog using linked nodes.\n", + "Each node has the keywords `RESPONSE` and `TRANSITIONS`.\n", + "\n", + "* `RESPONSE` contains the response\n", + " that the agent will return from the current node.\n", + "* `TRANSITIONS` describes transitions from the\n", + " current node to another nodes. This is a dictionary,\n", + " where keys are names of the nodes and\n", + " values are conditions of transition to them." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "bdb202e6", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:06.601386Z", + "iopub.status.busy": "2023-12-27T16:52:06.600751Z", + "iopub.status.idle": "2023-12-27T16:52:06.609952Z", + "shell.execute_reply": "2023-12-27T16:52:06.609342Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"greeting_flow\": {\n", + " \"start_node\": { # This is the initial node,\n", + " # it doesn't contain a `RESPONSE`.\n", + " RESPONSE: Message(),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " # If \"Hi\" == request of the user then we make the transition.\n", + " },\n", + " \"node1\": {\n", + " RESPONSE: Message(\n", + " text=\"Hi, how are you?\"\n", + " ), # When the agent enters node1,\n", + " # return \"Hi, how are you?\".\n", + " TRANSITIONS: {\n", + " \"node2\": cnd.exact_match(Message(text=\"I'm fine, how are you?\"))\n", + " },\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(text=\"Good. What do you want to talk about?\"),\n", + " TRANSITIONS: {\n", + " \"node3\": cnd.exact_match(\n", + " Message(text=\"Let's talk about music.\")\n", + " )\n", + " },\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(text=\"Sorry, I can not talk about music now.\"),\n", + " TRANSITIONS: {\n", + " \"node4\": cnd.exact_match(Message(text=\"Ok, goodbye.\"))\n", + " },\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: Message(text=\"Bye\"),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " \"fallback_node\": {\n", + " # We get to this node if the conditions\n", + " # for switching to other nodes are not performed.\n", + " RESPONSE: Message(text=\"Ooops\"),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " }\n", + "}\n", + "\n", + "\n", + "happy_path = (\n", + " (\n", + " Message(text=\"Hi\"),\n", + " Message(text=\"Hi, how are you?\"),\n", + " ), # start_node -> node1\n", + " (\n", + " Message(text=\"I'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"Bye\")), # node3 -> node4\n", + " (Message(text=\"Hi\"), Message(text=\"Hi, how are you?\")), # node4 -> node1\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")), # node1 -> fallback_node\n", + " (\n", + " Message(text=\"stop\"),\n", + " Message(text=\"Ooops\"),\n", + " ), # fallback_node -> fallback_node\n", + " (\n", + " Message(text=\"Hi\"),\n", + " Message(text=\"Hi, how are you?\"),\n", + " ), # fallback_node -> node1\n", + " (\n", + " Message(text=\"I'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"Bye\")), # node3 -> node4\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "5f86bf14", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "A `Pipeline` is an object that processes user\n", + "inputs and returns responses.\n", + "To create the pipeline you need to pass the script (`toy_script`),\n", + "initial node (`start_label`) and\n", + "the node to which the default transition will take place\n", + "if none of the current conditions are met (`fallback_label`).\n", + "By default, if `fallback_label` is not set,\n", + "then its value becomes equal to `start_label`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f834d4a4", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:06.612747Z", + "iopub.status.busy": "2023-12-27T16:52:06.612261Z", + "iopub.status.idle": "2023-12-27T16:52:06.626597Z", + "shell.execute_reply": "2023-12-27T16:52:06.625929Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='I'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='Bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='I'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='Bye'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"greeting_flow\", \"start_node\"),\n", + " fallback_label=(\"greeting_flow\", \"fallback_node\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(\n", + " pipeline,\n", + " happy_path,\n", + " ) # This is a function for automatic tutorial\n", + " # running (testing tutorial) with `happy_path`.\n", + "\n", + " # Run tutorial in interactive mode if not in IPython env\n", + " # and if `DISABLE_INTERACTIVE_MODE` is not set.\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)\n", + " # This runs tutorial in interactive mode." + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.2_conditions.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.2_conditions.ipynb new file mode 100644 index 0000000000..247fee1ce2 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.2_conditions.ipynb @@ -0,0 +1,379 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "50cd5be0", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Core: 2. Conditions\n", + "\n", + "This tutorial shows different options for\n", + "setting transition conditions from one node to another.\n", + "\n", + "Here, [conditions](../apiref/dff.script.conditions.std_conditions.rst)\n", + "for script transitions are shown.\n", + "\n", + "First of all, let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "d157214f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:08.588162Z", + "iopub.status.busy": "2023-12-27T16:52:08.587948Z", + "iopub.status.idle": "2023-12-27T16:52:10.945500Z", + "shell.execute_reply": "2023-12-27T16:52:10.944711Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f145a266", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:10.948975Z", + "iopub.status.busy": "2023-12-27T16:52:10.948358Z", + "iopub.status.idle": "2023-12-27T16:52:11.685527Z", + "shell.execute_reply": "2023-12-27T16:52:11.684890Z" + } + }, + "outputs": [], + "source": [ + "import re\n", + "\n", + "from dff.script import Context, TRANSITIONS, RESPONSE, Message\n", + "import dff.script.conditions as cnd\n", + "from dff.pipeline import Pipeline\n", + "\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "f31703c5", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "The transition condition is set by the function.\n", + "If this function returns the value `True`,\n", + "then the actor performs the corresponding transition.\n", + "Actor is responsible for processing user input and determining\n", + "the appropriate response based on the current state of the conversation and the script.\n", + "See tutorial 1 of pipeline (pipeline/1_basics) to learn more about Actor.\n", + "Condition functions have signature\n", + "\n", + " def func(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool\n", + "\n", + "Out of the box `dff.script.conditions` offers the\n", + " following options for setting conditions:\n", + "\n", + "* `exact_match` returns `True` if the user's request completely\n", + " matches the value passed to the function.\n", + "* `regexp` returns `True` if the pattern matches the user's request,\n", + " while the user's request must be a string.\n", + " `regexp` has same signature as `re.compile` function.\n", + "* `aggregate` returns `bool` value as\n", + " a result after aggregate by `aggregate_func`\n", + " for input sequence of conditions.\n", + " `aggregate_func == any` by default. `aggregate` has alias `agg`.\n", + "* `any` returns `True` if one element of input sequence of conditions is `True`.\n", + " `any(input_sequence)` is equivalent to\n", + " `aggregate(input sequence, aggregate_func=any)`.\n", + "* `all` returns `True` if all elements of input\n", + " sequence of conditions are `True`.\n", + " `all(input_sequence)` is equivalent to\n", + " `aggregate(input sequence, aggregate_func=all)`.\n", + "* `negation` returns negation of passed function. `negation` has alias `neg`.\n", + "* `has_last_labels` covered in the following examples.\n", + "* `true` returns `True`.\n", + "* `false` returns `False`.\n", + "\n", + "For example function\n", + "```\n", + "def always_true_condition(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool:\n", + " return True\n", + "```\n", + "always returns `True` and `always_true_condition` function\n", + "is the same as `dff.script.conditions.std_conditions.true()`.\n", + "\n", + "The functions to be used in the `toy_script` are declared here." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d9114b9a", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:11.688810Z", + "iopub.status.busy": "2023-12-27T16:52:11.688473Z", + "iopub.status.idle": "2023-12-27T16:52:11.694364Z", + "shell.execute_reply": "2023-12-27T16:52:11.693744Z" + } + }, + "outputs": [], + "source": [ + "def hi_lower_case_condition(ctx: Context, _: Pipeline, *args, **kwargs) -> bool:\n", + " request = ctx.last_request\n", + " # Returns True if `hi` in both uppercase and lowercase\n", + " # letters is contained in the user request.\n", + " if request is None or request.text is None:\n", + " return False\n", + " return \"hi\" in request.text.lower()\n", + "\n", + "\n", + "def complex_user_answer_condition(\n", + " ctx: Context, _: Pipeline, *args, **kwargs\n", + ") -> bool:\n", + " request = ctx.last_request\n", + " # The user request can be anything.\n", + " if request is None or request.misc is None:\n", + " return False\n", + " return {\"some_key\": \"some_value\"} == request.misc\n", + "\n", + "\n", + "def predetermined_condition(condition: bool):\n", + " # Wrapper for internal condition function.\n", + " def internal_condition_function(\n", + " ctx: Context, _: Pipeline, *args, **kwargs\n", + " ) -> bool:\n", + " # It always returns `condition`.\n", + " return condition\n", + "\n", + " return internal_condition_function" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a5a6b1b9", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:11.697186Z", + "iopub.status.busy": "2023-12-27T16:52:11.696792Z", + "iopub.status.idle": "2023-12-27T16:52:11.707835Z", + "shell.execute_reply": "2023-12-27T16:52:11.707160Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"greeting_flow\": {\n", + " \"start_node\": { # This is the initial node,\n", + " # it doesn't contain a `RESPONSE`.\n", + " RESPONSE: Message(),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " # If \"Hi\" == request of user then we make the transition\n", + " },\n", + " \"node1\": {\n", + " RESPONSE: Message(text=\"Hi, how are you?\"),\n", + " TRANSITIONS: {\"node2\": cnd.regexp(r\".*how are you\", re.IGNORECASE)},\n", + " # pattern matching (precompiled)\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(text=\"Good. What do you want to talk about?\"),\n", + " TRANSITIONS: {\n", + " \"node3\": cnd.all(\n", + " [cnd.regexp(r\"talk\"), cnd.regexp(r\"about.*music\")]\n", + " )\n", + " },\n", + " # Mix sequence of conditions by `cnd.all`.\n", + " # `all` is alias `aggregate` with\n", + " # `aggregate_func` == `all`.\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(text=\"Sorry, I can not talk about music now.\"),\n", + " TRANSITIONS: {\"node4\": cnd.regexp(re.compile(r\"Ok, goodbye.\"))},\n", + " # pattern matching by precompiled pattern\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: Message(text=\"bye\"),\n", + " TRANSITIONS: {\n", + " \"node1\": cnd.any(\n", + " [\n", + " hi_lower_case_condition,\n", + " cnd.exact_match(Message(text=\"hello\")),\n", + " ]\n", + " )\n", + " },\n", + " # Mix sequence of conditions by `cnd.any`.\n", + " # `any` is alias `aggregate` with\n", + " # `aggregate_func` == `any`.\n", + " },\n", + " \"fallback_node\": { # We get to this node\n", + " # if an error occurred while the agent was running.\n", + " RESPONSE: Message(text=\"Ooops\"),\n", + " TRANSITIONS: {\n", + " \"node1\": complex_user_answer_condition,\n", + " # The user request can be more than just a string.\n", + " # First we will check returned value of\n", + " # `complex_user_answer_condition`.\n", + " # If the value is `True` then we will go to `node1`.\n", + " # If the value is `False` then we will check a result of\n", + " # `predetermined_condition(True)` for `fallback_node`.\n", + " \"fallback_node\": predetermined_condition(\n", + " True\n", + " ), # or you can use `cnd.true()`\n", + " # Last condition function will return\n", + " # `true` and will repeat `fallback_node`\n", + " # if `complex_user_answer_condition` return `false`.\n", + " },\n", + " },\n", + " }\n", + "}\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (\n", + " Message(text=\"Hi\"),\n", + " Message(text=\"Hi, how are you?\"),\n", + " ), # start_node -> node1\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"bye\")), # node3 -> node4\n", + " (Message(text=\"Hi\"), Message(text=\"Hi, how are you?\")), # node4 -> node1\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")), # node1 -> fallback_node\n", + " (\n", + " Message(text=\"one\"),\n", + " Message(text=\"Ooops\"),\n", + " ), # fallback_node -> fallback_node\n", + " (\n", + " Message(text=\"help\"),\n", + " Message(text=\"Ooops\"),\n", + " ), # fallback_node -> fallback_node\n", + " (\n", + " Message(text=\"nope\"),\n", + " Message(text=\"Ooops\"),\n", + " ), # fallback_node -> fallback_node\n", + " (\n", + " Message(misc={\"some_key\": \"some_value\"}),\n", + " Message(text=\"Hi, how are you?\"),\n", + " ), # fallback_node -> node1\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"bye\")), # node3 -> node4\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "8e227535", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:11.710531Z", + "iopub.status.busy": "2023-12-27T16:52:11.710080Z", + "iopub.status.idle": "2023-12-27T16:52:11.726397Z", + "shell.execute_reply": "2023-12-27T16:52:11.725706Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='one'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='help'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='nope'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> misc='{'some_key': 'some_value'}'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"greeting_flow\", \"start_node\"),\n", + " fallback_label=(\"greeting_flow\", \"fallback_node\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.3_responses.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.3_responses.ipynb new file mode 100644 index 0000000000..d0477ca40d --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.3_responses.ipynb @@ -0,0 +1,364 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "cfe8b42c", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Core: 3. Responses\n", + "\n", + "This tutorial shows different options for setting responses.\n", + "\n", + "Here, [responses](../apiref/dff.script.responses.std_responses.rst)\n", + "that allow giving custom answers to users are shown.\n", + "\n", + "Let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f3793097", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:13.925985Z", + "iopub.status.busy": "2023-12-27T16:52:13.925765Z", + "iopub.status.idle": "2023-12-27T16:52:16.287210Z", + "shell.execute_reply": "2023-12-27T16:52:16.286404Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "23df1a1d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:16.290301Z", + "iopub.status.busy": "2023-12-27T16:52:16.289861Z", + "iopub.status.idle": "2023-12-27T16:52:17.010644Z", + "shell.execute_reply": "2023-12-27T16:52:17.010012Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import re\n", + "import random\n", + "\n", + "from dff.script import TRANSITIONS, RESPONSE, Context, Message\n", + "import dff.script.responses as rsp\n", + "import dff.script.conditions as cnd\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "f6b85042", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "The response can be set by Callable or *Message:\n", + "\n", + "* Callable objects. If the object is callable it must have a special signature:\n", + "\n", + " func(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Any\n", + "\n", + "* *Message objects. If the object is *Message\n", + " it will be returned by the agent as a response.\n", + "\n", + "\n", + "The functions to be used in the `toy_script` are declared here." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "03bd5a8e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:17.013794Z", + "iopub.status.busy": "2023-12-27T16:52:17.013485Z", + "iopub.status.idle": "2023-12-27T16:52:17.020070Z", + "shell.execute_reply": "2023-12-27T16:52:17.019415Z" + } + }, + "outputs": [], + "source": [ + "def cannot_talk_about_topic_response(\n", + " ctx: Context, _: Pipeline, *args, **kwargs\n", + ") -> Message:\n", + " request = ctx.last_request\n", + " if request is None or request.text is None:\n", + " topic = None\n", + " else:\n", + " topic_pattern = re.compile(r\"(.*talk about )(.*)\\.\")\n", + " topic = topic_pattern.findall(request.text)\n", + " topic = topic and topic[0] and topic[0][-1]\n", + " if topic:\n", + " return Message(text=f\"Sorry, I can not talk about {topic} now.\")\n", + " else:\n", + " return Message(text=\"Sorry, I can not talk about that now.\")\n", + "\n", + "\n", + "def upper_case_response(response: Message):\n", + " # wrapper for internal response function\n", + " def func(_: Context, __: Pipeline, *args, **kwargs) -> Message:\n", + " if response.text is not None:\n", + " response.text = response.text.upper()\n", + " return response\n", + "\n", + " return func\n", + "\n", + "\n", + "def fallback_trace_response(\n", + " ctx: Context, _: Pipeline, *args, **kwargs\n", + ") -> Message:\n", + " return Message(\n", + " misc={\n", + " \"previous_node\": list(ctx.labels.values())[-2],\n", + " \"last_request\": ctx.last_request,\n", + " }\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7b23dac4", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:17.022686Z", + "iopub.status.busy": "2023-12-27T16:52:17.022309Z", + "iopub.status.idle": "2023-12-27T16:52:17.033330Z", + "shell.execute_reply": "2023-12-27T16:52:17.032716Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"greeting_flow\": {\n", + " \"start_node\": { # This is an initial node,\n", + " # it doesn't need a `RESPONSE`.\n", + " RESPONSE: Message(),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " # If \"Hi\" == request of user then we make the transition\n", + " },\n", + " \"node1\": {\n", + " RESPONSE: rsp.choice(\n", + " [\n", + " Message(text=\"Hi, what is up?\"),\n", + " Message(text=\"Hello, how are you?\"),\n", + " ]\n", + " ),\n", + " # Random choice from candidate list.\n", + " TRANSITIONS: {\n", + " \"node2\": cnd.exact_match(Message(text=\"I'm fine, how are you?\"))\n", + " },\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(text=\"Good. What do you want to talk about?\"),\n", + " TRANSITIONS: {\n", + " \"node3\": cnd.exact_match(\n", + " Message(text=\"Let's talk about music.\")\n", + " )\n", + " },\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: cannot_talk_about_topic_response,\n", + " TRANSITIONS: {\n", + " \"node4\": cnd.exact_match(Message(text=\"Ok, goodbye.\"))\n", + " },\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: upper_case_response(Message(text=\"bye\")),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " \"fallback_node\": { # We get to this node\n", + " # if an error occurred while the agent was running.\n", + " RESPONSE: fallback_trace_response,\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " }\n", + "}\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (\n", + " Message(text=\"Hi\"),\n", + " Message(text=\"Hello, how are you?\"),\n", + " ), # start_node -> node1\n", + " (\n", + " Message(text=\"I'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"BYE\")), # node3 -> node4\n", + " (Message(text=\"Hi\"), Message(text=\"Hi, what is up?\")), # node4 -> node1\n", + " (\n", + " Message(text=\"stop\"),\n", + " Message(\n", + " misc={\n", + " \"previous_node\": (\"greeting_flow\", \"node1\"),\n", + " \"last_request\": Message(text=\"stop\"),\n", + " }\n", + " ),\n", + " ),\n", + " # node1 -> fallback_node\n", + " (\n", + " Message(text=\"one\"),\n", + " Message(\n", + " misc={\n", + " \"previous_node\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"last_request\": Message(text=\"one\"),\n", + " }\n", + " ),\n", + " ), # f_n->f_n\n", + " (\n", + " Message(text=\"help\"),\n", + " Message(\n", + " misc={\n", + " \"previous_node\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"last_request\": Message(text=\"help\"),\n", + " }\n", + " ),\n", + " ), # f_n->f_n\n", + " (\n", + " Message(text=\"nope\"),\n", + " Message(\n", + " misc={\n", + " \"previous_node\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"last_request\": Message(text=\"nope\"),\n", + " }\n", + " ),\n", + " ), # f_n->f_n\n", + " (\n", + " Message(text=\"Hi\"),\n", + " Message(text=\"Hello, how are you?\"),\n", + " ), # fallback_node -> node1\n", + " (\n", + " Message(text=\"I'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"BYE\")), # node3 -> node4\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "87d94e9f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:17.036289Z", + "iopub.status.busy": "2023-12-27T16:52:17.035799Z", + "iopub.status.idle": "2023-12-27T16:52:17.051005Z", + "shell.execute_reply": "2023-12-27T16:52:17.050420Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hello, how are you?'\n", + "(user) >>> text='I'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='BYE'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, what is up?'\n", + "(user) >>> text='stop'\n", + " (bot) <<< misc='{'previous_node': ('greeting_flow', 'node1'), 'last_request': {'text': 'stop'}}'\n", + "(user) >>> text='one'\n", + " (bot) <<< misc='{'previous_node': ('greeting_flow', 'fallback_node'), 'last_request': {'text': 'one'}}'\n", + "(user) >>> text='help'\n", + " (bot) <<< misc='{'previous_node': ('greeting_flow', 'fallback_node'), 'last_request': {'text': 'help'}}'\n", + "(user) >>> text='nope'\n", + " (bot) <<< misc='{'previous_node': ('greeting_flow', 'fallback_node'), 'last_request': {'text': 'nope'}}'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hello, how are you?'\n", + "(user) >>> text='I'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='BYE'\n" + ] + } + ], + "source": [ + "random.seed(31415) # predestination of choice\n", + "\n", + "\n", + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"greeting_flow\", \"start_node\"),\n", + " fallback_label=(\"greeting_flow\", \"fallback_node\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.4_transitions.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.4_transitions.ipynb new file mode 100644 index 0000000000..8c6a7f082c --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.4_transitions.ipynb @@ -0,0 +1,483 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "678b37b1", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "# Core: 4. Transitions\n", + "\n", + "This tutorial shows settings for transitions between flows and nodes.\n", + "\n", + "Here, [conditions](../apiref/dff.script.conditions.std_conditions.rst)\n", + "for transition between many different script steps are shown.\n", + "\n", + "Some of the destination steps can be set using\n", + "[labels](../apiref/dff.script.labels.std_labels.rst).\n", + "\n", + "First of all, let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "1d6b4cf0", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:18.908749Z", + "iopub.status.busy": "2023-12-27T16:52:18.908465Z", + "iopub.status.idle": "2023-12-27T16:52:21.307216Z", + "shell.execute_reply": "2023-12-27T16:52:21.306388Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a16b8ba6", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:21.310291Z", + "iopub.status.busy": "2023-12-27T16:52:21.309997Z", + "iopub.status.idle": "2023-12-27T16:52:22.014409Z", + "shell.execute_reply": "2023-12-27T16:52:22.013674Z" + } + }, + "outputs": [], + "source": [ + "import re\n", + "\n", + "from dff.script import TRANSITIONS, RESPONSE, Context, NodeLabel3Type, Message\n", + "import dff.script.conditions as cnd\n", + "import dff.script.labels as lbl\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "9327de62", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Let's define the functions with a special type of return value:\n", + "\n", + " NodeLabel3Type == tuple[str, str, float]\n", + "\n", + "which means that transition returns a `tuple`\n", + "with flow name, node name and priority." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "986877f1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:22.017822Z", + "iopub.status.busy": "2023-12-27T16:52:22.017357Z", + "iopub.status.idle": "2023-12-27T16:52:22.021533Z", + "shell.execute_reply": "2023-12-27T16:52:22.020901Z" + } + }, + "outputs": [], + "source": [ + "def greeting_flow_n2_transition(\n", + " _: Context, __: Pipeline, *args, **kwargs\n", + ") -> NodeLabel3Type:\n", + " return (\"greeting_flow\", \"node2\", 1.0)\n", + "\n", + "\n", + "def high_priority_node_transition(flow_label, label):\n", + " def transition(_: Context, __: Pipeline, *args, **kwargs) -> NodeLabel3Type:\n", + " return (flow_label, label, 2.0)\n", + "\n", + " return transition" + ] + }, + { + "cell_type": "markdown", + "id": "d3aaab5c", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Priority is needed to select a condition\n", + "in the situation where more than one condition is `True`.\n", + "All conditions in `TRANSITIONS` are being checked.\n", + "Of the set of `True` conditions,\n", + "the one that has the highest priority will be executed.\n", + "Of the set of `True` conditions with largest\n", + "priority the first met condition will be executed.\n", + "\n", + "Out of the box `dff.script.core.labels`\n", + "offers the following methods:\n", + "\n", + "* `lbl.repeat()` returns transition handler\n", + " which returns `NodeLabelType` to the last node,\n", + "\n", + "* `lbl.previous()` returns transition handler\n", + " which returns `NodeLabelType` to the previous node,\n", + "\n", + "* `lbl.to_start()` returns transition handler\n", + " which returns `NodeLabelType` to the start node,\n", + "\n", + "* `lbl.to_fallback()` returns transition\n", + " handler which returns `NodeLabelType` to the fallback node,\n", + "\n", + "* `lbl.forward()` returns transition handler\n", + " which returns `NodeLabelType` to the forward node,\n", + "\n", + "* `lbl.backward()` returns transition handler\n", + " which returns `NodeLabelType` to the backward node.\n", + "\n", + "There are three flows here: `global_flow`, `greeting_flow`, `music_flow`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f5615365", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:22.024036Z", + "iopub.status.busy": "2023-12-27T16:52:22.023844Z", + "iopub.status.idle": "2023-12-27T16:52:22.042030Z", + "shell.execute_reply": "2023-12-27T16:52:22.041373Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"global_flow\": {\n", + " \"start_node\": { # This is an initial node,\n", + " # it doesn't need a `RESPONSE`.\n", + " RESPONSE: Message(),\n", + " TRANSITIONS: {\n", + " (\"music_flow\", \"node1\"): cnd.regexp(\n", + " r\"talk about music\"\n", + " ), # first check\n", + " (\"greeting_flow\", \"node1\"): cnd.regexp(\n", + " r\"hi|hello\", re.IGNORECASE\n", + " ), # second check\n", + " \"fallback_node\": cnd.true(), # third check\n", + " # \"fallback_node\" is equivalent to\n", + " # (\"global_flow\", \"fallback_node\").\n", + " },\n", + " },\n", + " \"fallback_node\": { # We get to this node if\n", + " # an error occurred while the agent was running.\n", + " RESPONSE: Message(text=\"Ooops\"),\n", + " TRANSITIONS: {\n", + " (\"music_flow\", \"node1\"): cnd.regexp(\n", + " r\"talk about music\"\n", + " ), # first check\n", + " (\"greeting_flow\", \"node1\"): cnd.regexp(\n", + " r\"hi|hello\", re.IGNORECASE\n", + " ), # second check\n", + " lbl.previous(): cnd.regexp(\n", + " r\"previous\", re.IGNORECASE\n", + " ), # third check\n", + " # lbl.previous() is equivalent\n", + " # to (\"previous_flow\", \"previous_node\")\n", + " lbl.repeat(): cnd.true(), # fourth check\n", + " # lbl.repeat() is equivalent to (\"global_flow\", \"fallback_node\")\n", + " },\n", + " },\n", + " },\n", + " \"greeting_flow\": {\n", + " \"node1\": {\n", + " RESPONSE: Message(text=\"Hi, how are you?\"),\n", + " # When the agent goes to node1, we return \"Hi, how are you?\"\n", + " TRANSITIONS: {\n", + " (\n", + " \"global_flow\",\n", + " \"fallback_node\",\n", + " 0.1,\n", + " ): cnd.true(), # second check\n", + " \"node2\": cnd.regexp(r\"how are you\"), # first check\n", + " # \"node2\" is equivalent to (\"greeting_flow\", \"node2\", 1.0)\n", + " },\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(text=\"Good. What do you want to talk about?\"),\n", + " TRANSITIONS: {\n", + " lbl.to_fallback(0.1): cnd.true(), # third check\n", + " # lbl.to_fallback(0.1) is equivalent\n", + " # to (\"global_flow\", \"fallback_node\", 0.1)\n", + " lbl.forward(0.5): cnd.regexp(r\"talk about\"), # second check\n", + " # lbl.forward(0.5) is equivalent\n", + " # to (\"greeting_flow\", \"node3\", 0.5)\n", + " (\"music_flow\", \"node1\"): cnd.regexp(\n", + " r\"talk about music\"\n", + " ), # first check\n", + " # (\"music_flow\", \"node1\") is equivalent\n", + " # to (\"music_flow\", \"node1\", 1.0)\n", + " lbl.previous(): cnd.regexp(\n", + " r\"previous\", re.IGNORECASE\n", + " ), # third check\n", + " },\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(text=\"Sorry, I can not talk about that now.\"),\n", + " TRANSITIONS: {lbl.forward(): cnd.regexp(r\"bye\")},\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: Message(text=\"Bye\"),\n", + " TRANSITIONS: {\n", + " \"node1\": cnd.regexp(r\"hi|hello\", re.IGNORECASE), # first check\n", + " lbl.to_fallback(): cnd.true(), # second check\n", + " },\n", + " },\n", + " },\n", + " \"music_flow\": {\n", + " \"node1\": {\n", + " RESPONSE: Message(\n", + " text=\"I love `System of a Down` group, \"\n", + " \"would you like to talk about it?\"\n", + " ),\n", + " TRANSITIONS: {\n", + " lbl.forward(): cnd.regexp(r\"yes|yep|ok\", re.IGNORECASE),\n", + " lbl.to_fallback(): cnd.true(),\n", + " },\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " ),\n", + " TRANSITIONS: {\n", + " lbl.forward(): cnd.regexp(r\"next\", re.IGNORECASE),\n", + " lbl.repeat(): cnd.regexp(r\"repeat\", re.IGNORECASE),\n", + " lbl.to_fallback(): cnd.true(),\n", + " },\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(\n", + " text=\"The band achieved commercial success \"\n", + " \"with the release of five studio albums.\"\n", + " ),\n", + " TRANSITIONS: {\n", + " lbl.forward(): cnd.regexp(r\"next\", re.IGNORECASE),\n", + " lbl.backward(): cnd.regexp(r\"back\", re.IGNORECASE),\n", + " lbl.repeat(): cnd.regexp(r\"repeat\", re.IGNORECASE),\n", + " lbl.to_fallback(): cnd.true(),\n", + " },\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: Message(text=\"That's all what I know.\"),\n", + " TRANSITIONS: {\n", + " greeting_flow_n2_transition: cnd.regexp(\n", + " r\"next\", re.IGNORECASE\n", + " ), # second check\n", + " high_priority_node_transition(\n", + " \"greeting_flow\", \"node4\"\n", + " ): cnd.regexp(\n", + " r\"next time\", re.IGNORECASE\n", + " ), # first check\n", + " lbl.to_fallback(): cnd.true(), # third check\n", + " },\n", + " },\n", + " },\n", + "}\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (Message(text=\"hi\"), Message(text=\"Hi, how are you?\")),\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (\n", + " Message(text=\"talk about music.\"),\n", + " Message(\n", + " text=\"I love `System of a Down` group, \"\n", + " \"would you like to talk about it?\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"yes\"),\n", + " Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"next\"),\n", + " Message(\n", + " text=\"The band achieved commercial success \"\n", + " \"with the release of five studio albums.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"back\"),\n", + " Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"repeat\"),\n", + " Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"next\"),\n", + " Message(\n", + " text=\"The band achieved commercial success \"\n", + " \"with the release of five studio albums.\"\n", + " ),\n", + " ),\n", + " (Message(text=\"next\"), Message(text=\"That's all what I know.\")),\n", + " (\n", + " Message(text=\"next\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (Message(text=\"previous\"), Message(text=\"That's all what I know.\")),\n", + " (Message(text=\"next time\"), Message(text=\"Bye\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"previous\"), Message(text=\"Bye\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"nope\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"hi\"), Message(text=\"Hi, how are you?\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"previous\"), Message(text=\"Hi, how are you?\")),\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (\n", + " Message(text=\"let's talk about something.\"),\n", + " Message(text=\"Sorry, I can not talk about that now.\"),\n", + " ),\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"Bye\")),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "791ec15b", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:22.044555Z", + "iopub.status.busy": "2023-12-27T16:52:22.044181Z", + "iopub.status.idle": "2023-12-27T16:52:22.068809Z", + "shell.execute_reply": "2023-12-27T16:52:22.068203Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='talk about music.'\n", + " (bot) <<< text='I love `System of a Down` group, would you like to talk about it?'\n", + "(user) >>> text='yes'\n", + " (bot) <<< text='System of a Down is an Armenian-American heavy metal band formed in 1994.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='The band achieved commercial success with the release of five studio albums.'\n", + "(user) >>> text='back'\n", + " (bot) <<< text='System of a Down is an Armenian-American heavy metal band formed in 1994.'\n", + "(user) >>> text='repeat'\n", + " (bot) <<< text='System of a Down is an Armenian-American heavy metal band formed in 1994.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='The band achieved commercial success with the release of five studio albums.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='That's all what I know.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='previous'\n", + " (bot) <<< text='That's all what I know.'\n", + "(user) >>> text='next time'\n", + " (bot) <<< text='Bye'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='previous'\n", + " (bot) <<< text='Bye'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='nope'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='previous'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='let's talk about something.'\n", + " (bot) <<< text='Sorry, I can not talk about that now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='Bye'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"global_flow\", \"start_node\"),\n", + " fallback_label=(\"global_flow\", \"fallback_node\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.5_global_transitions.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.5_global_transitions.ipynb new file mode 100644 index 0000000000..af80d5bbfd --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.5_global_transitions.ipynb @@ -0,0 +1,378 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5591176d", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "# Core: 5. Global transitions\n", + "\n", + "This tutorial shows the global setting of transitions.\n", + "\n", + "Here, global [conditions](../apiref/dff.script.conditions.std_conditions.rst)\n", + "for default transition between many different script steps are shown.\n", + "\n", + "First of all, let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "af0c88e9", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:23.809542Z", + "iopub.status.busy": "2023-12-27T16:52:23.809105Z", + "iopub.status.idle": "2023-12-27T16:52:26.275399Z", + "shell.execute_reply": "2023-12-27T16:52:26.274555Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "26cedb91", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:26.278503Z", + "iopub.status.busy": "2023-12-27T16:52:26.278042Z", + "iopub.status.idle": "2023-12-27T16:52:26.991393Z", + "shell.execute_reply": "2023-12-27T16:52:26.990674Z" + } + }, + "outputs": [], + "source": [ + "import re\n", + "\n", + "from dff.script import GLOBAL, TRANSITIONS, RESPONSE, Message\n", + "import dff.script.conditions as cnd\n", + "import dff.script.labels as lbl\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "347debad", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "The keyword `GLOBAL` is used to define a global node.\n", + "There can be only one global node in a script.\n", + "The value that corresponds to this key has the\n", + "`dict` type with the same keywords as regular nodes.\n", + "The global node is defined above the flow level as opposed to regular nodes.\n", + "This node allows to define default global values for all nodes.\n", + "\n", + "There are `GLOBAL` node and three flows:\n", + "`global_flow`, `greeting_flow`, `music_flow`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f2e829c1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:26.994802Z", + "iopub.status.busy": "2023-12-27T16:52:26.994342Z", + "iopub.status.idle": "2023-12-27T16:52:27.011884Z", + "shell.execute_reply": "2023-12-27T16:52:27.011241Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " GLOBAL: {\n", + " TRANSITIONS: {\n", + " (\"greeting_flow\", \"node1\", 1.1): cnd.regexp(\n", + " r\"\\b(hi|hello)\\b\", re.I\n", + " ), # first check\n", + " (\"music_flow\", \"node1\", 1.1): cnd.regexp(\n", + " r\"talk about music\"\n", + " ), # second check\n", + " lbl.to_fallback(0.1): cnd.true(), # fifth check\n", + " lbl.forward(): cnd.all(\n", + " [\n", + " cnd.regexp(r\"next\\b\"),\n", + " cnd.has_last_labels(\n", + " labels=[(\"music_flow\", i) for i in [\"node2\", \"node3\"]]\n", + " ),\n", + " ] # third check\n", + " ),\n", + " lbl.repeat(0.2): cnd.all(\n", + " [\n", + " cnd.regexp(r\"repeat\", re.I),\n", + " cnd.negation(\n", + " cnd.has_last_labels(flow_labels=[\"global_flow\"])\n", + " ),\n", + " ] # fourth check\n", + " ),\n", + " }\n", + " },\n", + " \"global_flow\": {\n", + " \"start_node\": {\n", + " RESPONSE: Message()\n", + " }, # This is an initial node, it doesn't need a `RESPONSE`.\n", + " \"fallback_node\": { # We get to this node\n", + " # if an error occurred while the agent was running.\n", + " RESPONSE: Message(text=\"Ooops\"),\n", + " TRANSITIONS: {lbl.previous(): cnd.regexp(r\"previous\", re.I)},\n", + " # lbl.previous() is equivalent to\n", + " # (\"previous_flow\", \"previous_node\", 1.0)\n", + " },\n", + " },\n", + " \"greeting_flow\": {\n", + " \"node1\": {\n", + " RESPONSE: Message(text=\"Hi, how are you?\"),\n", + " TRANSITIONS: {\"node2\": cnd.regexp(r\"how are you\")},\n", + " # \"node2\" is equivalent to (\"greeting_flow\", \"node2\", 1.0)\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(text=\"Good. What do you want to talk about?\"),\n", + " TRANSITIONS: {\n", + " lbl.forward(0.5): cnd.regexp(r\"talk about\"),\n", + " # lbl.forward(0.5) is equivalent to\n", + " # (\"greeting_flow\", \"node3\", 0.5)\n", + " lbl.previous(): cnd.regexp(r\"previous\", re.I),\n", + " },\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(text=\"Sorry, I can not talk about that now.\"),\n", + " TRANSITIONS: {lbl.forward(): cnd.regexp(r\"bye\")},\n", + " },\n", + " \"node4\": {RESPONSE: Message(text=\"bye\")},\n", + " # Only the global transitions setting are used in this node.\n", + " },\n", + " \"music_flow\": {\n", + " \"node1\": {\n", + " RESPONSE: Message(\n", + " text=\"I love `System of a Down` group, \"\n", + " \"would you like to talk about it?\"\n", + " ),\n", + " TRANSITIONS: {lbl.forward(): cnd.regexp(r\"yes|yep|ok\", re.I)},\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " )\n", + " # Only the global transitions setting are used in this node.\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(\n", + " text=\"The band achieved commercial success \"\n", + " \"with the release of five studio albums.\"\n", + " ),\n", + " TRANSITIONS: {lbl.backward(): cnd.regexp(r\"back\", re.I)},\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: Message(text=\"That's all what I know.\"),\n", + " TRANSITIONS: {\n", + " (\"greeting_flow\", \"node4\"): cnd.regexp(r\"next time\", re.I),\n", + " (\"greeting_flow\", \"node2\"): cnd.regexp(r\"next\", re.I),\n", + " },\n", + " },\n", + " },\n", + "}\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (Message(text=\"hi\"), Message(text=\"Hi, how are you?\")),\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (\n", + " Message(text=\"talk about music.\"),\n", + " Message(\n", + " text=\"I love `System of a Down` group, \"\n", + " \"would you like to talk about it?\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"yes\"),\n", + " Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"next\"),\n", + " Message(\n", + " text=\"The band achieved commercial success \"\n", + " \"with the release of five studio albums.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"back\"),\n", + " Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"repeat\"),\n", + " Message(\n", + " text=\"System of a Down is \"\n", + " \"an Armenian-American heavy metal band formed in 1994.\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"next\"),\n", + " Message(\n", + " text=\"The band achieved commercial success \"\n", + " \"with the release of five studio albums.\"\n", + " ),\n", + " ),\n", + " (Message(text=\"next\"), Message(text=\"That's all what I know.\")),\n", + " (\n", + " Message(text=\"next\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (Message(text=\"previous\"), Message(text=\"That's all what I know.\")),\n", + " (Message(text=\"next time\"), Message(text=\"bye\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"previous\"), Message(text=\"bye\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"nope\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"hi\"), Message(text=\"Hi, how are you?\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"previous\"), Message(text=\"Hi, how are you?\")),\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (\n", + " Message(text=\"let's talk about something.\"),\n", + " Message(text=\"Sorry, I can not talk about that now.\"),\n", + " ),\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"bye\")),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e06d3be4", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:27.014531Z", + "iopub.status.busy": "2023-12-27T16:52:27.014170Z", + "iopub.status.idle": "2023-12-27T16:52:27.038847Z", + "shell.execute_reply": "2023-12-27T16:52:27.038150Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='talk about music.'\n", + " (bot) <<< text='I love `System of a Down` group, would you like to talk about it?'\n", + "(user) >>> text='yes'\n", + " (bot) <<< text='System of a Down is an Armenian-American heavy metal band formed in 1994.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='The band achieved commercial success with the release of five studio albums.'\n", + "(user) >>> text='back'\n", + " (bot) <<< text='System of a Down is an Armenian-American heavy metal band formed in 1994.'\n", + "(user) >>> text='repeat'\n", + " (bot) <<< text='System of a Down is an Armenian-American heavy metal band formed in 1994.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='The band achieved commercial success with the release of five studio albums.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='That's all what I know.'\n", + "(user) >>> text='next'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='previous'\n", + " (bot) <<< text='That's all what I know.'\n", + "(user) >>> text='next time'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='previous'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='nope'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='previous'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='let's talk about something.'\n", + " (bot) <<< text='Sorry, I can not talk about that now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"global_flow\", \"start_node\"),\n", + " fallback_label=(\"global_flow\", \"fallback_node\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.6_context_serialization.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.6_context_serialization.ipynb new file mode 100644 index 0000000000..361f329c8a --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.6_context_serialization.ipynb @@ -0,0 +1,239 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c1980dff", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Core: 6. Context serialization\n", + "\n", + "This tutorial shows context serialization.\n", + "First of all, let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "22be9e70", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:28.874674Z", + "iopub.status.busy": "2023-12-27T16:52:28.874490Z", + "iopub.status.idle": "2023-12-27T16:52:31.457138Z", + "shell.execute_reply": "2023-12-27T16:52:31.456340Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "15854fd3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:31.460016Z", + "iopub.status.busy": "2023-12-27T16:52:31.459728Z", + "iopub.status.idle": "2023-12-27T16:52:32.168881Z", + "shell.execute_reply": "2023-12-27T16:52:32.168240Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import logging\n", + "\n", + "from dff.script import TRANSITIONS, RESPONSE, Context, Message\n", + "import dff.script.conditions as cnd\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "17ec3658", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "This function returns the user request number." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "329261a3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:32.172318Z", + "iopub.status.busy": "2023-12-27T16:52:32.171718Z", + "iopub.status.idle": "2023-12-27T16:52:32.175173Z", + "shell.execute_reply": "2023-12-27T16:52:32.174629Z" + } + }, + "outputs": [], + "source": [ + "def response_handler(ctx: Context, _: Pipeline, *args, **kwargs) -> Message:\n", + " return Message(text=f\"answer {len(ctx.requests)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "2bf8da2d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:32.177537Z", + "iopub.status.busy": "2023-12-27T16:52:32.177276Z", + "iopub.status.idle": "2023-12-27T16:52:32.181731Z", + "shell.execute_reply": "2023-12-27T16:52:32.181174Z" + } + }, + "outputs": [], + "source": [ + "# a dialog script\n", + "toy_script = {\n", + " \"flow_start\": {\n", + " \"node_start\": {\n", + " RESPONSE: response_handler,\n", + " TRANSITIONS: {(\"flow_start\", \"node_start\"): cnd.true()},\n", + " }\n", + " }\n", + "}\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (Message(text=\"hi\"), Message(text=\"answer 1\")),\n", + " (Message(text=\"how are you?\"), Message(text=\"answer 2\")),\n", + " (Message(text=\"ok\"), Message(text=\"answer 3\")),\n", + " (Message(text=\"good\"), Message(text=\"answer 4\")),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "107a9f4e", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "Draft function that performs serialization." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "edf54b4a", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:32.184321Z", + "iopub.status.busy": "2023-12-27T16:52:32.183921Z", + "iopub.status.idle": "2023-12-27T16:52:32.188367Z", + "shell.execute_reply": "2023-12-27T16:52:32.187774Z" + } + }, + "outputs": [], + "source": [ + "def process_response(ctx: Context):\n", + " ctx_json = ctx.model_dump_json()\n", + " if isinstance(ctx_json, str):\n", + " logging.info(\"context serialized to json str\")\n", + " else:\n", + " raise Exception(f\"ctx={ctx_json} has to be serialized to json string\")\n", + "\n", + " ctx_dict = ctx.model_dump()\n", + " if isinstance(ctx_dict, dict):\n", + " logging.info(\"context serialized to dict\")\n", + " else:\n", + " raise Exception(f\"ctx={ctx_dict} has to be serialized to dict\")\n", + "\n", + " if not isinstance(ctx, Context):\n", + " raise Exception(f\"ctx={ctx} has to have Context type\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "cff36838", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:32.190766Z", + "iopub.status.busy": "2023-12-27T16:52:32.190418Z", + "iopub.status.idle": "2023-12-27T16:52:32.199726Z", + "shell.execute_reply": "2023-12-27T16:52:32.199032Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='hi'\n", + " (bot) <<< text='answer 1'\n", + "(user) >>> text='how are you?'\n", + " (bot) <<< text='answer 2'\n", + "(user) >>> text='ok'\n", + " (bot) <<< text='answer 3'\n", + "(user) >>> text='good'\n", + " (bot) <<< text='answer 4'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"flow_start\", \"node_start\"),\n", + " post_services=[process_response],\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.7_pre_response_processing.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.7_pre_response_processing.ipynb new file mode 100644 index 0000000000..e08dbaf87b --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.7_pre_response_processing.ipynb @@ -0,0 +1,709 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a703e238", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Core: 7. Pre-response processing\n", + "\n", + "This tutorial shows pre-response processing feature.\n", + "\n", + "Here, [PRE_RESPONSE_PROCESSING](../apiref/dff.script.core.keywords.rst#dff.script.core.keywords.Keywords.PRE_RESPONSE_PROCESSING)\n", + "is demonstrated which can be used for additional context processing before response handlers.\n", + "\n", + "There are also some other [Keywords](../apiref/dff.script.core.keywords.rst#dff.script.core.keywords.Keywords)\n", + "worth attention used in this tutorial.\n", + "\n", + "First of all, let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "dc2641f7", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:33.960546Z", + "iopub.status.busy": "2023-12-27T16:52:33.960054Z", + "iopub.status.idle": "2023-12-27T16:52:36.318036Z", + "shell.execute_reply": "2023-12-27T16:52:36.317060Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "13cf6c1f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:36.322021Z", + "iopub.status.busy": "2023-12-27T16:52:36.321552Z", + "iopub.status.idle": "2023-12-27T16:52:37.136154Z", + "shell.execute_reply": "2023-12-27T16:52:37.135482Z" + } + }, + "outputs": [], + "source": [ + "from dff.script import (\n", + " GLOBAL,\n", + " LOCAL,\n", + " RESPONSE,\n", + " TRANSITIONS,\n", + " PRE_RESPONSE_PROCESSING,\n", + " Context,\n", + " Message,\n", + ")\n", + "import dff.script.labels as lbl\n", + "import dff.script.conditions as cnd\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "925be2b4", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:37.139484Z", + "iopub.status.busy": "2023-12-27T16:52:37.138845Z", + "iopub.status.idle": "2023-12-27T16:52:37.143094Z", + "shell.execute_reply": "2023-12-27T16:52:37.142442Z" + } + }, + "outputs": [], + "source": [ + "def add_prefix(prefix):\n", + " def add_prefix_processing(\n", + " ctx: Context, _: Pipeline, *args, **kwargs\n", + " ) -> Context:\n", + " processed_node = ctx.current_node\n", + " processed_node.response = Message(\n", + " text=f\"{prefix}: {processed_node.response.text}\"\n", + " )\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " return ctx\n", + "\n", + " return add_prefix_processing" + ] + }, + { + "cell_type": "markdown", + "id": "d3d4fe32", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "`PRE_RESPONSE_PROCESSING` is a keyword that\n", + "can be used in `GLOBAL`, `LOCAL` or nodes." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "2f33d805", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:37.145918Z", + "iopub.status.busy": "2023-12-27T16:52:37.145428Z", + "iopub.status.idle": "2023-12-27T16:52:37.153722Z", + "shell.execute_reply": "2023-12-27T16:52:37.153101Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"root\": {\n", + " \"start\": {\n", + " RESPONSE: Message(),\n", + " TRANSITIONS: {(\"flow\", \"step_0\"): cnd.true()},\n", + " },\n", + " \"fallback\": {RESPONSE: Message(text=\"the end\")},\n", + " },\n", + " GLOBAL: {\n", + " PRE_RESPONSE_PROCESSING: {\n", + " \"proc_name_1\": add_prefix(\"l1_global\"),\n", + " \"proc_name_2\": add_prefix(\"l2_global\"),\n", + " }\n", + " },\n", + " \"flow\": {\n", + " LOCAL: {\n", + " PRE_RESPONSE_PROCESSING: {\n", + " \"proc_name_2\": add_prefix(\"l2_local\"),\n", + " \"proc_name_3\": add_prefix(\"l3_local\"),\n", + " }\n", + " },\n", + " \"step_0\": {\n", + " RESPONSE: Message(text=\"first\"),\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_1\": {\n", + " PRE_RESPONSE_PROCESSING: {\"proc_name_1\": add_prefix(\"l1_step_1\")},\n", + " RESPONSE: Message(text=\"second\"),\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_2\": {\n", + " PRE_RESPONSE_PROCESSING: {\"proc_name_2\": add_prefix(\"l2_step_2\")},\n", + " RESPONSE: Message(text=\"third\"),\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_3\": {\n", + " PRE_RESPONSE_PROCESSING: {\"proc_name_3\": add_prefix(\"l3_step_3\")},\n", + " RESPONSE: Message(text=\"fourth\"),\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_4\": {\n", + " PRE_RESPONSE_PROCESSING: {\"proc_name_4\": add_prefix(\"l4_step_4\")},\n", + " RESPONSE: Message(text=\"fifth\"),\n", + " TRANSITIONS: {\"step_0\": cnd.true()},\n", + " },\n", + " },\n", + "}\n", + "\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (Message(), Message(text=\"l3_local: l2_local: l1_global: first\")),\n", + " (Message(), Message(text=\"l3_local: l2_local: l1_step_1: second\")),\n", + " (Message(), Message(text=\"l3_local: l2_step_2: l1_global: third\")),\n", + " (Message(), Message(text=\"l3_step_3: l2_local: l1_global: fourth\")),\n", + " (\n", + " Message(),\n", + " Message(text=\"l4_step_4: l3_local: l2_local: l1_global: fifth\"),\n", + " ),\n", + " (Message(), Message(text=\"l3_local: l2_local: l1_global: first\")),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0711adda", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:37.156338Z", + "iopub.status.busy": "2023-12-27T16:52:37.155965Z", + "iopub.status.idle": "2023-12-27T16:52:37.184051Z", + "shell.execute_reply": "2023-12-27T16:52:37.183390Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=.add_prefix_processing at 0x7f6c16079d30>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_2 and processing_func=.add_prefix_processing at 0x7f6c160044c0>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_3 and processing_func=.add_prefix_processing at 0x7f6c16004550>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=.add_prefix_processing at 0x7f6c16004700>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_2 and processing_func=.add_prefix_processing at 0x7f6c160044c0>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_3 and processing_func=.add_prefix_processing at 0x7f6c16004550>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=.add_prefix_processing at 0x7f6c16079d30>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_2 and processing_func=.add_prefix_processing at 0x7f6c160048b0>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_3 and processing_func=.add_prefix_processing at 0x7f6c16004550>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=.add_prefix_processing at 0x7f6c16079d30>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_2 and processing_func=.add_prefix_processing at 0x7f6c160044c0>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_3 and processing_func=.add_prefix_processing at 0x7f6c16004a60>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=.add_prefix_processing at 0x7f6c16079d30>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_2 and processing_func=.add_prefix_processing at 0x7f6c160044c0>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_3 and processing_func=.add_prefix_processing at 0x7f6c16004550>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_4 and processing_func=.add_prefix_processing at 0x7f6c16004c10>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=.add_prefix_processing at 0x7f6c16079d30>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_2 and processing_func=.add_prefix_processing at 0x7f6c160044c0>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_3 and processing_func=.add_prefix_processing at 0x7f6c16004550>\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_21612/562700550.py\", line 9, in add_prefix_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> \n", + " (bot) <<< text='l3_local: l2_local: l1_global: first'\n", + "(user) >>> \n", + " (bot) <<< text='l3_local: l2_local: l1_step_1: second'\n", + "(user) >>> \n", + " (bot) <<< text='l3_local: l2_step_2: l1_global: third'\n", + "(user) >>> \n", + " (bot) <<< text='l3_step_3: l2_local: l1_global: fourth'\n", + "(user) >>> \n", + " (bot) <<< text='l4_step_4: l3_local: l2_local: l1_global: fifth'\n", + "(user) >>> \n", + " (bot) <<< text='l3_local: l2_local: l1_global: first'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"root\", \"start\"),\n", + " fallback_label=(\"root\", \"fallback\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.8_misc.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.8_misc.ipynb new file mode 100644 index 0000000000..3d89e6a007 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.8_misc.ipynb @@ -0,0 +1,299 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f08c12e6", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Core: 8. Misc\n", + "\n", + "This tutorial shows `MISC` (miscellaneous) keyword usage.\n", + "\n", + "See [MISC](../apiref/dff.script.core.keywords.rst#dff.script.core.keywords.Keywords.MISC)\n", + "for more information.\n", + "\n", + "First of all, let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "7a95c475", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:39.098646Z", + "iopub.status.busy": "2023-12-27T16:52:39.098436Z", + "iopub.status.idle": "2023-12-27T16:52:41.405256Z", + "shell.execute_reply": "2023-12-27T16:52:41.404465Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "71658d45", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:41.408501Z", + "iopub.status.busy": "2023-12-27T16:52:41.408011Z", + "iopub.status.idle": "2023-12-27T16:52:42.163158Z", + "shell.execute_reply": "2023-12-27T16:52:42.162320Z" + } + }, + "outputs": [], + "source": [ + "from dff.script import (\n", + " GLOBAL,\n", + " LOCAL,\n", + " RESPONSE,\n", + " TRANSITIONS,\n", + " MISC,\n", + " Context,\n", + " Message,\n", + ")\n", + "import dff.script.labels as lbl\n", + "import dff.script.conditions as cnd\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "bf4598eb", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:42.167124Z", + "iopub.status.busy": "2023-12-27T16:52:42.166751Z", + "iopub.status.idle": "2023-12-27T16:52:42.171972Z", + "shell.execute_reply": "2023-12-27T16:52:42.171049Z" + } + }, + "outputs": [], + "source": [ + "def custom_response(ctx: Context, _: Pipeline, *args, **kwargs) -> Message:\n", + " if ctx.validation:\n", + " return Message()\n", + " current_node = ctx.current_node\n", + " return Message(\n", + " text=f\"ctx.last_label={ctx.last_label}: \"\n", + " f\"current_node.misc={current_node.misc}\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "14da3365", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:42.175009Z", + "iopub.status.busy": "2023-12-27T16:52:42.174552Z", + "iopub.status.idle": "2023-12-27T16:52:42.184359Z", + "shell.execute_reply": "2023-12-27T16:52:42.183660Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"root\": {\n", + " \"start\": {\n", + " RESPONSE: Message(),\n", + " TRANSITIONS: {(\"flow\", \"step_0\"): cnd.true()},\n", + " },\n", + " \"fallback\": {RESPONSE: Message(text=\"the end\")},\n", + " },\n", + " GLOBAL: {\n", + " MISC: {\n", + " \"var1\": \"global_data\",\n", + " \"var2\": \"global_data\",\n", + " \"var3\": \"global_data\",\n", + " }\n", + " },\n", + " \"flow\": {\n", + " LOCAL: {\n", + " MISC: {\n", + " \"var2\": \"rewrite_by_local\",\n", + " \"var3\": \"rewrite_by_local\",\n", + " }\n", + " },\n", + " \"step_0\": {\n", + " MISC: {\"var3\": \"info_of_step_0\"},\n", + " RESPONSE: custom_response,\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_1\": {\n", + " MISC: {\"var3\": \"info_of_step_1\"},\n", + " RESPONSE: custom_response,\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_2\": {\n", + " MISC: {\"var3\": \"info_of_step_2\"},\n", + " RESPONSE: custom_response,\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_3\": {\n", + " MISC: {\"var3\": \"info_of_step_3\"},\n", + " RESPONSE: custom_response,\n", + " TRANSITIONS: {lbl.forward(): cnd.true()},\n", + " },\n", + " \"step_4\": {\n", + " MISC: {\"var3\": \"info_of_step_4\"},\n", + " RESPONSE: custom_response,\n", + " TRANSITIONS: {\"step_0\": cnd.true()},\n", + " },\n", + " },\n", + "}\n", + "\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (\n", + " Message(),\n", + " Message(\n", + " text=\"ctx.last_label=('flow', 'step_0'): current_node.misc=\"\n", + " \"{'var1': 'global_data', \"\n", + " \"'var2': 'rewrite_by_local', \"\n", + " \"'var3': 'info_of_step_0'}\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(),\n", + " Message(\n", + " text=\"ctx.last_label=('flow', 'step_1'): current_node.misc=\"\n", + " \"{'var1': 'global_data', \"\n", + " \"'var2': 'rewrite_by_local', \"\n", + " \"'var3': 'info_of_step_1'}\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(),\n", + " Message(\n", + " text=\"ctx.last_label=('flow', 'step_2'): current_node.misc=\"\n", + " \"{'var1': 'global_data', \"\n", + " \"'var2': 'rewrite_by_local', \"\n", + " \"'var3': 'info_of_step_2'}\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(),\n", + " Message(\n", + " text=\"ctx.last_label=('flow', 'step_3'): current_node.misc=\"\n", + " \"{'var1': 'global_data', \"\n", + " \"'var2': 'rewrite_by_local', \"\n", + " \"'var3': 'info_of_step_3'}\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(),\n", + " Message(\n", + " text=\"ctx.last_label=('flow', 'step_4'): current_node.misc=\"\n", + " \"{'var1': 'global_data', \"\n", + " \"'var2': 'rewrite_by_local', \"\n", + " \"'var3': 'info_of_step_4'}\"\n", + " ),\n", + " ),\n", + " (\n", + " Message(),\n", + " Message(\n", + " text=\"ctx.last_label=('flow', 'step_0'): current_node.misc=\"\n", + " \"{'var1': 'global_data', \"\n", + " \"'var2': 'rewrite_by_local', \"\n", + " \"'var3': 'info_of_step_0'}\"\n", + " ),\n", + " ),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "bd520ce4", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:42.187608Z", + "iopub.status.busy": "2023-12-27T16:52:42.186990Z", + "iopub.status.idle": "2023-12-27T16:52:42.201461Z", + "shell.execute_reply": "2023-12-27T16:52:42.200714Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> \n", + " (bot) <<< text='ctx.last_label=('flow', 'step_0'): current_node.misc={'var1': 'global_data', 'var2': 'rewrite_by_local', 'var3': 'info_of_step_0'}'\n", + "(user) >>> \n", + " (bot) <<< text='ctx.last_label=('flow', 'step_1'): current_node.misc={'var1': 'global_data', 'var2': 'rewrite_by_local', 'var3': 'info_of_step_1'}'\n", + "(user) >>> \n", + " (bot) <<< text='ctx.last_label=('flow', 'step_2'): current_node.misc={'var1': 'global_data', 'var2': 'rewrite_by_local', 'var3': 'info_of_step_2'}'\n", + "(user) >>> \n", + " (bot) <<< text='ctx.last_label=('flow', 'step_3'): current_node.misc={'var1': 'global_data', 'var2': 'rewrite_by_local', 'var3': 'info_of_step_3'}'\n", + "(user) >>> \n", + " (bot) <<< text='ctx.last_label=('flow', 'step_4'): current_node.misc={'var1': 'global_data', 'var2': 'rewrite_by_local', 'var3': 'info_of_step_4'}'\n", + "(user) >>> \n", + " (bot) <<< text='ctx.last_label=('flow', 'step_0'): current_node.misc={'var1': 'global_data', 'var2': 'rewrite_by_local', 'var3': 'info_of_step_0'}'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"root\", \"start\"),\n", + " fallback_label=(\"root\", \"fallback\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.core.9_pre_transitions_processing.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.core.9_pre_transitions_processing.ipynb new file mode 100644 index 0000000000..5b41863c06 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.core.9_pre_transitions_processing.ipynb @@ -0,0 +1,351 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "39aceda9", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Core: 9. Pre-transitions processing\n", + "\n", + "This tutorial shows pre-transitions processing feature.\n", + "\n", + "Here, [PRE_TRANSITIONS_PROCESSING](../apiref/dff.script.core.keywords.rst#dff.script.core.keywords.Keywords.PRE_TRANSITIONS_PROCESSING)\n", + "is demonstrated which can be used for additional context\n", + "processing before transitioning to the next step.\n", + "\n", + "First of all, let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "66b1f9c6", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:43.863365Z", + "iopub.status.busy": "2023-12-27T16:52:43.863168Z", + "iopub.status.idle": "2023-12-27T16:52:46.152417Z", + "shell.execute_reply": "2023-12-27T16:52:46.151390Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5a11968b", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:46.156363Z", + "iopub.status.busy": "2023-12-27T16:52:46.155808Z", + "iopub.status.idle": "2023-12-27T16:52:46.880234Z", + "shell.execute_reply": "2023-12-27T16:52:46.879593Z" + } + }, + "outputs": [], + "source": [ + "from dff.script import (\n", + " GLOBAL,\n", + " RESPONSE,\n", + " TRANSITIONS,\n", + " PRE_RESPONSE_PROCESSING,\n", + " PRE_TRANSITIONS_PROCESSING,\n", + " Context,\n", + " Message,\n", + ")\n", + "import dff.script.labels as lbl\n", + "import dff.script.conditions as cnd\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7435551e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:46.883361Z", + "iopub.status.busy": "2023-12-27T16:52:46.882869Z", + "iopub.status.idle": "2023-12-27T16:52:46.887427Z", + "shell.execute_reply": "2023-12-27T16:52:46.886779Z" + } + }, + "outputs": [], + "source": [ + "def save_previous_node_response_to_ctx_processing(\n", + " ctx: Context, _: Pipeline, *args, **kwargs\n", + ") -> Context:\n", + " processed_node = ctx.current_node\n", + " ctx.misc[\"previous_node_response\"] = processed_node.response\n", + " return ctx\n", + "\n", + "\n", + "def get_previous_node_response_for_response_processing(\n", + " ctx: Context, _: Pipeline, *args, **kwargs\n", + ") -> Context:\n", + " processed_node = ctx.current_node\n", + " processed_node.response = Message(\n", + " text=f\"previous={ctx.misc['previous_node_response'].text}:\"\n", + " f\" current={processed_node.response.text}\"\n", + " )\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " return ctx" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "b9deabc2", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:46.889990Z", + "iopub.status.busy": "2023-12-27T16:52:46.889564Z", + "iopub.status.idle": "2023-12-27T16:52:46.895986Z", + "shell.execute_reply": "2023-12-27T16:52:46.895351Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "# a dialog script\n", + "toy_script = {\n", + " \"root\": {\n", + " \"start\": {\n", + " RESPONSE: Message(),\n", + " TRANSITIONS: {(\"flow\", \"step_0\"): cnd.true()},\n", + " },\n", + " \"fallback\": {RESPONSE: Message(text=\"the end\")},\n", + " },\n", + " GLOBAL: {\n", + " PRE_RESPONSE_PROCESSING: {\n", + " \"proc_name_1\": get_previous_node_response_for_response_processing\n", + " },\n", + " PRE_TRANSITIONS_PROCESSING: {\n", + " \"proc_name_1\": save_previous_node_response_to_ctx_processing\n", + " },\n", + " TRANSITIONS: {lbl.forward(0.1): cnd.true()},\n", + " },\n", + " \"flow\": {\n", + " \"step_0\": {RESPONSE: Message(text=\"first\")},\n", + " \"step_1\": {RESPONSE: Message(text=\"second\")},\n", + " \"step_2\": {RESPONSE: Message(text=\"third\")},\n", + " \"step_3\": {RESPONSE: Message(text=\"fourth\")},\n", + " \"step_4\": {RESPONSE: Message(text=\"fifth\")},\n", + " },\n", + "}\n", + "\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (Message(text=\"1\"), Message(text=\"previous=None: current=first\")),\n", + " (Message(text=\"2\"), Message(text=\"previous=first: current=second\")),\n", + " (Message(text=\"3\"), Message(text=\"previous=second: current=third\")),\n", + " (Message(text=\"4\"), Message(text=\"previous=third: current=fourth\")),\n", + " (Message(text=\"5\"), Message(text=\"previous=fourth: current=fifth\")),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f2951bfe", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:46.898453Z", + "iopub.status.busy": "2023-12-27T16:52:46.898074Z", + "iopub.status.idle": "2023-12-27T16:52:46.912874Z", + "shell.execute_reply": "2023-12-27T16:52:46.912250Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_22015/2767853180.py\", line 17, in get_previous_node_response_for_response_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_22015/2767853180.py\", line 17, in get_previous_node_response_for_response_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_22015/2767853180.py\", line 17, in get_previous_node_response_for_response_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_22015/2767853180.py\", line 17, in get_previous_node_response_for_response_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated for processing_name=proc_name_1 and processing_func=\n", + "Traceback (most recent call last):\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/normalization.py\", line 124, in processing_handler\n", + " ctx = processing_func(ctx, pipeline, *args, **kwargs)\n", + " File \"/tmp/ipykernel_22015/2767853180.py\", line 17, in get_previous_node_response_for_response_processing\n", + " ctx.overwrite_current_node_in_processing(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/dff/script/core/context.py\", line 292, in overwrite_current_node_in_processing\n", + " self.framework_states[\"actor\"][\"processed_node\"] = Node.model_validate(processed_node)\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/main.py\", line 503, in model_validate\n", + " return cls.__pydantic_validator__.validate_python(\n", + " File \"/home/runner/work/dialog_flow_framework/dialog_flow_framework/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py\", line 47, in __getattr__\n", + " raise PydanticUserError(self._error_message, code=self._code)\n", + "pydantic.errors.PydanticUserError: Pydantic models should inherit from BaseModel, BaseModel cannot be instantiated directly\n", + "\n", + "For further information visit https://errors.pydantic.dev/2.5/u/base-model-instantiated\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='1'\n", + " (bot) <<< text='previous=None: current=first'\n", + "(user) >>> text='2'\n", + " (bot) <<< text='previous=first: current=second'\n", + "(user) >>> text='3'\n", + " (bot) <<< text='previous=second: current=third'\n", + "(user) >>> text='4'\n", + " (bot) <<< text='previous=third: current=fourth'\n", + "(user) >>> text='5'\n", + " (bot) <<< text='previous=fourth: current=fifth'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"root\", \"start\"),\n", + " fallback_label=(\"root\", \"fallback\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.responses.1_basics.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.1_basics.ipynb new file mode 100644 index 0000000000..5606ec860f --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.1_basics.ipynb @@ -0,0 +1,252 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a3b41585", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Responses: 1. Basics\n", + "\n", + "Here, the process of response forming is shown.\n", + "Special keywords [RESPONSE](../apiref/dff.script.core.keywords.rst#dff.script.core.keywords.Keywords.RESPONSE)\n", + "and [TRANSITIONS](../apiref/dff.script.core.keywords.rst#dff.script.core.keywords.Keywords.TRANSITIONS)\n", + "are used for that." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a547ba09", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:48.763368Z", + "iopub.status.busy": "2023-12-27T16:52:48.763162Z", + "iopub.status.idle": "2023-12-27T16:52:51.112187Z", + "shell.execute_reply": "2023-12-27T16:52:51.111361Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a9c1bac3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:51.115182Z", + "iopub.status.busy": "2023-12-27T16:52:51.114972Z", + "iopub.status.idle": "2023-12-27T16:52:51.819352Z", + "shell.execute_reply": "2023-12-27T16:52:51.818712Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "from typing import NamedTuple\n", + "\n", + "from dff.script import Message\n", + "from dff.script.conditions import exact_match\n", + "from dff.script import RESPONSE, TRANSITIONS\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "c00174fc", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:51.822868Z", + "iopub.status.busy": "2023-12-27T16:52:51.822272Z", + "iopub.status.idle": "2023-12-27T16:52:51.830651Z", + "shell.execute_reply": "2023-12-27T16:52:51.830055Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"greeting_flow\": {\n", + " \"start_node\": {\n", + " RESPONSE: Message(text=\"\"),\n", + " TRANSITIONS: {\"node1\": exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " \"node1\": {\n", + " RESPONSE: Message(text=\"Hi, how are you?\"),\n", + " TRANSITIONS: {\n", + " \"node2\": exact_match(Message(text=\"i'm fine, how are you?\"))\n", + " },\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(text=\"Good. What do you want to talk about?\"),\n", + " TRANSITIONS: {\n", + " \"node3\": exact_match(Message(text=\"Let's talk about music.\"))\n", + " },\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(text=\"Sorry, I can not talk about music now.\"),\n", + " TRANSITIONS: {\"node4\": exact_match(Message(text=\"Ok, goodbye.\"))},\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: Message(text=\"bye\"),\n", + " TRANSITIONS: {\"node1\": exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " \"fallback_node\": {\n", + " RESPONSE: Message(text=\"Ooops\"),\n", + " TRANSITIONS: {\"node1\": exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " }\n", + "}\n", + "\n", + "happy_path = (\n", + " (Message(text=\"Hi\"), Message(text=\"Hi, how are you?\")),\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ),\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"bye\")),\n", + " (Message(text=\"Hi\"), Message(text=\"Hi, how are you?\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"stop\"), Message(text=\"Ooops\")),\n", + " (Message(text=\"Hi\"), Message(text=\"Hi, how are you?\")),\n", + " (\n", + " Message(text=\"i'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ),\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about music now.\"),\n", + " ),\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"bye\")),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a5665a35", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:51.833023Z", + "iopub.status.busy": "2023-12-27T16:52:51.832822Z", + "iopub.status.idle": "2023-12-27T16:52:51.836044Z", + "shell.execute_reply": "2023-12-27T16:52:51.835282Z" + } + }, + "outputs": [], + "source": [ + "class CallbackRequest(NamedTuple):\n", + " payload: str" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "79194931", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:51.838635Z", + "iopub.status.busy": "2023-12-27T16:52:51.838254Z", + "iopub.status.idle": "2023-12-27T16:52:51.852382Z", + "shell.execute_reply": "2023-12-27T16:52:51.851668Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"greeting_flow\", \"start_node\"),\n", + " fallback_label=(\"greeting_flow\", \"fallback_node\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(\n", + " pipeline,\n", + " happy_path,\n", + " ) # This is a function for automatic tutorial running\n", + " # (testing) with `happy_path`\n", + "\n", + " # This runs tutorial in interactive mode if not in IPython env\n", + " # and if `DISABLE_INTERACTIVE_MODE` is not set\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline) # This runs tutorial in interactive mode" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.responses.2_buttons.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.2_buttons.ipynb new file mode 100644 index 0000000000..480273eef8 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.2_buttons.ipynb @@ -0,0 +1,394 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d6869808", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "# Responses: 2. Buttons\n", + "\n", + "In this tutorial [Button](../apiref/dff.script.core.message.rst#dff.script.core.message.Button)\n", + "class is demonstrated.\n", + "Buttons are one of [Message](../apiref/dff.script.core.message.rst#dff.script.core.message.Message) fields.\n", + "They can be attached to any message but will only work if the chosen\n", + "[messenger interface](../apiref/index_messenger_interfaces.rst) supports them." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "6b5c0108", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:53.470561Z", + "iopub.status.busy": "2023-12-27T16:52:53.470274Z", + "iopub.status.idle": "2023-12-27T16:52:55.920102Z", + "shell.execute_reply": "2023-12-27T16:52:55.919305Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "35e1839d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:55.923265Z", + "iopub.status.busy": "2023-12-27T16:52:55.922710Z", + "iopub.status.idle": "2023-12-27T16:52:56.632938Z", + "shell.execute_reply": "2023-12-27T16:52:56.632339Z" + } + }, + "outputs": [], + "source": [ + "import dff.script.conditions as cnd\n", + "import dff.script.labels as lbl\n", + "from dff.script import Context, TRANSITIONS, RESPONSE\n", + "\n", + "from dff.script.core.message import Button, Keyboard, Message\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ae47dca1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:56.636197Z", + "iopub.status.busy": "2023-12-27T16:52:56.635707Z", + "iopub.status.idle": "2023-12-27T16:52:56.639627Z", + "shell.execute_reply": "2023-12-27T16:52:56.638946Z" + } + }, + "outputs": [], + "source": [ + "def check_button_payload(value: str):\n", + " def payload_check_inner(ctx: Context, _: Pipeline):\n", + " if ctx.last_request.misc is not None:\n", + " return ctx.last_request.misc.get(\"payload\") == value\n", + " else:\n", + " return False\n", + "\n", + " return payload_check_inner" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5b245b2c", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:56.642288Z", + "iopub.status.busy": "2023-12-27T16:52:56.641885Z", + "iopub.status.idle": "2023-12-27T16:52:56.657257Z", + "shell.execute_reply": "2023-12-27T16:52:56.656689Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"root\": {\n", + " \"start\": {\n", + " RESPONSE: Message(text=\"\"),\n", + " TRANSITIONS: {\n", + " (\"general\", \"question_1\"): cnd.true(),\n", + " },\n", + " },\n", + " \"fallback\": {RESPONSE: Message(text=\"Finishing test\")},\n", + " },\n", + " \"general\": {\n", + " \"question_1\": {\n", + " RESPONSE: Message(\n", + " **{\n", + " \"text\": \"Starting test! What's 2 + 2?\"\n", + " \" (type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"5\", payload=\"5\"),\n", + " Button(text=\"4\", payload=\"4\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " TRANSITIONS: {\n", + " lbl.forward(): check_button_payload(\"4\"),\n", + " (\"general\", \"question_1\"): check_button_payload(\"5\"),\n", + " },\n", + " },\n", + " \"question_2\": {\n", + " RESPONSE: Message(\n", + " **{\n", + " \"text\": \"Next question: what's 6 * 8?\"\n", + " \" (type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"38\", payload=\"38\"),\n", + " Button(text=\"48\", payload=\"48\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " TRANSITIONS: {\n", + " lbl.forward(): check_button_payload(\"48\"),\n", + " (\"general\", \"question_2\"): check_button_payload(\"38\"),\n", + " },\n", + " },\n", + " \"question_3\": {\n", + " RESPONSE: Message(\n", + " **{\n", + " \"text\": \"What's 114 + 115? \"\n", + " \"(type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"229\", payload=\"229\"),\n", + " Button(text=\"283\", payload=\"283\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " TRANSITIONS: {\n", + " lbl.forward(): check_button_payload(\"229\"),\n", + " (\"general\", \"question_3\"): check_button_payload(\"283\"),\n", + " },\n", + " },\n", + " \"success\": {\n", + " RESPONSE: Message(text=\"Success!\"),\n", + " TRANSITIONS: {(\"root\", \"fallback\"): cnd.true()},\n", + " },\n", + " },\n", + "}\n", + "\n", + "happy_path = (\n", + " (\n", + " Message(text=\"Hi\"),\n", + " Message(\n", + " **{\n", + " \"text\": \"Starting test! What's 2 + 2? \"\n", + " \"(type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"5\", payload=\"5\"),\n", + " Button(text=\"4\", payload=\"4\"),\n", + " ]\n", + " )\n", + " },\n", + " }\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"0\"),\n", + " Message(\n", + " **{\n", + " \"text\": \"Starting test! What's 2 + 2? \"\n", + " \"(type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"5\", payload=\"5\"),\n", + " Button(text=\"4\", payload=\"4\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"1\"),\n", + " Message(\n", + " **{\n", + " \"text\": \"Next question: what's 6 * 8? \"\n", + " \"(type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"38\", payload=\"38\"),\n", + " Button(text=\"48\", payload=\"48\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"0\"),\n", + " Message(\n", + " **{\n", + " \"text\": \"Next question: what's 6 * 8? \"\n", + " \"(type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"38\", payload=\"38\"),\n", + " Button(text=\"48\", payload=\"48\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"1\"),\n", + " Message(\n", + " **{\n", + " \"text\": \"What's 114 + 115? \"\n", + " \"(type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"229\", payload=\"229\"),\n", + " Button(text=\"283\", payload=\"283\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"1\"),\n", + " Message(\n", + " **{\n", + " \"text\": \"What's 114 + 115? \"\n", + " \"(type in the index of the correct option)\",\n", + " \"misc\": {\n", + " \"ui\": Keyboard(\n", + " buttons=[\n", + " Button(text=\"229\", payload=\"229\"),\n", + " Button(text=\"283\", payload=\"283\"),\n", + " ]\n", + " ),\n", + " },\n", + " }\n", + " ),\n", + " ),\n", + " (Message(text=\"0\"), Message(text=\"Success!\")),\n", + " (Message(text=\"ok\"), Message(text=\"Finishing test\")),\n", + ")\n", + "\n", + "\n", + "def process_request(ctx: Context):\n", + " ui = (\n", + " ctx.last_response\n", + " and ctx.last_response.misc\n", + " and ctx.last_response.misc.get(\"ui\")\n", + " )\n", + " if ui and ui.buttons:\n", + " try:\n", + " chosen_button = ui.buttons[int(ctx.last_request.text)]\n", + " except (IndexError, ValueError):\n", + " raise ValueError(\n", + " \"Type in the index of the correct option \"\n", + " \"to choose from the buttons.\"\n", + " )\n", + " ctx.last_request = Message(misc={\"payload\": chosen_button.payload})" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "4a4257ae", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:56.659814Z", + "iopub.status.busy": "2023-12-27T16:52:56.659366Z", + "iopub.status.idle": "2023-12-27T16:52:56.673478Z", + "shell.execute_reply": "2023-12-27T16:52:56.672851Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Starting test! What's 2 + 2? (type in the index of the correct option)' misc='{'ui': {'buttons': [{'text': '5', 'payload': '5'}, {'text': '4', 'payload': '4'}]}}'\n", + "(user) >>> text='0'\n", + " (bot) <<< text='Starting test! What's 2 + 2? (type in the index of the correct option)' misc='{'ui': {'buttons': [{'text': '5', 'payload': '5'}, {'text': '4', 'payload': '4'}]}}'\n", + "(user) >>> text='1'\n", + " (bot) <<< text='Next question: what's 6 * 8? (type in the index of the correct option)' misc='{'ui': {'buttons': [{'text': '38', 'payload': '38'}, {'text': '48', 'payload': '48'}]}}'\n", + "(user) >>> text='0'\n", + " (bot) <<< text='Next question: what's 6 * 8? (type in the index of the correct option)' misc='{'ui': {'buttons': [{'text': '38', 'payload': '38'}, {'text': '48', 'payload': '48'}]}}'\n", + "(user) >>> text='1'\n", + " (bot) <<< text='What's 114 + 115? (type in the index of the correct option)' misc='{'ui': {'buttons': [{'text': '229', 'payload': '229'}, {'text': '283', 'payload': '283'}]}}'\n", + "(user) >>> text='1'\n", + " (bot) <<< text='What's 114 + 115? (type in the index of the correct option)' misc='{'ui': {'buttons': [{'text': '229', 'payload': '229'}, {'text': '283', 'payload': '283'}]}}'\n", + "(user) >>> text='0'\n", + " (bot) <<< text='Success!'\n", + "(user) >>> text='ok'\n", + " (bot) <<< text='Finishing test'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"root\", \"start\"),\n", + " fallback_label=(\"root\", \"fallback\"),\n", + " pre_services=[process_request],\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(\n", + " pipeline,\n", + " happy_path,\n", + " ) # For response object with `happy_path` string comparing,\n", + " # a special `generics_comparer` comparator is used\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.responses.3_media.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.3_media.ipynb new file mode 100644 index 0000000000..054be85b77 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.3_media.ipynb @@ -0,0 +1,255 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5f120e70", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Responses: 3. Media\n", + "\n", + "Here, [Attachments](../apiref/dff.script.core.message.rst#dff.script.core.message.Attachments) class is shown.\n", + "Attachments can be used for attaching different media elements\n", + "(such as [Image](../apiref/dff.script.core.message.rst#dff.script.core.message.Image), [Document](../apiref/dff.script.core.message.rst#dff.script.core.message.Document)\n", + "or [Audio](../apiref/dff.script.core.message.rst#dff.script.core.message.Audio)).\n", + "\n", + "They can be attached to any message but will only work if the chosen\n", + "[messenger interface](../apiref/index_messenger_interfaces.rst) supports them." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "46891eba", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:52:58.219315Z", + "iopub.status.busy": "2023-12-27T16:52:58.218790Z", + "iopub.status.idle": "2023-12-27T16:53:00.634361Z", + "shell.execute_reply": "2023-12-27T16:53:00.633588Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "bf7e9a6d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:00.637248Z", + "iopub.status.busy": "2023-12-27T16:53:00.637004Z", + "iopub.status.idle": "2023-12-27T16:53:01.353515Z", + "shell.execute_reply": "2023-12-27T16:53:01.352852Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "from dff.script import RESPONSE, TRANSITIONS\n", + "from dff.script.conditions import std_conditions as cnd\n", + "\n", + "from dff.script.core.message import Attachments, Image, Message\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "0864529c", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:01.356830Z", + "iopub.status.busy": "2023-12-27T16:53:01.356318Z", + "iopub.status.idle": "2023-12-27T16:53:01.366895Z", + "shell.execute_reply": "2023-12-27T16:53:01.366321Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "img_url = \"https://www.python.org/static/img/python-logo.png\"\n", + "toy_script = {\n", + " \"root\": {\n", + " \"start\": {\n", + " RESPONSE: Message(text=\"\"),\n", + " TRANSITIONS: {(\"pics\", \"ask_picture\"): cnd.true()},\n", + " },\n", + " \"fallback\": {\n", + " RESPONSE: Message(\n", + " text=\"Final node reached, send any message to restart.\"\n", + " ),\n", + " TRANSITIONS: {(\"pics\", \"ask_picture\"): cnd.true()},\n", + " },\n", + " },\n", + " \"pics\": {\n", + " \"ask_picture\": {\n", + " RESPONSE: Message(text=\"Please, send me a picture url\"),\n", + " TRANSITIONS: {\n", + " (\"pics\", \"send_one\", 1.1): cnd.regexp(r\"^http.+\\.png$\"),\n", + " (\"pics\", \"send_many\", 1.0): cnd.regexp(\n", + " f\"{img_url} repeat 10 times\"\n", + " ),\n", + " (\"pics\", \"repeat\", 0.9): cnd.true(),\n", + " },\n", + " },\n", + " \"send_one\": {\n", + " RESPONSE: Message(\n", + " text=\"here's my picture!\",\n", + " attachments=Attachments(files=[Image(source=img_url)]),\n", + " ),\n", + " TRANSITIONS: {(\"root\", \"fallback\"): cnd.true()},\n", + " },\n", + " \"send_many\": {\n", + " RESPONSE: Message(\n", + " text=\"Look at my pictures\",\n", + " attachments=Attachments(files=[Image(source=img_url)] * 10),\n", + " ),\n", + " TRANSITIONS: {(\"root\", \"fallback\"): cnd.true()},\n", + " },\n", + " \"repeat\": {\n", + " RESPONSE: Message(\n", + " text=\"I cannot find the picture. Please, try again.\"\n", + " ),\n", + " TRANSITIONS: {\n", + " (\"pics\", \"send_one\", 1.1): cnd.regexp(r\"^http.+\\.png$\"),\n", + " (\"pics\", \"send_many\", 1.0): cnd.regexp(\n", + " r\"^http.+\\.png repeat 10 times\"\n", + " ),\n", + " (\"pics\", \"repeat\", 0.9): cnd.true(),\n", + " },\n", + " },\n", + " },\n", + "}\n", + "\n", + "happy_path = (\n", + " (Message(text=\"Hi\"), Message(text=\"Please, send me a picture url\")),\n", + " (\n", + " Message(text=\"no\"),\n", + " Message(text=\"I cannot find the picture. Please, try again.\"),\n", + " ),\n", + " (\n", + " Message(text=img_url),\n", + " Message(\n", + " text=\"here's my picture!\",\n", + " attachments=Attachments(files=[Image(source=img_url)]),\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"ok\"),\n", + " Message(text=\"Final node reached, send any message to restart.\"),\n", + " ),\n", + " (Message(text=\"ok\"), Message(text=\"Please, send me a picture url\")),\n", + " (\n", + " Message(text=f\"{img_url} repeat 10 times\"),\n", + " Message(\n", + " text=\"Look at my pictures\",\n", + " attachments=Attachments(files=[Image(source=img_url)] * 10),\n", + " ),\n", + " ),\n", + " (\n", + " Message(text=\"ok\"),\n", + " Message(text=\"Final node reached, send any message to restart.\"),\n", + " ),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "281aafe2", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:01.369490Z", + "iopub.status.busy": "2023-12-27T16:53:01.369100Z", + "iopub.status.idle": "2023-12-27T16:53:01.604233Z", + "shell.execute_reply": "2023-12-27T16:53:01.603575Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Please, send me a picture url'\n", + "(user) >>> text='no'\n", + " (bot) <<< text='I cannot find the picture. Please, try again.'\n", + "(user) >>> text='https://www.python.org/static/img/python-logo.png'\n", + " (bot) <<< text='here's my picture!' attachments='{'files': [{'source': Url('https://www.python.org/static/img/python-logo.png')}]}'\n", + "(user) >>> text='ok'\n", + " (bot) <<< text='Final node reached, send any message to restart.'\n", + "(user) >>> text='ok'\n", + " (bot) <<< text='Please, send me a picture url'\n", + "(user) >>> text='https://www.python.org/static/img/python-logo.png repeat 10 times'\n", + " (bot) <<< text='Look at my pictures' attachments='{'files': [{'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}, {'source': Url('https://www.python.org/static/img/python-logo.png')}]}'\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='ok'\n", + " (bot) <<< text='Final node reached, send any message to restart.'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"root\", \"start\"),\n", + " fallback_label=(\"root\", \"fallback\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.script.responses.4_multi_message.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.4_multi_message.ipynb new file mode 100644 index 0000000000..01fa24be29 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.script.responses.4_multi_message.ipynb @@ -0,0 +1,283 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d9405510", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# Responses: 4. Multi Message\n", + "\n", + "This tutorial shows Multi Message usage.\n", + "\n", + "The [MultiMessage](../apiref/dff.script.core.message.rst#dff.script.core.message.MultiMessage) represents a combination of several messages.\n", + "\n", + "Let's do all the necessary imports from DFF." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f7859c2c", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:03.399923Z", + "iopub.status.busy": "2023-12-27T16:53:03.399471Z", + "iopub.status.idle": "2023-12-27T16:53:05.884629Z", + "shell.execute_reply": "2023-12-27T16:53:05.883682Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3d4f2e50", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:05.890653Z", + "iopub.status.busy": "2023-12-27T16:53:05.890056Z", + "iopub.status.idle": "2023-12-27T16:53:06.598434Z", + "shell.execute_reply": "2023-12-27T16:53:06.597783Z" + } + }, + "outputs": [], + "source": [ + "\n", + "from dff.script import TRANSITIONS, RESPONSE, Message, MultiMessage\n", + "import dff.script.conditions as cnd\n", + "\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8e5992a7", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:06.602155Z", + "iopub.status.busy": "2023-12-27T16:53:06.601709Z", + "iopub.status.idle": "2023-12-27T16:53:06.614547Z", + "shell.execute_reply": "2023-12-27T16:53:06.613595Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"greeting_flow\": {\n", + " \"start_node\": { # This is an initial node,\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " # If \"Hi\" == request of user then we make the transition\n", + " },\n", + " \"node1\": {\n", + " RESPONSE: MultiMessage(\n", + " messages=[\n", + " Message(text=\"Hi, what is up?\", misc={\"confidences\": 0.85}),\n", + " Message(\n", + " text=\"Hello, how are you?\", misc={\"confidences\": 0.9}\n", + " ),\n", + " ]\n", + " ),\n", + " TRANSITIONS: {\n", + " \"node2\": cnd.exact_match(Message(text=\"I'm fine, how are you?\"))\n", + " },\n", + " },\n", + " \"node2\": {\n", + " RESPONSE: Message(text=\"Good. What do you want to talk about?\"),\n", + " TRANSITIONS: {\n", + " \"node3\": cnd.exact_match(\n", + " Message(text=\"Let's talk about music.\")\n", + " )\n", + " },\n", + " },\n", + " \"node3\": {\n", + " RESPONSE: Message(text=\"Sorry, I can not talk about that now.\"),\n", + " TRANSITIONS: {\n", + " \"node4\": cnd.exact_match(Message(text=\"Ok, goodbye.\"))\n", + " },\n", + " },\n", + " \"node4\": {\n", + " RESPONSE: Message(text=\"bye\"),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " \"fallback_node\": { # We get to this node\n", + " # if an error occurred while the agent was running.\n", + " RESPONSE: Message(text=\"Ooops\"),\n", + " TRANSITIONS: {\"node1\": cnd.exact_match(Message(text=\"Hi\"))},\n", + " },\n", + " }\n", + "}\n", + "\n", + "# testing\n", + "happy_path = (\n", + " (\n", + " Message(text=\"Hi\"),\n", + " MultiMessage(\n", + " messages=[\n", + " Message(text=\"Hi, what is up?\", misc={\"confidences\": 0.85}),\n", + " Message(text=\"Hello, how are you?\", misc={\"confidences\": 0.9}),\n", + " ]\n", + " ),\n", + " ), # start_node -> node1\n", + " (\n", + " Message(text=\"I'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about that now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"bye\")), # node3 -> node4\n", + " (\n", + " Message(text=\"Hi\"),\n", + " MultiMessage(\n", + " messages=[\n", + " Message(text=\"Hi, what is up?\", misc={\"confidences\": 0.85}),\n", + " Message(text=\"Hello, how are you?\", misc={\"confidences\": 0.9}),\n", + " ]\n", + " ),\n", + " ), # node4 -> node1\n", + " (\n", + " Message(text=\"stop\"),\n", + " Message(text=\"Ooops\"),\n", + " ),\n", + " # node1 -> fallback_node\n", + " (\n", + " Message(text=\"one\"),\n", + " Message(text=\"Ooops\"),\n", + " ), # f_n->f_n\n", + " (\n", + " Message(text=\"help\"),\n", + " Message(text=\"Ooops\"),\n", + " ), # f_n->f_n\n", + " (\n", + " Message(text=\"nope\"),\n", + " Message(text=\"Ooops\"),\n", + " ), # f_n->f_n\n", + " (\n", + " Message(text=\"Hi\"),\n", + " MultiMessage(\n", + " messages=[\n", + " Message(text=\"Hi, what is up?\", misc={\"confidences\": 0.85}),\n", + " Message(text=\"Hello, how are you?\", misc={\"confidences\": 0.9}),\n", + " ]\n", + " ),\n", + " ), # fallback_node -> node1\n", + " (\n", + " Message(text=\"I'm fine, how are you?\"),\n", + " Message(text=\"Good. What do you want to talk about?\"),\n", + " ), # node1 -> node2\n", + " (\n", + " Message(text=\"Let's talk about music.\"),\n", + " Message(text=\"Sorry, I can not talk about that now.\"),\n", + " ), # node2 -> node3\n", + " (Message(text=\"Ok, goodbye.\"), Message(text=\"bye\")), # node3 -> node4\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "51cbfe74", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:06.618041Z", + "iopub.status.busy": "2023-12-27T16:53:06.617543Z", + "iopub.status.idle": "2023-12-27T16:53:06.634990Z", + "shell.execute_reply": "2023-12-27T16:53:06.633937Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< messages='[{'text': 'Hi, what is up?', 'misc': {'confidences': 0.85}}, {'text': 'Hello, how are you?', 'misc': {'confidences': 0.9}}]'\n", + "(user) >>> text='I'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about that now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< messages='[{'text': 'Hi, what is up?', 'misc': {'confidences': 0.85}}, {'text': 'Hello, how are you?', 'misc': {'confidences': 0.9}}]'\n", + "(user) >>> text='stop'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='one'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='help'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='nope'\n", + " (bot) <<< text='Ooops'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< messages='[{'text': 'Hi, what is up?', 'misc': {'confidences': 0.85}}, {'text': 'Hello, how are you?', 'misc': {'confidences': 0.9}}]'\n", + "(user) >>> text='I'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about that now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n" + ] + } + ], + "source": [ + "\n", + "pipeline = Pipeline.from_script(\n", + " toy_script,\n", + " start_label=(\"greeting_flow\", \"start_node\"),\n", + " fallback_label=(\"greeting_flow\", \"fallback_node\"),\n", + ")\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.stats.1_extractor_functions.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.stats.1_extractor_functions.ipynb new file mode 100644 index 0000000000..8fb0c5e421 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.stats.1_extractor_functions.ipynb @@ -0,0 +1,289 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "1c5b35be", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 1. Extractor Functions\n", + "\n", + "The following example covers the basics of using the `stats` module.\n", + "\n", + "Statistics are collected from pipeline services by extractor functions\n", + "that report the state of one or more pipeline components. The `stats` module\n", + "provides several default extractors, but users are free to define their own\n", + "extractor functions. You can find API reference for default extractors\n", + "[here](../apiref/dff.stats.default_extractors.rst).\n", + "\n", + "It is a preferred practice to define extractors as asynchronous functions.\n", + "Extractors need to have the following uniform signature:\n", + "the expected arguments are always `Context`, `Pipeline`, and `ExtraHandlerRuntimeInfo`,\n", + "while the expected return value is an arbitrary `dict` or a `None`.\n", + "The returned value gets persisted to Clickhouse as JSON\n", + "which is why it can contain arbitrarily nested dictionaries,\n", + "but it cannot contain any complex objects that cannot be trivially serialized.\n", + "\n", + "The output of these functions will be captured by an OpenTelemetry instrumentor and directed to\n", + "the Opentelemetry collector server which in its turn batches and persists data\n", + "to Clickhouse or other OLAP storages.\n", + "\n", + "
\n", + "\n", + "Both the Opentelemetry collector and the Clickhouse instance must be running\n", + "during statistics collection. If you cloned the DFF repo, launch them using `docker compose`:\n", + "```bash\n", + "docker compose --profile stats up\n", + "```\n", + "\n", + "
\n", + "\n", + "For more information on OpenTelemetry instrumentation,\n", + "refer to the body of this tutorial as well as [OpenTelemetry documentation](\n", + "https://opentelemetry.io/docs/instrumentation/python/manual/\n", + ")." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3eb07780", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:08.459081Z", + "iopub.status.busy": "2023-12-27T16:53:08.458459Z", + "iopub.status.idle": "2023-12-27T16:53:10.882397Z", + "shell.execute_reply": "2023-12-27T16:53:10.881517Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[stats]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "7d37d0a3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:10.887073Z", + "iopub.status.busy": "2023-12-27T16:53:10.886832Z", + "iopub.status.idle": "2023-12-27T16:53:11.928555Z", + "shell.execute_reply": "2023-12-27T16:53:11.927943Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "import asyncio\n", + "\n", + "from dff.script import Context\n", + "from dff.pipeline import (\n", + " Pipeline,\n", + " ACTOR,\n", + " Service,\n", + " ExtraHandlerRuntimeInfo,\n", + " to_service,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT, HAPPY_PATH\n", + "from dff.stats import OtelInstrumentor, default_extractors\n", + "from dff.utils.testing import is_interactive_mode, check_happy_path" + ] + }, + { + "cell_type": "markdown", + "id": "9798a6dc", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "The cells below configure log export with the help of OTLP instrumentation.\n", + "\n", + "* The initial step is to configure the export destination.\n", + "`from_url` method of the `OtelInstrumentor` class simplifies this task\n", + "allowing you to only pass the url of the OTLP Collector server.\n", + "\n", + "* Alternatively, you can use the utility functions provided by the `stats` module:\n", + "`set_logger_destination`, `set_tracer_destination`, or `set_meter_destination`. These accept\n", + "an appropriate Opentelemetry exporter instance and bind it to provider classes.\n", + "\n", + "* Nextly, the `OtelInstrumentor` class should be constructed to log the output\n", + "of extractor functions. Custom extractors need to be decorated\n", + "with the `OtelInstrumentor` instance. Default extractors are instrumented\n", + "by calling the `instrument` method.\n", + "\n", + "* The entirety of the process is illustrated in the example below." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "53b4697c", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:11.931785Z", + "iopub.status.busy": "2023-12-27T16:53:11.931237Z", + "iopub.status.idle": "2023-12-27T16:53:11.938322Z", + "shell.execute_reply": "2023-12-27T16:53:11.937755Z" + } + }, + "outputs": [], + "source": [ + "dff_instrumentor = OtelInstrumentor.from_url(\"grpc://localhost:4317\")\n", + "dff_instrumentor.instrument()" + ] + }, + { + "cell_type": "markdown", + "id": "c157f24f", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 2 + }, + "source": [ + "The following cell shows a custom extractor function. The data obtained from\n", + "the context and the runtime information gets shaped as a dict and returned\n", + "from the function body. The `dff_instrumentor` decorator then ensures\n", + "that the output is logged by OpenTelemetry." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "11f2b6bb", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:11.940812Z", + "iopub.status.busy": "2023-12-27T16:53:11.940604Z", + "iopub.status.idle": "2023-12-27T16:53:11.944133Z", + "shell.execute_reply": "2023-12-27T16:53:11.943563Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "# decorated by an OTLP Instrumentor instance\n", + "@dff_instrumentor\n", + "async def get_service_state(ctx: Context, _, info: ExtraHandlerRuntimeInfo):\n", + " # extract the execution state of a target service\n", + " data = {\n", + " \"execution_state\": info.component.execution_state,\n", + " }\n", + " # return the state as an arbitrary dict for further logging\n", + " return data" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "4f6aa926", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:11.946540Z", + "iopub.status.busy": "2023-12-27T16:53:11.946189Z", + "iopub.status.idle": "2023-12-27T16:53:11.949727Z", + "shell.execute_reply": "2023-12-27T16:53:11.949172Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "# configure `get_service_state` to run after the `heavy_service`\n", + "@to_service(after_handler=[get_service_state])\n", + "async def heavy_service(ctx: Context):\n", + " _ = ctx # get something from ctx if needed\n", + " await asyncio.sleep(0.02)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "08d14e60", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:11.952442Z", + "iopub.status.busy": "2023-12-27T16:53:11.952032Z", + "iopub.status.idle": "2023-12-27T16:53:12.089224Z", + "shell.execute_reply": "2023-12-27T16:53:12.088514Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(\n", + " {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " heavy_service,\n", + " Service(\n", + " handler=ACTOR,\n", + " after_handler=[default_extractors.get_current_label],\n", + " ),\n", + " ],\n", + " }\n", + ")\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " pipeline.run()" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.stats.2_pipeline_integration.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.stats.2_pipeline_integration.ipynb new file mode 100644 index 0000000000..7ffb9720f4 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.stats.2_pipeline_integration.ipynb @@ -0,0 +1,274 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e4f2277a", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 2. Pipeline Integration\n", + "\n", + "In the DFF ecosystem, extractor functions act as regular extra handlers (\n", + "[see the pipeline module documentation](../tutorials/tutorials.pipeline.6_extra_handlers_basic.py)\n", + ").\n", + "Hence, you can decorate any part of your pipeline, including services,\n", + "service groups and the pipeline as a whole, to obtain the statistics\n", + "specific for that component. Some examples of this functionality\n", + "are showcased in this tutorial.\n", + "\n", + "
\n", + "\n", + "Both the Opentelemetry collector and the Clickhouse instance must be running\n", + "during statistics collection. If you cloned the DFF repo, launch them using `docker compose`:\n", + "```bash\n", + "docker compose --profile stats up\n", + "```\n", + "\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "ff3a77f1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:13.867361Z", + "iopub.status.busy": "2023-12-27T16:53:13.867155Z", + "iopub.status.idle": "2023-12-27T16:53:16.326055Z", + "shell.execute_reply": "2023-12-27T16:53:16.325272Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff[stats]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d8ab55ca", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:16.329088Z", + "iopub.status.busy": "2023-12-27T16:53:16.328676Z", + "iopub.status.idle": "2023-12-27T16:53:17.256485Z", + "shell.execute_reply": "2023-12-27T16:53:17.255565Z" + } + }, + "outputs": [], + "source": [ + "import asyncio\n", + "\n", + "from dff.script import Context\n", + "from dff.pipeline import (\n", + " Pipeline,\n", + " ACTOR,\n", + " Service,\n", + " ExtraHandlerRuntimeInfo,\n", + " ServiceGroup,\n", + " GlobalExtraHandlerType,\n", + ")\n", + "from dff.utils.testing.toy_script import TOY_SCRIPT, HAPPY_PATH\n", + "from dff.stats import (\n", + " OtelInstrumentor,\n", + " set_logger_destination,\n", + " set_tracer_destination,\n", + ")\n", + "from dff.stats import OTLPLogExporter, OTLPSpanExporter\n", + "from dff.stats import default_extractors\n", + "from dff.utils.testing import is_interactive_mode, check_happy_path" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "399fbb5e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:17.260696Z", + "iopub.status.busy": "2023-12-27T16:53:17.260099Z", + "iopub.status.idle": "2023-12-27T16:53:17.269992Z", + "shell.execute_reply": "2023-12-27T16:53:17.269084Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "set_logger_destination(OTLPLogExporter(\"grpc://localhost:4317\", insecure=True))\n", + "set_tracer_destination(OTLPSpanExporter(\"grpc://localhost:4317\", insecure=True))\n", + "dff_instrumentor = OtelInstrumentor()\n", + "dff_instrumentor.instrument()\n", + "\n", + "\n", + "# example extractor function\n", + "@dff_instrumentor\n", + "async def get_service_state(ctx: Context, _, info: ExtraHandlerRuntimeInfo):\n", + " # extract execution state of service from info\n", + " data = {\n", + " \"execution_state\": info.component.execution_state,\n", + " }\n", + " # return a record to save into connected database\n", + " return data" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "ee37ddd3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:17.274255Z", + "iopub.status.busy": "2023-12-27T16:53:17.273833Z", + "iopub.status.idle": "2023-12-27T16:53:17.277584Z", + "shell.execute_reply": "2023-12-27T16:53:17.276815Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "# example service\n", + "async def heavy_service(ctx: Context):\n", + " _ = ctx # get something from ctx if needed\n", + " await asyncio.sleep(0.02)" + ] + }, + { + "cell_type": "markdown", + "id": "b6c75dc1", + "metadata": { + "cell_marker": "\"\"\"", + "lines_to_next_cell": 0 + }, + "source": [ + "\n", + "The many ways in which you can use extractor functions are shown in the following\n", + "pipeline definition. The functions are used to obtain statistics from respective components:\n", + "\n", + "* A service group of two `heavy_service` instances.\n", + "* An `Actor` service.\n", + "* The pipeline as a whole.\n", + "\n", + "As is the case with the regular extra handler functions, you can wire the extractors\n", + "to run either before or after the target service. As a result, you can compare\n", + "the pre-service and post-service states of the context to measure the performance\n", + "of various components, etc.\n", + "\n", + "Some extractors, like `get_current_label`, have restrictions in terms of their run stage:\n", + "for instance, `get_current_label` needs to only be used as an `after_handler`\n", + "to function correctly." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "94843910", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:17.281001Z", + "iopub.status.busy": "2023-12-27T16:53:17.280661Z", + "iopub.status.idle": "2023-12-27T16:53:17.434405Z", + "shell.execute_reply": "2023-12-27T16:53:17.433535Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n", + "(user) >>> text='i'm fine, how are you?'\n", + " (bot) <<< text='Good. What do you want to talk about?'\n", + "(user) >>> text='Let's talk about music.'\n", + " (bot) <<< text='Sorry, I can not talk about music now.'\n", + "(user) >>> text='Ok, goodbye.'\n", + " (bot) <<< text='bye'\n", + "(user) >>> text='Hi'\n", + " (bot) <<< text='Hi, how are you?'\n" + ] + } + ], + "source": [ + "pipeline = Pipeline.from_dict(\n", + " {\n", + " \"script\": TOY_SCRIPT,\n", + " \"start_label\": (\"greeting_flow\", \"start_node\"),\n", + " \"fallback_label\": (\"greeting_flow\", \"fallback_node\"),\n", + " \"components\": [\n", + " ServiceGroup(\n", + " before_handler=[default_extractors.get_timing_before],\n", + " after_handler=[\n", + " get_service_state,\n", + " default_extractors.get_timing_after,\n", + " ],\n", + " components=[\n", + " {\"handler\": heavy_service},\n", + " {\"handler\": heavy_service},\n", + " ],\n", + " ),\n", + " Service(\n", + " handler=ACTOR,\n", + " before_handler=[\n", + " default_extractors.get_timing_before,\n", + " ],\n", + " after_handler=[\n", + " get_service_state,\n", + " default_extractors.get_current_label,\n", + " default_extractors.get_timing_after,\n", + " ],\n", + " ),\n", + " ],\n", + " }\n", + ")\n", + "pipeline.add_global_handler(\n", + " GlobalExtraHandlerType.BEFORE_ALL, default_extractors.get_timing_before\n", + ")\n", + "pipeline.add_global_handler(\n", + " GlobalExtraHandlerType.AFTER_ALL, default_extractors.get_timing_after\n", + ")\n", + "pipeline.add_global_handler(GlobalExtraHandlerType.AFTER_ALL, get_service_state)\n", + "\n", + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, HAPPY_PATH)\n", + " if is_interactive_mode():\n", + " pipeline.run()" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.utils.1_cache.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.utils.1_cache.ipynb new file mode 100644 index 0000000000..f606db4973 --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.utils.1_cache.ipynb @@ -0,0 +1,203 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4fd91d1e", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 1. Cache\n", + "\n", + "In this tutorial use of\n", + "[cache](../apiref/dff.utils.turn_caching.singleton_turn_caching.rst#dff.utils.turn_caching.singleton_turn_caching.cache)\n", + "function is demonstrated.\n", + "\n", + "This function is used a lot like `functools.cache` function and\n", + "helps by saving results of heavy function execution and avoiding recalculation.\n", + "\n", + "Caches are kept in a library-wide singleton\n", + "and are cleared at the end of each turn." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "9493759e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:19.386830Z", + "iopub.status.busy": "2023-12-27T16:53:19.386254Z", + "iopub.status.idle": "2023-12-27T16:53:21.711846Z", + "shell.execute_reply": "2023-12-27T16:53:21.711042Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "943dc282", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:21.714871Z", + "iopub.status.busy": "2023-12-27T16:53:21.714433Z", + "iopub.status.idle": "2023-12-27T16:53:22.429706Z", + "shell.execute_reply": "2023-12-27T16:53:22.429022Z" + } + }, + "outputs": [], + "source": [ + "from dff.script.conditions import true\n", + "from dff.script import Context, TRANSITIONS, RESPONSE, Message\n", + "from dff.script.labels import repeat\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.turn_caching import cache\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "\n", + "\n", + "external_data = {\"counter\": 0}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "11e8668d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:22.432913Z", + "iopub.status.busy": "2023-12-27T16:53:22.432388Z", + "iopub.status.idle": "2023-12-27T16:53:22.437139Z", + "shell.execute_reply": "2023-12-27T16:53:22.436491Z" + } + }, + "outputs": [], + "source": [ + "@cache\n", + "def cached_response(_):\n", + " \"\"\"\n", + " This function execution result will be saved\n", + " for any set of given argument(s).\n", + " If the function will be called again\n", + " with the same arguments it will prevent it from execution.\n", + " The cached values will be used instead.\n", + " The cache is stored in a library-wide singleton,\n", + " that is cleared in the end of execution of actor and/or pipeline.\n", + " \"\"\"\n", + " external_data[\"counter\"] += 1\n", + " return external_data[\"counter\"]\n", + "\n", + "\n", + "def response(ctx: Context, _, *__, **___) -> Message:\n", + " if ctx.validation:\n", + " return Message()\n", + " return Message(\n", + " text=f\"{cached_response(1)}-{cached_response(2)}-\"\n", + " f\"{cached_response(1)}-{cached_response(2)}\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7c5243ca", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:22.439685Z", + "iopub.status.busy": "2023-12-27T16:53:22.439300Z", + "iopub.status.idle": "2023-12-27T16:53:22.443899Z", + "shell.execute_reply": "2023-12-27T16:53:22.443255Z" + }, + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"flow\": {\"node1\": {TRANSITIONS: {repeat(): true()}, RESPONSE: response}}\n", + "}\n", + "\n", + "happy_path = (\n", + " (Message(), Message(text=\"1-2-1-2\")),\n", + " (Message(), Message(text=\"3-4-3-4\")),\n", + " (Message(), Message(text=\"5-6-5-6\")),\n", + ")\n", + "\n", + "pipeline = Pipeline.from_script(toy_script, start_label=(\"flow\", \"node1\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "d77da0b9", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:22.446454Z", + "iopub.status.busy": "2023-12-27T16:53:22.446005Z", + "iopub.status.idle": "2023-12-27T16:53:22.452250Z", + "shell.execute_reply": "2023-12-27T16:53:22.451488Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> \n", + " (bot) <<< text='1-2-1-2'\n", + "(user) >>> \n", + " (bot) <<< text='3-4-3-4'\n", + "(user) >>> \n", + " (bot) <<< text='5-6-5-6'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/nbsphinx/tutorials/tutorials.utils.2_lru_cache.ipynb b/.doctrees/nbsphinx/tutorials/tutorials.utils.2_lru_cache.ipynb new file mode 100644 index 0000000000..bde28fed4e --- /dev/null +++ b/.doctrees/nbsphinx/tutorials/tutorials.utils.2_lru_cache.ipynb @@ -0,0 +1,201 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "92448c7b", + "metadata": { + "cell_marker": "\"\"\"" + }, + "source": [ + "# 2. LRU Cache\n", + "\n", + "In this tutorial use of\n", + "[lru_cache](../apiref/dff.utils.turn_caching.singleton_turn_caching.rst#dff.utils.turn_caching.singleton_turn_caching.lru_cache)\n", + "function is demonstrated.\n", + "\n", + "This function is used a lot like `functools.lru_cache` function and\n", + "helps by saving results of heavy function execution and avoiding recalculation.\n", + "\n", + "Caches are kept in a library-wide singleton\n", + "and are cleared at the end of each turn.\n", + "\n", + "Maximum size parameter limits the amount of function execution results cached." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a5bb5a87", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:24.319019Z", + "iopub.status.busy": "2023-12-27T16:53:24.318807Z", + "iopub.status.idle": "2023-12-27T16:53:26.629349Z", + "shell.execute_reply": "2023-12-27T16:53:26.628552Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# installing dependencies\n", + "%pip install -q dff" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "41cb77a7", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:26.632777Z", + "iopub.status.busy": "2023-12-27T16:53:26.632088Z", + "iopub.status.idle": "2023-12-27T16:53:27.360487Z", + "shell.execute_reply": "2023-12-27T16:53:27.359828Z" + } + }, + "outputs": [], + "source": [ + "from dff.script.conditions import true\n", + "from dff.script import Context, TRANSITIONS, RESPONSE, Message\n", + "from dff.script.labels import repeat\n", + "from dff.pipeline import Pipeline\n", + "from dff.utils.turn_caching import lru_cache\n", + "from dff.utils.testing.common import (\n", + " check_happy_path,\n", + " is_interactive_mode,\n", + " run_interactive_mode,\n", + ")\n", + "\n", + "external_data = {\"counter\": 0}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "4ec0b5b4", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:27.363462Z", + "iopub.status.busy": "2023-12-27T16:53:27.363151Z", + "iopub.status.idle": "2023-12-27T16:53:27.368293Z", + "shell.execute_reply": "2023-12-27T16:53:27.367582Z" + } + }, + "outputs": [], + "source": [ + "@lru_cache(maxsize=2)\n", + "def cached_response(_):\n", + " \"\"\"\n", + " This function will work exactly the same as the one from previous\n", + " tutorial with only one exception.\n", + " Only 2 results will be stored;\n", + " when the function will be executed with third arguments set,\n", + " the least recent result will be deleted.\n", + " \"\"\"\n", + " external_data[\"counter\"] += 1\n", + " return external_data[\"counter\"]\n", + "\n", + "\n", + "def response(ctx: Context, _, *__, **___) -> Message:\n", + " if ctx.validation:\n", + " return Message()\n", + " return Message(\n", + " text=f\"{cached_response(1)}-{cached_response(2)}-{cached_response(3)}-\"\n", + " f\"{cached_response(2)}-{cached_response(1)}\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e60e680d", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:27.370902Z", + "iopub.status.busy": "2023-12-27T16:53:27.370460Z", + "iopub.status.idle": "2023-12-27T16:53:27.374957Z", + "shell.execute_reply": "2023-12-27T16:53:27.374328Z" + } + }, + "outputs": [], + "source": [ + "toy_script = {\n", + " \"flow\": {\"node1\": {TRANSITIONS: {repeat(): true()}, RESPONSE: response}}\n", + "}\n", + "\n", + "happy_path = (\n", + " (Message(), Message(text=\"1-2-3-2-4\")),\n", + " (Message(), Message(text=\"5-6-7-6-8\")),\n", + " (Message(), Message(text=\"9-10-11-10-12\")),\n", + ")\n", + "\n", + "pipeline = Pipeline.from_script(toy_script, start_label=(\"flow\", \"node1\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "73131c4f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-12-27T16:53:27.377583Z", + "iopub.status.busy": "2023-12-27T16:53:27.377229Z", + "iopub.status.idle": "2023-12-27T16:53:27.383417Z", + "shell.execute_reply": "2023-12-27T16:53:27.382750Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(user) >>> \n", + " (bot) <<< text='1-2-3-2-4'\n", + "(user) >>> \n", + " (bot) <<< text='5-6-7-6-8'\n", + "(user) >>> \n", + " (bot) <<< text='9-10-11-10-12'\n" + ] + } + ], + "source": [ + "if __name__ == \"__main__\":\n", + " check_happy_path(pipeline, happy_path)\n", + " if is_interactive_mode():\n", + " run_interactive_mode(pipeline)" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all", + "text_representation": { + "extension": ".py", + "format_name": "percent" + } + }, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.doctrees/reference.doctree b/.doctrees/reference.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a7015a7626217c48a28afcb92cc67d31fad9c9d2 GIT binary patch literal 3086 zcmaJ@TW=gS6i%D&W;e+uP1+!!4N##%E1E1qJRqL92|gRPhAa$>_J8#eLIFWc|itf1V z$-dlqUO$q<(DTY`v9c9LU;g<0dsbuu_F$hBp?B+NF((H$w_nzcNBxpR-`Dae3|Z%} z+z$QL&q=tYRUzt0HRWNKdvDdW@`#V(*;c6|-**ztor4hHy@Kb>*C4IRj zCF0yVMEB0Ko7EKQ7$hbyO;w~TnQM|Nx8RgXycMfiZTH?qu<`*C`ab>-@&6G2$N1kv zNxPJX9c0p~82qD2xXVk0&9N#{F=q)!v5Q&#S3L=*>pQ0KC=zqtSU$sPQh94lC7rS< zsw#7CFXHxtwQc0viDD)!Q!r&Sp0rj@*3?Q>idaj!;Lh5XOROq=G=03j;kj=-dV5U{ z1bBqQB4Tk)gnd;cx=KZ+bdv%3h5Sl>Bfpj3$*1xMIT2xy^LZ*tFY9MFfEiv!cmrWG zZKn0B(3dJr!G`NFYK?V*K~d#XKs&9UZH3(kerF1O1>IecYMJ;-ek4DUr}7DEehb(d z1GjQfztw7SDrPurYkqcVd07fubE@yUUR!Lke6~a@-2hUErSTCmbhd;;ydYYmjTLJ0 z1$@ZjE-Y?0_>VpVr%Qh~@z$|YJ_&cd<%QFna>z<+W)>)jtn7K?xo#5G>cqTNbl;6| zkW`j9&pL+hFC-1q!@vno)kPCK>bg>938!FA=>NiXg&KElt#2w{R=%Fd!$}y<1lY>~ zW}s}CazYBvODy)93mI;?z;d@;R#sy*LLnIS2-?NPJu2x{9gZ_&d||v;*#vq<)Et2c zHqVUB2~P(O+$$LfPCeJbV;k^rqvAB9b9r-5GP<)@EnpMN|Xo+3gA9a1#-kdW0O)N2*b)} zXP=!ph41_8n@m`1ER(!QH86>?Beui?u1%&_tn{LlI-G9oY?zREU>c)K2Np-~uWxLe z47Vu&0L@9{M*n?IX=}CNbBX!f*0V}K7ye>7fA-AqgIVAnp}8;zHo^XHWE=3 zWGzL#_t2J5r)CL!9uc_!n_>nOYLzQrKi&H0-(EN?Rd?dLSu$-B-n<~;G?5(s;7M!fhCIh4(lc0pzXMPE3kPT{KQhMvj^zS{7Hj5Oq2)IbehnG_7Zf(udzk4sJxXk9RobEO%^JL&>6u{;2grbAv;iT>z zj@P8k_yjSmW!<7rB*Nqc`3?!2??+O}Omg|W3PY0ms}gR~fEDjg9#zV(z_R(vt zr{;dLX{+7AEPxJ@V4?#^>adp>t&wKLfG1?<>sJ06S$J9h1TJ9O1*>RYijx*xKkgdI ens~1h#{%xP^9TSlquTAJ)a%-|K(BW-J^v5da?c$A literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials.doctree b/.doctrees/tutorials.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ba45e21adfa17c190adad76a3cfa3406112fb9fa GIT binary patch literal 6975 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 Cr%UDl literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/index_context_storages.doctree b/.doctrees/tutorials/index_context_storages.doctree new file mode 100644 index 0000000000000000000000000000000000000000..039bf670274de4807e0a64c032620690315060c6 GIT binary patch literal 3660 zcmcIn-;Wzb5?->g*WMq_?m}`Pi10lGHYjV8I}Q*}aOi}TmHa>=bUIyVdS=@0*3NVf z-91_R0qG7Yh?V+{=KtVdx`_y6s`@h7gY>4j01PMLRG&`7z+GtH!bip@dLw<0&A z#=%aiiYxZK;~qcZ!VK|`$|0?+I-N1eG_@=ne*XB$P{@qUhf|TWp=PCK2FD9I8(OGp zL3154vlH$SE^L>+0w@a}Hi9?mGq<5lXgo!aKYha&m&rjukd%Yg_K{)7s_m zapSVi-_g%()GbU%DgHiF?IrDosv9R7t5-DDj$*J62hm*P&~4 zVkD~&t(V*&t#qJs(lF`7?Jp&f;U=zUm<=rm4e_XLa8n&93>@LQU(mcl;@cM4Rh2C( z>nD6Xas8&dDGiMFQFF{#T9jDq)dv!sa*pM0v#fNE)dBJZbf@QG7YBDjk{8|`PnEJ# zS+=%$_L4gY{EI3f^QqE>hh%`>C`xd5?7s#sU#}%BXQ3k-av>}y%O-^r8-u26Aq;50 zN?Ve%XAI%H;dVLA+hxZcvAGCMf!fL}l{&7Iv80;exWNV05>bPOX0(8$j})aWJj#FX z20|i61Xxm80Fvuhc6$2ZsS)`8#??*2v{ssM;1;xvh=;4D=s~yYNUwS6L@(am-PqZ1 z!GCgt+Ue>7OVc;5Zfsb(!|(tUn&F5~9^3UnPUWmZYecv+wC@{$v3nUqiqaVY>`^8- zCXoBYb%Bj3-iUCB4225Tn0wxJgD?t_mB`%?sI7ynDoWDUAEFus0;Q)VW+Aw_6(zCy zL+)3i(y%I11Y-rX4%r;U&&axEERocbXTk`8G58`NY?|cZA!I|@>DNTpGN^)C>uFL73QK4)<4?%&wo2^P_h!8 zV+y{LX$;wZkOZbC0UPdBZf$8k8jm41qjF)nk|U*OWAAPU&3FZ963YrC2+aZW6e~~f zz55;_I?&T}!+nsf+`qMSANoV6*mI^wg4t<21Na|vTjV&bkM;o&Wgzvlp1X^ZEJ%ya z_5q|G=`P)&Sx8Iggo_!^@rff8nyPpE2HnJxuPeaXAXG2Mb-g6HN@?9z+})H@+y|+z z;f6TJAckI4m1qWG{EpqBp#iiKNQ9iC3YNTZ9GJpX$%dXNLiy&3)?f_7-ML5ApzmZr z@B&xhj9DCVJB8LcVFeXA!B2(2v+>$T%?yZg&8Ic1UAk>1pLxt{u2-`O;EQ6!Tp4G0 zVyT`n8|U96Tnfd79v&DR-88VbJH8^VCufM^ZQ3rn0Yn(OA>RqY`a6HlzcsEO1a?v4 zhTnMp{L=8(@c*~`fpG`x$%@tosX)rZ@$gtn0xFk!^)=TewH^k1B)3RZ-sV55zOo@~ zwfk2*_LrwdqvI?7!LHf{I={W?tJ%Rk0M1A;t)eWv+e;ND+c=7&Y3zL3$bZ1&pZm{I v{rKqu9O1`^36p&IZF1aF#})BjD~>7KYi1IZ$ShdxW`W%rA_)DuN=E+&dlj`U literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/index_interfaces.doctree b/.doctrees/tutorials/index_interfaces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e1460570cd2e70d2fd337d73fb8b6ccfd92bad37 GIT binary patch literal 4632 zcmcIo-Hseb6<&Kizx!kF#x@DD#c+{i4eU&u7!sL_C~$$2l}2E%5+txn)!j8y#dLRd zs;a%SfAx0Erhs2=NS&auX>RJOtOtSJgc|KaS1r1uKu#b^6pf)u+Dm zopby_<1ah=8~)E;))^P+v`?cbl@Zg0ZAUW96PB9dQE}_T;{D>lb`(9)GFKrh>;^PK zF5*bBw0MA*yH4MTSobRftxzT_`+39OKjuRB@QLM%>u+NeA5e(Z3W2!ZTcy6RLDWBR=o-Gyu4JV3?yiRAD#CLT@ zU0~b(yVXNhvWiwB(qKVtGPF z3MQT=m7yM#wgz>i2mUUINDWgX98C9>Hif+ui6PuiRU0esY;Q$WM)&|9dYiwVK5sErKCWS&Nkzudsx%g`vc9KmYilj6az+iySl{(wpVR|${B zgP~oz>UvWjNJY+#nbLhzMXG2=)L*#x90p(uNU<4*YnZKr%Uv59nSB~$*f|7ch}ax zURytzE%=C!0fwQy`#+EgL=l>aMKJ&;jHot{d2qgY?)|Sglxi7Hm?0sj#+x}hx0zQ- zENMhgeqEbTW^9Z$1eMCM)%nkLhoG%sG>JuhF2+w?#{7f-lmCnVoAKZJ1mV9M^7m)_ z_cQ*78UNsDgMT>Ve=JMV9N*6ZIe&i)r+@xNJpb)6y|p^$@VtzK8!LEjA)1HoHWqMp zqFyO_3Yr0^rL^cSs{N9sRq2|s%_VfA_AZRg^J-qK>u!Y~*sI{gRL9g249S!nqth!J zsD_b-#wCkXI-XQ=M;sUIZkQ|Aevzv48QSf+#P=mb+XiJiETDnis~gghlIT28W^MBw z8t34^x}|N(++?{ahI}xzovIs^3gGEPXiI_dB*S8>bV%T3f@QZ_<|@W&2b6^x8BW|= zIBqz;J1y+~NJ^7R!Wj6__KN!kU`=y`DE1xpPE6BrPR9%pkI->n zL{YQPV6KoVA}E4D3f#CxX=s~hB}Vv6L_|cuDr)Go;7z;hrWdjh*^2`3+KKWcbA`8r zAOhtBd6&GJYROajol!ls$jtYqA3r$$U~t8CLm{vL_*Ub zb{|rmvNcZ)q}et;#u1~>GpO%WYGmFA*z4{IPBc?K7g_48Ma9Q<3uPNuRW1S1J(piV zPC7wb1>xJ>&} zjR%Fj<~02gpa~XFa6!h8KrB0a;pIDs=&l-tYv!F~VgALrd88|Kpq(()7tD;j4^Y5> zn50U_*A+jXk8UcP6hIBSun1{>iX(8w44hmGp*0~ap&}-j?j6@lR&_^I6WHbIUI<^F2a; z_Zj~*w>!(X=*{kg0$6b8f~!*E(siy^o_|?V>fz3C>q#Kv8W>*n>YA|D?yOks%)RQ3vs~E!7@;vB&4MDFUxBvhE literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/index_pipeline.doctree b/.doctrees/tutorials/index_pipeline.doctree new file mode 100644 index 0000000000000000000000000000000000000000..844aa8590531f4e81a7db939d6574ecda3e5bc9a GIT binary patch literal 3886 zcmcInTW=h<6;>?oYFC$)WyfxU#OM}<6S;`A&9$vjph4RpfCVgq#3+iQF3XwWELqKv z6OtpX9s;xvDJ+Ct*-IM%X;8rn4-d~dJUo~09R9iYw;vvE#Xomw zDlX*wlxCS!88hAuGL_aPlh%LjAOFRF;g8)=(@UdjoigvXz>#uMWSU9;9Gj!SZ$)8F zTLn9*D%a$B&wcic3p2()D#x_8>SV?w)6}wT{OM=U#zJOnKF&qK#+p@{85}RNG8b-UDBEt1;8 zVZlM$A~SG?+er&*42bydNm@2vgRHKWi-e}yQq}7%gHF z98cY&C1dw>+WGlyl29X3;K z%HNFDKL8qhya^fZur1`1OHHeaX-_v%B9}ExmPEw!zKXs0@&yRr`BjI znDrwl+Fr-3rJ{xK0^~Y;=g014B!e^s4PFd|K0|M8T29X@ON+);El>1Z9lZ0B8>O`l z4U4qBV(Ru6l!)b1H!#eGCX1GT)V1&&)qvP%Xn4P&MU8NGLqK2EwyLe4^2yW<+y1RI z&}x{WksC|P3X8qwK!Q`wvD|H!wJxwaKwJPa>3P`2!MzaFEAQ^+N?EBaTiHB&$sL4F zgRCI)TbC?Fu7Ht?OwgPQmh8r+oC~Zl>E*RW*%k6Sn zbjzMQVsinnS!w|aEmP0+GM3ac95=e8TEc7K(2SO#3=yJ~g-iJtZX_gpM3_uf1}^W0 zwarg{dSV2=UtixOOlzeVr4Ek=Q&V)?!^YDqT6$57cMmsqHdOGxyHTTbX~07C_4SPn zNp~k)0EuQe{8Pk%y@GGlDWln&6nw-lnb({LXPlxI>^V zVZIS_&--o^hCQ+*xmyCcb&%C%g|5@)AG{g~0;#7Zrah=RjFg!DA@)mBWmuglg24$~ zci0>)kdal%m?G$G7s3b(j6oM#ouNq)F49`Lv#1Ny*gh^}PzkZfz<$uOkpmUE@xlzR`0=EF)BswjQ*$))- zd`3cTxL3Hfm3cCmfNV~yE6bHUReCn@?tb8mCV-PzRw6()PK>NNdGzD=;L(xJ(+%~3 zvQ+=ZLOp7ghKxOD`cyER$1_m>6K=}_hYc-FP(&F({A}PJA|*@GRcChr(hRNF?hbmW zrE|i?j2HODVNr$5-!~;ioqb-TtPNasFRq&EoWdT2z9~2OIXV&2=XC|} z4-bsk4O$pL>i|W_99giyg}VVMOr31-i87>bp=eW#VT?WZ$QtyS3>AC@6F6fQhulxW zbxv4GMM3Zw3OF0hK5D03q-&8ksCMnPnY{3rRNbIK6Lc6PBPQqgN+Fi&8MAT1KY~$6 zF7)7l;OLf1=U-hL{wn@| z!QV3OU^Q4#`XChuc{m;#8%n6k1z%(4Dy8AW69&O86IFEakE}0m5IgSSn#SSc)F^a! zO+V08+W_bHH+8i;=>Ncs6mvS#!n?gxVWy9d4m6FOU$ykFarrO(r^tRh&QM2qZW+Y8 jIk1C{HS%6Zjv?D?XAq>wEWFuvvw&_b5QKhRC#U}gg*Oq9 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/index_script.doctree b/.doctrees/tutorials/index_script.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3a9342f8104f0ec57d7488bb331c7495337d8831 GIT binary patch literal 4523 zcmcIoTZ;CoE%%8WtbkyZ_)&WHFl_ zjzz)_70VUVSYBk4LjzSMXrd2ep;&~$`Jpz-M#d^u@Xdz>@4Af#Z0a}r|5@at!pFe1 zbBY6-g74@Nbz9UJB}UdDU_LPQd5T@W29k(<8Krf?gH$XIc*VMmDerp7%8nbqjvE#CGwafHd1 z5hh`cDc8Oq9F=#~tA}M&k8rqG_-($#`4*aIO`PFv?^Z}qs1k4=`-O)m= z{_0oP8X+?MSICHJ5$WQO#n8P}>nxzKr2Q(1WEKm5^`*s&msz|Ao43Y6NC^HRg6i79}=jo;^LO9C5)I*v{)>MgDw>Dm4&8>2U@>!TF5(!RK6AU3$6C0fuF97 zf3Y(DdXnH{J^>UiPP#fhm#LtC0VEeDuM(6$Gbe+K=wo5?8c7)nQ~>@(slBkcOH!K{ z0Xwbfgu#;WUwe%Io&SUXlmCnH_XD8$Z-)H0GycJhe>mg6J6YqupYcDGRb!6FTe$JR zJ%Ov)SK{xlPw1_bB9Fi3?Hw%PuUj9W0m3EW1xN%C8c=SRjNS0FkgPaaZ=eaKap7d1 z2lHB5HxT^DJsp@O3EbzIWrD4jJx$9i zT^PEKX2y4M=qY=3k2qGIbx{pn`(2t?Fjn1Vwxu<>HN}t*hOS#Rh*E)%yD`?*hNd|N z+vS1;tDIuERSm65FxmyZpsYoweijS2JU5*e?)q3tlS#uGlP6c)u5V^QZe%)^DlH({ zLwhN5)P~T)YPfv1l(2;PrdE?PVK|xhd04SBs2V?n0UfMVh9v9}L-?+`El!hq*m6BK z6^NRl#_G9J%e7)QvJ)(~cSco)s6j(9nnKdW6-CS+s`!)J6B%MeSQg3H*BjThW_ALbHiQW+UP;n&7J_K<+8D`clON1q(>QGQOu7x;6^-7{^3J zMC_~LSWFAvc6bPi1&fz|DS;gaq){zYyh`*;o=Z z=g_*wrn%ING%W*4B10YtbSnX(`y>{cjuL;6YL}by)Igf;;4m7=Q1%!=O{GTWRomV4 zUswd)h%d~z8}BW~m2acO)&>pO)LpS&pV;j7puMAHm*t zyaZhyBR)Ocx41F6erqs*SoiaD!)4Z&YBDI?4X+ut08L_8iVHH~Rl@S)=U={yi0-Lz zwBp`N7VdA)-6LJ82kj|SeZkB)tN{ubaFZrjtZV29c@(1^IqA3qpfV+Og4PEh<-=&^ zuIcm4&?(_!!V~<$lSF#(@92~w)!wtnY>iMo6~^U|Br>99OXLnBPO%?ceVK8Ha|j}= zPi>Ai#y?_1UsEvwnjlC-HUnwXz;7#N@C7~dL0Y<#e!b_MKswT{Y zS7Z;H0=Q7NJ#f$odIERXm!#$U6JmH9*MqiCB0OCo-}J)r`-p$Zzu=$n$NY2tnRQ)1 zW6pDI)j!U@obgX){PUURxBT!6JjouT7yFEVYTa)07K7W}NB|3dUs$S?_;j7?mHTf> zNeDO2TD!aCu{&Qi7+qiT59U?IQ~ixqU)2m+T#!kGHyiL$xa~;d zeHY%mC@7n6SMrY$jE{C?W)ZNb|(H023xVGy^0}x JEw`io{{UPt_#XfO literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/index_stats.doctree b/.doctrees/tutorials/index_stats.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ad36fb289ac9ce130f103d9c06c210b2de98d648 GIT binary patch literal 3260 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.context_storages.1_basics.doctree b/.doctrees/tutorials/tutorials.context_storages.1_basics.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ae68fc3eb8ffcf7e2ed659f692d2f2e91adb775b GIT binary patch literal 11844 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 H_3Hls75-Ih literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.context_storages.2_postgresql.doctree b/.doctrees/tutorials/tutorials.context_storages.2_postgresql.doctree new file mode 100644 index 0000000000000000000000000000000000000000..21eb7065e2a8557eb98c9f9a495aceb0751ee956 GIT binary patch literal 12990 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.context_storages.3_mongodb.doctree b/.doctrees/tutorials/tutorials.context_storages.3_mongodb.doctree new file mode 100644 index 0000000000000000000000000000000000000000..090accf07a488b06f8df3d19dc4a3707819fa724 GIT binary patch literal 12675 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.context_storages.4_redis.doctree b/.doctrees/tutorials/tutorials.context_storages.4_redis.doctree new file mode 100644 index 0000000000000000000000000000000000000000..401c03a8f45dedcc1a8189fb755a54fe73fa1b32 GIT binary patch literal 12485 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.context_storages.6_sqlite.doctree b/.doctrees/tutorials/tutorials.context_storages.6_sqlite.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0dcf9ebd28f61d35b0ac040d0e409c6d00277530 GIT binary patch literal 13358 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 CsDSJM literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.context_storages.7_yandex_database.doctree b/.doctrees/tutorials/tutorials.context_storages.7_yandex_database.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fe92fdda251609a66387a7bff1155949084a0fb0 GIT binary patch literal 13383 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 baoaVW7?v3CzVKcJi^E=u5IpS}H`V_G7^7rW literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.context_storages.8_db_benchmarking.doctree b/.doctrees/tutorials/tutorials.context_storages.8_db_benchmarking.doctree new file mode 100644 index 0000000000000000000000000000000000000000..11f75f1943bcca2525a78a3b19cc8637560e9187 GIT binary patch literal 406847 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.telegram.2_buttons.doctree b/.doctrees/tutorials/tutorials.messengers.telegram.2_buttons.doctree new file mode 100644 index 0000000000000000000000000000000000000000..14dcedf8c1bad7d520433497182503c7b313a0b8 GIT binary patch literal 19295 zcmeHP+ix7#d6y;ewi2m}vawEzlN7i$0_U(g*kVoik@{ zyG!nha&I63k~3${x}r}m!iOSyo0u3S)OmPDCP5(Zzcog#p(Cc z<=;*pr!Bq^8vBu-geFV*8PqUs$F)M{r4Q1UeTFaEPS1An8@qG}lF z6Mo5cJm&ea9kR&wT`T?W{HOBgHxoV=8$IeRwHNqoU;yYiwa@VdJ)b4sX4T}ry=MCZ zwiYIy$HKLJKipfh9K-c{de`;$^=^osjwwK2npc|8_J?U=c& zhwj=pbRZ`7y{H`=ru;n3CEa>1>F_0jFm~Lioe^fv^amBXC z4!@rVRu>Ki?s^m$M7a3?_+jBAmL~Sk*{|3y+2?Exzc1TO`})>w(y@P@&qd6P9p4+G zVGAE;VkdT4=@Y-Ulg(mXyV2IZCg+h7%~AdQ4m%(o8dK{#so*Vu@l^@Nwtam&=@?@t zLr}ko>NiVJF9@g?Kvx6E4D2#+n>)4>X^IRQSYtoZ@JEY%&2pl^H4ZhyvozbWm}Y1l zBXUe_j~#Y=BeXQf)70eJaz?lKGwiXL{nq5O-^^%rL16*2|ArJ%d*B-TXLb{NIikE>Jb{?@LpYeJMYAUuhfMJNuL z;5RSU;*3eOY>X0scQ-#P*zRr$u!z9BAF_e}h;1p-K4WZDdoPf|A`R+B;sdHmGkve? z^peo=dK$E?Lvm)gL)g)}%!m_+s${#CeT&aZvZe*oe5=ef(7+c1=2_@iKLCwOLLe0| zy0}!MS*b6x+}C*V<8$abJ`A8q&e0$+3V1id9*a|c?^&{!;+KqFV!Y1c6^b+EuPe!)SOE*YXh62A*uBNu({XnRx7D6HN>+2S zG!$9xZkAeods>Rv4=dF8=(C_k;#3G>!?Yet1pAPb_9&Fj2-RDf^KqD3s)|{u4h#oH+6Rbsdwlo`$*7V0^rxC%`Fu-s%49b1#=x63>_3SG)FHmEF%___CIjt*ov*D=irc&tB1^)N?pSpQAYrr*H7qamRv^c->#CAQ<+Zz0aO z)!6o9wyquei8er7=P?z8fB{2WisQ&{ti0Hfp9*h zQf@zDVaJG_!Q*>mAQ2Urwh=}f_wV2TH+{6fXZafRf|CHv<1@grpLoXSF<+#|q~R-1_(neAs`6^_3w{#k`qZ8s zsS~yZdmiETobJ0IZToqFX;OrToI zTw+lb4g;gqsQUgv_FmK=FSnLkRh3%}4L=|F!V^&u_ofFwtc%R(iukIE?`~G#-;;SU zSy+uhR~pO3@G?`240jA~2U8MJNQMR{(j6MjKyLLB(+A`@NhjwN*F+hG`_Bs3xy1eD z2#M?eEDFa79Utuo{so#GD}73-_5TF5N9r{xj5WR1e-+jHe}F%ubg9y2l(T;p{vh>{ zr;z!d?-Z$VWGu7HxXNa%2=~e~JdK#$`3)xAs@>hh+1=H;4s$Kd?`CB+lA?l05Vy6> zSfd^~kYo=!#GrmGjXChpLTw-akc!{U6WDh*(NaVap2;+Tl+`ekD2B#~ky-Beah|m= zBKJ3*VkSk1-~TZYSS*fYW&=wjS>RUoJ!j?QmC-(n9GT>`7VPDJ)cP22|0q283Dtf{ z3=ERo;!9PGmin#3*8g`jRem#nzCd0kPP@AbzVS)m{=(Vngr@^`Wg6;EJe8$lD#QnB z79(?}{V$ww0@E;ALE}0tsmD=F4dNwhmEuB!-N@BtP>DO84d6wq`b4OO!Pi9ifP z5luz(_8r$nJIgWQwc@j(qMmF)3+rDABou-tbCgygEI%`5m6j^GgTF|Uv?F_1?J>w6~x=Bt^oJ_QX5UaF&bGG4k{;-!-&2krs0$0i4I zKM@J5H_E;(z2ufQ20rUiu05e|`;cfcS*ohy+j@dGj`nTeT>@Mp6|HS(p9s&d8Tx+Q zT+iOfA8CrDL8VBzDTOy%u1%llr`7B+qyr7NxuP{a1lw@+l<90PuWQl^m3521t}*CX zhGxbGE1JGe|JxMG=plQUz?p1QL?*y2n#dgDfh806fbu^cUYA;LYRdw*V zcr86PyGYd0W{aU|E5Cic?xzh;h=AQ_ejS!Q!lsfQ>~n-fJKSG#uHm?9*f>mBtJa{Tuu6|j1@H;P{9h(To;WC}I$*8k z$CZiIV60-gCCv+Z$`x#eRyn`YG)j-C3`Cr4Iu#fR)AW3@n5XESpg)18E z?Z6AxJ%s9piy2~rR1a%hBeaC*Yb0)l8FMOZ9c@F29mnAf=zEN8l}hWtzK_fJv|@jc zc^iJzX5J$w^u2q{op<%Gy}zUHyubC%cJskkn*`(H)OnD!p?T*%T72P#f%T;QP)Nl`m$$zY7 z8>`hySjrx=f5&0DGJy#Yd;(zr*6Z4#K*4lS`+H@ZF#*`8e4$N;;R?&v5iDh`r29vZ zcDmudWgNadB}t#&cb*QkQ$18jsW6QAGo2n<&N3VypN5oL$#W?^79P(D92qHn#c6uU7pMPh z1ac=`oc_~E5ISPxiud_XlZCXOp<*K#Je9Gqy`A>44SV`4g zqr=>dV$C625|&le0>n@)^+DyT25Kv%+_p%YBscQBI_-LFG%VJ|MtjF=Ew76JT7lih z(fJltaJrhV)4_Y34c^$$nmQJc98cGqa_Mh)N2KcMx`u7|kLV~Fy3#CpUKS@hu~dgk z2e33D#*<^K6wE2&pm3%_TrLZLJ3x0tdf50Ouhp1|eVn#Rx6bf}s>3Y2CIrNDe926( z;OE79Ho!K&s7h$vIo;;-5sPX2GA;qRl3zXn<%1+IK=?0)h>4B z;8G7(`ndHRU!)5vykwvs(7_m7l);xG+$|CSL*j0X2wi?bmVhpF&@;k{d2H+Isu7Hs zHOTHB0UB^@5u4q07itISJIk@K=jN|7{0cj8fVCLM@*`DghR;~6lk_m$5*6H4bc@KMI$E%Oyz{9M(@_;bnSm0IGb#RwG>=}T?~($$dN31NyjB1 zw6u$f(8UaBIHyDdvUd@ap}qV<&hTw9tEP7ySKd?eIeNk%xKl;QBJ-#>3nagQBWfU( zdkM#F!8gwQ-A`utQosW2^b$v>vEu^6;39_r91rM8JoxABI1Zxq zwKWve1u=9cvF(SwwUoa=H3bN$smC~yN5_@unim$VzVhXp!01xgHEZ2dNzwh6RQC{9 zgP0a)+5)5XfExEMMLYH@Ch>MJ_ z04OjQZm1w74qu8CIKNscl~*947`=7#7rNepZcjq_92Lsv{-Sb&dR?J z6nrQB5R!o#gCJw%=+fa&x`66xu2w3=7xH33&I{S5HLy>QTEP*9=F5}>oft?u?f(LN C!~1*y literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.doctree b/.doctrees/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0f79e4c2c2691fb755e6b9cf3566ea51a23a80ed GIT binary patch literal 19148 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 E2Q>OF$p8QV literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.telegram.4_conditions.doctree b/.doctrees/tutorials/tutorials.messengers.telegram.4_conditions.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1507a1c1da2c1d086546233d9109fda45266d86d GIT binary patch literal 20134 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 R2$Es^5<5W$wxVkJe*vUG;d}r9 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.telegram.5_conditions_with_media.doctree b/.doctrees/tutorials/tutorials.messengers.telegram.5_conditions_with_media.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2bfc627c2d4b28285593e1ae95b8ce59255df017 GIT binary patch literal 20861 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 HQKj^Mu0!=n literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.telegram.7_polling_setup.doctree b/.doctrees/tutorials/tutorials.messengers.telegram.7_polling_setup.doctree new file mode 100644 index 0000000000000000000000000000000000000000..381d634b00b104b0e9792218e122aa56ede51125 GIT binary patch literal 10967 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 INNKJ5Z(VzyZ~y=R literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.telegram.8_webhook_setup.doctree b/.doctrees/tutorials/tutorials.messengers.telegram.8_webhook_setup.doctree new file mode 100644 index 0000000000000000000000000000000000000000..92cd0c3cdf61c9c09b4a9b53a635e0ba0a53327c GIT binary patch literal 11086 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.web_api_interface.1_fastapi.doctree b/.doctrees/tutorials/tutorials.messengers.web_api_interface.1_fastapi.doctree new file mode 100644 index 0000000000000000000000000000000000000000..722ad3cd6a48c572ee9e6fc5745e46138a97b315 GIT binary patch literal 22614 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.doctree b/.doctrees/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6f30eb992af8a16ee0945f06fae4cc02d87bfc65 GIT binary patch literal 18719 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.doctree b/.doctrees/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fc2c1a574c11c5a976975fadf7aa34483e527035 GIT binary patch literal 28028 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.pipeline.1_basics.doctree b/.doctrees/tutorials/tutorials.pipeline.1_basics.doctree new file mode 100644 index 0000000000000000000000000000000000000000..120b22b9bf521bc43e587a65a6ea9baed2e2411b GIT binary patch literal 18031 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.doctree b/.doctrees/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.doctree new file mode 100644 index 0000000000000000000000000000000000000000..eb2d7158c5b00c8647de1634d74d288f25b82346 GIT binary patch literal 18041 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 P%m5H(m_Z@6al7^3S8B8= literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.doctree b/.doctrees/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f91d8b76a94e6663caf0d80cbedbd3a11da45d73 GIT binary patch literal 29073 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.doctree b/.doctrees/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a727dd80bcd80817ab613c9979b02ef4d5988a1e GIT binary patch literal 21977 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.pipeline.4_groups_and_conditions_full.doctree b/.doctrees/tutorials/tutorials.pipeline.4_groups_and_conditions_full.doctree new file mode 100644 index 0000000000000000000000000000000000000000..36a1201cf2148031e9fffde79f25935b9bedd987 GIT binary patch literal 42590 zcmeHQe~cVgeYfMg^WFJZ?ED}<$>f~m_QHAXBo1jD`@nHXY@A%&*bt|-nVsF8y_vn) zna#|s@2rSoH(rv%{LU-zI-3#4PFy?9tp3`w_dNpKUB5a zysJ0ZJ3|b7Fl0M65E*VbgwVxchh^Hj?f8bPdxm4xyT3a6WB%`#JHcjOnSKH5w&8jfla$W3S<~^u2D!wsm*!g5%Ebt(%(V%&85_Sx_4;Amu%EYTjNB zYp>t&9T#oA_^)!?Z0m$}sM#r+s?WJxoM6Y#^Z|qcq z?S!dsT3$J1(B_)cO7KSz+Sm^28ke8z8oTgwC4R2P&o!X#*ka2%;I%bk;Ak6k(%tiV zw`088xYfAH*kma9x!IU7b{`+07$=RdCb(vholckb(gz z@qm;PjcBS%Vt|%Ir}RYUg1uWeP$Giy+{nTo2$%-c68N)iiNG7DfCx3+cYwmqjV!iGsq z<%SXD-`O)93EF}Ttv^G9%>eE%wV~UaU@M^Q^jUM~biW(i7ZW7@s~~AOq`K46OdGI0 zzYd!X*bAC#cb^Zo;7@(AZJ9OG$Hx(TWZmB@lxbko$1G9@f|8`;Ot7&mktOkEG2z=L z3Eyo(_(CT1Gnℜ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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.doctree b/.doctrees/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b371e29596c7c5664542eea62ae537aff74679ab GIT binary patch literal 14556 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 W*r4$skAR_S5gMkzLD@QSqyBH69TK|$ literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.doctree b/.doctrees/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6fca3f1e12059e28269a4dd9e1852a5a1aa0fa6b GIT binary patch literal 22636 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.script.core.1_basics.doctree b/.doctrees/tutorials/tutorials.script.core.1_basics.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1101632019bd3610a620de8078bcac1bcd3c433d GIT binary patch literal 27020 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 Jy~`PL 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.script.core.6_context_serialization.doctree b/.doctrees/tutorials/tutorials.script.core.6_context_serialization.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f723b626acff4c29a284cecd7d2747af90160057 GIT binary patch literal 14024 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

~HCs5r>59l-{N+k3!m#>6W*~87mX)D$ z!uJ(}q}BR7`Plg@(!8+7d9t2zT(p`6QbefsXr6rF{E9T6^MRmIDn_MlP^q#r>0fk- ziWYstd>oNct8w?@e_7X(z8*&Rub-&yUq9~d-#Ag-zj55%Upi6UUpnsYFQ2IHFCTaJ zubrswU+drfbZI&Y#c3iMh2jXn(@lfO{HJ&N@!S2Le*8`T^n((qOxOF#bjZ_>&kQ5V@~P?TsI=$lM-|5->0OA`^lY?2 z7bW5&5wR`jtWi=I-+3o5u!t>Tnbmgyr5-2Pr& zm1?p~m!D<1CQe(+*DUG@zgMJe3sIcEf>NLB7uY;cmlORiVWb4ph3H5s8p}x~)nBcj z{_fW&D8ndn>J#pubgxekdR_Dh`kx9{I*#a0?0*j94N8}0%XeZo&%x^YUHI7iXKt^1 zT!AYa_&@OqJ=Y>i4AcvEKHvY3%Gj8=4qL|^S9d|W-0@#ceydWwW&6l8kr)4pZT8ET zmR@IC&%Fmwz(7Xx*IdM+3`hMo(xJ3&1c3>`zym$^Zmpq>kcj-lt* zPFl|eLvhawA1aJ|{wuGJe10;=)Bi)8=SM!j&*g%r6XA?}K82`9YUlqae15uM`!<#b zhxrxRf8hh4Z}BBZaYgaT@v*V}d`K2Y-)n1Yi5t3g>y}t$%qJ_1X0mTkxXsg)^Jm&k ze$`rBeQuU-@HF`~M!E)6y0g>7Z9!0{>w@vy^qNi+clet85+60x+?`L9=`Uh6zu$kP ztX@AbtNCj(N6PAr1GAdH(sHD%E*+TF{GRubvbua=R*%`N_V^I={gF4J58Fy-r%id} zO~h5oypJAv6MXb@=riB{4{wr2K|ksf1?}@&?mMSW4G4XHab|36m~f_VG*bv>aHm7@Nq-QW$(?7iIlp++T;F^TC%6M(OuotYNA@_wP0qIUJ}@TYJh$8$Lu*e&2{;_^ zk~<#*&SchpjMsSeX5%V{b5s&I$#9lnDml(0hpkf*d`UWY2M$aDND=^z8Oek~QURy? z0y|W%g%=WZFj>VX^s?%C0J(eCcNNP6$__rjmjPDR!MFVaDYW9-Kn07|$HHn-hG|F! z#Kfs^F8SyyZeSxko8)jv&5dx%V?N<~0N31$qki-s#e3~&MS zd9jTzj)7B(Z&}lq>!-q5g5R`)uDnecPk;dp=RClrI*<@Y{`5fd!y<>7jIcmG`Jv(K za)O?U7UK#roGQfNGD6mqP4<96e5XTvjAy3FN_c^78$Ncy6hH8iLY1(hu~yJQb8`en zNFa-#%aks1rXhZn5#JcEIRTdjgf^R?7=dUQ`0cAVuX+ZaUnstmfp=!R08z0t699O0 z)5A4XU@D%A0fRCs6;34zUo5>Tk=VS9fIOTNbbD*RP<&CU9G<5>K-WB=#X2U(NS#fP z@VHJ!;b{QdhR?VR`mf1(FgnO#0+2IpbQ2OWH0Ua88$gDd2M2eVG8Ko=jjQJ;LZrQMP?B-4MRQyv^6e@l>h4cqN3M&WZ*lCyx4vJYH2Lf#?}TjpGS`PwohI_I|45_!tW$X`y#(--cf zw19hS7|d_;HsAsl39%53P5Vj=~XGNwEhlg!>{vtpPNMxx(TgXD&q4-U=Mx7!&p{N861( z!DHx;t@0Z#scX1M&cX{?rE*3W7)oeN5%x%c!dnrvrrTl~jCcp*t25@Kk>^yD+L9S= z;F&T&pUKs7wlBmez))ASEgak9@C>saL_nqqr-Va+1w$DPpf15Yd|BY5a%|=cU<%3w zlu~lyz-b`|9$qZu3RGuggIYUH5X30~LL+~YGR5=e|6rC4XJ`(BXW=uD7f#cA0%@hv zyu@QqKaWQPEi|1m*yDi&Hm4atJTgpsJ zPZuaoC#~{I7Yp?H#Y%GX&y{J#Z!p=xk*Ib+C{q#1z%(Ik$Q6^x_5v_ylcKPhC-q}hBNXADa<1I)s}wpF literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.script.core.9_pre_transitions_processing.doctree b/.doctrees/tutorials/tutorials.script.core.9_pre_transitions_processing.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3b1e7ca2ee039410d5aa2a81f2a162c7fbfe138f GIT binary patch literal 67098 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


ydpbjxmI#io&CreFF?uSc5ooEr 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 Vdl>r34ialnc&Tony4Sc?{V(*@b&dc4 literal 0 HcmV?d00001 diff --git a/.doctrees/user_guides.doctree b/.doctrees/user_guides.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ba46d40d488ab73bad9c16175440269509d1cc70 GIT binary patch literal 8160 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 literal 0 HcmV?d00001 diff --git a/.doctrees/user_guides/context_guide.doctree b/.doctrees/user_guides/context_guide.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ff86c9e0069b51dbbf0ae30afc8756f141f21ad6 GIT binary patch literal 56731 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 literal 0 HcmV?d00001 diff --git a/.doctrees/user_guides/optimization_guide.doctree b/.doctrees/user_guides/optimization_guide.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a6faa09eb58cc4e2092b4a3f5c11095b26efd4a9 GIT binary patch literal 22530 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 GY5zYb;afWZ literal 0 HcmV?d00001 diff --git a/.doctrees/user_guides/superset_guide.doctree b/.doctrees/user_guides/superset_guide.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fd5f9dfbc39d51215665d5857514d1a920c08beb GIT binary patch literal 39161 zcmeHQYmgk*RhA{~Yb32KKh`9&m3EZGtM%@zZ4%-Lk|3nmQDkIe*+hx4XM1OQw|mqx zJ?`$=)fyZUAcf>KDH0DRKp+qxKX^kZpi)IqP$40K6yXO|R8dfs6cs}82#l+IzNl>>a(Qd-K^$>~1DeH?DiVY!{xW`$5={>MUN%dQr$Lxh<@-~KS5Jee ztzY*i{7HZ6@!q^YlTD;S8hX~PZ1!BYyXs~YH%;SUwVPsuG@?C0BO&Og>YXmdZwFArS3Z2>iGx#!~TB%R)3FwTjnqOQOjG7yY03YFKZsNr?Mg=ZO)QI2JIKgm_oY~!7_4f(N7}Q>` zE@b;oc}YDEI!pt`=3M@o#2~=GOMrjYKSD_IUjoedw*&o0@$cpMcL)9*!>Ii`d9+L7 zaeom&OaO?PtU?&Bt%gzkf<;qJZvTj4A%7yPKjM4NDaML(AF$$_OWibaT2Z4LdQRPK zJFA|9(Knnla-!AL4cd;|Za5o3(sje&DZ1&ddrpGaf+P*pt4 zGxz-TW$<{aJRXl^lR>*djC*DmDDdqTN~eI*lbVbTLYG8N?1h1sI8hq|-SA>JbfS)j zA1spi6G8x^cH*SIn>ubt$R*S?+|+eQxPUINUH5Y61QH>ml0TlG&J4oNje#)#;XX`F zcUQfU-1<78*5+11?M$|BwHt(QbcIDaNSsxd z6eSeG%7f4Zk9eWi^3r(A!J}zZk3xfF(iEw>Uk##V*ve#i6PjWvNS1PUnTbi|rcgbF zhS6pSyAG|QB_Q{%ZdpG_tx0}Q)Y$xA6&ya7Esirti+g|Frig!0HJm+EfOp4;P(m~} z7{L}uzhi?m+=?oJ8rGnHIeVp&s==roOf)TWzYZ?SG(ujz9iaxd_PT-)&gDQ^QfRdV zGXI3;Ks?bWoF8N1^na2ilE9tIW|+x|;Vg^}Bk~&xMAp2v-B|U5#FUD%x8y0SpRoY> ztMN!Xv_;T%el%@$@5@8zdFL2oEYR?lJPmbM77_E0IQAobRQ!BD6|bvWNXt>LoYLF} zefY~eQksvQhL($6L>?QSb{W~naiA_c(I(7k!&%*OR!(%>I@nEz9a^6$Z@cR96V)hQ zXB}1%=+sIqd+XKfi@TbKT+Em4!yvv{xo+1kn_(^Wc=y=DR#I}XfG?}R8w&kxulxEM zgJ9gM1Y;2Xl`!zwa{BEhMji&eSkz+&1yPsOvlj2mTaI%Wc`-hv8)c!UhSijRSy!~ua_`1F9x&_AJy5*j*XAEQ-j(*39Fl4JwaX;b$h>8rU z;LFB{x%{Bh!9}>Xrx5FTF*HP*A~XaSi%!t4husD{EKvX6(rPydQzKwOi(FuiO}uu} zjo~7nc<3}*Xmuc}kqxeU4PaUc@!*?gpzc@$MdqXVgnom8JCtLm>lYSI zw-Kj@A#31;1p&tlax-Zhwb!knruif_G=)UNT(;kS$u$H*-oMq z#cs3)gn`Ut2f&jQXZNKxvQHm%>LCP#r6r1k^`MP#96oxK1n`cxD0$)5$zA6s;A{(N zY2g9HfkEh1)`L{Gp)?<^_}x{GBO9LA>9`wVv@tk?RK>HEqYybpud|6axg*MoBo1;2FD?q$J{tItlg1tf7XTS={2<4j1Tx^BM6IgxZH>aV&NcZ9E z6lJ&CQPR7VO(25D-OJf@=(g9pP-w^(CcYPj$WZ#hx*y_ST0^u;`9+9t^AfS42nlb_ zvzJl3a|;U(xZSo0_LRbv($Y-Pfb!;>AEed

F7Z#gdg@pa(fAIfktKEM6)rD@SsJ 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 XUZ2j5B!y6E(7Fw&jmdB7u2%ma2QfDs literal 0 HcmV?d00001 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/_images/annotations.png b/_images/annotations.png new file mode 100644 index 0000000000000000000000000000000000000000..b1e524890a8345a7f15acf071f5634524c7b61f4 GIT binary patch literal 64834 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 GMf?Z-ff#lG literal 0 HcmV?d00001 diff --git a/_images/benchmark_mass_compare.png b/_images/benchmark_mass_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..71911c5546eb110da746d19cb746afab8a16a137 GIT binary patch literal 84227 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 z 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

{h77eJE0ApnwQNu#%g5 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.script.responses.1_basics.doctree b/.doctrees/tutorials/tutorials.script.responses.1_basics.doctree new file mode 100644 index 0000000000000000000000000000000000000000..dfd73630646bcc11944d885c17b228158786fe05 GIT binary patch literal 20178 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.script.responses.2_buttons.doctree b/.doctrees/tutorials/tutorials.script.responses.2_buttons.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c5f1886cb03e35a29c2a06c566aa8e9f92bc3849 GIT binary patch literal 33578 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 Ef9tT{2LJ#7 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.script.responses.3_media.doctree b/.doctrees/tutorials/tutorials.script.responses.3_media.doctree new file mode 100644 index 0000000000000000000000000000000000000000..95e4936ee5daa61c8d494924a3f20f4eccc4814d GIT binary patch literal 26057 zcmeHQ-ESn>Rrk)g{m~wKK6eQsOKN*|*KM%dGns|3&e+nB-DGD6%xY&6Z5R(V)m68< zs$E@GsgJQ+BMXR#$e?;lg$EE)9)j`=5)$wb#0!r|@E`EPBOrxH2_WEi?yah>Dp$9= z-F9{ZZOL}kt$WYC_ndRjIrpP}^*fbsf1l0ppYXEh=!SLJP&Cc5HReU(f@Z5hmsx)F zt!V9cqob%EF1pHrX9upzqHqQ|RNXK&ms!!1sIJe1%ev9lP5k<%Vztv^dPSep=buDj zRq=h-Xa+vW6S<3q=AmdfubPVIAraRVOX-TM1uby;H%&#|cUg<)ndRieS9(mwf3WaB;^()6aNbwiL@m-6!#PJmqy0#~7%s|bFL5`Qbgs9l z+g-Nl2A0L#%>&!r-_#7nwA*sav=8K#3rfRMZPnWpv^M>~w_TL=`d1B4bq&XFpq-9w zq2rA^a+jfkhSQ6}S?Wgg;H97$u2AEA!}J=lOy*U)n-fXGTYUu#)vr8>^lSLNf!|l~ z`zbJV@vv)dd5%IdTX0Y%bDyy&(0^WkL;s9^QJ3)hnqJdyK9~!d`s?Am$5h|2tz+V= z<6*@&e3NA!h1Wk!I*Cee@SE&CI;VT(&Mfz32OisuSlt>29O3sW=9dX;W*p z5?QFW%No!;PieD;>-jeaJX%e(lg8ri! zhSiodqt!ywEMMY+mzc>!>*`*h>XPC~Pw#iplu295iBLPigm>ccJSokD4(~pC_4Hn# z8TO=9IT0ec*5LY6*LT7>A-<@uDi5-%0+VyeVU`Al%7>6=M)<t`&VVT*4(g zbWB4veB93A7G@y|*T=Cee84}%;K?&^C;aNUDR73{`AQ!NZ<3m>ov^~yG*iGCS3J6! z6V1IzL}Spv%Lzqqk020zpA1wPk1woCnZBLGjD=);Wy*YWLVmn62|u81A`ajzj`egx zmdr{p9GMQD#FPp*519hrnUEtBX^27w?@ToWMsI+TV?+Jn{n&ReC4Le9@cm?bg@5=+ zXT8J=35x?yoXl!7S28T0 zxh=#JS!-`t8aqS)6K9gsOddH>?j^jyacmdP7i7DA`~L2kv@gTC?`O3_KW=EQr>*RF zB~$$Gvc*U93fvTDy+SP+YJ=G_iRR>cxD#HM3cT&BQ7-FfYP6hDqc;;Zihb#z2vfhM z-%i5GY-n~}gl4L3`EYE^J?5Qh$}mexckBsb$7R!iswt-2G;MW1lOvpceEZ3k2r+l! z8_{R9{Xe`y{D@fJwY!cVDY>9{fo2c^H}hf^k#yomAo4>RQ^Nw$a2Ed9MWn9#U6Xs( zAE4O3Az)vynqnRmg_pj7Y1BQJDZBWeX@AVkA1B-mH*P`~Jzp^q_aiW56wxqCHJDd@ z!!exXp|tTe2{CEX@i9v!9P0cmg5qOLsv4FP_%dci%3ww<7*5aEZR<{yVOHlA&^wV| zi4gSv!W7HbnCnI_pfa5sRG4!vub$z&)#Odew}!OrUywheWtcGNlPc<~pz*JXID~lW z`oHHBiWzc7x!$RuBVmO>(RvZfYFgan&b!Dkf=YF+Q9g7N3f1{lUZ(Rh{ta&o&CD)h zYM#-uaQ80edOOu!+hQ zczBKK-Ay8tsNGqUP4!YiFOTWvV!EJ^SA=j5v#G9v7+eg&SRp$yh{O)@CK$LU82B{9 z!0_vPP1ZK7=VF+Cg}F_|H@ZiUX=1HdnyM?Vx4pNw_k8c@$r*5O4}-Z_SHjCrLQ_)y zyCwY3DsrFY6%!hAm>7X9&({X<{NBV`n6T^&D5X9A`p7+=MSrncB>Y^q!?)57=j~TL zT(Sc{HL3bssZIDQSI;3~Mrt=xo`tJ$c1;RD3SF^wD5DHPZB;nXK??V3#828rY-;I4)U}R zQjjl>*N!BkOTn%5;kyq%_>J9%@2*RaKD@X4@cyIwxT_X2HxLhL1}(68NjZ2#Ig^UD zAJx*TB?bE{R7ugy;>NnfC(-Lzg5z<0h5(`nMvIC`sSo1&eidSo5$m!(#UOEi>QxCp zs?OAXSyvpVCp(I-uk%#H6JfrBwZdmi?jpt!53pof@? zN8+H-5theoe~%(3j*-Lwb^aQ;OKp%CG6fsd`6XoU{3-sF*}cT_(38dP`51F4wj0FUW2Wank@-ZnmYAL&pIx}N*+j8KV(zaC7ec$o6 zHa8Cr4zO=Pk$J;*+nb2&d_&zt#!ZpBfo%)B;aKfj)wg@H*n0qh=X@a7T-)|*Tk#zY z_!^H5b4iq(Shuajz|_erZr5sSLZvAW{bXz(sMc$ap?bA-sit`QGOqo=Wwo^}GI0&x z4Oo5cs9!#FS!-cJM4LV%G=z6V)Gq#tmVME%6jP#|6A2R=*fDKg!a9bQTm3-X8%M*9 zT8_@ycPs9l;7E?+S>9wHP;UnD{R5LJ9`-hPkGf1!q?o%B^kcYCa{Z(_`cfilGPczq zvD=N?v7B7i#)P--)_#k0uJMa|q)o3E>nI_Fh`Prq-O5us)&MHosy&aj`v@X&nBq&f zZ%GKwnU|LgWiCjElKPzxrBU&%#@jhn>uVYn$Y@*UvX-*oWJw(Bhfq8nJ3FhM)a@lA zd99YOnQG5$0BmR6c)ewq%-epjv1LgXD&te zx!_LS|6jB1ee^HG09b%yygC&Fq+fti6uMowJrgd(Ds*ZV+^1Dn>_tm0ECcd+c04*8 zQZjITwpfHjR(Opv3|o2O{mS!0-gHl8NL6%DU1F$euIl~kEij}eX0sm5Vu%#GCKn!P`m zMPobaLX}DHMTdD!1p!SY-eHa@!-u35B{DeKAf8GHMPpcCOWKg6Wf}eqcs79~(kb3F zOeF(R61Sy1=g;v+$YX4t=jdbwT zr(x5Z``Hyx3Wv=bdxgooigT*wUmBu6txWZA;09Sc5j};uUfc{qy zR;}WYoh;KU2{=T)jrDw4rUSsTT-)MdWO3iEp0sye>MwDu@vNX!vL9Dp6ND(}EZdb! z38pi*DOWU>;YzB@Ps()p6o%qAN73liP<#=&OAUok@VuemTW+~ss&hIl^;e^qh{9>A zlEYG+U5vo8-NDZ9^Wi(>R7A;;|2GLb9(&Ey)o$Rr31ug0=Rsb;K5ZIo)q-bfs!m9z)K z^X2wIcuH>TgQq;_fBDV_zuJ->izKoC5vP6GHS7HHbPZlRdUC{zSBFc%-WR!s3wzvE zo3pEVVl^9^eZ>X+QTS7`Vfh4Z02~6;MrOD{;3BZ@8B8dJkEJdJ@AwR|L-~QiSfYc^2T>CdoG@O4JUZ@=5O#; z#Gi;6d2Y6SVQyw-oVRacQ@yjZBPQ9a?-{Gf6#VYpyK&-BW4xNo_4-6CyM)MCbLtYJ zV>|GYHXJ`SxSE?Rt?oTvrBZxdc9pMKPWe*8mvbEK2~fb) zWV`IO^R*r4D8=K;Zl$i^r(^MFYO;r+3QWypIoiS}j4$Un*!zcm|90dUejudMKc^vl z{(xh>^KF9GC`VHIBfi@(a%#+8+RHT z0#sW`puNNEK&%kJ;T&_DBS-@vEk^vNgP)%TN?sP)8!*{@@(G=!01lZ7On1E&UQGZD zfk>n=S@k?X4&U%y#qt3A1=J!Lc#3V*FA&@-z762Q=)p`_P4X}ew*fWcrEo!6NYvC0v zytB_T45)^Ow!0>fBLA6JXae)}- z9&EsiTY!v`P4J;R)BH$bWB54ygHsD4BzqRoz8=isdPv;-X0AsXW;5%8G35-rUaO?u5B?>Rc z2xfgM6;34zUoAW-km!8oA`ULE2)f5he>(r5P&m9oeSofcK=F4>j#|H*fOT@6jKT}} z-~f#QK(=dg7B3Tgm;;bj3*7`q3=O)&U4Jg0Vb- z1K0vPh9rBLr*P#a@%NJ)j|G}716?1vt^gkeSh)iEDlW;jMD^uohGz&By)0{nr!-BB ztE83l$^Zd1(>t(#;v!&(G|C)7RXadpZuE%c??&Dlot4t4TJeD4qgNkut}h* zo6uQbX<{5{z8*bT2w#O(cI9+{rX7&QmknNoSG*o@W)I~)VkADKV3YD+^18sfl)n~W zWRo?!&hN#o3~*Tmcq_!*R|)$OcxKEMBMyA#OhoDZz`^$==xYr8`vSUwJ$Tg3u4On7zdeJ z-t4RKcNw6rW=j~h7vV)_J&ORM6)p&af)Na51mp-lZvfR3NcFsTSJ5aa7ck?=h->sE zjU$-6Tq?bc!jnO*mEI8GJbkDG+2<)yTz7r|pBr9HJ<-OU4dI8paFKEmXg-zU`CfSX z6SAPT$)RUrJ4bJF<`t%O{*FizSu?(UUkrH{4d>v!c_nO literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.script.responses.4_multi_message.doctree b/.doctrees/tutorials/tutorials.script.responses.4_multi_message.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fee1ba1942451e1d354c7eed667440f1e46748f9 GIT binary patch literal 25113 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 Q4TBtD;wuPsJ8HN77rOK24gdfE literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.stats.1_extractor_functions.doctree b/.doctrees/tutorials/tutorials.stats.1_extractor_functions.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c37d339491b7327741a4ea2e7d09d0f3769bdd69 GIT binary patch literal 25246 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 WjHo!ORY~ILFp=G5x{e&xs{aS&(qOm% literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.stats.2_pipeline_integration.doctree b/.doctrees/tutorials/tutorials.stats.2_pipeline_integration.doctree new file mode 100644 index 0000000000000000000000000000000000000000..18595ac4075f45d9ad77833d0992bf5d4b2a6bd6 GIT binary patch literal 20939 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 EKcs6k5&!@I literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/tutorials.utils.1_cache.doctree b/.doctrees/tutorials/tutorials.utils.1_cache.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f9c4a98c23940c8dbd785366a3433cb8839fed72 GIT binary patch literal 13137 zcmeHO-ESOM6?YP^KQ^)R(Wa{U#l)fMn#SwqqqKDsiz+H2jcTeURF#rwGCOm3XYART z>C7F+R%B?AkVv_Jpo7E{5)u*;5-La(Q9gutsX*|C3Wzrz_!H;@FXeacojW_b-gVYZ znwBb-);sskx#ymH?)kj;?5maUeg4FV{1bbV$n}D?y5%@Q=&&Rc6HaKSZ5HtCjcoR{ zY$L0Q$=JG@glTNEOpE}+c0J#TS&&`MYVL@ba=n)8D+HZzTyj@mvY4wtAXy(x}sDSoTWHni6JIq8Fn<7=VyUGbDnpi@m-V zups1a%n~>Bo$U3A_toE5QZdf07GcZWNih~#Aev|HE-`5qt3+!|FD{sO!#10b(;#5+ z{M9gCnRh(P4_ju_53icd7?`%|4eexJ;hN_u4`Yl?I#2bKdwxtZtkk+B4c$ zfQ(*XYa}P7H($%7%wW2w)O1Vk;ia@;4J4YVdjjAmOVmwD>L#&YRx7q5w@k!O&jto} zy~NNQHqwL{Vbi!G*=n4s*XOOsgV4-7&1TMXp2mS>yBD|B{+P^>)>3mgz@u3tZ(^*;?d#w#U&NLlb(Ei9>q#2kMs;`|}X2Zmuqh`?lDv0eiu=l-{$sPVLrG4C#GN znNGJNzH@eVQhXUaUIl*_#pTYbKMWpqB%y2J!%4zaUrD%d zhHPhIzzZ2GEaHZTZGs3iVk=&syXra2C`^;uKLFZ313dPU!|E{u27$Jn0TT>hoNp%B z@!=rvaN+yI?~&Gry(KOj(fW|vu0bx$eat%CEv5Wim^9zKgv;eENmh-VUvX| zsD0T5Kob!Ix!QVS$6mzih+rI#!tliK+EGZBG)`Hy2TZ>^gLnr5bkw-;;xkL<&t5qD z#ijE{jTfIi{{kMKJ!(A9k_5K4cX-{m8q6#PqPV*h1R8%FH&x8ubEa zFMZz3R;yL;0shAFO}H7$IBi^;vBQ*b%q$p>ZRBcxhv&DG=Y{Tlx1a9)dywvlz5(F! zw}(+e9Rn_31N3IwrgXB$wz=;uHv!$xl4^5Chhn!P4kR2mi~|b`f%M}<*`86O;OX!C z@pMRg_S<1t*=x_<#vqX28!;BtzWkS+BO{+v2EbuWLq0hsBEksfjMdE91*zLJGc)qL z`*fjmG@*_!jH{mS8x7>V)+%%407PcUdvVOcI3>9)SO#RsaZ4UY*OJ+~ggV=lnQ(EU zqVeE}!>2^Kg#=LoUiCPVWF*ZAj%^D(u!>yGjo=g$APwh+G`|IfYMu)isg`K0T7HVe zUC$&Ba45}UmeT`E2Y?AqenH3<*}XD#+(l9kc%9;7Ksm)Pj&i^Xm`TYSXC7bLe5a#lkjTHXc1~9FzQr85wkA5Fkt}?P{@|HeXvX3I}8!H9lj~Km0dmjk!hbd(@tL z5C^_i2ctZgXSg@jO~xpnHg{FE*)lDKHZd2!RbShD!q1zax z2F+@paYwF|CfKI9+$e8_hF^1H)0lfp0m0nnTMvhpn-onLNm*Ds$e`(

>Ac$oi5SP8T51px5%Hgu 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
  • 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ǦWmXg@mW3ZlcS2ksmozzzwvuN6YYTppW86VaC& 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
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.database

    +"""
    +Database
    +--------
    +The `Database` module provides classes for managing the context storage of a dialog system.
    +The module can be used to store information such as the current state of the conversation
    +and other data. This module includes the intermediate class (:py:class:`.DBContextStorage`) is a class
    +that developers can inherit from in order to create their own context storage solutions.
    +This class implements the basic functionality and can be extended to add additional features as needed.
    +"""
    +import asyncio
    +import importlib
    +import threading
    +from functools import wraps
    +from abc import ABC, abstractmethod
    +from typing import Callable, Hashable, Optional
    +
    +from .protocol import PROTOCOLS
    +from ..script import Context
    +
    +
    +
    +[docs] +class DBContextStorage(ABC): + r""" + An abstract interface for `dff` DB context storages. + It includes the most essential methods of the python `dict` class. + Can not be instantiated. + + :param path: Parameter `path` should be set with the URI of the database. + It includes a prefix and the required connection credentials. + Example: postgresql+asyncpg://user:password@host:port/database + In the case of classes that save data to hard drive instead of external databases + you need to specify the location of the file, like you do in sqlite. + Keep in mind that in Windows you will have to use double backslashes '\\' + instead of forward slashes '/' when defining the file path. + + """ + + def __init__(self, path: str): + _, _, file_path = path.partition("://") + self.full_path = path + """Full path to access the context storage, as it was provided by user.""" + self.path = file_path + """`full_path` without a prefix defining db used""" + self._lock = threading.Lock() + """Threading for methods that require single thread access.""" + + def __getitem__(self, key: Hashable) -> Context: + """ + Synchronous method for accessing stored Context. + + :param key: Hashable key used to store Context instance. + :return: The stored context, associated with the given key. + """ + return asyncio.run(self.get_item_async(key)) + +
    +[docs] + @abstractmethod + async def get_item_async(self, key: Hashable) -> Context: + """ + Asynchronous method for accessing stored Context. + + :param key: Hashable key used to store Context instance. + :return: The stored context, associated with the given key. + """ + raise NotImplementedError
    + + + def __setitem__(self, key: Hashable, value: Context): + """ + Synchronous method for storing Context. + + :param key: Hashable key used to store Context instance. + :param value: Context to store. + """ + return asyncio.run(self.set_item_async(key, value)) + +
    +[docs] + @abstractmethod + async def set_item_async(self, key: Hashable, value: Context): + """ + Asynchronous method for storing Context. + + :param key: Hashable key used to store Context instance. + :param value: Context to store. + """ + raise NotImplementedError
    + + + def __delitem__(self, key: Hashable): + """ + Synchronous method for removing stored Context. + + :param key: Hashable key used to identify Context instance for deletion. + """ + return asyncio.run(self.del_item_async(key)) + +
    +[docs] + @abstractmethod + async def del_item_async(self, key: Hashable): + """ + Asynchronous method for removing stored Context. + + :param key: Hashable key used to identify Context instance for deletion. + """ + raise NotImplementedError
    + + + def __contains__(self, key: Hashable) -> bool: + """ + Synchronous method for finding whether any Context is stored with given key. + + :param key: Hashable key used to check if Context instance is stored. + :return: True if there is Context accessible by given key, False otherwise. + """ + return asyncio.run(self.contains_async(key)) + +
    +[docs] + @abstractmethod + async def contains_async(self, key: Hashable) -> bool: + """ + Asynchronous method for finding whether any Context is stored with given key. + + :param key: Hashable key used to check if Context instance is stored. + :return: True if there is Context accessible by given key, False otherwise. + """ + raise NotImplementedError
    + + + def __len__(self) -> int: + """ + Synchronous method for retrieving number of stored Contexts. + + :return: The number of stored Contexts. + """ + return asyncio.run(self.len_async()) + +
    +[docs] + @abstractmethod + async def len_async(self) -> int: + """ + Asynchronous method for retrieving number of stored Contexts. + + :return: The number of stored Contexts. + """ + raise NotImplementedError
    + + +
    +[docs] + def get(self, key: Hashable, default: Optional[Context] = None) -> Context: + """ + Synchronous method for accessing stored Context, returning default if no Context is stored with the given key. + + :param key: Hashable key used to store Context instance. + :param default: Optional default value to be returned if no Context is found. + :return: The stored context, associated with the given key or default value. + """ + return asyncio.run(self.get_async(key, default))
    + + +
    +[docs] + async def get_async(self, key: Hashable, default: Optional[Context] = None) -> Context: + """ + Asynchronous method for accessing stored Context, returning default if no Context is stored with the given key. + + :param key: Hashable key used to store Context instance. + :param default: Optional default value to be returned if no Context is found. + :return: The stored context, associated with the given key or default value. + """ + try: + return await self.get_item_async(str(key)) + except KeyError: + return default
    + + +
    +[docs] + def clear(self): + """ + Synchronous method for clearing context storage, removing all the stored Contexts. + """ + return asyncio.run(self.clear_async())
    + + +
    +[docs] + @abstractmethod + async def clear_async(self): + """ + Asynchronous method for clearing context storage, removing all the stored Contexts. + """ + raise NotImplementedError
    +
    + + + +
    +[docs] +def threadsafe_method(func: Callable): + """ + A decorator that makes sure methods of an object instance are threadsafe. + """ + + @wraps(func) + def _synchronized(self, *args, **kwargs): + with self._lock: + return func(self, *args, **kwargs) + + return _synchronized
    + + + +
    +[docs] +def context_storage_factory(path: str, **kwargs) -> DBContextStorage: + """ + Use context_storage_factory to lazy import context storage types and instantiate them. + The function takes a database connection URI or its equivalent. It should be prefixed with database name, + followed by the symbol triplet '://'. + + Then, you should list the connection parameters like this: user:password@host:port/database + The whole URI will then look like this: + + - shelve://path_to_the_file/file_name + - json://path_to_the_file/file_name + - pickle://path_to_the_file/file_name + - sqlite+aiosqlite://path_to_the_file/file_name + - redis://:pass@localhost:6378/0 + - mongodb://admin:pass@localhost:27016/admin + - mysql+asyncmy://root:pass@localhost:3306/test + - postgresql+asyncpg://postgres:pass@localhost:5430/test + - grpc://localhost:2134/local + - grpcs://localhost:2134/local + + For context storages that write to local files, the function expects a file path instead of connection params: + json://file.json + When using sqlite backend your prefix should contain three slashes if you use Windows, or four in other cases: + sqlite:////file.db + If you want to use additional parameters in class constructors, you can pass them to this function as kwargs. + + :param path: Path to the file. + """ + prefix, _, _ = path.partition("://") + if "sql" in prefix: + prefix = prefix.split("+")[0] # this takes care of alternative sql drivers + assert ( + prefix in PROTOCOLS + ), f""" + URI path should be prefixed with one of the following:\n + {", ".join(PROTOCOLS.keys())}.\n + For more information, see the function doc:\n{context_storage_factory.__doc__} + """ + _class, module = PROTOCOLS[prefix]["class"], PROTOCOLS[prefix]["module"] + target_class = getattr(importlib.import_module(f".{module}", package="dff.context_storages"), _class) + return target_class(path, **kwargs)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/json.html b/_modules/dff/context_storages/json.html new file mode 100644 index 0000000000..90a8d74ada --- /dev/null +++ b/_modules/dff/context_storages/json.html @@ -0,0 +1,697 @@ + + + + + + + + + + dff.context_storages.json — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.json

    +"""
    +JSON
    +----
    +The JSON module provides a json-based version of the :py:class:`.DBContextStorage` class.
    +This class is used to store and retrieve context data in a JSON. It allows the DFF to easily
    +store and retrieve context data.
    +"""
    +import asyncio
    +from typing import Hashable
    +
    +try:
    +    import aiofiles
    +    import aiofiles.os
    +
    +    json_available = True
    +except ImportError:
    +    json_available = False
    +
    +from pydantic import BaseModel, model_validator
    +
    +from .database import DBContextStorage, threadsafe_method
    +from dff.script import Context
    +
    +
    +
    +[docs] +class SerializableStorage(BaseModel, extra="allow"): +
    +[docs] + @model_validator(mode="before") + @classmethod + def validate_any(cls, vals): + for key, value in vals.items(): + vals[key] = Context.cast(value) + return vals
    +
    + + + +
    +[docs] +class JSONContextStorage(DBContextStorage): + """ + Implements :py:class:`.DBContextStorage` with `json` as the storage format. + + :param path: Target file URI. Example: `json://file.json`. + """ + + def __init__(self, path: str): + DBContextStorage.__init__(self, path) + asyncio.run(self._load()) + +
    +[docs] + @threadsafe_method + async def len_async(self) -> int: + return len(self.storage.model_extra)
    + + +
    +[docs] + @threadsafe_method + async def set_item_async(self, key: Hashable, value: Context): + self.storage.model_extra.__setitem__(str(key), value) + await self._save()
    + + +
    +[docs] + @threadsafe_method + async def get_item_async(self, key: Hashable) -> Context: + await self._load() + return Context.cast(self.storage.model_extra.__getitem__(str(key)))
    + + +
    +[docs] + @threadsafe_method + async def del_item_async(self, key: Hashable): + self.storage.model_extra.__delitem__(str(key)) + await self._save()
    + + +
    +[docs] + @threadsafe_method + async def contains_async(self, key: Hashable) -> bool: + await self._load() + return self.storage.model_extra.__contains__(str(key))
    + + +
    +[docs] + @threadsafe_method + async def clear_async(self): + self.storage.model_extra.clear() + await self._save()
    + + +
    +[docs] + async def _save(self): + async with aiofiles.open(self.path, "w+", encoding="utf-8") as file_stream: + await file_stream.write(self.storage.model_dump_json())
    + + +
    +[docs] + async def _load(self): + if not await aiofiles.os.path.isfile(self.path) or (await aiofiles.os.stat(self.path)).st_size == 0: + self.storage = SerializableStorage() + await self._save() + else: + async with aiofiles.open(self.path, "r", encoding="utf-8") as file_stream: + self.storage = SerializableStorage.model_validate_json(await file_stream.read())
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/mongo.html b/_modules/dff/context_storages/mongo.html new file mode 100644 index 0000000000..e1cfe2500d --- /dev/null +++ b/_modules/dff/context_storages/mongo.html @@ -0,0 +1,698 @@ + + + + + + + + + + dff.context_storages.mongo — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.mongo

    +"""
    +Mongo
    +-----
    +The Mongo module provides a MongoDB-based version of the :py:class:`.DBContextStorage` class.
    +This class is used to store and retrieve context data in a MongoDB.
    +It allows the DFF to easily store and retrieve context data in a format that is highly scalable
    +and easy to work with.
    +
    +MongoDB is a widely-used, open-source NoSQL database that is known for its scalability and performance.
    +It stores data in a format similar to JSON, making it easy to work with the data in a variety of programming languages
    +and environments. Additionally, MongoDB is highly scalable and can handle large amounts of data
    +and high levels of read and write traffic.
    +"""
    +from typing import Hashable, Dict, Any
    +
    +try:
    +    from motor.motor_asyncio import AsyncIOMotorClient
    +    from bson.objectid import ObjectId
    +
    +    mongo_available = True
    +except ImportError:
    +    mongo_available = False
    +    AsyncIOMotorClient = None
    +    ObjectId = Any
    +
    +import json
    +
    +from dff.script import Context
    +
    +from .database import DBContextStorage, threadsafe_method
    +from .protocol import get_protocol_install_suggestion
    +
    +
    +
    +[docs] +class MongoContextStorage(DBContextStorage): + """ + Implements :py:class:`.DBContextStorage` with `mongodb` as the database backend. + + :param path: Database URI. Example: `mongodb://user:password@host:port/dbname`. + :param collection: Name of the collection to store the data in. + """ + + def __init__(self, path: str, collection: str = "context_collection"): + DBContextStorage.__init__(self, path) + if not mongo_available: + install_suggestion = get_protocol_install_suggestion("mongodb") + raise ImportError("`mongodb` package is missing.\n" + install_suggestion) + self._mongo = AsyncIOMotorClient(self.full_path) + db = self._mongo.get_default_database() + self.collection = db[collection] + +
    +[docs] + @staticmethod + def _adjust_key(key: Hashable) -> Dict[str, ObjectId]: + """Convert a n-digit context id to a 24-digit mongo id""" + new_key = hex(int.from_bytes(str.encode(str(key)), "big", signed=False))[3:] + new_key = (new_key * (24 // len(new_key) + 1))[:24] + assert len(new_key) == 24 + return {"_id": ObjectId(new_key)}
    + + +
    +[docs] + @threadsafe_method + async def set_item_async(self, key: Hashable, value: Context): + new_key = self._adjust_key(key) + value = value if isinstance(value, Context) else Context.cast(value) + document = json.loads(value.model_dump_json()) + + document.update(new_key) + await self.collection.replace_one(new_key, document, upsert=True)
    + + +
    +[docs] + @threadsafe_method + async def get_item_async(self, key: Hashable) -> Context: + adjust_key = self._adjust_key(key) + document = await self.collection.find_one(adjust_key) + if document: + document.pop("_id") + ctx = Context.cast(document) + return ctx + raise KeyError
    + + +
    +[docs] + @threadsafe_method + async def del_item_async(self, key: Hashable): + adjust_key = self._adjust_key(key) + await self.collection.delete_one(adjust_key)
    + + +
    +[docs] + @threadsafe_method + async def contains_async(self, key: Hashable) -> bool: + adjust_key = self._adjust_key(key) + return bool(await self.collection.find_one(adjust_key))
    + + +
    +[docs] + @threadsafe_method + async def len_async(self) -> int: + return await self.collection.estimated_document_count()
    + + +
    +[docs] + @threadsafe_method + async def clear_async(self): + await self.collection.delete_many(dict())
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/pickle.html b/_modules/dff/context_storages/pickle.html new file mode 100644 index 0000000000..0d3fa8532c --- /dev/null +++ b/_modules/dff/context_storages/pickle.html @@ -0,0 +1,686 @@ + + + + + + + + + + dff.context_storages.pickle — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.pickle

    +"""
    +Pickle
    +------
    +The Pickle module provides a pickle-based version of the :py:class:`.DBContextStorage` class.
    +This class is used to store and retrieve context data in a pickle format.
    +It allows the DFF to easily store and retrieve context data in a format that is efficient
    +for serialization and deserialization and can be easily used in python.
    +
    +Pickle is a python library that allows to serialize and deserialize python objects.
    +It is efficient and fast, but it is not recommended to use it to transfer data across
    +different languages or platforms because it's not cross-language compatible.
    +"""
    +import asyncio
    +import pickle
    +from typing import Hashable
    +
    +try:
    +    import aiofiles
    +    import aiofiles.os
    +
    +    pickle_available = True
    +except ImportError:
    +    pickle_available = False
    +
    +from .database import DBContextStorage, threadsafe_method
    +from dff.script import Context
    +
    +
    +
    +[docs] +class PickleContextStorage(DBContextStorage): + """ + Implements :py:class:`.DBContextStorage` with `pickle` as driver. + + :param path: Target file URI. Example: 'pickle://file.pkl'. + """ + + def __init__(self, path: str): + DBContextStorage.__init__(self, path) + asyncio.run(self._load()) + +
    +[docs] + @threadsafe_method + async def len_async(self) -> int: + return len(self.dict)
    + + +
    +[docs] + @threadsafe_method + async def set_item_async(self, key: Hashable, value: Context): + self.dict.__setitem__(str(key), value) + await self._save()
    + + +
    +[docs] + @threadsafe_method + async def get_item_async(self, key: Hashable) -> Context: + await self._load() + return Context.cast(self.dict.__getitem__(str(key)))
    + + +
    +[docs] + @threadsafe_method + async def del_item_async(self, key: Hashable): + self.dict.__delitem__(str(key)) + await self._save()
    + + +
    +[docs] + @threadsafe_method + async def contains_async(self, key: Hashable) -> bool: + await self._load() + return self.dict.__contains__(str(key))
    + + +
    +[docs] + @threadsafe_method + async def clear_async(self): + self.dict.clear() + await self._save()
    + + +
    +[docs] + async def _save(self): + async with aiofiles.open(self.path, "wb+") as file: + await file.write(pickle.dumps(self.dict))
    + + +
    +[docs] + async def _load(self): + if not await aiofiles.os.path.isfile(self.path) or (await aiofiles.os.stat(self.path)).st_size == 0: + self.dict = dict() + await self._save() + else: + async with aiofiles.open(self.path, "rb") as file: + self.dict = pickle.loads(await file.read())
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/protocol.html b/_modules/dff/context_storages/protocol.html new file mode 100644 index 0000000000..bd81a5fc86 --- /dev/null +++ b/_modules/dff/context_storages/protocol.html @@ -0,0 +1,617 @@ + + + + + + + + + + dff.context_storages.protocol — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.protocol

    +"""
    +Protocol
    +--------
    +The Protocol module contains the base code for the different communication protocols used in the DFF.
    +It defines the :py:data:`.PROTOCOLS` constant, which lists all the supported protocols in the DFF.
    +
    +The module also includes a function :py:func:`.get_protocol_install_suggestion()` that is used to provide
    +suggestions for installing the necessary dependencies for a specific protocol.
    +This function takes the name of the desired protocol as an argument and returns
    +a string containing the necessary installation commands for that protocol.
    +
    +The DFF supports a variety of communication protocols,
    +which allows it to communicate with different types of databases.
    +"""
    +import json
    +import pathlib
    +
    +with open(pathlib.Path(__file__).parent / "protocols.json", "r", encoding="utf-8") as protocols:
    +    PROTOCOLS = json.load(protocols)
    +_prtocol_keys = {"module", "class", "slug", "uri_example"}
    +assert all(set(proc.keys()) == _prtocol_keys for proc in PROTOCOLS.values()), "Protocols are incomplete"
    +
    +
    +
    +[docs] +def get_protocol_install_suggestion(protocol_name: str) -> str: + """ + Provide suggestions for installing the necessary dependencies for a specific protocol. + + :param protocol_name: Protocol name. + """ + protocol = PROTOCOLS.get(protocol_name, {}) + slug = protocol.get("slug") + if slug: + return f"Try to run `pip install dff[{slug}]`" + return ""
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/redis.html b/_modules/dff/context_storages/redis.html new file mode 100644 index 0000000000..5052145a73 --- /dev/null +++ b/_modules/dff/context_storages/redis.html @@ -0,0 +1,673 @@ + + + + + + + + + + dff.context_storages.redis — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.redis

    +"""
    +Redis
    +-----
    +The Redis module provides a Redis-based version of the :py:class:`.DBContextStorage` class.
    +This class is used to store and retrieve context data in a Redis.
    +It allows the DFF to easily store and retrieve context data in a format that is highly scalable
    +and easy to work with.
    +
    +Redis is an open-source, in-memory data structure store that is known for its
    +high performance and scalability. It stores data in key-value pairs and supports a variety of data
    +structures such as strings, hashes, lists, sets, and more.
    +Additionally, Redis can be used as a cache, message broker, and database, making it a versatile
    +and powerful choice for data storage and management.
    +"""
    +import json
    +from typing import Hashable
    +
    +try:
    +    from redis.asyncio import Redis
    +
    +    redis_available = True
    +except ImportError:
    +    redis_available = False
    +
    +from dff.script import Context
    +
    +from .database import DBContextStorage, threadsafe_method
    +from .protocol import get_protocol_install_suggestion
    +
    +
    +
    +[docs] +class RedisContextStorage(DBContextStorage): + """ + Implements :py:class:`.DBContextStorage` with `redis` as the database backend. + + :param path: Database URI string. Example: `redis://user:password@host:port`. + """ + + def __init__(self, path: str): + DBContextStorage.__init__(self, path) + if not redis_available: + install_suggestion = get_protocol_install_suggestion("redis") + raise ImportError("`redis` package is missing.\n" + install_suggestion) + self._redis = Redis.from_url(self.full_path) + +
    +[docs] + @threadsafe_method + async def contains_async(self, key: Hashable) -> bool: + return bool(await self._redis.exists(str(key)))
    + + +
    +[docs] + @threadsafe_method + async def set_item_async(self, key: Hashable, value: Context): + value = value if isinstance(value, Context) else Context.cast(value) + await self._redis.set(str(key), value.model_dump_json())
    + + +
    +[docs] + @threadsafe_method + async def get_item_async(self, key: Hashable) -> Context: + result = await self._redis.get(str(key)) + if result: + result_dict = json.loads(result.decode("utf-8")) + return Context.cast(result_dict) + raise KeyError(f"No entry for key {key}.")
    + + +
    +[docs] + @threadsafe_method + async def del_item_async(self, key: Hashable): + await self._redis.delete(str(key))
    + + +
    +[docs] + @threadsafe_method + async def len_async(self) -> int: + return await self._redis.dbsize()
    + + +
    +[docs] + @threadsafe_method + async def clear_async(self): + await self._redis.flushdb()
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/shelve.html b/_modules/dff/context_storages/shelve.html new file mode 100644 index 0000000000..5da0312901 --- /dev/null +++ b/_modules/dff/context_storages/shelve.html @@ -0,0 +1,652 @@ + + + + + + + + + + dff.context_storages.shelve — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.shelve

    +"""
    +Shelve
    +------
    +The Shelve module provides a shelve-based version of the :py:class:`.DBContextStorage` class.
    +This class is used to store and retrieve context data in a shelve format.
    +It allows the DFF to easily store and retrieve context data in a format that is efficient
    +for serialization and deserialization and can be easily used in python.
    +
    +Shelve is a python library that allows to store and retrieve python objects.
    +It is efficient and fast, but it is not recommended to use it to transfer data across different languages
    +or platforms because it's not cross-language compatible.
    +It stores data in a dbm-style format in the file system, which is not as fast as the other serialization
    +libraries like pickle or JSON.
    +"""
    +import pickle
    +from shelve import DbfilenameShelf
    +from typing import Hashable
    +
    +from dff.script import Context
    +
    +from .database import DBContextStorage
    +
    +
    +
    +[docs] +class ShelveContextStorage(DBContextStorage): + """ + Implements :py:class:`.DBContextStorage` with `shelve` as the driver. + + :param path: Target file URI. Example: `shelve://file.db`. + """ + + def __init__(self, path: str): + DBContextStorage.__init__(self, path) + self.shelve_db = DbfilenameShelf(filename=self.path, protocol=pickle.HIGHEST_PROTOCOL) + +
    +[docs] + async def get_item_async(self, key: Hashable) -> Context: + return self.shelve_db[str(key)]
    + + +
    +[docs] + async def set_item_async(self, key: Hashable, value: Context): + self.shelve_db.__setitem__(str(key), value)
    + + +
    +[docs] + async def del_item_async(self, key: Hashable): + self.shelve_db.__delitem__(str(key))
    + + +
    +[docs] + async def contains_async(self, key: Hashable) -> bool: + return self.shelve_db.__contains__(str(key))
    + + +
    +[docs] + async def len_async(self) -> int: + return self.shelve_db.__len__()
    + + +
    +[docs] + async def clear_async(self): + self.shelve_db.clear()
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/sql.html b/_modules/dff/context_storages/sql.html new file mode 100644 index 0000000000..4393506d6d --- /dev/null +++ b/_modules/dff/context_storages/sql.html @@ -0,0 +1,804 @@ + + + + + + + + + + dff.context_storages.sql — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.sql

    +"""
    +SQL
    +---
    +The SQL module provides a SQL-based version of the :py:class:`.DBContextStorage` class.
    +This class is used to store and retrieve context data from SQL databases.
    +It allows the DFF to easily store and retrieve context data in a format that is highly scalable
    +and easy to work with.
    +
    +The SQL module provides the ability to choose the backend of your choice from
    +MySQL, PostgreSQL, or SQLite. You can choose the one that is most suitable for your use case and environment.
    +MySQL and PostgreSQL are widely used open-source relational databases that are known for their
    +reliability and scalability. SQLite is a self-contained, high-reliability, embedded, full-featured,
    +public-domain, SQL database engine.
    +"""
    +import asyncio
    +import importlib
    +import json
    +from typing import Hashable
    +
    +from dff.script import Context
    +
    +from .database import DBContextStorage, threadsafe_method
    +from .protocol import get_protocol_install_suggestion
    +
    +try:
    +    from sqlalchemy import Table, MetaData, Column, JSON, String, inspect, select, delete, func
    +    from sqlalchemy.ext.asyncio import create_async_engine
    +
    +    sqlalchemy_available = True
    +except (ImportError, ModuleNotFoundError):
    +    sqlalchemy_available = False
    +
    +postgres_available = sqlite_available = mysql_available = False
    +
    +try:
    +    import asyncpg
    +
    +    _ = asyncpg
    +
    +    postgres_available = True
    +except (ImportError, ModuleNotFoundError):
    +    pass
    +
    +try:
    +    import asyncmy
    +
    +    _ = asyncmy
    +
    +    mysql_available = True
    +except (ImportError, ModuleNotFoundError):
    +    pass
    +
    +try:
    +    import aiosqlite
    +
    +    _ = aiosqlite
    +
    +    sqlite_available = True
    +except (ImportError, ModuleNotFoundError):
    +    pass
    +
    +if not sqlalchemy_available:
    +    postgres_available = sqlite_available = mysql_available = False
    +
    +
    +
    +[docs] +def import_insert_for_dialect(dialect: str): + """ + Imports the insert function into global scope depending on the chosen sqlalchemy dialect. + + :param dialect: Chosen sqlalchemy dialect. + """ + global insert + insert = getattr( + importlib.import_module(f"sqlalchemy.dialects.{dialect}"), + "insert", + )
    + + + +
    +[docs] +class SQLContextStorage(DBContextStorage): + """ + | SQL-based version of the :py:class:`.DBContextStorage`. + | Compatible with MySQL, Postgresql, Sqlite. + + :param path: Standard sqlalchemy URI string. + When using sqlite backend in Windows, keep in mind that you have to use double backslashes '\\' + instead of forward slashes '/' in the file path. + :param table_name: The name of the table to use. + :param custom_driver: If you intend to use some other database driver instead of the recommended ones, + set this parameter to `True` to bypass the import checks. + """ + + def __init__(self, path: str, table_name: str = "contexts", custom_driver: bool = False): + DBContextStorage.__init__(self, path) + + self._check_availability(custom_driver) + self.engine = create_async_engine(self.full_path) + self.dialect: str = self.engine.dialect.name + + id_column_args = {"primary_key": True} + if self.dialect == "sqlite": + id_column_args["sqlite_on_conflict_primary_key"] = "REPLACE" + + self.metadata = MetaData() + self.table = Table( + table_name, + self.metadata, + Column("id", String(36), **id_column_args), + Column("context", JSON), # column for storing serialized contexts + ) + + asyncio.run(self._create_self_table()) + + import_insert_for_dialect(self.dialect) + +
    +[docs] + @threadsafe_method + async def set_item_async(self, key: Hashable, value: Context): + value = value if isinstance(value, Context) else Context.cast(value) + value = json.loads(value.model_dump_json()) + + insert_stmt = insert(self.table).values(id=str(key), context=value) + update_stmt = await self._get_update_stmt(insert_stmt) + + async with self.engine.connect() as conn: + await conn.execute(update_stmt) + await conn.commit()
    + + +
    +[docs] + @threadsafe_method + async def get_item_async(self, key: Hashable) -> Context: + stmt = select(self.table.c.context).where(self.table.c.id == str(key)) + async with self.engine.connect() as conn: + result = await conn.execute(stmt) + row = result.fetchone() + if row: + return Context.cast(row[0]) + raise KeyError
    + + +
    +[docs] + @threadsafe_method + async def del_item_async(self, key: Hashable): + stmt = delete(self.table).where(self.table.c.id == str(key)) + async with self.engine.connect() as conn: + await conn.execute(stmt) + await conn.commit()
    + + +
    +[docs] + @threadsafe_method + async def contains_async(self, key: Hashable) -> bool: + stmt = select(self.table.c.context).where(self.table.c.id == str(key)) + async with self.engine.connect() as conn: + result = await conn.execute(stmt) + return bool(result.fetchone())
    + + +
    +[docs] + @threadsafe_method + async def len_async(self) -> int: + stmt = select(func.count()).select_from(self.table) + async with self.engine.connect() as conn: + result = await conn.execute(stmt) + return result.fetchone()[0]
    + + +
    +[docs] + @threadsafe_method + async def clear_async(self): + stmt = delete(self.table) + async with self.engine.connect() as conn: + await conn.execute(stmt) + await conn.commit()
    + + +
    +[docs] + async def _create_self_table(self): + async with self.engine.begin() as conn: + if not await conn.run_sync(lambda sync_conn: inspect(sync_conn).has_table(self.table.name)): + await conn.run_sync(self.table.create, self.engine)
    + + +
    +[docs] + async def _get_update_stmt(self, insert_stmt): + if self.dialect == "sqlite": + return insert_stmt + elif self.dialect == "mysql": + update_stmt = insert_stmt.on_duplicate_key_update(context=insert_stmt.inserted.context) + else: + update_stmt = insert_stmt.on_conflict_do_update( + index_elements=["id"], set_=dict(context=insert_stmt.excluded.context) + ) + return update_stmt
    + + +
    +[docs] + def _check_availability(self, custom_driver: bool): + if not custom_driver: + if self.full_path.startswith("postgresql") and not postgres_available: + install_suggestion = get_protocol_install_suggestion("postgresql") + raise ImportError("Packages `sqlalchemy` and/or `asyncpg` are missing.\n" + install_suggestion) + elif self.full_path.startswith("mysql") and not mysql_available: + install_suggestion = get_protocol_install_suggestion("mysql") + raise ImportError("Packages `sqlalchemy` and/or `asyncmy` are missing.\n" + install_suggestion) + elif self.full_path.startswith("sqlite") and not sqlite_available: + install_suggestion = get_protocol_install_suggestion("sqlite") + raise ImportError("Package `sqlalchemy` and/or `aiosqlite` is missing.\n" + install_suggestion)
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/context_storages/ydb.html b/_modules/dff/context_storages/ydb.html new file mode 100644 index 0000000000..23ae0bde44 --- /dev/null +++ b/_modules/dff/context_storages/ydb.html @@ -0,0 +1,849 @@ + + + + + + + + + + dff.context_storages.ydb — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.context_storages.ydb

    +"""
    +Yandex DB
    +---------
    +The Yandex DB module provides a version of the :py:class:`.DBContextStorage` class that designed to work with
    +Yandex and other databases. Yandex DataBase is a fully-managed cloud-native SQL service that makes it easy to set up,
    +operate, and scale high-performance and high-availability databases for your applications.
    +
    +The Yandex DB module uses the Yandex Cloud SDK, which is a python library that allows you to work
    +with Yandex Cloud services using python. This allows the DFF to easily integrate with the Yandex DataBase and
    +take advantage of the scalability and high-availability features provided by the service.
    +"""
    +import asyncio
    +import os
    +from typing import Hashable
    +from urllib.parse import urlsplit
    +
    +
    +from dff.script import Context
    +
    +from .database import DBContextStorage
    +from .protocol import get_protocol_install_suggestion
    +
    +try:
    +    import ydb
    +    import ydb.aio
    +
    +    ydb_available = True
    +except ImportError:
    +    ydb_available = False
    +
    +
    +
    +[docs] +class YDBContextStorage(DBContextStorage): + """ + Version of the :py:class:`.DBContextStorage` for YDB. + + :param path: Standard sqlalchemy URI string. + When using sqlite backend in Windows, keep in mind that you have to use double backslashes '\\' + instead of forward slashes '/' in the file path. + :param table_name: The name of the table to use. + """ + + def __init__(self, path: str, table_name: str = "contexts", timeout=5): + DBContextStorage.__init__(self, path) + protocol, netloc, self.database, _, _ = urlsplit(path) + self.endpoint = "{}://{}".format(protocol, netloc) + self.table_name = table_name + if not ydb_available: + install_suggestion = get_protocol_install_suggestion("grpc") + raise ImportError("`ydb` package is missing.\n" + install_suggestion) + self.driver, self.pool = asyncio.run(_init_drive(timeout, self.endpoint, self.database, self.table_name)) + +
    +[docs] + async def set_item_async(self, key: Hashable, value: Context): + value = value if isinstance(value, Context) else Context.cast(value) + + async def callee(session): + query = """ + PRAGMA TablePathPrefix("{}"); + DECLARE $queryId AS Utf8; + DECLARE $queryContext AS Json; + UPSERT INTO {} + ( + id, + context + ) + VALUES + ( + $queryId, + $queryContext + ); + """.format( + self.database, self.table_name + ) + prepared_query = await session.prepare(query) + + await session.transaction(ydb.SerializableReadWrite()).execute( + prepared_query, + {"$queryId": str(key), "$queryContext": value.model_dump_json()}, + commit_tx=True, + ) + + return await self.pool.retry_operation(callee)
    + + +
    +[docs] + async def get_item_async(self, key: Hashable) -> Context: + async def callee(session): + query = """ + PRAGMA TablePathPrefix("{}"); + DECLARE $queryId AS Utf8; + SELECT + id, + context + FROM {} + WHERE id = $queryId; + """.format( + self.database, self.table_name + ) + prepared_query = await session.prepare(query) + + result_sets = await session.transaction(ydb.SerializableReadWrite()).execute( + prepared_query, + { + "$queryId": str(key), + }, + commit_tx=True, + ) + if result_sets[0].rows: + return Context.cast(result_sets[0].rows[0].context) + else: + raise KeyError + + return await self.pool.retry_operation(callee)
    + + +
    +[docs] + async def del_item_async(self, key: Hashable): + async def callee(session): + query = """ + PRAGMA TablePathPrefix("{}"); + DECLARE $queryId AS Utf8; + DELETE + FROM {} + WHERE + id = $queryId + ; + """.format( + self.database, self.table_name + ) + prepared_query = await session.prepare(query) + + await session.transaction(ydb.SerializableReadWrite()).execute( + prepared_query, + {"$queryId": str(key)}, + commit_tx=True, + ) + + return await self.pool.retry_operation(callee)
    + + +
    +[docs] + async def contains_async(self, key: Hashable) -> bool: + async def callee(session): + # new transaction in serializable read write mode + # if query successfully completed you will get result sets. + # otherwise exception will be raised + query = """ + PRAGMA TablePathPrefix("{}"); + DECLARE $queryId AS Utf8; + SELECT + id, + context + FROM {} + WHERE id = $queryId; + """.format( + self.database, self.table_name + ) + prepared_query = await session.prepare(query) + + result_sets = await session.transaction(ydb.SerializableReadWrite()).execute( + prepared_query, + { + "$queryId": str(key), + }, + commit_tx=True, + ) + return len(result_sets[0].rows) > 0 + + return await self.pool.retry_operation(callee)
    + + +
    +[docs] + async def len_async(self) -> int: + async def callee(session): + query = """ + PRAGMA TablePathPrefix("{}"); + SELECT + COUNT(*) as cnt + FROM {} + """.format( + self.database, self.table_name + ) + prepared_query = await session.prepare(query) + + result_sets = await session.transaction(ydb.SerializableReadWrite()).execute( + prepared_query, + commit_tx=True, + ) + return result_sets[0].rows[0].cnt + + return await self.pool.retry_operation(callee)
    + + +
    +[docs] + async def clear_async(self): + async def callee(session): + query = """ + PRAGMA TablePathPrefix("{}"); + DECLARE $queryId AS Utf8; + DELETE + FROM {} + ; + """.format( + self.database, self.table_name + ) + prepared_query = await session.prepare(query) + + await session.transaction(ydb.SerializableReadWrite()).execute( + prepared_query, + {}, + commit_tx=True, + ) + + return await self.pool.retry_operation(callee)
    +
    + + + +
    +[docs] +async def _init_drive(timeout: int, endpoint: str, database: str, table_name: str): + driver = ydb.aio.Driver(endpoint=endpoint, database=database) + await driver.wait(fail_fast=True, timeout=timeout) + + pool = ydb.aio.SessionPool(driver, size=10) + + if not await _is_table_exists(pool, database, table_name): # create table if it does not exist + await _create_table(pool, database, table_name) + return driver, pool
    + + + +
    +[docs] +async def _is_table_exists(pool, path, table_name) -> bool: + try: + + async def callee(session): + await session.describe_table(os.path.join(path, table_name)) + + await pool.retry_operation(callee) + return True + except ydb.SchemeError: + return False
    + + + +
    +[docs] +async def _create_table(pool, path, table_name): + async def callee(session): + await session.create_table( + "/".join([path, table_name]), + ydb.TableDescription() + .with_column(ydb.Column("id", ydb.OptionalType(ydb.PrimitiveType.Utf8))) + .with_column(ydb.Column("context", ydb.OptionalType(ydb.PrimitiveType.Json))) + .with_primary_key("id"), + ) + + return await pool.retry_operation(callee)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/messengers/common/interface.html b/_modules/dff/messengers/common/interface.html new file mode 100644 index 0000000000..c649ceea6f --- /dev/null +++ b/_modules/dff/messengers/common/interface.html @@ -0,0 +1,822 @@ + + + + + + + + + + dff.messengers.common.interface — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.messengers.common.interface

    +"""
    +Message Interfaces
    +------------------
    +The Message Interfaces module contains several basic classes that define the message interfaces.
    +These classes provide a way to define the structure of the messengers that are used to communicate with the DFF.
    +"""
    +import abc
    +import asyncio
    +import logging
    +import uuid
    +from typing import Optional, Any, List, Tuple, TextIO, Hashable
    +
    +from dff.script import Context, Message
    +
    +from .types import PipelineRunnerFunction, PollingInterfaceLoopFunction
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +[docs] +class MessengerInterface(abc.ABC): + """ + Class that represents a message interface used for communication between pipeline and users. + It is responsible for connection between user and pipeline, as well as for request-response transactions. + """ + +
    +[docs] + @abc.abstractmethod + async def connect(self, pipeline_runner: PipelineRunnerFunction): + """ + Method invoked when message interface is instantiated and connection is established. + May be used for sending an introduction message or displaying general bot information. + + :param pipeline_runner: A function that should return pipeline response to user request; + usually it's a :py:meth:`~dff.pipeline.pipeline.pipeline.Pipeline._run_pipeline` function. + :type pipeline_runner: PipelineRunnerFunction + """ + raise NotImplementedError
    +
    + + + +
    +[docs] +class PollingMessengerInterface(MessengerInterface): + """ + Polling message interface runs in a loop, constantly asking users for a new input. + """ + +
    +[docs] + @abc.abstractmethod + def _request(self) -> List[Tuple[Message, Hashable]]: + """ + Method used for sending users request for their input. + + :return: A list of tuples: user inputs and context ids (any user ids) associated with the inputs. + """ + raise NotImplementedError
    + + +
    +[docs] + @abc.abstractmethod + def _respond(self, responses: List[Context]): + """ + Method used for sending users responses for their last input. + + :param responses: A list of contexts, representing dialogs with the users; + `last_response`, `id` and some dialog info can be extracted from there. + """ + raise NotImplementedError
    + + +
    +[docs] + def _on_exception(self, e: BaseException): + """ + Method that is called on polling cycle exceptions, in some cases it should show users the exception. + By default, it logs all exit exceptions to `info` log and all non-exit exceptions to `error`. + + :param e: The exception. + """ + if isinstance(e, Exception): + logger.error(f"Exception in {type(self).__name__} loop!\n{str(e)}") + else: + logger.info(f"{type(self).__name__} has stopped polling.")
    + + +
    +[docs] + async def _polling_loop( + self, + pipeline_runner: PipelineRunnerFunction, + timeout: float = 0, + ): + """ + Method running the request - response cycle once. + """ + user_updates = self._request() + responses = [await pipeline_runner(request, ctx_id) for request, ctx_id in user_updates] + self._respond(responses) + await asyncio.sleep(timeout)
    + + +
    +[docs] + async def connect( + self, + pipeline_runner: PipelineRunnerFunction, + loop: PollingInterfaceLoopFunction = lambda: True, + timeout: float = 0, + ): + """ + Method, running a request - response cycle in a loop. + The looping behavior is determined by `loop` and `timeout`, + for most cases the loop itself shouldn't be overridden. + + :param pipeline_runner: A function that should return pipeline response to user request; + usually it's a :py:meth:`~dff.pipeline.pipeline.pipeline.Pipeline._run_pipeline` function. + :type pipeline_runner: PipelineRunnerFunction + :param loop: a function that determines whether polling should be continued; + called in each cycle, should return `True` to continue polling or `False` to stop. + :type loop: PollingInterfaceLoopFunction + :param timeout: a time interval between polls (in seconds). + """ + while loop(): + try: + await self._polling_loop(pipeline_runner, timeout) + + except BaseException as e: + self._on_exception(e) + break
    +
    + + + +
    +[docs] +class CallbackMessengerInterface(MessengerInterface): + """ + Callback message interface is waiting for user input and answers once it gets one. + """ + + def __init__(self): + self._pipeline_runner: Optional[PipelineRunnerFunction] = None + +
    +[docs] + async def connect(self, pipeline_runner: PipelineRunnerFunction): + self._pipeline_runner = pipeline_runner
    + + +
    +[docs] + async def on_request_async(self, request: Any, ctx_id: Hashable) -> Context: + """ + Method invoked on user input. This method works just like + :py:meth:`~dff.pipeline.pipeline.pipeline.Pipeline._run_pipeline`, + however callback message interface may contain additional functionality (e.g. for external API accessing). + Return context that represents dialog with the user; + `last_response`, `id` and some dialog info can be extracted from there. + + :param request: User input. + :param ctx_id: Any unique id that will be associated with dialog between this user and pipeline. + :return: Context that represents dialog with the user. + """ + return await self._pipeline_runner(request, ctx_id)
    + + +
    +[docs] + def on_request(self, request: Any, ctx_id: Hashable) -> Context: + """ + Method invoked on user input. This method works just like + :py:meth:`~dff.pipeline.pipeline.pipeline.Pipeline._run_pipeline`, + however callback message interface may contain additional functionality (e.g. for external API accessing). + Return context that represents dialog with the user; + `last_response`, `id` and some dialog info can be extracted from there. + + :param request: User input. + :param ctx_id: Any unique id that will be associated with dialog between this user and pipeline. + :return: Context that represents dialog with the user. + """ + return asyncio.run(self.on_request_async(request, ctx_id))
    +
    + + + +
    +[docs] +class CLIMessengerInterface(PollingMessengerInterface): + """ + Command line message interface is the default message interface, communicating with user via `STDIN/STDOUT`. + This message interface can maintain dialog with one user at a time only. + """ + + def __init__( + self, + intro: Optional[str] = None, + prompt_request: str = "request: ", + prompt_response: str = "response: ", + out_descriptor: Optional[TextIO] = None, + ): + super().__init__() + self._ctx_id: Optional[Hashable] = None + self._intro: Optional[str] = intro + self._prompt_request: str = prompt_request + self._prompt_response: str = prompt_response + self._descriptor: Optional[TextIO] = out_descriptor + +
    +[docs] + def _request(self) -> List[Tuple[Message, Any]]: + return [(Message(text=input(self._prompt_request)), self._ctx_id)]
    + + +
    +[docs] + def _respond(self, responses: List[Context]): + print(f"{self._prompt_response}{responses[0].last_response.text}", file=self._descriptor)
    + + +
    +[docs] + async def connect(self, pipeline_runner: PipelineRunnerFunction, **kwargs): + """ + The CLIProvider generates new dialog id used to user identification on each `connect` call. + + :param pipeline_runner: A function that should return pipeline response to user request; + usually it's a :py:meth:`~dff.pipeline.pipeline.pipeline.Pipeline._run_pipeline` function. + :type pipeline_runner: PipelineRunnerFunction + :param \\**kwargs: argument, added for compatibility with super class, it shouldn't be used normally. + """ + self._ctx_id = uuid.uuid4() + if self._intro is not None: + print(self._intro) + await super().connect(pipeline_runner, **kwargs)
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/messengers/telegram/interface.html b/_modules/dff/messengers/telegram/interface.html new file mode 100644 index 0000000000..dd648dfdea --- /dev/null +++ b/_modules/dff/messengers/telegram/interface.html @@ -0,0 +1,816 @@ + + + + + + + + + + dff.messengers.telegram.interface — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.messengers.telegram.interface

    +"""
    +Interface
    +------------
    +This module implements various interfaces for :py:class:`~dff.messengers.telegram.messenger.TelegramMessenger`
    +that can be used to interact with the Telegram API.
    +"""
    +import asyncio
    +from typing import Any, Optional, List, Tuple, Callable
    +
    +from telebot import types, apihelper
    +
    +from dff.messengers.common import MessengerInterface, PipelineRunnerFunction, CallbackMessengerInterface
    +from .messenger import TelegramMessenger
    +from .message import TelegramMessage
    +
    +try:
    +    from flask import Flask, request, abort
    +
    +    flask_imported = True
    +except ImportError:
    +    flask_imported = False
    +    Flask = Any
    +    request, abort = None, None
    +
    +
    +apihelper.ENABLE_MIDDLEWARE = True
    +
    +
    +
    +[docs] +def extract_telegram_request_and_id( + update: types.Update, messenger: Optional[TelegramMessenger] = None +) -> Tuple[TelegramMessage, int]: # pragma: no cover + """ + Utility function that extracts parameters from a telegram update. + Changes the messenger state, setting the last update id. + + Returned message has the following fields: + + - | `update_id` -- this field stores `update.update_id`, + - | `update` -- this field stores the first non-empty field of `update`, + - | `update_type` -- this field stores the name of the first non-empty field of `update`, + - | `text` -- this field stores `update.message.text`, + - | `callback_query` -- this field stores `update.callback_query.data`. + + Also return context id which is `chat`, `from_user` or `user` of the update. + + :param update: Update to process. + :param messenger: + Messenger instance. If passed updates `last_update_id`. + Defaults to None. + """ + if messenger is not None: + if update.update_id > messenger.last_update_id: + messenger.last_update_id = update.update_id + + message = TelegramMessage(update_id=update.update_id) + ctx_id = None + + for update_field, update_value in vars(update).items(): + if update_field != "update_id" and update_value is not None: + if message.update is not None: + raise RuntimeError(f"Two update fields. First: {message.update_type}; second: {update_field}") + message.update_type = update_field + message.update = update_value + if isinstance(update_value, types.Message): + message.text = update_value.text + + if isinstance(update_value, types.CallbackQuery): + data = update_value.data + if data is not None: + message.callback_query = data + + dict_update = vars(update_value) + # if 'chat' is not available, fall back to 'from_user', then to 'user' + user = dict_update.get("chat", dict_update.get("from_user", dict_update.get("user"))) + ctx_id = getattr(user, "id", None) + if message.update is None: + raise RuntimeError(f"No update fields found: {update}") + + return message, ctx_id
    + + + +
    +[docs] +class PollingTelegramInterface(MessengerInterface): # pragma: no cover + """ + Telegram interface that retrieves updates by polling. + Multi-threaded polling is currently not supported. + + :param token: Bot token + :param messenger: + :py:class:`~dff.messengers.telegram.messenger.TelegramMessenger` instance. + If not `None` will be used instead of creating messenger from token. + Token value does not matter in that case. + Defaults to None. + :param interval: + Polling interval. See `link <https://github.com/eternnoir/pyTelegramBotAPI#telebot>`__. + Defaults to 2. + :param allowed_updates: + Processed updates. See `link <https://github.com/eternnoir/pyTelegramBotAPI#telebot>`__. + Defaults to None. + :param timeout: + General timeout. See `link <https://github.com/eternnoir/pyTelegramBotAPI#telebot>`__. + Defaults to 20. + :param long_polling_timeout: + Polling timeout. See `link <https://github.com/eternnoir/pyTelegramBotAPI#telebot>`__. + Defaults to 20. + """ + + def __init__( + self, + token: str, + interval: int = 2, + allowed_updates: Optional[List[str]] = None, + timeout: int = 20, + long_polling_timeout: int = 20, + messenger: Optional[TelegramMessenger] = None, + ): + self.messenger = ( + messenger if messenger is not None else TelegramMessenger(token, suppress_middleware_excepions=True) + ) + self.allowed_updates = allowed_updates + self.interval = interval + self.timeout = timeout + self.long_polling_timeout = long_polling_timeout + +
    +[docs] + async def connect(self, callback: PipelineRunnerFunction, loop: Optional[Callable] = None, *args, **kwargs): + def dff_middleware(bot_instance, update): + message, ctx_id = extract_telegram_request_and_id(update, self.messenger) + + ctx = asyncio.run(callback(message, ctx_id)) + + bot_instance.send_response(ctx_id, ctx.last_response) + + self.messenger.middleware_handler()(dff_middleware) + + self.messenger.infinity_polling( + timeout=self.timeout, long_polling_timeout=self.long_polling_timeout, interval=self.interval + )
    +
    + + + +
    +[docs] +class CallbackTelegramInterface(CallbackMessengerInterface): # pragma: no cover + """ + Asynchronous Telegram interface that retrieves updates via webhook. + Any Flask server can be passed to set up a webhook on a separate endpoint. + + :param token: Bot token + :param messenger: + :py:class:`~dff.messengers.telegram.messenger.TelegramMessenger` instance. + If not `None` will be used instead of creating messenger from token. + Token value does not matter in that case. + Defaults to None. + :param app: + Flask instance. + Defaults to `Flask(__name__)`. + :param endpoint: + Webhook endpoint. Should be prefixed with "/". + Defaults to "/telegram-webhook". + :param host: + Host IP. + Defaults to "localhost". + :param port: + Port of the app. + Defaults to 8443. + :param debug: + Run the Flask app in debug mode. + :param load_dotenv: + Whether or not the .env file in the project folder + should be used to set environment variables. + :param full_uri: + Full public IP of your webhook that is accessible by https. + Defaults to `"https://{host}:{port}{endpoint}"`. + :param wsgi_options: + Keyword arguments to forward to `Flask.run` method. + Use these to set `ssl_context` and other WSGI options. + """ + + def __init__( + self, + token: str, + app: Optional[Flask] = None, + host: str = "localhost", + port: int = 8443, + debug: Optional[bool] = None, + load_dotenv: bool = True, + endpoint: str = "/telegram-webhook", + full_uri: Optional[str] = None, + messenger: Optional[TelegramMessenger] = None, + **wsgi_options, + ): + if not flask_imported: + raise ModuleNotFoundError("Flask is not installed. Install it with `pip install flask`.") + + self.messenger = messenger if messenger is not None else TelegramMessenger(token) + self.app = app if app else Flask(__name__) + self.host = host + self.port = port + self.debug = debug + self.load_dotenv = load_dotenv + self.wsgi_options = wsgi_options + self.endpoint = endpoint + self.full_uri = full_uri if full_uri is not None else "".join([f"https://{host}:{port}", endpoint]) + + async def endpoint(): + if not request.headers.get("content-type") == "application/json": + abort(403) + + json_string = request.get_data().decode("utf-8") + update = types.Update.de_json(json_string) + resp = await self.on_request_async(*extract_telegram_request_and_id(update, self.messenger)) + self.messenger.send_response(resp.id, resp.last_response) + return "" + + self.app.route(self.endpoint, methods=["POST"])(endpoint) + +
    +[docs] + async def connect(self, callback: PipelineRunnerFunction): + await super().connect(callback) + + self.messenger.remove_webhook() + self.messenger.set_webhook(self.full_uri) + + self.app.run( + host=self.host, port=self.port, load_dotenv=self.load_dotenv, debug=self.debug, **self.wsgi_options + )
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/messengers/telegram/message.html b/_modules/dff/messengers/telegram/message.html new file mode 100644 index 0000000000..6c2d84ec1f --- /dev/null +++ b/_modules/dff/messengers/telegram/message.html @@ -0,0 +1,703 @@ + + + + + + + + + + dff.messengers.telegram.message — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.messengers.telegram.message

    +"""
    +Telegram Message
    +----------------
    +This module implements inherited classes :py:mod:`dff.script.core.message` modified for usage with Telegram.
    +"""
    +from typing import Optional, Union
    +from enum import Enum
    +
    +from telebot.types import (
    +    ReplyKeyboardRemove,
    +    ReplyKeyboardMarkup,
    +    InlineKeyboardMarkup,
    +    Message as tlMessage,
    +    InlineQuery,
    +    ChosenInlineResult,
    +    CallbackQuery as tlCallbackQuery,
    +    ShippingQuery,
    +    PreCheckoutQuery,
    +    Poll,
    +    PollAnswer,
    +    ChatMemberUpdated,
    +    ChatJoinRequest,
    +)
    +
    +from dff.script.core.message import Message, Location, Keyboard, DataModel
    +from pydantic import model_validator
    +
    +
    +
    +[docs] +class TelegramUI(Keyboard): + is_inline: bool = True + """ + Whether to use `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`__ or + a `keyboard <https://core.telegram.org/bots/features#keyboards>`__. + """ + row_width: int = 3 + """Limits the maximum number of buttons in a row.""" + +
    +[docs] + @model_validator(mode="after") + def validate_buttons(self, _): + if not self.is_inline: + for button in self.buttons: + if button.payload is not None or button.source is not None: + raise AssertionError(f"`payload` and `source` are only used for inline keyboards: {button}") + return self
    +
    + + + +
    +[docs] +class _ClickButton(DataModel): + """This class is only used in telegram tests (to click buttons as a client).""" + + button_index: int
    + + + +
    +[docs] +class RemoveKeyboard(DataModel): + """Pass an instance of this class to :py:attr:`~.TelegramMessage.ui` to remove current keyboard.""" + + ...
    + + + +
    +[docs] +class ParseMode(Enum): + """ + Parse mode of the message. + More info: https://core.telegram.org/bots/api#formatting-options. + """ + + HTML = "HTML" + MARKDOWN = "MarkdownV2"
    + + + +
    +[docs] +class TelegramMessage(Message): + ui: Optional[ + Union[TelegramUI, RemoveKeyboard, ReplyKeyboardRemove, ReplyKeyboardMarkup, InlineKeyboardMarkup] + ] = None + location: Optional[Location] = None + callback_query: Optional[Union[str, _ClickButton]] = None + update: Optional[ + Union[ + tlMessage, + InlineQuery, + ChosenInlineResult, + tlCallbackQuery, + ShippingQuery, + PreCheckoutQuery, + Poll, + PollAnswer, + ChatMemberUpdated, + ChatJoinRequest, + ] + ] = None + """This field stores an update representing this message.""" + update_id: Optional[int] = None + update_type: Optional[str] = None + """Name of the field that stores an update representing this message.""" + parse_mode: Optional[ParseMode] = None + """Parse mode of the message.""" + + def __eq__(self, other): + if isinstance(other, Message): + for field in self.model_fields: + if field not in ("parse_mode", "update_id", "update", "update_type"): + if field not in other.model_fields: + return False + if self.__getattribute__(field) != other.__getattribute__(field): + return False + return True + return NotImplemented
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/messengers/telegram/messenger.html b/_modules/dff/messengers/telegram/messenger.html new file mode 100644 index 0000000000..f5fb8b9aa9 --- /dev/null +++ b/_modules/dff/messengers/telegram/messenger.html @@ -0,0 +1,839 @@ + + + + + + + + + + dff.messengers.telegram.messenger — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.messengers.telegram.messenger

    +"""
    +Messenger
    +-----------------
    +The Messenger module provides the :py:class:`~dff.messengers.telegram.messenger.TelegramMessenger` class.
    +The former inherits from the :py:class:`~TeleBot` class from the `pytelegrambotapi` library.
    +Using it, you can put Telegram update handlers inside your script and condition your transitions accordingly.
    +
    +"""
    +from pathlib import Path
    +from typing import Union, List, Optional, Callable
    +from enum import Enum
    +
    +from telebot import types, TeleBot
    +
    +from dff.script import Context
    +from dff.pipeline import Pipeline
    +
    +from .utils import batch_open_io
    +from .message import TelegramMessage, TelegramUI, RemoveKeyboard
    +
    +from dff.script import Message
    +from dff.script.core.message import Audio, Video, Image, Document
    +
    +
    +
    +[docs] +class TelegramMessenger(TeleBot): # pragma: no cover + """ + This class inherits from `Telebot` and implements framework-specific functionality + like sending generic responses. + + :param token: A Telegram API bot token. + :param kwargs: Arbitrary parameters that match the signature of the `Telebot` class. + For reference see: `link <https://github.com/eternnoir/pyTelegramBotAPI#telebot>`_ . + + """ + + def __init__( + self, + token: str, + **kwargs, + ): + super().__init__(token, threaded=False, **kwargs) + +
    +[docs] + def send_response(self, chat_id: Union[str, int], response: Union[str, dict, Message]) -> None: + """ + Cast `response` to :py:class:`~dff.messengers.telegram.types.TelegramMessage` and send it. + Message fields are sent in separate messages in the following order: + + 1. Attachments + 2. Location + 3. Text with keyboard + + :param chat_id: Telegram chat ID. + :param response: Response data. String, dictionary or :py:class:`~dff.script.responses.generics.Response`. + will be cast to :py:class:`~dff.messengers.telegram.types.TelegramMessage`. + """ + if isinstance(response, TelegramMessage): + ready_response = response + elif isinstance(response, str): + ready_response = TelegramMessage(text=response) + elif isinstance(response, Message): + ready_response = TelegramMessage.model_validate(response.model_dump()) + elif isinstance(response, dict): + ready_response = TelegramMessage.model_validate(response) + else: + raise TypeError( + "Type of the response argument should be one of the following:" + " `str`, `dict`, `Message`, or `TelegramMessage`." + ) + parse_mode = ready_response.parse_mode.value if ready_response.parse_mode is not None else None + if ready_response.attachments is not None: + if len(ready_response.attachments.files) == 1: + attachment = ready_response.attachments.files[0] + if isinstance(attachment, Audio): + method = self.send_audio + elif isinstance(attachment, Document): + method = self.send_document + elif isinstance(attachment, Video): + method = self.send_video + elif isinstance(attachment, Image): + method = self.send_photo + else: + raise TypeError(type(attachment)) + params = {"caption": attachment.title, "parse_mode": parse_mode} + if isinstance(attachment.source, Path): + with open(attachment.source, "rb") as file: + method(chat_id, file, **params) + else: + method(chat_id, str(attachment.source or attachment.id), **params) + else: + + def cast(file): + if isinstance(file, Image): + cast_to_media_type = types.InputMediaPhoto + elif isinstance(file, Audio): + cast_to_media_type = types.InputMediaAudio + elif isinstance(file, Document): + cast_to_media_type = types.InputMediaDocument + elif isinstance(file, Video): + cast_to_media_type = types.InputMediaVideo + else: + raise TypeError(type(file)) + return cast_to_media_type(media=str(file.source or file.id), caption=file.title) + + files = map(cast, ready_response.attachments.files) + with batch_open_io(files) as media: + self.send_media_group(chat_id=chat_id, media=media) + + if ready_response.location: + self.send_location( + chat_id=chat_id, + latitude=ready_response.location.latitude, + longitude=ready_response.location.longitude, + ) + + if ready_response.ui is not None: + if isinstance(ready_response.ui, RemoveKeyboard): + keyboard = types.ReplyKeyboardRemove() + elif isinstance(ready_response.ui, TelegramUI): + if ready_response.ui.is_inline: + keyboard = types.InlineKeyboardMarkup(row_width=ready_response.ui.row_width) + buttons = [ + types.InlineKeyboardButton( + text=item.text, + url=item.source, + callback_data=item.payload, + ) + for item in ready_response.ui.buttons + ] + else: + keyboard = types.ReplyKeyboardMarkup(row_width=ready_response.ui.row_width) + buttons = [ + types.KeyboardButton( + text=item.text, + ) + for item in ready_response.ui.buttons + ] + keyboard.add(*buttons, row_width=ready_response.ui.row_width) + else: + keyboard = ready_response.ui + else: + keyboard = None + + if ready_response.text is not None: + self.send_message( + chat_id=chat_id, + text=ready_response.text, + reply_markup=keyboard, + parse_mode=parse_mode, + ) + elif keyboard is not None: + self.send_message( + chat_id=chat_id, + text="", + reply_markup=keyboard, + parse_mode=parse_mode, + )
    +
    + + + +_default_messenger = TeleBot("") + + +
    +[docs] +class UpdateType(Enum): + """ + Represents a type of the telegram update + (which field contains an update in :py:class:`telebot.types.Update`). + See `link <https://pytba.readthedocs.io/en/latest/types.html#telebot.types.Update>`__. + """ + + ALL = "ALL" + MESSAGE = "message" + EDITED_MESSAGE = "edited_message" + CHANNEL_POST = "channel_post" + EDITED_CHANNEL_POST = "edited_channel_post" + INLINE_QUERY = "inline_query" + CHOSEN_INLINE_RESULT = "chosen_inline_result" + CALLBACK_QUERY = "callback_query" + SHIPPING_QUERY = "shipping_query" + PRE_CHECKOUT_QUERY = "pre_checkout_query" + POLL = "poll" + POLL_ANSWER = "poll_answer" + MY_CHAT_MEMBER = "my_chat_member" + CHAT_MEMBER = "chat_member" + CHAT_JOIN_REQUEST = "chat_join_request"
    + + + +
    +[docs] +def telegram_condition( + messenger: TeleBot = _default_messenger, + update_type: UpdateType = UpdateType.MESSAGE, + commands: Optional[List[str]] = None, + regexp: Optional[str] = None, + func: Optional[Callable] = None, + content_types: Optional[List[str]] = None, + chat_types: Optional[List[str]] = None, + **kwargs, +): + """ + A condition triggered by updates that match the given parameters. + + :param messenger: + Messenger to test filters on. Used only for :py:attr:`Telebot.custom_filters`. + Defaults to :py:data:`._default_messenger`. + :param update_type: + If set to any `UpdateType` other than `UpdateType.ALL` + it will check that an update is of the same type. + Defaults to `UpdateType.Message`. + :param commands: + Telegram command trigger. + See `link <https://github.com/eternnoir/pyTelegramBotAPI#general-api-documentation>`__. + :param regexp: + Regex trigger. + See `link <https://github.com/eternnoir/pyTelegramBotAPI#general-api-documentation>`__. + :param func: + Callable trigger. + See `link <https://github.com/eternnoir/pyTelegramBotAPI#general-api-documentation>`__. + :param content_types: + Content type trigger. + See `link <https://github.com/eternnoir/pyTelegramBotAPI#general-api-documentation>`__. + :param chat_types: + Chat type trigger. + See `link <https://github.com/eternnoir/pyTelegramBotAPI#general-api-documentation>`__. + """ + + update_handler = messenger._build_handler_dict( + None, + False, + commands=commands, + regexp=regexp, + func=func, + content_types=content_types, + chat_types=chat_types, + **kwargs, + ) + + def condition(ctx: Context, _: Pipeline, *__, **___): # pragma: no cover + last_request = ctx.last_request + if last_request is None: + return False + update = getattr(last_request, "update", None) + request_update_type = getattr(last_request, "update_type", None) + if update is None: + return False + if update_type != UpdateType.ALL and request_update_type != update_type.value: + return False + test_result = messenger._test_message_handler(update_handler, update) + return test_result + + return condition
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/messengers/telegram/utils.html b/_modules/dff/messengers/telegram/utils.html new file mode 100644 index 0000000000..f93ca3d6dc --- /dev/null +++ b/_modules/dff/messengers/telegram/utils.html @@ -0,0 +1,643 @@ + + + + + + + + + + dff.messengers.telegram.utils — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.messengers.telegram.utils

    +"""
    +Utils
    +------
    +This module contains utilities for connecting to Telegram.
    +"""
    +from typing import Union, Iterable
    +from contextlib import contextmanager
    +from pathlib import Path
    +from io import IOBase
    +
    +from telebot import types
    +
    +
    +
    +[docs] +def open_io(item: types.InputMedia): + """ + Returns `InputMedia` with an opened file descriptor instead of path. + + :param item: InputMedia object. + """ + if isinstance(item.media, Path): + item.media = item.media.open(mode="rb") + return item
    + + + +
    +[docs] +def close_io(item: types.InputMedia): + """ + Closes an IO in an `InputMedia` object to perform the cleanup. + + :param item: InputMedia object. + """ + if isinstance(item.media, IOBase): + item.media.close()
    + + + +
    +[docs] +@contextmanager +def batch_open_io(item: Union[types.InputMedia, Iterable[types.InputMedia]]): + """ + Context manager that controls the state of file descriptors inside `InputMedia`. + Can be used both for single objects and collections. + + :param item: InputMedia objects that contain file descriptors. + """ + if isinstance(item, Iterable): + resources = list(map(open_io, item)) + else: + resources = open_io(item) + try: + yield resources + finally: + if isinstance(resources, Iterable): + for resource in resources: + close_io(resource) + else: + close_io(resources)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/conditions.html b/_modules/dff/pipeline/conditions.html new file mode 100644 index 0000000000..6bde2def9f --- /dev/null +++ b/_modules/dff/pipeline/conditions.html @@ -0,0 +1,693 @@ + + + + + + + + + + dff.pipeline.conditions — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.conditions

    +"""
    +Conditions
    +----------
    +The conditions module contains functions that can be used to determine whether the pipeline component to which they
    +are attached should be executed or not.
    +The standard set of them allows user to setup dependencies between pipeline components.
    +"""
    +from typing import Optional, ForwardRef
    +
    +from dff.script import Context
    +
    +from .types import (
    +    PIPELINE_STATE_KEY,
    +    StartConditionCheckerFunction,
    +    ComponentExecutionState,
    +    StartConditionCheckerAggregationFunction,
    +)
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +def always_start_condition(_: Context, __: Pipeline) -> bool: + """ + Condition that always allows service execution. It's the default condition for all services. + + :param _: Current dialog context. + :param __: Pipeline. + """ + return True
    + + + +
    +[docs] +def service_successful_condition(path: Optional[str] = None) -> StartConditionCheckerFunction: + """ + Condition that allows service execution, only if the other service was executed successfully. + Returns :py:data:`~.StartConditionCheckerFunction`. + + :param path: The path of the condition pipeline component. + """ + + def check_service_state(ctx: Context, _: Pipeline): + state = ctx.framework_states[PIPELINE_STATE_KEY].get(path, ComponentExecutionState.NOT_RUN) + return ComponentExecutionState[state] == ComponentExecutionState.FINISHED + + return check_service_state
    + + + +
    +[docs] +def not_condition(func: StartConditionCheckerFunction) -> StartConditionCheckerFunction: + """ + Condition that returns opposite boolean value to the one returned by incoming function. + Returns :py:data:`~.StartConditionCheckerFunction`. + + :param func: The function to return opposite of. + """ + + def not_function(ctx: Context, pipeline: Pipeline): + return not func(ctx, pipeline) + + return not_function
    + + + +
    +[docs] +def aggregate_condition( + aggregator: StartConditionCheckerAggregationFunction, *functions: StartConditionCheckerFunction +) -> StartConditionCheckerFunction: + """ + Condition that returns aggregated boolean value from all booleans returned by incoming functions. + Returns :py:data:`~.StartConditionCheckerFunction`. + + :param aggregator: The function that accepts list of booleans and returns a single boolean. + :param functions: Functions to aggregate. + """ + + def aggregation_function(ctx: Context, pipeline: Pipeline): + return aggregator([func(ctx, pipeline) for func in functions]) + + return aggregation_function
    + + + +
    +[docs] +def all_condition(*functions: StartConditionCheckerFunction) -> StartConditionCheckerFunction: + """ + Condition that returns `True` only if all incoming functions return `True`. + Returns :py:data:`~.StartConditionCheckerFunction`. + + :param functions: Functions to aggregate. + """ + return aggregate_condition(all, *functions)
    + + + +
    +[docs] +def any_condition(*functions: StartConditionCheckerFunction) -> StartConditionCheckerFunction: + """ + Condition that returns `True` if any of incoming functions returns `True`. + Returns :py:data:`~.StartConditionCheckerFunction`. + + :param functions: Functions to aggregate. + """ + return aggregate_condition(any, *functions)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/pipeline/actor.html b/_modules/dff/pipeline/pipeline/actor.html new file mode 100644 index 0000000000..0773ea180e --- /dev/null +++ b/_modules/dff/pipeline/pipeline/actor.html @@ -0,0 +1,1031 @@ + + + + + + + + + + dff.pipeline.pipeline.actor — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.pipeline.actor

    +"""
    +Actor
    +-----
    +Actor is a component of :py:class:`.Pipeline`, that contains the :py:class:`.Script` and handles it.
    +It is responsible for processing user input and determining the appropriate response based
    +on the current state of the conversation and the script.
    +The actor receives requests in the form of a :py:class:`.Context` class, which contains
    +information about the user's input, the current state of the conversation, and other relevant data.
    +
    +The actor uses the dialog graph, represented by the :py:class:`.Script` class,
    +to determine the appropriate response. The script contains the structure of the conversation,
    +including the different `nodes` and `transitions`.
    +It defines the possible paths that the conversation can take, and the conditions that must be met
    +for a transition to occur. The actor uses this information to navigate the graph
    +and determine the next step in the conversation.
    +
    +Overall, the actor acts as a bridge between the user's input and the dialog graph,
    +making sure that the conversation follows the expected flow and providing a personalized experience to the user.
    +
    +Below you can see a diagram of user request processing with Actor.
    +Both `request` and `response` are saved to :py:class:`.Context`.
    +
    +.. figure:: /_static/drawio/dfe/user_actor.png
    +"""
    +import logging
    +from typing import Union, Callable, Optional, Dict, List, Any, ForwardRef
    +import copy
    +
    +from dff.utils.turn_caching import cache_clear
    +from dff.script.core.types import ActorStage, NodeLabel2Type, NodeLabel3Type, LabelType
    +from dff.script.core.message import Message
    +
    +from dff.script.core.context import Context
    +from dff.script.core.script import Script, Node
    +from dff.script.core.normalization import normalize_label, normalize_response
    +from dff.script.core.keywords import GLOBAL, LOCAL
    +
    +logger = logging.getLogger(__name__)
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +def error_handler(error_msgs: list, msg: str, exception: Optional[Exception] = None, logging_flag: bool = True): + """ + This function handles errors during :py:class:`~dff.script.Script` validation. + + :param error_msgs: List that contains error messages. :py:func:`~dff.script.error_handler` + adds every next error message to that list. + :param msg: Error message which is to be added into `error_msgs`. + :param exception: Invoked exception. If it has been set, it is used to obtain logging traceback. + Defaults to `None`. + :param logging_flag: The flag which defines whether logging is necessary. Defaults to `True`. + """ + error_msgs.append(msg) + if logging_flag: + logger.error(msg, exc_info=exception)
    + + + +
    +[docs] +class Actor: + """ + The class which is used to process :py:class:`~dff.script.Context` + according to the :py:class:`~dff.script.Script`. + + :param script: The dialog scenario: a graph described by the :py:class:`.Keywords`. + While the graph is being initialized, it is validated and then used for the dialog. + :param start_label: The start node of :py:class:`~dff.script.Script`. The execution begins with it. + :param fallback_label: The label of :py:class:`~dff.script.Script`. + Dialog comes into that label if all other transitions failed, + or there was an error while executing the scenario. + Defaults to `None`. + :param label_priority: Default priority value for all :py:const:`labels <dff.script.NodeLabel3Type>` + where there is no priority. Defaults to `1.0`. + :param condition_handler: Handler that processes a call of condition functions. Defaults to `None`. + :param handlers: This variable is responsible for the usage of external handlers on + the certain stages of work of :py:class:`~dff.script.Actor`. + + - key (:py:class:`~dff.script.ActorStage`) - Stage in which the handler is called. + - value (List[Callable]) - The list of called handlers for each stage. Defaults to an empty `dict`. + """ + + def __init__( + self, + script: Union[Script, dict], + start_label: NodeLabel2Type, + fallback_label: Optional[NodeLabel2Type] = None, + label_priority: float = 1.0, + condition_handler: Optional[Callable] = None, + handlers: Optional[Dict[ActorStage, List[Callable]]] = None, + ): + # script validation + self.script = script if isinstance(script, Script) else Script(script=script) + self.label_priority = label_priority + + # node labels validation + self.start_label = normalize_label(start_label) + if self.script.get(self.start_label[0], {}).get(self.start_label[1]) is None: + raise ValueError(f"Unknown start_label={self.start_label}") + + if fallback_label is None: + self.fallback_label = self.start_label + else: + self.fallback_label = normalize_label(fallback_label) + if self.script.get(self.fallback_label[0], {}).get(self.fallback_label[1]) is None: + raise ValueError(f"Unknown fallback_label={self.fallback_label}") + self.condition_handler = default_condition_handler if condition_handler is None else condition_handler + + self.handlers = {} if handlers is None else handlers + + # NB! The following API is highly experimental and may be removed at ANY time WITHOUT FURTHER NOTICE!! + self._clean_turn_cache = True + + def __call__( + self, pipeline: Pipeline, ctx: Optional[Union[Context, dict, str]] = None, *args, **kwargs + ) -> Union[Context, dict, str]: + # context init + ctx = self._context_init(ctx, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.CONTEXT_INIT, *args, **kwargs) + + # get previous node + ctx = self._get_previous_node(ctx, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.GET_PREVIOUS_NODE, *args, **kwargs) + + # rewrite previous node + ctx = self._rewrite_previous_node(ctx, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.REWRITE_PREVIOUS_NODE, *args, **kwargs) + + # run pre transitions processing + ctx = self._run_pre_transitions_processing(ctx, pipeline, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.RUN_PRE_TRANSITIONS_PROCESSING, *args, **kwargs) + + # get true labels for scopes (GLOBAL, LOCAL, NODE) + ctx = self._get_true_labels(ctx, pipeline, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.GET_TRUE_LABELS, *args, **kwargs) + + # get next node + ctx = self._get_next_node(ctx, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.GET_NEXT_NODE, *args, **kwargs) + + ctx.add_label(ctx.framework_states["actor"]["next_label"][:2]) + + # rewrite next node + ctx = self._rewrite_next_node(ctx, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.REWRITE_NEXT_NODE, *args, **kwargs) + + # run pre response processing + ctx = self._run_pre_response_processing(ctx, pipeline, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.RUN_PRE_RESPONSE_PROCESSING, *args, **kwargs) + + # create response + ctx.framework_states["actor"]["response"] = ctx.framework_states["actor"][ + "pre_response_processed_node" + ].run_response(ctx, pipeline, *args, **kwargs) + self._run_handlers(ctx, pipeline, ActorStage.CREATE_RESPONSE, *args, **kwargs) + ctx.add_response(ctx.framework_states["actor"]["response"]) + + self._run_handlers(ctx, pipeline, ActorStage.FINISH_TURN, *args, **kwargs) + if self._clean_turn_cache: + cache_clear() + + del ctx.framework_states["actor"] + return ctx + +
    +[docs] + @staticmethod + def _context_init(ctx: Optional[Union[Context, dict, str]] = None, *args, **kwargs) -> Context: + ctx = Context.cast(ctx) + if not ctx.requests: + ctx.add_request(Message()) + ctx.framework_states["actor"] = {} + return ctx
    + + +
    +[docs] + def _get_previous_node(self, ctx: Context, *args, **kwargs) -> Context: + ctx.framework_states["actor"]["previous_label"] = ( + normalize_label(ctx.last_label) if ctx.last_label else self.start_label + ) + ctx.framework_states["actor"]["previous_node"] = self.script.get( + ctx.framework_states["actor"]["previous_label"][0], {} + ).get(ctx.framework_states["actor"]["previous_label"][1], Node()) + return ctx
    + + +
    +[docs] + def _get_true_labels(self, ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Context: + # GLOBAL + ctx.framework_states["actor"]["global_transitions"] = ( + self.script.get(GLOBAL, {}).get(GLOBAL, Node()).transitions + ) + ctx.framework_states["actor"]["global_true_label"] = self._get_true_label( + ctx.framework_states["actor"]["global_transitions"], ctx, pipeline, GLOBAL, "global" + ) + + # LOCAL + ctx.framework_states["actor"]["local_transitions"] = ( + self.script.get(ctx.framework_states["actor"]["previous_label"][0], {}).get(LOCAL, Node()).transitions + ) + ctx.framework_states["actor"]["local_true_label"] = self._get_true_label( + ctx.framework_states["actor"]["local_transitions"], + ctx, + pipeline, + ctx.framework_states["actor"]["previous_label"][0], + "local", + ) + + # NODE + ctx.framework_states["actor"]["node_transitions"] = ctx.framework_states["actor"][ + "pre_transitions_processed_node" + ].transitions + ctx.framework_states["actor"]["node_true_label"] = self._get_true_label( + ctx.framework_states["actor"]["node_transitions"], + ctx, + pipeline, + ctx.framework_states["actor"]["previous_label"][0], + "node", + ) + return ctx
    + + +
    +[docs] + def _get_next_node(self, ctx: Context, *args, **kwargs) -> Context: + # choose next label + ctx.framework_states["actor"]["next_label"] = self._choose_label( + ctx.framework_states["actor"]["node_true_label"], ctx.framework_states["actor"]["local_true_label"] + ) + ctx.framework_states["actor"]["next_label"] = self._choose_label( + ctx.framework_states["actor"]["next_label"], ctx.framework_states["actor"]["global_true_label"] + ) + # get next node + ctx.framework_states["actor"]["next_node"] = self.script.get( + ctx.framework_states["actor"]["next_label"][0], {} + ).get(ctx.framework_states["actor"]["next_label"][1]) + return ctx
    + + +
    +[docs] + def _rewrite_previous_node(self, ctx: Context, *args, **kwargs) -> Context: + node = ctx.framework_states["actor"]["previous_node"] + flow_label = ctx.framework_states["actor"]["previous_label"][0] + ctx.framework_states["actor"]["previous_node"] = self._overwrite_node( + node, + flow_label, + only_current_node_transitions=True, + ) + return ctx
    + + +
    +[docs] + def _rewrite_next_node(self, ctx: Context, *args, **kwargs) -> Context: + node = ctx.framework_states["actor"]["next_node"] + flow_label = ctx.framework_states["actor"]["next_label"][0] + ctx.framework_states["actor"]["next_node"] = self._overwrite_node(node, flow_label) + return ctx
    + + +
    +[docs] + def _overwrite_node( + self, + current_node: Node, + flow_label: LabelType, + *args, + only_current_node_transitions: bool = False, + **kwargs, + ) -> Node: + overwritten_node = copy.deepcopy(self.script.get(GLOBAL, {}).get(GLOBAL, Node())) + local_node = self.script.get(flow_label, {}).get(LOCAL, Node()) + for node in [local_node, current_node]: + overwritten_node.pre_transitions_processing.update(node.pre_transitions_processing) + overwritten_node.pre_response_processing.update(node.pre_response_processing) + overwritten_node.response = overwritten_node.response if node.response is None else node.response + overwritten_node.misc.update(node.misc) + if not only_current_node_transitions: + overwritten_node.transitions.update(node.transitions) + if only_current_node_transitions: + overwritten_node.transitions = current_node.transitions + return overwritten_node
    + + +
    +[docs] + def _run_pre_transitions_processing(self, ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Context: + ctx.framework_states["actor"]["processed_node"] = copy.deepcopy(ctx.framework_states["actor"]["previous_node"]) + ctx = ctx.framework_states["actor"]["previous_node"].run_pre_transitions_processing( + ctx, pipeline, *args, **kwargs + ) + ctx.framework_states["actor"]["pre_transitions_processed_node"] = ctx.framework_states["actor"][ + "processed_node" + ] + del ctx.framework_states["actor"]["processed_node"] + return ctx
    + + +
    +[docs] + def _run_pre_response_processing(self, ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Context: + ctx.framework_states["actor"]["processed_node"] = copy.deepcopy(ctx.framework_states["actor"]["next_node"]) + ctx = ctx.framework_states["actor"]["next_node"].run_pre_response_processing(ctx, pipeline, *args, **kwargs) + ctx.framework_states["actor"]["pre_response_processed_node"] = ctx.framework_states["actor"]["processed_node"] + del ctx.framework_states["actor"]["processed_node"] + return ctx
    + + +
    +[docs] + def _get_true_label( + self, + transitions: dict, + ctx: Context, + pipeline: Pipeline, + flow_label: LabelType, + transition_info: str = "", + *args, + **kwargs, + ) -> Optional[NodeLabel3Type]: + true_labels = [] + for label, condition in transitions.items(): + if self.condition_handler(condition, ctx, pipeline, *args, **kwargs): + if callable(label): + label = label(ctx, pipeline, *args, **kwargs) + # TODO: explicit handling of errors + if label is None: + continue + label = normalize_label(label, flow_label) + true_labels += [label] + true_labels = [ + ((label[0] if label[0] else flow_label),) + + label[1:2] + + ((self.label_priority if label[2] == float("-inf") else label[2]),) + for label in true_labels + ] + true_labels.sort(key=lambda label: -label[2]) + true_label = true_labels[0] if true_labels else None + logger.debug(f"{transition_info} transitions sorted by priority = {true_labels}") + return true_label
    + + +
    +[docs] + def _run_handlers(self, ctx, pipeline: Pipeline, actor_stage: ActorStage, *args, **kwargs): + [handler(ctx, pipeline, *args, **kwargs) for handler in self.handlers.get(actor_stage, [])]
    + + +
    +[docs] + def _choose_label( + self, specific_label: Optional[NodeLabel3Type], general_label: Optional[NodeLabel3Type] + ) -> NodeLabel3Type: + if all([specific_label, general_label]): + chosen_label = specific_label if specific_label[2] >= general_label[2] else general_label + elif any([specific_label, general_label]): + chosen_label = specific_label if specific_label else general_label + else: + chosen_label = self.fallback_label + return chosen_label
    + + +
    +[docs] + def validate_script(self, pipeline: Pipeline, verbose: bool = True): + # TODO: script has to not contain priority == -inf, because it uses for miss values + flow_labels = [] + node_labels = [] + labels = [] + conditions = [] + for flow_name, flow in self.script.items(): + for node_name, node in flow.items(): + flow_labels += [flow_name] * len(node.transitions) + node_labels += [node_name] * len(node.transitions) + labels += list(node.transitions.keys()) + conditions += list(node.transitions.values()) + + error_msgs = [] + for flow_label, node_label, label, condition in zip(flow_labels, node_labels, labels, conditions): + ctx = Context() + ctx.validation = True + ctx.add_request(Message(text="text")) + + label = label(ctx, pipeline) if callable(label) else normalize_label(label, flow_label) + + # validate labeling + try: + node = self.script[label[0]][label[1]] + except Exception as exc: + msg = ( + f"Could not find node with label={label}, " + f"error was found in (flow_label, node_label)={(flow_label, node_label)}" + ) + error_handler(error_msgs, msg, exc, verbose) + break + + # validate responsing + response_func = normalize_response(node.response) + try: + response_result = response_func(ctx, pipeline) + if not isinstance(response_result, Message): + msg = ( + "Expected type of response_result is `Message`.\n" + + f"Got type(response_result)={type(response_result)}" + f" for label={label} , error was found in (flow_label, node_label)={(flow_label, node_label)}" + ) + error_handler(error_msgs, msg, None, verbose) + continue + except Exception as exc: + msg = ( + f"Got exception '''{exc}''' during response execution " + f"for label={label} and node.response={node.response}" + f", error was found in (flow_label, node_label)={(flow_label, node_label)}" + ) + error_handler(error_msgs, msg, exc, verbose) + continue + + # validate conditioning + try: + condition_result = condition(ctx, pipeline) + if not isinstance(condition(ctx, pipeline), bool): + raise Exception(f"Returned condition_result={condition_result}, but expected bool type") + except Exception as exc: + msg = f"Got exception '''{exc}''' during condition execution for label={label}" + error_handler(error_msgs, msg, exc, verbose) + continue + return error_msgs
    +
    + + + +
    +[docs] +def default_condition_handler( + condition: Callable, ctx: Context, pipeline: Pipeline, *args, **kwargs +) -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + The simplest and quickest condition handler for trivial condition handling returns the callable condition: + + :param condition: Condition to copy. + :param ctx: Context of current condition. + :param pipeline: Pipeline we use in this condition. + """ + return condition(ctx, pipeline, *args, **kwargs)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/pipeline/component.html b/_modules/dff/pipeline/pipeline/component.html new file mode 100644 index 0000000000..1a6ada31b2 --- /dev/null +++ b/_modules/dff/pipeline/pipeline/component.html @@ -0,0 +1,843 @@ + + + + + + + + + + dff.pipeline.pipeline.component — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.pipeline.component

    +"""
    +Component
    +---------
    +The Component module defines a :py:class:`.PipelineComponent` class,
    +which is a fundamental building block of the framework. A PipelineComponent represents a single
    +step in a processing pipeline, and is responsible for performing a specific task or set of tasks.
    +
    +The PipelineComponent class can be a group or a service. It is designed to be reusable and composable,
    +allowing developers to create complex processing pipelines by combining multiple components.
    +"""
    +import logging
    +import abc
    +import asyncio
    +import copy
    +from typing import Optional, Union, Awaitable, ForwardRef
    +
    +from dff.script import Context
    +
    +from ..service.extra import BeforeHandler, AfterHandler
    +from ..conditions import always_start_condition
    +from ..types import (
    +    PIPELINE_STATE_KEY,
    +    StartConditionCheckerFunction,
    +    ComponentExecutionState,
    +    ServiceRuntimeInfo,
    +    GlobalExtraHandlerType,
    +    ExtraHandlerFunction,
    +    ExtraHandlerType,
    +    ExtraHandlerBuilder,
    +)
    +
    +logger = logging.getLogger(__name__)
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +class PipelineComponent(abc.ABC): + """ + This class represents a pipeline component, which is a service or a service group. + It contains some fields that they have in common. + + :param before_handler: :py:class:`~.BeforeHandler`, associated with this component. + :type before_handler: Optional[:py:data:`~.ExtraHandlerBuilder`] + :param after_handler: :py:class:`~.AfterHandler`, associated with this component. + :type after_handler: Optional[:py:data:`~.ExtraHandlerBuilder`] + :param timeout: (for asynchronous only!) Maximum component execution time (in seconds), + if it exceeds this time, it is interrupted. + :param requested_async_flag: Requested asynchronous property; + if not defined, `calculated_async_flag` is used instead. + :param calculated_async_flag: Whether the component can be asynchronous or not + 1) for :py:class:`~.pipeline.service.service.Service`: whether its `handler` is asynchronous or not, + 2) for :py:class:`~.pipeline.service.group.ServiceGroup`: whether all its `services` are asynchronous or not. + + :param start_condition: StartConditionCheckerFunction that is invoked before each component execution; + component is executed only if it returns `True`. + :type start_condition: Optional[:py:data:`~.StartConditionCheckerFunction`] + :param name: Component name (should be unique in single :py:class:`~.pipeline.service.group.ServiceGroup`), + should not be blank or contain `.` symbol. + :param path: Separated by dots path to component, is universally unique. + """ + + def __init__( + self, + before_handler: Optional[ExtraHandlerBuilder] = None, + after_handler: Optional[ExtraHandlerBuilder] = None, + timeout: Optional[float] = None, + requested_async_flag: Optional[bool] = None, + calculated_async_flag: bool = False, + start_condition: Optional[StartConditionCheckerFunction] = None, + name: Optional[str] = None, + path: Optional[str] = None, + ): + self.timeout = timeout + """ + Maximum component execution time (in seconds), + if it exceeds this time, it is interrupted (for asynchronous only!). + """ + self.requested_async_flag = requested_async_flag + """Requested asynchronous property; if not defined, :py:attr:`~requested_async_flag` is used instead.""" + self.calculated_async_flag = calculated_async_flag + """Calculated asynchronous property, whether the component can be asynchronous or not.""" + self.start_condition = always_start_condition if start_condition is None else start_condition + """ + Component start condition that is invoked before each component execution; + component is executed only if it returns `True`. + """ + self.name = name + """ + Component name (should be unique in single :py:class:`~pipeline.service.group.ServiceGroup`), + should not be blank or contain '.' symbol. + """ + self.path = path + """ + Dot-separated path to component (is universally unique). + This attribute is set in :py:func:`~dff.pipeline.pipeline.utils.finalize_service_group`. + """ + + self.before_handler = BeforeHandler([] if before_handler is None else before_handler) + self.after_handler = AfterHandler([] if after_handler is None else after_handler) + + if name is not None and (name == "" or "." in name): + raise Exception(f"User defined service name shouldn't be blank or contain '.' (service: {name})!") + + if not calculated_async_flag and requested_async_flag: + raise Exception(f"{type(self).__name__} '{name}' can't be asynchronous!") + +
    +[docs] + def _set_state(self, ctx: Context, value: ComponentExecutionState): + """ + Method for component runtime state setting, state is preserved in `ctx.framework_states` dict, + in subdict, dedicated to this library. + + :param ctx: :py:class:`~.Context` to keep state in. + :param value: State to set. + :return: `None` + """ + if PIPELINE_STATE_KEY not in ctx.framework_states: + ctx.framework_states[PIPELINE_STATE_KEY] = {} + ctx.framework_states[PIPELINE_STATE_KEY][self.path] = value
    + + +
    +[docs] + def get_state(self, ctx: Context, default: Optional[ComponentExecutionState] = None) -> ComponentExecutionState: + """ + Method for component runtime state getting, state is preserved in `ctx.framework_states` dict, + in subdict, dedicated to this library. + + :param ctx: :py:class:`~.Context` to get state from. + :param default: Default to return if no record found + (usually it's :py:attr:`~.pipeline.types.ComponentExecutionState.NOT_RUN`). + :return: :py:class:`~pipeline.types.ComponentExecutionState` of this service or default if not found. + """ + return ctx.framework_states[PIPELINE_STATE_KEY].get(self.path, default if default is not None else None)
    + + + @property + def asynchronous(self) -> bool: + """ + Property, that indicates, whether this component is synchronous or asynchronous. + It is calculated according to the following rules: + + - | If component **can** be asynchronous and :py:attr:`~requested_async_flag` is set, + it returns :py:attr:`~requested_async_flag`. + - | If component **can** be asynchronous and :py:attr:`~requested_async_flag` isn't set, + it returns `True`. + - | If component **can't** be asynchronous and :py:attr:`~requested_async_flag` is `False` or not set, + it returns `False`. + - | If component **can't** be asynchronous and :py:attr:`~requested_async_flag` is `True`, + an Exception is thrown in constructor. + + """ + return self.calculated_async_flag if self.requested_async_flag is None else self.requested_async_flag + +
    +[docs] + async def run_extra_handler(self, stage: ExtraHandlerType, ctx: Context, pipeline: Pipeline): + extra_handler = None + if stage == ExtraHandlerType.BEFORE: + extra_handler = self.before_handler + if stage == ExtraHandlerType.AFTER: + extra_handler = self.after_handler + if extra_handler is None: + return + try: + extra_handler_result = await extra_handler(ctx, pipeline, self._get_runtime_info(ctx)) + if extra_handler.asynchronous and isinstance(extra_handler_result, Awaitable): + await extra_handler_result + except asyncio.TimeoutError: + logger.warning(f"{type(self).__name__} '{self.name}' {extra_handler.stage} extra handler timed out!")
    + + +
    +[docs] + @abc.abstractmethod + async def _run(self, ctx: Context, pipeline: Optional[Pipeline] = None) -> Optional[Context]: + """ + A method for running pipeline component, it is overridden in all its children. + This method is run after the component's timeout is set (if needed). + + :param ctx: Current dialog :py:class:`~.Context`. + :param pipeline: This :py:class:`~.Pipeline`. + :return: :py:class:`~.Context` if this is a synchronous service or `None`, + asynchronous services shouldn't modify :py:class:`~.Context`. + """ + raise NotImplementedError
    + + + async def __call__(self, ctx: Context, pipeline: Optional[Pipeline] = None) -> Optional[Union[Context, Awaitable]]: + """ + A method for calling pipeline components. + It sets up timeout if this component is asynchronous and executes it using :py:meth:`~._run` method. + + :param ctx: Current dialog :py:class:`~.Context`. + :param pipeline: This :py:class:`~.Pipeline`. + :return: :py:class:`~.Context` if this is a synchronous service or :py:class:`~.typing.const.Awaitable`, + asynchronous services shouldn't modify :py:class:`~.Context`. + """ + if self.asynchronous: + task = asyncio.create_task(self._run(ctx, pipeline)) + return asyncio.wait_for(task, timeout=self.timeout) + else: + return await self._run(ctx, pipeline) + +
    +[docs] + def add_extra_handler(self, global_extra_handler_type: GlobalExtraHandlerType, extra_handler: ExtraHandlerFunction): + """ + Method for adding a global extra handler to this particular component. + + :param global_extra_handler_type: A type of extra handler to add. + :param extra_handler: A :py:class:`~.GlobalExtraHandlerType` to add to the component as an extra handler. + :type extra_handler: :py:data:`~.ExtraHandlerFunction` + :return: `None` + """ + target = ( + self.before_handler if global_extra_handler_type is GlobalExtraHandlerType.BEFORE else self.after_handler + ) + target.functions.append(extra_handler)
    + + +
    +[docs] + def _get_runtime_info(self, ctx: Context) -> ServiceRuntimeInfo: + """ + Method for retrieving runtime info about this component. + + :param ctx: Current dialog :py:class:`~.Context`. + :return: :py:class:`~.dff.script.typing.ServiceRuntimeInfo` + object where all not set fields are replaced with `[None]`. + """ + return ServiceRuntimeInfo( + name=self.name if self.name is not None else "[None]", + path=self.path if self.path is not None else "[None]", + timeout=self.timeout, + asynchronous=self.asynchronous, + execution_state=copy.deepcopy(ctx.framework_states[PIPELINE_STATE_KEY]), + )
    + + + @property + def info_dict(self) -> dict: + """ + Property for retrieving info dictionary about this component. + All not set fields there are replaced with `[None]`. + + :return: Info dict, containing most important component public fields as well as its type. + """ + return { + "type": type(self).__name__, + "name": self.name, + "path": self.path if self.path is not None else "[None]", + "asynchronous": self.asynchronous, + "start_condition": self.start_condition.__name__, + "extra_handlers": { + "before": self.before_handler.info_dict, + "after": self.after_handler.info_dict, + }, + }
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/pipeline/pipeline.html b/_modules/dff/pipeline/pipeline/pipeline.html new file mode 100644 index 0000000000..5ef523ee5c --- /dev/null +++ b/_modules/dff/pipeline/pipeline/pipeline.html @@ -0,0 +1,974 @@ + + + + + + + + + + dff.pipeline.pipeline.pipeline — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.pipeline.pipeline

    +"""
    +Pipeline
    +--------
    +The Pipeline module contains the :py:class:`.Pipeline` class,
    +which is a fundamental element of the DFF. The Pipeline class is responsible
    +for managing and executing the various components (:py:class:`.PipelineComponent`)which make up
    +the processing of messages from and to users.
    +It provides a way to organize and structure the messages processing flow.
    +The Pipeline class is designed to be highly customizable and configurable,
    +allowing developers to add, remove, or modify the components that make up the messages processing flow.
    +
    +The Pipeline class is designed to be used in conjunction with the :py:class:`.PipelineComponent`
    +class, which is defined in the Component module. Together, these classes provide a powerful and flexible way
    +to structure and manage the messages processing flow.
    +"""
    +import asyncio
    +import logging
    +from typing import Union, List, Dict, Optional, Hashable, Callable
    +
    +from dff.context_storages import DBContextStorage
    +from dff.script import Script, Context, ActorStage
    +from dff.script import NodeLabel2Type, Message
    +from dff.utils.turn_caching import cache_clear
    +
    +from dff.messengers.common import MessengerInterface, CLIMessengerInterface
    +from ..service.group import ServiceGroup
    +from ..types import (
    +    ServiceBuilder,
    +    ServiceGroupBuilder,
    +    PipelineBuilder,
    +    GlobalExtraHandlerType,
    +    ExtraHandlerFunction,
    +    ExtraHandlerBuilder,
    +)
    +from ..types import PIPELINE_STATE_KEY
    +from .utils import finalize_service_group, pretty_format_component_info_dict
    +from dff.pipeline.pipeline.actor import Actor
    +
    +logger = logging.getLogger(__name__)
    +
    +ACTOR = "ACTOR"
    +
    +
    +
    +[docs] +class Pipeline: + """ + Class that automates service execution and creates service pipeline. + It accepts constructor parameters: + + :param script: (required) A :py:class:`~.Script` instance (object or dict). + :param start_label: (required) Actor start label. + :param fallback_label: Actor fallback label. + :param label_priority: Default priority value for all actor :py:const:`labels <dff.script.NodeLabel3Type>` + where there is no priority. Defaults to `1.0`. + :param validation_stage: This flag sets whether the validation stage is executed after actor creation. + It is executed by default. Defaults to `None`. + :param condition_handler: Handler that processes a call of actor condition functions. Defaults to `None`. + :param verbose: If it is `True`, logging is used in actor. Defaults to `True`. + :param handlers: This variable is responsible for the usage of external handlers on + the certain stages of work of :py:class:`~dff.script.Actor`. + + - key: :py:class:`~dff.script.ActorStage` - Stage in which the handler is called. + - value: List[Callable] - The list of called handlers for each stage. Defaults to an empty `dict`. + + :param messenger_interface: An `AbsMessagingInterface` instance for this pipeline. + :param context_storage: An :py:class:`~.DBContextStorage` instance for this pipeline or + a dict to store dialog :py:class:`~.Context`. + :param services: (required) A :py:data:`~.ServiceGroupBuilder` object, + that will be transformed to root service group. It should include :py:class:`~.Actor`, + but only once (raises exception otherwise). It will always be named pipeline. + :param wrappers: List of wrappers to add to pipeline root service group. + :param timeout: Timeout to add to pipeline root service group. + :param optimization_warnings: Asynchronous pipeline optimization check request flag; + warnings will be sent to logs. Additionally it has some calculated fields: + + - `_services_pipeline` is a pipeline root :py:class:`~.ServiceGroup` object, + - `actor` is a pipeline actor, found among services. + + """ + + def __init__( + self, + components: ServiceGroupBuilder, + script: Union[Script, Dict], + start_label: NodeLabel2Type, + fallback_label: Optional[NodeLabel2Type] = None, + label_priority: float = 1.0, + validation_stage: Optional[bool] = None, + condition_handler: Optional[Callable] = None, + verbose: bool = True, + handlers: Optional[Dict[ActorStage, List[Callable]]] = None, + messenger_interface: Optional[MessengerInterface] = None, + context_storage: Optional[Union[DBContextStorage, Dict]] = None, + before_handler: Optional[ExtraHandlerBuilder] = None, + after_handler: Optional[ExtraHandlerBuilder] = None, + timeout: Optional[float] = None, + optimization_warnings: bool = False, + ): + self.actor: Actor = None + self.messenger_interface = CLIMessengerInterface() if messenger_interface is None else messenger_interface + self.context_storage = {} if context_storage is None else context_storage + self._services_pipeline = ServiceGroup( + components, + before_handler=before_handler, + after_handler=after_handler, + timeout=timeout, + ) + + self._services_pipeline.name = "pipeline" + self._services_pipeline.path = ".pipeline" + actor_exists = finalize_service_group(self._services_pipeline, path=self._services_pipeline.path) + if not actor_exists: + raise Exception("Actor not found in pipeline!") + else: + self.set_actor( + script, + start_label, + fallback_label, + label_priority, + validation_stage, + condition_handler, + verbose, + handlers, + ) + if self.actor is None: + raise Exception("Actor wasn't initialized correctly!") + + if optimization_warnings: + self._services_pipeline.log_optimization_warnings() + + # NB! The following API is highly experimental and may be removed at ANY time WITHOUT FURTHER NOTICE!! + self._clean_turn_cache = True + if self._clean_turn_cache: + self.actor._clean_turn_cache = False + +
    +[docs] + def add_global_handler( + self, + global_handler_type: GlobalExtraHandlerType, + extra_handler: ExtraHandlerFunction, + whitelist: Optional[List[str]] = None, + blacklist: Optional[List[str]] = None, + ): + """ + Method for adding global wrappers to pipeline. + Different types of global wrappers are called before/after pipeline execution + or before/after each pipeline component. + They can be used for pipeline statistics collection or other functionality extensions. + NB! Global wrappers are still wrappers, + they shouldn't be used for much time-consuming tasks (see ../service/wrapper.py). + + :param global_handler_type: (required) indication where the wrapper + function should be executed. + :param extra_handler: (required) wrapper function itself. + :type extra_handler: ExtraHandlerFunction + :param whitelist: a list of services to only add this wrapper to. + :param blacklist: a list of services to not add this wrapper to. + :return: `None` + """ + + def condition(name: str) -> bool: + return (whitelist is None or name in whitelist) and (blacklist is None or name not in blacklist) + + if ( + global_handler_type is GlobalExtraHandlerType.BEFORE_ALL + or global_handler_type is GlobalExtraHandlerType.AFTER_ALL + ): + whitelist = ["pipeline"] + global_handler_type = ( + GlobalExtraHandlerType.BEFORE + if global_handler_type is GlobalExtraHandlerType.BEFORE_ALL + else GlobalExtraHandlerType.AFTER + ) + + self._services_pipeline.add_extra_handler(global_handler_type, extra_handler, condition)
    + + + @property + def info_dict(self) -> dict: + """ + Property for retrieving info dictionary about this pipeline. + Returns info dict, containing most important component public fields as well as its type. + All complex or unserializable fields here are replaced with 'Instance of [type]'. + """ + return { + "type": type(self).__name__, + "messenger_interface": f"Instance of {type(self.messenger_interface).__name__}", + "context_storage": f"Instance of {type(self.context_storage).__name__}", + "services": [self._services_pipeline.info_dict], + } + +
    +[docs] + def pretty_format(self, show_extra_handlers: bool = False, indent: int = 4) -> str: + """ + Method for receiving pretty-formatted string description of the pipeline. + Resulting string structure is somewhat similar to YAML string. + Should be used in debugging/logging purposes and should not be parsed. + + :param show_wrappers: Whether to include Wrappers or not (could be many and/or generated). + :param indent: Offset from new line to add before component children. + """ + return pretty_format_component_info_dict(self.info_dict, show_extra_handlers, indent=indent)
    + + +
    +[docs] + @classmethod + def from_script( + cls, + script: Union[Script, Dict], + start_label: NodeLabel2Type, + fallback_label: Optional[NodeLabel2Type] = None, + label_priority: float = 1.0, + validation_stage: Optional[bool] = None, + condition_handler: Optional[Callable] = None, + verbose: bool = True, + handlers: Optional[Dict[ActorStage, List[Callable]]] = None, + context_storage: Optional[Union[DBContextStorage, Dict]] = None, + messenger_interface: Optional[MessengerInterface] = None, + pre_services: Optional[List[Union[ServiceBuilder, ServiceGroupBuilder]]] = None, + post_services: Optional[List[Union[ServiceBuilder, ServiceGroupBuilder]]] = None, + ) -> "Pipeline": + """ + Pipeline script-based constructor. + It creates :py:class:`~.Actor` object and wraps it with pipeline. + NB! It is generally not designed for projects with complex structure. + :py:class:`~.Service` and :py:class:`~.ServiceGroup` customization + becomes not as obvious as it could be with it. + Should be preferred for simple workflows with Actor auto-execution. + + :param script: (required) A :py:class:`~.Script` instance (object or dict). + :param start_label: (required) Actor start label. + :param fallback_label: Actor fallback label. + :param label_priority: Default priority value for all actor :py:const:`labels <dff.script.NodeLabel3Type>` + where there is no priority. Defaults to `1.0`. + :param validation_stage: This flag sets whether the validation stage is executed after actor creation. + It is executed by default. Defaults to `None`. + :param condition_handler: Handler that processes a call of actor condition functions. Defaults to `None`. + :param verbose: If it is `True`, logging is used in actor. Defaults to `True`. + :param handlers: This variable is responsible for the usage of external handlers on + the certain stages of work of :py:class:`~dff.script.Actor`. + + - key: :py:class:`~dff.script.ActorStage` - Stage in which the handler is called. + - value: List[Callable] - The list of called handlers for each stage. Defaults to an empty `dict`. + + :param context_storage: An :py:class:`~.DBContextStorage` instance for this pipeline + or a dict to store dialog :py:class:`~.Context`. + :param messenger_interface: An instance for this pipeline. + :param pre_services: List of :py:data:`~.ServiceBuilder` or + :py:data:`~.ServiceGroupBuilder` that will be executed before Actor. + :type pre_services: Optional[List[Union[ServiceBuilder, ServiceGroupBuilder]]] + :param post_services: List of :py:data:`~.ServiceBuilder` or + :py:data:`~.ServiceGroupBuilder` that will be executed after Actor. + It constructs root service group by merging `pre_services` + actor + `post_services`. + :type post_services: Optional[List[Union[ServiceBuilder, ServiceGroupBuilder]]] + """ + pre_services = [] if pre_services is None else pre_services + post_services = [] if post_services is None else post_services + return cls( + script=script, + start_label=start_label, + fallback_label=fallback_label, + label_priority=label_priority, + validation_stage=validation_stage, + condition_handler=condition_handler, + verbose=verbose, + handlers=handlers, + messenger_interface=messenger_interface, + context_storage=context_storage, + components=[*pre_services, ACTOR, *post_services], + )
    + + +
    +[docs] + def set_actor( + self, + script: Union[Script, Dict], + start_label: NodeLabel2Type, + fallback_label: Optional[NodeLabel2Type] = None, + label_priority: float = 1.0, + validation_stage: Optional[bool] = None, + condition_handler: Optional[Callable] = None, + verbose: bool = True, + handlers: Optional[Dict[ActorStage, List[Callable]]] = None, + ): + """ + Set actor for the current pipeline and conducts necessary checks. + Reset actor to previous if any errors are found. + + :param script: (required) A :py:class:`~.Script` instance (object or dict). + :param start_label: (required) Actor start label. + The start node of :py:class:`~dff.script.Script`. The execution begins with it. + :param fallback_label: Actor fallback label. The label of :py:class:`~dff.script.Script`. + Dialog comes into that label if all other transitions failed, + or there was an error while executing the scenario. + :param label_priority: Default priority value for all actor :py:const:`labels <dff.script.NodeLabel3Type>` + where there is no priority. Defaults to `1.0`. + :param validation_stage: This flag sets whether the validation stage is executed in actor. + It is executed by default. Defaults to `None`. + :param condition_handler: Handler that processes a call of actor condition functions. Defaults to `None`. + :param verbose: If it is `True`, logging is used in actor. Defaults to `True`. + :param handlers: This variable is responsible for the usage of external handlers on + the certain stages of work of :py:class:`~dff.script.Actor`. + + - key :py:class:`~dff.script.ActorStage` - Stage in which the handler is called. + - value List[Callable] - The list of called handlers for each stage. Defaults to an empty `dict`. + """ + old_actor = self.actor + self.actor = Actor(script, start_label, fallback_label, label_priority, condition_handler, handlers) + errors = self.actor.validate_script(self, verbose) if validation_stage is not False else [] + if errors: + self.actor = old_actor + raise ValueError( + f"Found {len(errors)} errors: " + " ".join([f"{i}) {er}" for i, er in enumerate(errors, 1)]) + )
    + + +
    +[docs] + @classmethod + def from_dict(cls, dictionary: PipelineBuilder) -> "Pipeline": + """ + Pipeline dictionary-based constructor. + Dictionary should have the fields defined in Pipeline main constructor, + it will be split and passed to it as `**kwargs`. + """ + return cls(**dictionary)
    + + +
    +[docs] + async def _run_pipeline(self, request: Message, ctx_id: Optional[Hashable] = None) -> Context: + """ + Method that runs pipeline once for user request. + + :param request: (required) Any user request. + :param ctx_id: Current dialog id; if `None`, new dialog will be created. + :return: Dialog `Context`. + """ + if ctx_id is None: + ctx = Context() + elif isinstance(self.context_storage, DBContextStorage): + ctx = await self.context_storage.get_async(ctx_id, Context(id=ctx_id)) + else: + ctx = self.context_storage.get(ctx_id, Context(id=ctx_id)) + + ctx.framework_states[PIPELINE_STATE_KEY] = {} + ctx.add_request(request) + ctx = await self._services_pipeline(ctx, self) + del ctx.framework_states[PIPELINE_STATE_KEY] + + if isinstance(self.context_storage, DBContextStorage): + await self.context_storage.set_item_async(ctx_id, ctx) + else: + self.context_storage[ctx_id] = ctx + if self._clean_turn_cache: + cache_clear() + + return ctx
    + + +
    +[docs] + def run(self): + """ + Method that starts a pipeline and connects to `messenger_interface`. + It passes `_run_pipeline` to `messenger_interface` as a callbacks, + so every time user request is received, `_run_pipeline` will be called. + This method can be both blocking and non-blocking. It depends on current `messenger_interface` nature. + Message interfaces that run in a loop block current thread. + """ + asyncio.run(self.messenger_interface.connect(self._run_pipeline))
    + + + def __call__(self, request: Message, ctx_id: Hashable) -> Context: + """ + Method that executes pipeline once. + Basically, it is a shortcut for `_run_pipeline`. + NB! When pipeline is executed this way, `messenger_interface` won't be initiated nor connected. + + :param request: Any user request. + :param ctx_id: Current dialog id. + :return: Dialog `Context`. + """ + return asyncio.run(self._run_pipeline(request, ctx_id)) + + @property + def script(self) -> Script: + return self.actor.script
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/pipeline/utils.html b/_modules/dff/pipeline/pipeline/utils.html new file mode 100644 index 0000000000..86c900f6af --- /dev/null +++ b/_modules/dff/pipeline/pipeline/utils.html @@ -0,0 +1,718 @@ + + + + + + + + + + dff.pipeline.pipeline.utils — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.pipeline.utils

    +"""
    +Utils
    +-----
    +The Utils module contains several service functions that are commonly used throughout the framework.
    +These functions provide a variety of utility functionality.
    +"""
    +import collections
    +from typing import Union, List
    +from inspect import isfunction
    +
    +from ..service.service import Service
    +from ..service.group import ServiceGroup
    +
    +
    +
    +[docs] +def pretty_format_component_info_dict( + service: dict, + show_extra_handlers: bool, + offset: str = "", + extra_handlers_key: str = "extra_handlers", + type_key: str = "type", + name_key: str = "name", + indent: int = 4, +) -> str: + """ + Function for dumping any pipeline components info dictionary (received from `info_dict` property) as a string. + Resulting string is formatted with YAML-like format, however it's not strict and shouldn't be parsed. + However, most preferable usage is via `pipeline.pretty_format`. + + :param service: (required) Pipeline components info dictionary. + :param show_wrappers: (required) Whether to include Wrappers or not (could be many and/or generated). + :param offset: Current level new line offset. + :param wrappers_key: Key that is mapped to Wrappers lists. + :param type_key: Key that is mapped to components type name. + :param name_key: Key that is mapped to components name. + :param indent: Current level new line offset (whitespace number). + :return: Formatted string + """ + indent = " " * indent + representation = f"{offset}{service.get(type_key, '[None]')}%s:\n" % ( + f" '{service.get(name_key, '[None]')}'" if name_key in service else "" + ) + for key, value in service.items(): + if key not in (type_key, name_key, extra_handlers_key) or (key == extra_handlers_key and show_extra_handlers): + if isinstance(value, List): + if len(value) > 0: + values = [ + pretty_format_component_info_dict(instance, show_extra_handlers, f"{indent * 2}{offset}") + for instance in value + ] + value_str = "\n%s" % "\n".join(values) + else: + value_str = "[None]" + else: + value_str = str(value) + representation += f"{offset}{indent}{key}: {value_str}\n" + return representation[:-1]
    + + + +
    +[docs] +def rename_component_incrementing( + service: Union[Service, ServiceGroup], collisions: List[Union[Service, ServiceGroup]] +) -> str: + """ + Function for generating new name for a pipeline component, + that has similar name with other components in the same group. + The name is generated according to these rules: + + - If service's handler is "ACTOR", it is named `actor`. + - If service's handler is `Callable`, it is named after this `callable`. + - If it's a service group, it is named `service_group`. + - Otherwise, it is names `noname_service`. + - | After that, `_[NUMBER]` is added to the resulting name, + where `_[NUMBER]` is number of components with the same name in current service group. + + :param service: Service to be renamed. + :param collisions: Services in the same service group as service. + :return: Generated name + """ + if isinstance(service, Service) and isinstance(service.handler, str) and service.handler == "ACTOR": + base_name = "actor" + elif isinstance(service, Service) and callable(service.handler): + if isfunction(service.handler): + base_name = service.handler.__name__ + else: + base_name = service.handler.__class__.__name__ + elif isinstance(service, ServiceGroup): + base_name = "service_group" + else: + base_name = "noname_service" + + name_index = 0 + while f"{base_name}_{name_index}" in [component.name for component in collisions]: + name_index += 1 + return f"{base_name}_{name_index}"
    + + + +
    +[docs] +def finalize_service_group(service_group: ServiceGroup, path: str = ".") -> bool: + """ + Function that iterates through a service group (and all its subgroups), + finalizing component's names and paths in it. + Components are renamed only if user didn't set a name for them. Their paths are also generated here. + It also searches for "ACTOR" in the group, throwing exception if no actor or multiple actors found. + + :param service_group: Service group to resolve name collisions in. + :param path: + A prefix for component paths -- path of `component` is equal to `{path}.{component.name}`. + Defaults to ".". + """ + actor = False + names_counter = collections.Counter([component.name for component in service_group.components]) + for component in service_group.components: + if component.name is None: + component.name = rename_component_incrementing(component, service_group.components) + elif names_counter[component.name] > 1: + raise Exception(f"User defined service name collision ({path})!") + component.path = f"{path}.{component.name}" + + if isinstance(component, Service) and isinstance(component.handler, str) and component.handler == "ACTOR": + actor_found = True + elif isinstance(component, ServiceGroup): + actor_found = finalize_service_group(component, f"{path}.{component.name}") + else: + actor_found = False + + if actor_found: + if not actor: + actor = actor_found + else: + raise Exception(f"More than one actor found in group ({path})!") + return actor
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/service/extra.html b/_modules/dff/pipeline/service/extra.html new file mode 100644 index 0000000000..ac7608b723 --- /dev/null +++ b/_modules/dff/pipeline/service/extra.html @@ -0,0 +1,806 @@ + + + + + + + + + + dff.pipeline.service.extra — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.service.extra

    +"""
    +Extra Handler
    +-------------
    +The Extra Handler module contains additional functionality that extends the capabilities of the system
    +beyond the core functionality. Extra handlers is an input converting addition to :py:class:`.PipelineComponent`.
    +For example, it is used to grep statistics from components, timing, logging, etc.
    +"""
    +import asyncio
    +import logging
    +import inspect
    +from typing import Optional, List, ForwardRef
    +
    +from dff.script import Context
    +
    +from .utils import collect_defined_constructor_parameters_to_dict, _get_attrs_with_updates, wrap_sync_function_in_async
    +from ..types import (
    +    ServiceRuntimeInfo,
    +    ExtraHandlerType,
    +    ExtraHandlerBuilder,
    +    ExtraHandlerFunction,
    +    ExtraHandlerRuntimeInfo,
    +)
    +
    +logger = logging.getLogger(__name__)
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +class _ComponentExtraHandler: + """ + Class, representing an extra pipeline component handler. + A component extra handler is a set of functions, attached to pipeline component (before or after it). + Extra handlers should execute supportive tasks (like time or resources measurement, minor data transformations). + Extra handlers should NOT edit context or pipeline, use services for that purpose instead. + + :param functions: An `ExtraHandlerBuilder` object, an `_ComponentExtraHandler` instance, + a dict or a list of :py:data:`~.ExtraHandlerFunction`. + :type functions: :py:data:`~.ExtraHandlerBuilder` + :param stage: An :py:class:`~.ExtraHandlerType`, specifying whether this handler will be executed before or + after pipeline component. + :param timeout: (for asynchronous only!) Maximum component execution time (in seconds), + if it exceeds this time, it is interrupted. + :param asynchronous: Requested asynchronous property. + """ + + def __init__( + self, + functions: ExtraHandlerBuilder, + stage: ExtraHandlerType = ExtraHandlerType.UNDEFINED, + timeout: Optional[float] = None, + asynchronous: Optional[bool] = None, + ): + overridden_parameters = collect_defined_constructor_parameters_to_dict( + timeout=timeout, asynchronous=asynchronous + ) + if isinstance(functions, _ComponentExtraHandler): + self.__init__( + **_get_attrs_with_updates( + functions, + ("calculated_async_flag", "stage"), + {"requested_async_flag": "asynchronous"}, + overridden_parameters, + ) + ) + elif isinstance(functions, dict): + functions.update(overridden_parameters) + self.__init__(**functions) + elif isinstance(functions, List): + self.functions = functions + self.timeout = timeout + self.requested_async_flag = asynchronous + self.calculated_async_flag = all([asyncio.iscoroutinefunction(func) for func in self.functions]) + self.stage = stage + else: + raise Exception(f"Unknown type for {type(self).__name__} {functions}") + + @property + def asynchronous(self) -> bool: + """ + Property, that indicates, whether this component extra handler is synchronous or asynchronous. + It is calculated according to the following rules: + + - | If component **can** be asynchronous and :py:attr:`~requested_async_flag` is set, + it returns :py:attr:`~requested_async_flag`. + - | If component **can** be asynchronous and :py:attr:`~requested_async_flag` isn't set, + it returns `True`. + - | If component **can't** be asynchronous and :py:attr:`~requested_async_flag` is `False` or not set, + it returns `False`. + - | If component **can't** be asynchronous and :py:attr:`~requested_async_flag` is `True`, + an Exception is thrown in constructor. + + """ + return self.calculated_async_flag if self.requested_async_flag is None else self.requested_async_flag + +
    +[docs] + async def _run_function( + self, func: ExtraHandlerFunction, ctx: Context, pipeline: Pipeline, component_info: ServiceRuntimeInfo + ): + handler_params = len(inspect.signature(func).parameters) + if handler_params == 1: + await wrap_sync_function_in_async(func, ctx) + elif handler_params == 2: + await wrap_sync_function_in_async(func, ctx, pipeline) + elif handler_params == 3: + extra_handler_runtime_info = ExtraHandlerRuntimeInfo(func=func, stage=self.stage, component=component_info) + await wrap_sync_function_in_async(func, ctx, pipeline, extra_handler_runtime_info) + else: + raise Exception( + f"Too many parameters required for component {component_info.name} {self.stage}" + f" wrapper handler '{func.__name__}': {handler_params}!" + )
    + + +
    +[docs] + async def _run(self, ctx: Context, pipeline: Pipeline, component_info: ServiceRuntimeInfo): + """ + Method for executing one of the wrapper functions (before or after). + If the function is not set, nothing happens. + + :param stage: current `WrapperStage` (before or after). + :param ctx: current dialog context. + :param pipeline: the current pipeline. + :param component_info: associated component's info dictionary. + :return: `None` + """ + + if self.asynchronous: + futures = [self._run_function(func, ctx, pipeline, component_info) for func in self.functions] + for func, future in zip(self.functions, asyncio.as_completed(futures)): + try: + await future + except asyncio.TimeoutError: + logger.warning(f"Component {component_info.name} {self.stage} wrapper '{func.__name__}' timed out!") + + else: + for func in self.functions: + await self._run_function(func, ctx, pipeline, component_info)
    + + + async def __call__(self, ctx: Context, pipeline: Pipeline, component_info: ServiceRuntimeInfo): + """ + A method for calling pipeline components. + It sets up timeout if this component is asynchronous and executes it using `_run` method. + + :param ctx: (required) Current dialog `Context`. + :param pipeline: This `Pipeline`. + :return: `Context` if this is a synchronous service or + `Awaitable` if this is an asynchronous component or `None`. + """ + if self.asynchronous: + task = asyncio.create_task(self._run(ctx, pipeline, component_info)) + return await asyncio.wait_for(task, timeout=self.timeout) + else: + return await self._run(ctx, pipeline, component_info) + + @property + def info_dict(self) -> dict: + """ + Property for retrieving info dictionary about this wrapper. + + :return: Info dict, containing its fields as well as its type. + All not set fields there are replaced with `None`. + """ + return { + "type": type(self).__name__, + "timeout": self.timeout, + "asynchronous": self.asynchronous, + "functions": [func.__name__ for func in self.functions], + }
    + + + +
    +[docs] +class BeforeHandler(_ComponentExtraHandler): + """ + A handler for extra functions that are executed before the component's main function. + + :param functions: A callable or a list of callables that will be executed + before the component's main function. + :type functions: ExtraHandlerBuilder + :param timeout: Optional timeout for the execution of the extra functions, in + seconds. + :param asynchronous: Optional flag that indicates whether the extra functions + should be executed asynchronously. The default value of the flag is True + if all the functions in this handler are asynchronous. + """ + + def __init__( + self, + functions: ExtraHandlerBuilder, + timeout: Optional[int] = None, + asynchronous: Optional[bool] = None, + ): + super().__init__(functions, ExtraHandlerType.BEFORE, timeout, asynchronous)
    + + + +
    +[docs] +class AfterHandler(_ComponentExtraHandler): + """ + A handler for extra functions that are executed after the component's main function. + + :param functions: A callable or a list of callables that will be executed + after the component's main function. + :type functions: ExtraHandlerBuilder + :param timeout: Optional timeout for the execution of the extra functions, in + seconds. + :param asynchronous: Optional flag that indicates whether the extra functions + should be executed asynchronously. The default value of the flag is True + if all the functions in this handler are asynchronous. + """ + + def __init__( + self, + functions: ExtraHandlerBuilder, + timeout: Optional[int] = None, + asynchronous: Optional[bool] = None, + ): + super().__init__(functions, ExtraHandlerType.AFTER, timeout, asynchronous)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/service/group.html b/_modules/dff/pipeline/service/group.html new file mode 100644 index 0000000000..d2f51c6c9b --- /dev/null +++ b/_modules/dff/pipeline/service/group.html @@ -0,0 +1,850 @@ + + + + + + + + + + dff.pipeline.service.group — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.service.group

    +"""
    +Service Group
    +-------------
    +The Service Group module contains the
    +:py:class:`~.ServiceGroup` class, which is used to represent a group of related services.
    +This class provides a way to organize and manage multiple services as a single unit,
    +allowing for easier management and organization of the services within the pipeline.
    +The :py:class:`~.ServiceGroup` serves the important function of grouping services to work together in parallel.
    +"""
    +import asyncio
    +import logging
    +from typing import Optional, List, Union, Awaitable, ForwardRef
    +
    +from dff.script import Context
    +
    +from .utils import collect_defined_constructor_parameters_to_dict, _get_attrs_with_updates
    +from ..pipeline.component import PipelineComponent
    +from ..types import (
    +    StartConditionCheckerFunction,
    +    ComponentExecutionState,
    +    ServiceGroupBuilder,
    +    GlobalExtraHandlerType,
    +    ExtraHandlerConditionFunction,
    +    ExtraHandlerFunction,
    +    ExtraHandlerBuilder,
    +    ExtraHandlerType,
    +)
    +from .service import Service
    +
    +logger = logging.getLogger(__name__)
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +class ServiceGroup(PipelineComponent): + """ + A service group class. + Service group can be included into pipeline as an object or a pipeline component list. + Service group can be synchronous or asynchronous. + Components in synchronous groups are executed consequently (no matter is they are synchronous or asynchronous). + Components in asynchronous groups are executed simultaneously. + Group can be asynchronous only if all components in it are asynchronous. + Group containing actor can be synchronous only. + + :param components: A `ServiceGroupBuilder` object, that will be added to the group. + :type components: :py:data:`~.ServiceGroupBuilder` + :param before_handler: List of `ExtraHandlerBuilder` to add to the group. + :type before_handler: Optional[:py:data:`~.ExtraHandlerBuilder`] + :param after_handler: List of `ExtraHandlerBuilder` to add to the group. + :type after_handler: Optional[:py:data:`~.ExtraHandlerBuilder`] + :param timeout: Timeout to add to the group. + :param asynchronous: Requested asynchronous property. + :param start_condition: :py:data:`~.StartConditionCheckerFunction` that is invoked before each group execution; + group is executed only if it returns `True`. + :param name: Requested group name. + """ + + def __init__( + self, + components: ServiceGroupBuilder, + before_handler: Optional[ExtraHandlerBuilder] = None, + after_handler: Optional[ExtraHandlerBuilder] = None, + timeout: Optional[float] = None, + asynchronous: Optional[bool] = None, + start_condition: Optional[StartConditionCheckerFunction] = None, + name: Optional[str] = None, + ): + overridden_parameters = collect_defined_constructor_parameters_to_dict( + before_handler=before_handler, + after_handler=after_handler, + timeout=timeout, + asynchronous=asynchronous, + start_condition=start_condition, + name=name, + ) + if isinstance(components, ServiceGroup): + self.__init__( + **_get_attrs_with_updates( + components, + ( + "calculated_async_flag", + "path", + ), + {"requested_async_flag": "asynchronous"}, + overridden_parameters, + ) + ) + elif isinstance(components, dict): + components.update(overridden_parameters) + self.__init__(**components) + elif isinstance(components, List): + self.components = self._create_components(components) + calc_async = all([service.asynchronous for service in self.components]) + super(ServiceGroup, self).__init__( + before_handler, after_handler, timeout, asynchronous, calc_async, start_condition, name + ) + else: + raise Exception(f"Unknown type for ServiceGroup {components}") + +
    +[docs] + async def _run_services_group(self, ctx: Context, pipeline: Pipeline) -> Context: + """ + Method for running this service group. + It doesn't include wrappers execution, start condition checking or error handling - pure execution only. + Executes components inside the group based on its `asynchronous` property. + Collects information about their execution state - group is finished successfully + only if all components in it finished successfully. + + :param ctx: Current dialog context. + :param pipeline: The current pipeline. + :return: Current dialog context. + """ + self._set_state(ctx, ComponentExecutionState.RUNNING) + + if self.asynchronous: + service_futures = [service(ctx, pipeline) for service in self.components] + for service, future in zip(self.components, await asyncio.gather(*service_futures, return_exceptions=True)): + service_result = future + if service.asynchronous and isinstance(service_result, Awaitable): + await service_result + elif isinstance(service_result, asyncio.TimeoutError): + logger.warning(f"{type(service).__name__} '{service.name}' timed out!") + + else: + for service in self.components: + service_result = await service(ctx, pipeline) + if not service.asynchronous and isinstance(service_result, Context): + ctx = service_result + elif service.asynchronous and isinstance(service_result, Awaitable): + await service_result + + failed = any([service.get_state(ctx) == ComponentExecutionState.FAILED for service in self.components]) + self._set_state(ctx, ComponentExecutionState.FAILED if failed else ComponentExecutionState.FINISHED) + return ctx
    + + +
    +[docs] + async def _run( + self, + ctx: Context, + pipeline: Pipeline = None, + ) -> Optional[Context]: + """ + Method for handling this group execution. + Executes before and after execution wrappers, checks start condition and catches runtime exceptions. + + :param ctx: Current dialog context. + :param pipeline: The current pipeline. + :return: Current dialog context if synchronous, else `None`. + """ + await self.run_extra_handler(ExtraHandlerType.BEFORE, ctx, pipeline) + + try: + if self.start_condition(ctx, pipeline): + ctx = await self._run_services_group(ctx, pipeline) + else: + self._set_state(ctx, ComponentExecutionState.NOT_RUN) + + except Exception as e: + self._set_state(ctx, ComponentExecutionState.FAILED) + logger.error(f"ServiceGroup '{self.name}' execution failed!\n{e}") + + await self.run_extra_handler(ExtraHandlerType.AFTER, ctx, pipeline) + return ctx if not self.asynchronous else None
    + + +
    +[docs] + def log_optimization_warnings(self): + """ + Method for logging service group optimization warnings for all this groups inner components. + (NOT this group itself!). + Warnings are basically messages, + that indicate service group inefficiency or explicitly defined parameters mismatch. + These are cases for warnings issuing: + + - Service can be asynchronous, however is marked synchronous explicitly. + - Service is not asynchronous, however has a timeout defined. + - Group is not marked synchronous explicitly and contains both synchronous and asynchronous components. + + :return: `None` + """ + for service in self.components: + if isinstance(service, Service): + if ( + service.calculated_async_flag + and service.requested_async_flag is not None + and not service.requested_async_flag + ): + logger.warning(f"Service '{service.name}' could be asynchronous!") + if not service.asynchronous and service.timeout is not None: + logger.warning(f"Timeout can not be applied for Service '{service.name}': it's not asynchronous!") + else: + if not service.calculated_async_flag: + if service.requested_async_flag is None and any( + [sub_service.asynchronous for sub_service in service.components] + ): + logger.warning( + f"ServiceGroup '{service.name}' contains both sync and async services, " + "it should be split or marked as synchronous explicitly!", + ) + service.log_optimization_warnings()
    + + +
    +[docs] + def add_extra_handler( + self, + global_extra_handler_type: GlobalExtraHandlerType, + extra_handler: ExtraHandlerFunction, + condition: ExtraHandlerConditionFunction = lambda _: True, + ): + """ + Method for adding a global wrapper to this group. + Adds wrapper to itself and propagates it to all inner components. + Uses a special condition function to determine whether to add wrapper to any particular inner component or not. + Condition checks components path to be in whitelist (if defined) and not to be in blacklist (if defined). + + :param global_extra_handler_type: A type of wrapper to add. + :param extra_handler: A `WrapperFunction` to add as a wrapper. + :type extra_handler: :py:data:`~.ExtraHandlerFunction` + :param condition: A condition function. + :return: `None` + """ + super().add_extra_handler(global_extra_handler_type, extra_handler) + for service in self.components: + if not condition(service.path): + continue + if isinstance(service, Service): + service.add_extra_handler(global_extra_handler_type, extra_handler) + else: + service.add_extra_handler(global_extra_handler_type, extra_handler, condition)
    + + + @property + def info_dict(self) -> dict: + """ + See `Component.info_dict` property. + Adds `services` key to base info dictionary. + """ + representation = super(ServiceGroup, self).info_dict + representation.update({"services": [service.info_dict for service in self.components]}) + return representation + +
    +[docs] + @staticmethod + def _create_components(services: ServiceGroupBuilder) -> List[Union[Service, "ServiceGroup"]]: + """ + Utility method, used to create inner components, judging by their nature. + Services are created from services and dictionaries. + ServiceGroups are created from service groups and lists. + + :param services: ServiceGroupBuilder object (a `ServiceGroup` instance or a list). + :type services: :py:data:`~.ServiceGroupBuilder` + :return: List of services and service groups. + """ + handled_services: List[Union[Service, "ServiceGroup"]] = [] + for service in services: + if isinstance(service, List) or isinstance(service, ServiceGroup): + handled_services.append(ServiceGroup(service)) + else: + handled_services.append(Service(service)) + return handled_services
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/service/service.html b/_modules/dff/pipeline/service/service.html new file mode 100644 index 0000000000..042a308613 --- /dev/null +++ b/_modules/dff/pipeline/service/service.html @@ -0,0 +1,825 @@ + + + + + + + + + + dff.pipeline.service.service — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.service.service

    +"""
    +Service
    +-------
    +The Service module contains the :py:class:`.Service` class,
    +which can be included into pipeline as object or a dictionary.
    +Pipeline consists of services and service groups.
    +Service group can be synchronous or asynchronous.
    +Service is an atomic part of a pipeline.
    +Service can be asynchronous only if its handler is a coroutine.
    +Actor wrapping service can be synchronous only.
    +"""
    +# TODO: change last sentence, when actor will be asynchronous
    +
    +import logging
    +import asyncio
    +import inspect
    +from typing import Optional, ForwardRef
    +
    +from dff.script import Context
    +
    +from .utils import wrap_sync_function_in_async, collect_defined_constructor_parameters_to_dict, _get_attrs_with_updates
    +from ..types import (
    +    ServiceBuilder,
    +    StartConditionCheckerFunction,
    +    ComponentExecutionState,
    +    ExtraHandlerBuilder,
    +    ExtraHandlerType,
    +)
    +from ..pipeline.component import PipelineComponent
    +
    +logger = logging.getLogger(__name__)
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +class Service(PipelineComponent): + """ + This class represents a service. + Service can be included into pipeline as object or a dictionary. + Service group can be synchronous or asynchronous. + Service can be asynchronous only if its handler is a coroutine. + Actor wrapping service can be synchronous only. + + :param handler: A service function or an actor. + :type handler: :py:data:`~.ServiceBuilder` + :param wrappers: List of Wrappers to add to the service. + :param timeout: Timeout to add to the group. + :param asynchronous: Requested asynchronous property. + :param start_condition: StartConditionCheckerFunction that is invoked before each service execution; + service is executed only if it returns `True`. + :type start_condition: Optional[:py:data:`~.StartConditionCheckerFunction`] + :param name: Requested service name. + """ + + def __init__( + self, + handler: ServiceBuilder, + before_handler: Optional[ExtraHandlerBuilder] = None, + after_handler: Optional[ExtraHandlerBuilder] = None, + timeout: Optional[float] = None, + asynchronous: Optional[bool] = None, + start_condition: Optional[StartConditionCheckerFunction] = None, + name: Optional[str] = None, + ): + overridden_parameters = collect_defined_constructor_parameters_to_dict( + before_handler=before_handler, + after_handler=after_handler, + timeout=timeout, + asynchronous=asynchronous, + start_condition=start_condition, + name=name, + ) + if isinstance(handler, dict): + handler.update(overridden_parameters) + self.__init__(**handler) + elif isinstance(handler, Service): + self.__init__( + **_get_attrs_with_updates( + handler, + ( + "calculated_async_flag", + "path", + ), + {"requested_async_flag": "asynchronous"}, + overridden_parameters, + ) + ) + elif callable(handler) or isinstance(handler, str) and handler == "ACTOR": + self.handler = handler + super(Service, self).__init__( + before_handler, + after_handler, + timeout, + asynchronous, + asyncio.iscoroutinefunction(handler), + start_condition, + name, + ) + else: + raise Exception(f"Unknown type of service handler: {handler}") + +
    +[docs] + async def _run_handler(self, ctx: Context, pipeline: Pipeline): + """ + Method for service `handler` execution. + Handler has three possible signatures, so this method picks the right one to invoke. + These possible signatures are: + + - (ctx: Context) - accepts current dialog context only. + - (ctx: Context, pipeline: Pipeline) - accepts context and current pipeline. + - | (ctx: Context, pipeline: Pipeline, info: ServiceRuntimeInfo) - accepts context, + pipeline and service runtime info dictionary. + + :param ctx: Current dialog context. + :param pipeline: The current pipeline. + :return: `None` + """ + handler_params = len(inspect.signature(self.handler).parameters) + if handler_params == 1: + await wrap_sync_function_in_async(self.handler, ctx) + elif handler_params == 2: + await wrap_sync_function_in_async(self.handler, ctx, pipeline) + elif handler_params == 3: + await wrap_sync_function_in_async(self.handler, ctx, pipeline, self._get_runtime_info(ctx)) + else: + raise Exception(f"Too many parameters required for service '{self.name}' handler: {handler_params}!")
    + + +
    +[docs] + def _run_as_actor(self, ctx: Context, pipeline: Pipeline): + """ + Method for running this service if its handler is an `Actor`. + Catches runtime exceptions. + + :param ctx: Current dialog context. + :return: Context, mutated by actor. + """ + try: + ctx = pipeline.actor(pipeline, ctx) + self._set_state(ctx, ComponentExecutionState.FINISHED) + except Exception as exc: + self._set_state(ctx, ComponentExecutionState.FAILED) + logger.error(f"Actor '{self.name}' execution failed!\n{exc}") + return ctx
    + + +
    +[docs] + async def _run_as_service(self, ctx: Context, pipeline: Pipeline): + """ + Method for running this service if its handler is not an Actor. + Checks start condition and catches runtime exceptions. + + :param ctx: Current dialog context. + :param pipeline: Current pipeline. + :return: `None` + """ + try: + if self.start_condition(ctx, pipeline): + self._set_state(ctx, ComponentExecutionState.RUNNING) + await self._run_handler(ctx, pipeline) + self._set_state(ctx, ComponentExecutionState.FINISHED) + else: + self._set_state(ctx, ComponentExecutionState.NOT_RUN) + except Exception as e: + self._set_state(ctx, ComponentExecutionState.FAILED) + logger.error(f"Service '{self.name}' execution failed!\n{e}")
    + + +
    +[docs] + async def _run(self, ctx: Context, pipeline: Optional[Pipeline] = None) -> Optional[Context]: + """ + Method for handling this service execution. + Executes before and after execution wrappers, launches `_run_as_actor` or `_run_as_service` method. + + :param ctx: (required) Current dialog context. + :param pipeline: the current pipeline. + :return: `Context` if this service's handler is an `Actor` else `None`. + """ + await self.run_extra_handler(ExtraHandlerType.BEFORE, ctx, pipeline) + + if isinstance(self.handler, str) and self.handler == "ACTOR": + ctx = self._run_as_actor(ctx, pipeline) + else: + await self._run_as_service(ctx, pipeline) + + await self.run_extra_handler(ExtraHandlerType.AFTER, ctx, pipeline) + + if isinstance(self.handler, str) and self.handler == "ACTOR": + return ctx + return None
    + + + @property + def info_dict(self) -> dict: + """ + See `Component.info_dict` property. + Adds `handler` key to base info dictionary. + """ + representation = super(Service, self).info_dict + if isinstance(self.handler, str) and self.handler == "ACTOR": + service_representation = "Instance of Actor" + elif callable(self.handler): + service_representation = f"Callable '{self.handler.__name__}'" + else: + service_representation = "[Unknown]" + representation.update({"handler": service_representation}) + return representation
    + + + +
    +[docs] +def to_service( + before_handler: Optional[ExtraHandlerBuilder] = None, + after_handler: Optional[ExtraHandlerBuilder] = None, + timeout: Optional[int] = None, + asynchronous: Optional[bool] = None, + start_condition: Optional[StartConditionCheckerFunction] = None, + name: Optional[str] = None, +): + """ + Function for decorating a function as a Service. + Returns a Service, constructed from this function (taken as a handler). + All arguments are passed directly to `Service` constructor. + """ + + def inner(handler: ServiceBuilder) -> Service: + return Service( + handler=handler, + before_handler=before_handler, + after_handler=after_handler, + timeout=timeout, + asynchronous=asynchronous, + start_condition=start_condition, + name=name, + ) + + return inner
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/service/utils.html b/_modules/dff/pipeline/service/utils.html new file mode 100644 index 0000000000..0b396150d9 --- /dev/null +++ b/_modules/dff/pipeline/service/utils.html @@ -0,0 +1,658 @@ + + + + + + + + + + dff.pipeline.service.utils — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.service.utils

    +"""
    +Utility Functions
    +-----------------
    +The Utility Functions module contains several utility functions that are commonly used throughout the DFF.
    +These functions provide a variety of utility functionality.
    +"""
    +import asyncio
    +from typing import Callable, Any, Optional, Tuple, Mapping
    +
    +
    +
    +[docs] +async def wrap_sync_function_in_async(func: Callable, *args, **kwargs) -> Any: + """ + Utility function, that wraps both functions and coroutines in coroutines. + Invokes `func` if it is just a callable and awaits, if this is a coroutine. + + :param func: Callable to wrap. + :param \\*args: Function args. + :param \\**kwargs: Function kwargs. + :return: What function returns. + """ + if asyncio.iscoroutinefunction(func): + return await func(*args, **kwargs) + else: + return func(*args, **kwargs)
    + + + +
    +[docs] +def _get_attrs_with_updates( + obj: object, + drop_attrs: Optional[Tuple[str, ...]] = None, + replace_attrs: Optional[Mapping[str, str]] = None, + add_attrs: Optional[Mapping[str, Any]] = None, +) -> dict: + """ + Advanced customizable version of built-in `__dict__` property. + Sometimes during Pipeline construction `Services` (or `ServiceGroups`) should be rebuilt, + e.g. in case of some fields overriding. + This method can be customized to return a dict, + that can be spread (** operator) and passed to Service or ServiceGroup constructor. + Base dict is formed via `vars` built-in function. All "private" or "dunder" fields are omitted. + + :param drop_attrs: A tuple of key names that should be removed from the resulting dict. + :param replace_attrs: A mapping that should be replaced in the resulting dict. + :param add_attrs: A mapping that should be added to the resulting dict. + :return: Resulting dict. + """ + drop_attrs = () if drop_attrs is None else drop_attrs + replace_attrs = {} if replace_attrs is None else dict(replace_attrs) + add_attrs = {} if add_attrs is None else dict(add_attrs) + result = {} + for attribute in vars(obj): + if not attribute.startswith("__") and attribute not in drop_attrs: + if attribute in replace_attrs: + result[replace_attrs[attribute]] = getattr(obj, attribute) + else: + result[attribute] = getattr(obj, attribute) + result.update(add_attrs) + return result
    + + + +
    +[docs] +def collect_defined_constructor_parameters_to_dict(**kwargs: Any): + """ + Function, that creates dict from non-`None` constructor parameters of pipeline component. + It is used in overriding component parameters, + when service handler or service group service is instance of Service or ServiceGroup (or dict). + It accepts same named parameters as component constructor. + + :return: Dict, containing key-value pairs of these parameters, that are not `None`. + """ + return dict([(key, value) for key, value in kwargs.items() if value is not None])
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/pipeline/types.html b/_modules/dff/pipeline/types.html new file mode 100644 index 0000000000..e7da66e18e --- /dev/null +++ b/_modules/dff/pipeline/types.html @@ -0,0 +1,845 @@ + + + + + + + + + + dff.pipeline.types — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.pipeline.types

    +"""
    +Types
    +-----
    +The Types module contains several classes and special types that are used throughout the `DFF Pipeline`.
    +The classes and special types in this module can include data models,
    +data structures, and other types that are defined for type hinting.
    +"""
    +from abc import ABC
    +from enum import unique, Enum
    +from typing import Callable, Union, Awaitable, Dict, List, Optional, NewType, Iterable, Any
    +
    +from dff.context_storages import DBContextStorage
    +from dff.script import Context, ActorStage, NodeLabel2Type, Script
    +from typing_extensions import NotRequired, TypedDict, TypeAlias
    +from pydantic import BaseModel
    +
    +
    +_ForwardPipeline = NewType("Pipeline", Any)
    +_ForwardPipelineComponent = NewType("PipelineComponent", Any)
    +_ForwardService = NewType("Service", _ForwardPipelineComponent)
    +_ForwardServiceBuilder = NewType("ServiceBuilder", Any)
    +_ForwardServiceGroup = NewType("ServiceGroup", _ForwardPipelineComponent)
    +_ForwardComponentExtraHandler = NewType("_ComponentExtraHandler", Any)
    +_ForwardProvider = NewType("ABCProvider", ABC)
    +_ForwardExtraHandlerRuntimeInfo = NewType("ExtraHandlerRuntimeInfo", Any)
    +
    +
    +
    +[docs] +@unique +class ComponentExecutionState(str, Enum): + """ + Enum, representing pipeline component execution state. + These states are stored in `ctx.framework_keys[PIPELINE_STATE_KEY]`, + that should always be requested with `NOT_RUN` being default fallback. + Following states are supported: + + - NOT_RUN: component has not been executed yet (the default one), + - RUNNING: component is currently being executed, + - FINISHED: component executed successfully, + - FAILED: component execution failed. + """ + + NOT_RUN = "NOT_RUN" + RUNNING = "RUNNING" + FINISHED = "FINISHED" + FAILED = "FAILED"
    + + + +
    +[docs] +@unique +class GlobalExtraHandlerType(str, Enum): + """ + Enum, representing types of global wrappers, that can be set applied for a pipeline. + The following types are supported: + + - BEFORE_ALL: function called before each pipeline call, + - BEFORE: function called before each component, + - AFTER: function called after each component, + - AFTER_ALL: function called after each pipeline call. + """ + + BEFORE_ALL = "BEFORE_ALL" + BEFORE = "BEFORE" + AFTER = "AFTER" + AFTER_ALL = "AFTER_ALL"
    + + + +
    +[docs] +@unique +class ExtraHandlerType(str, Enum): + """ + Enum, representing wrapper execution stage: before or after the wrapped function. + The following types are supported: + + - UNDEFINED: wrapper function with undetermined execution stage, + - BEFORE: wrapper function called before component, + - AFTER: wrapper function called after component. + """ + + UNDEFINED = "UNDEFINED" + BEFORE = "BEFORE" + AFTER = "AFTER"
    + + + +PIPELINE_STATE_KEY = "PIPELINE" +""" +PIPELINE: storage for services and groups execution status. +Should be used in `ctx.framework_keys[PIPELINE_STATE_KEY]`. +""" + + +StartConditionCheckerFunction: TypeAlias = Callable[[Context, _ForwardPipeline], bool] +""" +A function type for components `start_conditions`. +Accepts context and pipeline, returns boolean (whether service can be launched). +""" + + +StartConditionCheckerAggregationFunction: TypeAlias = Callable[[Iterable[bool]], bool] +""" +A function type for creating aggregation `start_conditions` for components. +Accepts list of functions (other start_conditions to aggregate), returns boolean (whether service can be launched). +""" + + +ExtraHandlerConditionFunction: TypeAlias = Callable[[str], bool] +""" +A function type used during global wrappers initialization to determine +whether wrapper should be applied to component with given path or not. +Checks components path to be in whitelist (if defined) and not to be in blacklist (if defined). +Accepts str (component path), returns boolean (whether wrapper should be applied). +""" + + +
    +[docs] +class ServiceRuntimeInfo(BaseModel): + """ + Type of object, that is passed to components in runtime. + Contains current component info (`name`, `path`, `timeout`, `asynchronous`). + Also contains `execution_state` - a dictionary, + containing execution states of other components mapped to their paths. + """ + + name: str + path: str + timeout: Optional[float] + asynchronous: bool + execution_state: Dict[str, ComponentExecutionState]
    + + + +ExtraHandlerFunction: TypeAlias = Union[ + Callable[[Context], Any], + Callable[[Context, _ForwardPipeline], Any], + Callable[[Context, _ForwardPipeline, _ForwardExtraHandlerRuntimeInfo], Any], +] +""" +A function type for creating wrappers (before and after functions). +Can accept current dialog context, pipeline, and current wrapper info. +""" + + +
    +[docs] +class ExtraHandlerRuntimeInfo(BaseModel): + func: ExtraHandlerFunction + stage: ExtraHandlerType + component: ServiceRuntimeInfo
    + + + +""" +Type of object, that is passed to wrappers in runtime. +Contains current wrapper info (`name`, `stage`). +Also contains `component` - runtime info of the component this wrapper is attached to. +""" + + +ServiceFunction: TypeAlias = Union[ + Callable[[Context], None], + Callable[[Context], Awaitable[None]], + Callable[[Context, _ForwardPipeline], None], + Callable[[Context, _ForwardPipeline], Awaitable[None]], + Callable[[Context, _ForwardPipeline, ServiceRuntimeInfo], None], + Callable[[Context, _ForwardPipeline, ServiceRuntimeInfo], Awaitable[None]], +] +""" +A function type for creating service handlers. +Can accept current dialog context, pipeline, and current service info. +Can be both synchronous and asynchronous. +""" + + +ExtraHandlerBuilder: TypeAlias = Union[ + _ForwardComponentExtraHandler, + TypedDict( + "WrapperDict", + { + "timeout": NotRequired[Optional[float]], + "asynchronous": NotRequired[bool], + "functions": List[ExtraHandlerFunction], + }, + ), + List[ExtraHandlerFunction], +] +""" +A type, representing anything that can be transformed to ExtraHandlers. +It can be: + +- _ForwardComponentExtraHandler object +- Dictionary, containing keys `timeout`, `asynchronous`, `functions` +""" + + +ServiceBuilder: TypeAlias = Union[ + ServiceFunction, + _ForwardService, + str, + TypedDict( + "ServiceDict", + { + "handler": _ForwardServiceBuilder, + "before_handler": NotRequired[Optional[ExtraHandlerBuilder]], + "after_handler": NotRequired[Optional[ExtraHandlerBuilder]], + "timeout": NotRequired[Optional[float]], + "asynchronous": NotRequired[bool], + "start_condition": NotRequired[StartConditionCheckerFunction], + "name": Optional[str], + }, + ), +] +""" +A type, representing anything that can be transformed to service. +It can be: + +- ServiceFunction (will become handler) +- Service object (will be spread and recreated) +- String 'ACTOR' - the pipeline Actor will be placed there +- Dictionary, containing keys that are present in Service constructor parameters +""" + + +ServiceGroupBuilder: TypeAlias = Union[ + List[Union[ServiceBuilder, List[ServiceBuilder], _ForwardServiceGroup]], + _ForwardServiceGroup, +] +""" +A type, representing anything that can be transformed to service group. +It can be: + +- List of `ServiceBuilders`, `ServiceGroup` objects and lists (recursive) +- `ServiceGroup` object (will be spread and recreated) +""" + + +PipelineBuilder: TypeAlias = TypedDict( + "PipelineBuilder", + { + "messenger_interface": NotRequired[Optional[_ForwardProvider]], + "context_storage": NotRequired[Optional[Union[DBContextStorage, Dict]]], + "components": ServiceGroupBuilder, + "before_handler": NotRequired[Optional[ExtraHandlerBuilder]], + "after_handler": NotRequired[Optional[ExtraHandlerBuilder]], + "optimization_warnings": NotRequired[bool], + "script": Union[Script, Dict], + "start_label": NodeLabel2Type, + "fallback_label": NotRequired[Optional[NodeLabel2Type]], + "label_priority": NotRequired[float], + "validation_stage": NotRequired[Optional[bool]], + "condition_handler": NotRequired[Optional[Callable]], + "verbose": NotRequired[bool], + "handlers": NotRequired[Optional[Dict[ActorStage, List[Callable]]]], + }, +) +""" +A type, representing anything that can be transformed to pipeline. +It can be Dictionary, containing keys that are present in Pipeline constructor parameters. +""" +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/conditions/std_conditions.html b/_modules/dff/script/conditions/std_conditions.html new file mode 100644 index 0000000000..488f82aa39 --- /dev/null +++ b/_modules/dff/script/conditions/std_conditions.html @@ -0,0 +1,839 @@ + + + + + + + + + + dff.script.conditions.std_conditions — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.conditions.std_conditions

    +"""
    +Conditions
    +----------
    +Conditions are one of the most important components of the dialog graph.
    +They determine the possibility of transition from one node of the graph to another.
    +The conditions are used to specify when a particular transition should occur, based on certain criteria.
    +This module contains a standard set of scripting conditions that can be used to control the flow of a conversation.
    +These conditions can be used to check the current context, the user's input,
    +or other factors that may affect the conversation flow.
    +"""
    +from typing import Callable, Pattern, Union, Any, List, Optional
    +import logging
    +import re
    +
    +from pydantic import validate_call
    +
    +from dff.pipeline import Pipeline
    +from dff.script import NodeLabel2Type, Context, Message
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +[docs] +@validate_call +def exact_match(match: Message, skip_none: bool = True) -> Callable[..., bool]: + """ + Return function handler. This handler returns `True` only if the last user phrase + is the same Message as the :py:const:`match`. + If :py:const:`skip_none` the handler will not compare `None` fields of :py:const:`match`. + + :param match: A Message variable to compare user request with. + :param skip_none: Whether fields should be compared if they are `None` in :py:const:`match`. + """ + + def exact_match_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + request = ctx.last_request + if request is None: + return False + for field in match.model_fields: + match_value = match.__getattribute__(field) + if skip_none and match_value is None: + continue + if field in request.model_fields.keys(): + if request.__getattribute__(field) != match.__getattribute__(field): + return False + else: + return False + return True + + return exact_match_condition_handler
    + + + +
    +[docs] +@validate_call +def regexp( + pattern: Union[str, Pattern], flags: Union[int, re.RegexFlag] = 0 +) -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Return function handler. This handler returns `True` only if the last user phrase contains + :py:const:`pattern <Union[str, Pattern]>` with :py:const:`flags <Union[int, re.RegexFlag]>`. + + :param pattern: The `RegExp` pattern. + :param flags: Flags for this pattern. Defaults to 0. + """ + pattern = re.compile(pattern, flags) + + def regexp_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + request = ctx.last_request + if isinstance(request, Message): + if request.text is None: + return False + return bool(pattern.search(request.text)) + else: + logger.error(f"request has to be str type, but got request={request}") + return False + + return regexp_condition_handler
    + + + +
    +[docs] +@validate_call +def check_cond_seq(cond_seq: list): + """ + Check if the list consists only of Callables. + + :param cond_seq: List of conditions to check. + """ + for cond in cond_seq: + if not callable(cond): + raise TypeError(f"{cond_seq} has to consist of callable objects")
    + + + +_any = any +""" +_any is an alias for any. +""" +_all = all +""" +_all is an alias for all. +""" + + +
    +[docs] +@validate_call +def aggregate(cond_seq: list, aggregate_func: Callable = _any) -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Aggregate multiple functions into one by using aggregating function. + + :param cond_seq: List of conditions to check. + :param aggregate_func: Function to aggregate conditions. Defaults to :py:func:`_any`. + """ + check_cond_seq(cond_seq) + + def aggregate_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + try: + return bool(aggregate_func([cond(ctx, pipeline, *args, **kwargs) for cond in cond_seq])) + except Exception as exc: + logger.error(f"Exception {exc} for {cond_seq}, {aggregate_func} and {ctx.last_request}", exc_info=exc) + return False + + return aggregate_condition_handler
    + + + +
    +[docs] +@validate_call +def any(cond_seq: list) -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Return function handler. This handler returns `True` + if any function from the list is `True`. + + :param cond_seq: List of conditions to check. + """ + _agg = aggregate(cond_seq, _any) + + def any_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + return _agg(ctx, pipeline, *args, **kwargs) + + return any_condition_handler
    + + + +
    +[docs] +@validate_call +def all(cond_seq: list) -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Return function handler. This handler returns `True` only + if all functions from the list are `True`. + + :param cond_seq: List of conditions to check. + """ + _agg = aggregate(cond_seq, _all) + + def all_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + return _agg(ctx, pipeline, *args, **kwargs) + + return all_condition_handler
    + + + +
    +[docs] +@validate_call +def negation(condition: Callable) -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Return function handler. This handler returns negation of the :py:func:`~condition`: `False` + if :py:func:`~condition` holds `True` and returns `True` otherwise. + + :param condition: Any :py:func:`~condition`. + """ + + def negation_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + return not condition(ctx, pipeline, *args, **kwargs) + + return negation_condition_handler
    + + + +
    +[docs] +@validate_call +def has_last_labels( + flow_labels: Optional[List[str]] = None, + labels: Optional[List[NodeLabel2Type]] = None, + last_n_indices: int = 1, +) -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Return condition handler. This handler returns `True` if any label from + last :py:const:`last_n_indices` context labels is in + the :py:const:`flow_labels` list or in + the :py:const:`~dff.script.NodeLabel2Type` list. + + :param flow_labels: List of labels to check. Every label has type `str`. Empty if not set. + :param labels: List of labels corresponding to the nodes. Empty if not set. + :param last_n_indices: Number of last utterances to check. + """ + flow_labels = [] if flow_labels is None else flow_labels + labels = [] if labels is None else labels + + def has_last_labels_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + label = list(ctx.labels.values())[-last_n_indices:] + for label in list(ctx.labels.values())[-last_n_indices:]: + label = label if label else (None, None) + if label[0] in flow_labels or label in labels: + return True + return False + + return has_last_labels_condition_handler
    + + + +
    +[docs] +@validate_call +def true() -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Return function handler. This handler always returns `True`. + """ + + def true_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + return True + + return true_handler
    + + + +
    +[docs] +@validate_call +def false() -> Callable[[Context, Pipeline, Any, Any], bool]: + """ + Return function handler. This handler always returns `False`. + """ + + def false_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + return False + + return false_handler
    + + + +# aliases +agg = aggregate +""" +:py:func:`~agg` is an alias for :py:func:`~aggregate`. +""" +neg = negation +""" +:py:func:`~neg` is an alias for :py:func:`~negation`. +""" +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/core/context.html b/_modules/dff/script/core/context.html new file mode 100644 index 0000000000..b877a6e04e --- /dev/null +++ b/_modules/dff/script/core/context.html @@ -0,0 +1,907 @@ + + + + + + + + + + dff.script.core.context — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.core.context

    +"""
    +Context
    +-------
    +A Context is a data structure that is used to store information about the current state of a conversation.
    +It is used to keep track of the user's input, the current stage of the conversation, and any other
    +information that is relevant to the current context of a dialog.
    +The Context provides a convenient interface for working with data, allowing developers to easily add,
    +retrieve, and manipulate data as the conversation progresses.
    +
    +The Context data structure provides several key features to make working with data easier.
    +Developers can use the context to store any information that is relevant to the current conversation,
    +such as user data, session data, conversation history, or etc.
    +This allows developers to easily access and use this data throughout the conversation flow.
    +
    +Another important feature of the context is data serialization.
    +The context can be easily serialized to a format that can be stored or transmitted, such as JSON.
    +This allows developers to save the context data and resume the conversation later.
    +"""
    +import logging
    +from uuid import UUID, uuid4
    +
    +from typing import Any, Optional, Union, Dict, List, Set
    +
    +from pydantic import BaseModel, Field, field_validator
    +from .types import NodeLabel2Type, ModuleName
    +from .message import Message
    +
    +logger = logging.getLogger(__name__)
    +
    +Node = BaseModel
    +
    +
    +
    +[docs] +def get_last_index(dictionary: dict) -> int: + """ + Obtain the last index from the `dictionary`. Return `-1` if the `dict` is empty. + + :param dictionary: Dictionary with unsorted keys. + :return: Last index from the `dictionary`. + """ + indices = list(dictionary) + return indices[-1] if indices else -1
    + + + +
    +[docs] +class Context(BaseModel): + """ + A structure that is used to store data about the context of a dialog. + + Avoid storing unserializable data in the fields of this class in order for + context storages to work. + """ + + id: Union[UUID, int, str] = Field(default_factory=uuid4) + """ + `id` is the unique context identifier. By default, randomly generated using `uuid4` `id` is used. + `id` can be used to trace the user behavior, e.g while collecting the statistical data. + """ + labels: Dict[int, NodeLabel2Type] = {} + """ + `labels` stores the history of all passed `labels` + + - key - `id` of the turn. + - value - `label` on this turn. + """ + requests: Dict[int, Message] = {} + """ + `requests` stores the history of all `requests` received by the agent + + - key - `id` of the turn. + - value - `request` on this turn. + """ + responses: Dict[int, Message] = {} + """ + `responses` stores the history of all agent `responses` + + - key - `id` of the turn. + - value - `response` on this turn. + """ + misc: Dict[str, Any] = {} + """ + `misc` stores any custom data. The scripting doesn't use this dictionary by default, + so storage of any data won't reflect on the work on the internal Dialog Flow Scripting functions. + + Avoid storing unserializable data in order for context storages to work. + + - key - Arbitrary data name. + - value - Arbitrary data. + """ + validation: bool = False + """ + `validation` is a flag that signals that :py:class:`~dff.pipeline.pipeline.pipeline.Pipeline`, + while being initialized, checks the :py:class:`~dff.script.core.script.Script`. + The functions that can give not valid data + while being validated must use this flag to take the validation mode into account. + Otherwise the validation will not be passed. + """ + framework_states: Dict[ModuleName, Dict[str, Any]] = {} + """ + `framework_states` is used for addons states or for + :py:class:`~dff.pipeline.pipeline.pipeline.Pipeline`'s states. + :py:class:`~dff.pipeline.pipeline.pipeline.Pipeline` + records all its intermediate conditions into the `framework_states`. + After :py:class:`~.Context` processing is finished, + :py:class:`~dff.pipeline.pipeline.pipeline.Pipeline` resets `framework_states` and + returns :py:class:`~.Context`. + + - key - Temporary variable name. + - value - Temporary variable data. + """ + +
    +[docs] + @field_validator("labels", "requests", "responses") + @classmethod + def sort_dict_keys(cls, dictionary: dict) -> dict: + """ + Sort the keys in the `dictionary`. This needs to be done after deserialization, + since the keys are deserialized in a random order. + + :param dictionary: Dictionary with unsorted keys. + :return: Dictionary with sorted keys. + """ + return {key: dictionary[key] for key in sorted(dictionary)}
    + + +
    +[docs] + @classmethod + def cast(cls, ctx: Optional[Union["Context", dict, str]] = None, *args, **kwargs) -> "Context": + """ + Transform different data types to the objects of the + :py:class:`~.Context` class. + Return an object of the :py:class:`~.Context` + type that is initialized by the input data. + + :param ctx: Data that is used to initialize an object of the + :py:class:`~.Context` type. + An empty :py:class:`~.Context` object is returned if no data is given. + :return: Object of the :py:class:`~.Context` + type that is initialized by the input data. + """ + if not ctx: + ctx = Context(*args, **kwargs) + elif isinstance(ctx, dict): + ctx = Context.model_validate(ctx) + elif isinstance(ctx, str): + ctx = Context.model_validate_json(ctx) + elif not issubclass(type(ctx), Context): + raise ValueError( + f"Context expected to be an instance of the Context class " + f"or an instance of the dict/str(json) type. Got: {type(ctx)}" + ) + return ctx
    + + +
    +[docs] + def add_request(self, request: Message): + """ + Add a new `request` to the context. + The new `request` is added with the index of `last_index + 1`. + + :param request: `request` to be added to the context. + """ + request_message = Message.model_validate(request) + last_index = get_last_index(self.requests) + self.requests[last_index + 1] = request_message
    + + +
    +[docs] + def add_response(self, response: Message): + """ + Add a new `response` to the context. + The new `response` is added with the index of `last_index + 1`. + + :param response: `response` to be added to the context. + """ + response_message = Message.model_validate(response) + last_index = get_last_index(self.responses) + self.responses[last_index + 1] = response_message
    + + +
    +[docs] + def add_label(self, label: NodeLabel2Type): + """ + Add a new :py:data:`~.NodeLabel2Type` to the context. + The new `label` is added with the index of `last_index + 1`. + + :param label: `label` that we need to add to the context. + """ + last_index = get_last_index(self.labels) + self.labels[last_index + 1] = label
    + + +
    +[docs] + def clear( + self, + hold_last_n_indices: int, + field_names: Union[Set[str], List[str]] = {"requests", "responses", "labels"}, + ): + """ + Delete all records from the `requests`/`responses`/`labels` except for + the last `hold_last_n_indices` turns. + If `field_names` contains `misc` field, `misc` field is fully cleared. + + :param hold_last_n_indices: Number of last turns to keep. + :param field_names: Properties of :py:class:`~.Context` to clear. + Defaults to {"requests", "responses", "labels"} + """ + field_names = field_names if isinstance(field_names, set) else set(field_names) + if "requests" in field_names: + for index in list(self.requests)[:-hold_last_n_indices]: + del self.requests[index] + if "responses" in field_names: + for index in list(self.responses)[:-hold_last_n_indices]: + del self.responses[index] + if "misc" in field_names: + self.misc.clear() + if "labels" in field_names: + for index in list(self.labels)[:-hold_last_n_indices]: + del self.labels[index] + if "framework_states" in field_names: + self.framework_states.clear()
    + + + @property + def last_label(self) -> Optional[NodeLabel2Type]: + """ + Return the last :py:data:`~.NodeLabel2Type` of + the :py:class:`~.Context`. + Return `None` if `labels` is empty. + + Since `start_label` is not added to the `labels` field, + empty `labels` usually indicates that the current node is the `start_node`. + """ + last_index = get_last_index(self.labels) + return self.labels.get(last_index) + + @property + def last_response(self) -> Optional[Message]: + """ + Return the last `response` of the current :py:class:`~.Context`. + Return `None` if `responses` is empty. + """ + last_index = get_last_index(self.responses) + return self.responses.get(last_index) + + @last_response.setter + def last_response(self, response: Optional[Message]): + """ + Set the last `response` of the current :py:class:`~.Context`. + Required for use with various response wrappers. + """ + last_index = get_last_index(self.responses) + self.responses[last_index] = Message() if response is None else Message.model_validate(response) + + @property + def last_request(self) -> Optional[Message]: + """ + Return the last `request` of the current :py:class:`~.Context`. + Return `None` if `requests` is empty. + """ + last_index = get_last_index(self.requests) + return self.requests.get(last_index) + + @last_request.setter + def last_request(self, request: Optional[Message]): + """ + Set the last `request` of the current :py:class:`~.Context`. + Required for use with various request wrappers. + """ + last_index = get_last_index(self.requests) + self.requests[last_index] = Message() if request is None else Message.model_validate(request) + + @property + def current_node(self) -> Optional[Node]: + """ + Return current :py:class:`~dff.script.core.script.Node`. + """ + actor = self.framework_states.get("actor", {}) + node = ( + actor.get("processed_node") + or actor.get("pre_response_processed_node") + or actor.get("next_node") + or actor.get("pre_transitions_processed_node") + or actor.get("previous_node") + ) + if node is None: + logger.warning( + "The `current_node` method should be called " + "when an actor is running between the " + "`ActorStage.GET_PREVIOUS_NODE` and `ActorStage.FINISH_TURN` stages." + ) + + return node + +
    +[docs] + def overwrite_current_node_in_processing(self, processed_node: Node): + """ + Set the current node to be `processed_node`. + This method only works in processing functions (pre-response and pre-transition). + + The actual current node is not changed. + + :param processed_node: `node` to set as the current node. + """ + is_processing = self.framework_states.get("actor", {}).get("processed_node") + if is_processing: + self.framework_states["actor"]["processed_node"] = Node.model_validate(processed_node) + else: + logger.warning( + f"The `{self.overwrite_current_node_in_processing.__name__}` " + "method can only be called from processing functions (either pre-response or pre-transition)." + )
    +
    + + + +Context.model_rebuild() +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/core/keywords.html b/_modules/dff/script/core/keywords.html new file mode 100644 index 0000000000..75dac97f7d --- /dev/null +++ b/_modules/dff/script/core/keywords.html @@ -0,0 +1,683 @@ + + + + + + + + + + dff.script.core.keywords — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.core.keywords

    +"""
    +Keywords
    +--------
    +Keywords are used to define the dialog graph, which is the structure of a conversation.
    +They are used to determine all nodes in the script and to assign python objects and python functions for nodes.
    +
    +"""
    +from enum import Enum
    +
    +
    +
    +[docs] +class Keywords(str, Enum): + """ + Keywords used to define the dialog script (:py:class:`~dff.script.Script`). + The data type `dict` is used to describe the scenario. + `Enums` of this class are used as keys in this `dict`. + Different keys correspond to the different value types aimed at different purposes. + + Enums: + + GLOBAL: Enum(auto) + This keyword is used to define a global node. + The value that corresponds to this key has the `dict` type with keywords: + + `{TRANSITIONS:..., RESPONSE:..., PRE_RESPONSE_PROCESSING:..., MISC:...}`. + There can be only one global node in a script :py:class:`~dff.script.Script`. + The global node is defined at the flow level as opposed to regular nodes. + This node allows to define default global values for all nodes. + + LOCAL: Enum(auto) + This keyword is used to define the local node. + The value that corresponds to this key has the `dict` type with keywords: + + `{TRANSITIONS:..., RESPONSE:..., PRE_RESPONSE_PROCESSING:..., MISC:...}`. + The local node is defined in the same way as all other nodes in the flow of this node. + It also allows to redefine default values for all nodes in this node's flow. + + TRANSITIONS: Enum(auto) + This keyword defines possible transitions from node. + The value that corresponds to the `TRANSITIONS` key has the `dict` type. + Every key-value pair describes the transition node and the condition: + + `{label_to_transition_0: condition_for_transition_0, ..., label_to_transition_N: condition_for_transition_N}`, + + where `label_to_transition_i` is a node into which the actor make the transition in case of + `condition_for_transition_i == True`. + + RESPONSE: Enum(auto) + The keyword specifying the result which is returned to the user after getting to the node. + Value corresponding to the `RESPONSE` key can have any data type. + + MISC: Enum(auto) + The keyword specifying `dict` containing extra data, + which were not aimed to be used in the standard functions of `DFE`. + Value corresponding to the `MISC` key must have `dict` type: + + `{"VAR_KEY_0": VAR_VALUE_0, ..., "VAR_KEY_N": VAR_VALUE_N}`, + + where `"VAR_KEY_0"` is an arbitrary name of the value which is saved into the `MISC`. + + PRE_RESPONSE_PROCESSING: Enum(auto) + The keyword specifying the preprocessing that is called before the response generation. + The value that corresponds to the `PRE_RESPONSE_PROCESSING` key must have the `dict` type: + + `{"PRE_RESPONSE_PROC_0": pre_response_proc_func_0, ..., "PRE_RESPONSE_PROC_N": pre_response_proc__func_N}`, + + where `"PRE_RESPONSE_PROC_i"` is an arbitrary name of the preprocessing stage in the pipeline. + The order of `pre_response_proc__func_i` calls is defined by the order + in which the preprocessing `dict` is defined. + + PRE_TRANSITIONS_PROCESSING: Enum(auto) + The keyword specifying the preprocessing that is called before the transition. + The value that corresponds to the `PRE_TRANSITIONS_PROCESSING` key must have the `dict` type: + + `{"PRE_TRANSITIONS_PROC_0": pre_transitions_proc_func_0, ..., + "PRE_TRANSITIONS_PROC_N": pre_transitions_proc_func_N}`, + + where `"PRE_TRANSITIONS_PROC_i"` is an arbitrary name of the preprocessing stage in the pipeline. + The order of `pre_transitions_proc_func_i` calls is defined by the order + in which the preprocessing `dict` is defined. + + """ + + GLOBAL = "global" + LOCAL = "local" + TRANSITIONS = "transitions" + RESPONSE = "response" + MISC = "misc" + PRE_RESPONSE_PROCESSING = "pre_response_processing" + PRE_TRANSITIONS_PROCESSING = "pre_transitions_processing" + PROCESSING = "pre_transitions_processing"
    + + + +# Redefine shortcuts +GLOBAL = Keywords.GLOBAL +LOCAL = Keywords.LOCAL +TRANSITIONS = Keywords.TRANSITIONS +RESPONSE = Keywords.RESPONSE +MISC = Keywords.MISC +PRE_RESPONSE_PROCESSING = Keywords.PRE_RESPONSE_PROCESSING +PRE_TRANSITIONS_PROCESSING = Keywords.PRE_TRANSITIONS_PROCESSING +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/core/message.html b/_modules/dff/script/core/message.html new file mode 100644 index 0000000000..80c4a88873 --- /dev/null +++ b/_modules/dff/script/core/message.html @@ -0,0 +1,854 @@ + + + + + + + + + + dff.script.core.message — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.core.message

    +"""
    +Message
    +-------
    +The :py:class:`.Message` class is a universal data model for representing a message that should be supported by
    +DFF. It only contains types and properties that are compatible with most messaging services.
    +"""
    +from typing import Any, Optional, List, Union
    +from enum import Enum, auto
    +from pathlib import Path
    +from urllib.request import urlopen
    +
    +from pydantic import field_validator, Field, FilePath, HttpUrl, BaseModel, model_validator
    +
    +
    +
    +[docs] +class Session(Enum): + """ + An enumeration that defines two possible states of a session. + """ + + ACTIVE = auto() + FINISHED = auto()
    + + + +
    +[docs] +class DataModel(BaseModel, extra="allow", arbitrary_types_allowed=True): + """ + This class is a Pydantic BaseModel that serves as a base class for all DFF models. + """ + + ...
    + + + +
    +[docs] +class Command(DataModel): + """ + This class is a subclass of DataModel and represents + a command that can be executed in response to a user input. + """ + + ...
    + + + +
    +[docs] +class Location(DataModel): + """ + This class is a data model that represents a geographical + location on the Earth's surface. + It has two attributes, longitude and latitude, both of which are float values. + If the absolute difference between the latitude and longitude values of the two + locations is less than 0.00004, they are considered equal. + """ + + longitude: float + latitude: float + + def __eq__(self, other): + if isinstance(other, Location): + return abs(self.latitude - other.latitude) + abs(self.longitude - other.longitude) < 0.00004 + return NotImplemented
    + + + +
    +[docs] +class Attachment(DataModel): + """ + This class represents an attachment that can be either + a file or a URL, along with an optional ID and title. + """ + + source: Optional[Union[HttpUrl, FilePath]] = None + id: Optional[str] = None # id field is made separate to simplify type validation + title: Optional[str] = None + +
    +[docs] + def get_bytes(self) -> Optional[bytes]: + if self.source is None: + return None + if isinstance(self.source, Path): + with open(self.source, "rb") as file: + return file.read() + else: + with urlopen(self.source.unicode_string()) as file: + return file.read()
    + + + def __eq__(self, other): + if isinstance(other, Attachment): + if self.title != other.title: + return False + if self.id != other.id: + return False + return self.get_bytes() == other.get_bytes() + return NotImplemented + +
    +[docs] + @model_validator(mode="before") + @classmethod + def validate_source_or_id(cls, values: dict): + if not isinstance(values, dict): + raise AssertionError(f"Invalid constructor parameters: {str(values)}") + if bool(values.get("source")) == bool(values.get("id")): + raise AssertionError("Attachment type requires exactly one parameter, `source` or `id`, to be set.") + return values
    + + +
    +[docs] + @field_validator("source", mode="before") + @classmethod + def validate_source(cls, value): + if isinstance(value, Path): + return Path(value) + return value
    +
    + + + +
    +[docs] +class Audio(Attachment): + """Represents an audio file attachment.""" + + pass
    + + + +
    +[docs] +class Video(Attachment): + """Represents a video file attachment.""" + + pass
    + + + +
    +[docs] +class Image(Attachment): + """Represents an image file attachment.""" + + pass
    + + + +
    +[docs] +class Document(Attachment): + """Represents a document file attachment.""" + + pass
    + + + +
    +[docs] +class Attachments(DataModel): + """This class is a data model that represents a list of attachments.""" + + files: List[Attachment] = Field(default_factory=list) + + def __eq__(self, other): + if isinstance(other, Attachments): + return self.files == other.files + return NotImplemented
    + + + + + + + +
    +[docs] +class Button(DataModel): + """ + This class allows for the creation of a button object + with a source URL, a text description, and a payload. + """ + + source: Optional[HttpUrl] = None + text: str + payload: Optional[Any] = None + + def __eq__(self, other): + if isinstance(other, Button): + if self.source != other.source: + return False + if self.text != other.text: + return False + first_payload = bytes(self.payload, encoding="utf-8") if isinstance(self.payload, str) else self.payload + second_payload = bytes(other.payload, encoding="utf-8") if isinstance(other.payload, str) else other.payload + return first_payload == second_payload + return NotImplemented
    + + + +
    +[docs] +class Keyboard(DataModel): + """ + This class is a DataModel that represents a keyboard object + that can be used for a chatbot or messaging application. + """ + + buttons: List[Button] = Field(default_factory=list, min_length=1) + + def __eq__(self, other): + if isinstance(other, Keyboard): + return self.buttons == other.buttons + return NotImplemented
    + + + +
    +[docs] +class Message(DataModel): + """ + Class representing a message and contains several + class level variables to store message information. + """ + + text: Optional[str] = None + commands: Optional[List[Command]] = None + attachments: Optional[Attachments] = None + annotations: Optional[dict] = None + misc: Optional[dict] = None + # commands and state options are required for integration with services + # that use an intermediate backend server, like Yandex's Alice + # state: Optional[Session] = Session.ACTIVE + # ui: Optional[Union[Keyboard, DataModel]] = None + + def __eq__(self, other): + if isinstance(other, Message): + for field in self.model_fields: + if field not in other.model_fields: + return False + if self.__getattribute__(field) != other.__getattribute__(field): + return False + return True + return NotImplemented + + def __repr__(self) -> str: + return " ".join([f"{key}='{value}'" for key, value in self.model_dump(exclude_none=True).items()])
    + + + +
    +[docs] +class MultiMessage(Message): + """This class represents a message that contains multiple sub-messages.""" + + messages: Optional[List[Message]] = None
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/core/normalization.html b/_modules/dff/script/core/normalization.html new file mode 100644 index 0000000000..455bafc258 --- /dev/null +++ b/_modules/dff/script/core/normalization.html @@ -0,0 +1,724 @@ + + + + + + + + + + dff.script.core.normalization — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.core.normalization

    +"""
    +Normalization
    +-------------
    +Normalization module is used to normalize all python objects and functions to a format
    +that is suitable for script and actor execution process.
    +This module contains a basic set of functions for normalizing data in a dialog script.
    +"""
    +import logging
    +
    +from typing import Union, Callable, Any, Dict, Optional, ForwardRef
    +
    +from .keywords import Keywords
    +from .context import Context
    +from .types import NodeLabel3Type, NodeLabelType, ConditionType, LabelType
    +from .message import Message
    +
    +from pydantic import validate_call
    +
    +logger = logging.getLogger(__name__)
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +def normalize_label(label: NodeLabelType, default_flow_label: LabelType = "") -> Union[Callable, NodeLabel3Type]: + """ + The function that is used for normalization of + :py:const:`default_flow_label <dff.script.NodeLabelType>`. + + :param label: If label is Callable the function is wrapped into try/except + and normalization is used on the result of the function call with the name label. + :param default_flow_label: flow_label is used if label does not contain flow_label. + :return: Result of the label normalization, + if Callable is returned, the normalized result is returned. + """ + if callable(label): + + def get_label_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> NodeLabel3Type: + try: + new_label = label(ctx, pipeline, *args, **kwargs) + new_label = normalize_label(new_label, default_flow_label) + flow_label, node_label, _ = new_label + node = pipeline.script.get(flow_label, {}).get(node_label) + if not node: + raise Exception(f"Unknown transitions {new_label} for pipeline.script={pipeline.script}") + if node_label in [Keywords.LOCAL, Keywords.GLOBAL]: + raise Exception(f"Invalid transition: can't transition to {flow_label}:{node_label}") + except Exception as exc: + new_label = None + logger.error(f"Exception {exc} of function {label}", exc_info=exc) + return new_label + + return get_label_handler # create wrap to get uniq key for dictionary + elif isinstance(label, str) or isinstance(label, Keywords): + return (default_flow_label, label, float("-inf")) + elif isinstance(label, tuple) and len(label) == 2 and isinstance(label[-1], float): + return (default_flow_label, label[0], label[-1]) + elif isinstance(label, tuple) and len(label) == 2 and isinstance(label[-1], str): + flow_label = label[0] or default_flow_label + return (flow_label, label[-1], float("-inf")) + elif isinstance(label, tuple) and len(label) == 3: + flow_label = label[0] or default_flow_label + return (flow_label, label[1], label[2])
    + + + +
    +[docs] +def normalize_condition(condition: ConditionType) -> Callable: + """ + The function that is used to normalize `condition` + + :param condition: Condition to normalize. + :return: The function condition wrapped into the try/except. + """ + if callable(condition): + + def callable_condition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + try: + return condition(ctx, pipeline, *args, **kwargs) + except Exception as exc: + logger.error(f"Exception {exc} of function {condition}", exc_info=exc) + return False + + return callable_condition_handler
    + + + +
    +[docs] +@validate_call +def normalize_response(response: Optional[Union[Message, Callable[..., Message]]]) -> Callable[..., Message]: + """ + This function is used to normalize response, if response Callable, it is returned, otherwise + response is wrapped to the function and this function is returned. + + :param response: Response to normalize. + :return: Function that returns callable response. + """ + if callable(response): + return response + else: + if response is None: + result = Message() + elif isinstance(response, Message): + result = response + else: + raise TypeError(type(response)) + + def response_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs): + return result + + return response_handler
    + + + +
    +[docs] +@validate_call +def normalize_processing(processing: Dict[Any, Callable]) -> Callable: + """ + This function is used to normalize processing. + It returns function that consecutively applies all preprocessing stages from dict. + + :param processing: Processing which contains all preprocessing stages in a format "PROC_i" -> proc_func_i. + :return: Function that consequentially applies all preprocessing stages from dict. + """ + if isinstance(processing, dict): + + def processing_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Context: + for processing_name, processing_func in processing.items(): + try: + if processing_func is not None: + ctx = processing_func(ctx, pipeline, *args, **kwargs) + except Exception as exc: + logger.error( + f"Exception {exc} for processing_name={processing_name} and processing_func={processing_func}", + exc_info=exc, + ) + return ctx + + return processing_handler
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/core/script.html b/_modules/dff/script/core/script.html new file mode 100644 index 0000000000..b2013b6729 --- /dev/null +++ b/_modules/dff/script/core/script.html @@ -0,0 +1,746 @@ + + + + + + + + + + dff.script.core.script — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.core.script

    +"""
    +Script
    +------
    +The Script module provides a set of `pydantic` models for representing the dialog graph.
    +These models are used to define the conversation flow, and to determine the appropriate response based on
    +the user's input and the current state of the conversation.
    +"""
    +# %%
    +
    +import logging
    +from typing import Callable, Optional, Any, Dict, Union
    +
    +from pydantic import BaseModel, field_validator
    +
    +from .types import LabelType, NodeLabelType, ConditionType, NodeLabel3Type
    +from .message import Message
    +from .keywords import Keywords
    +from .normalization import normalize_response, normalize_processing, normalize_condition, normalize_label, validate_call
    +from typing import ForwardRef
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +Pipeline = ForwardRef("Pipeline")
    +Context = ForwardRef("Context")
    +
    +
    +
    +[docs] +class Node(BaseModel, extra="forbid"): + """ + The class for the `Node` object. + """ + + transitions: Dict[NodeLabelType, ConditionType] = {} + response: Optional[Union[Message, Callable[[Context, Pipeline], Message]]] = None + pre_transitions_processing: Dict[Any, Callable] = {} + pre_response_processing: Dict[Any, Callable] = {} + misc: dict = {} + +
    +[docs] + @field_validator("transitions", mode="before") + @classmethod + @validate_call + def normalize_transitions( + cls, transitions: Dict[NodeLabelType, ConditionType] + ) -> Dict[Union[Callable, NodeLabel3Type], Callable]: + """ + The function which is used to normalize transitions and returns normalized dict. + + :param transitions: Transitions to normalize. + :return: Transitions with normalized label and condition. + """ + transitions = { + normalize_label(label): normalize_condition(condition) for label, condition in transitions.items() + } + return transitions
    + + +
    +[docs] + def run_response(self, ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Context: + """ + Executes the normalized response. + See details in the :py:func:`~normalize_response` function of `normalization.py`. + """ + response = normalize_response(self.response) + return response(ctx, pipeline, *args, **kwargs)
    + + +
    +[docs] + def run_pre_response_processing(self, ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Context: + """ + Executes pre-processing of responses. + """ + return self.run_processing(self.pre_response_processing, ctx, pipeline, *args, **kwargs)
    + + +
    +[docs] + def run_pre_transitions_processing(self, ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Context: + """ + Executes pre-processing of transitions. + """ + return self.run_processing(self.pre_transitions_processing, ctx, pipeline, *args, **kwargs)
    + + +
    +[docs] + def run_processing( + self, processing: Dict[Any, Callable], ctx: Context, pipeline: Pipeline, *args, **kwargs + ) -> Context: + """ + Executes the normalized processing. + See details in the :py:func:`~normalize_processing` function of `normalization.py`. + """ + processing = normalize_processing(processing) + return processing(ctx, pipeline, *args, **kwargs)
    +
    + + + +
    +[docs] +class Script(BaseModel, extra="forbid"): + """ + The class for the `Script` object. + """ + + script: Dict[LabelType, Dict[LabelType, Node]] + +
    +[docs] + @field_validator("script", mode="before") + @classmethod + @validate_call + def normalize_script(cls, script: Dict[LabelType, Any]) -> Dict[LabelType, Dict[LabelType, Dict[str, Any]]]: + """ + This function normalizes :py:class:`.Script`: it returns dict where the GLOBAL node is moved + into the flow with the GLOBAL name. The function returns the structure + + `{GLOBAL: {...NODE...}, ...}` -> `{GLOBAL: {GLOBAL: {...NODE...}}, ...}`. + + :param script: :py:class:`.Script` that describes the dialog scenario. + :return: Normalized :py:class:`.Script`. + """ + if isinstance(script, dict): + if Keywords.GLOBAL in script and all( + [isinstance(item, Keywords) for item in script[Keywords.GLOBAL].keys()] + ): + script[Keywords.GLOBAL] = {Keywords.GLOBAL: script[Keywords.GLOBAL]} + return script
    + + + def __getitem__(self, key): + return self.script[key] + +
    +[docs] + def get(self, key, value=None): + return self.script.get(key, value)
    + + +
    +[docs] + def keys(self): + return self.script.keys()
    + + +
    +[docs] + def items(self): + return self.script.items()
    + + +
    +[docs] + def values(self): + return self.script.values()
    + + + def __iter__(self): + return self.script.__iter__()
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/core/types.html b/_modules/dff/script/core/types.html new file mode 100644 index 0000000000..63447d13c7 --- /dev/null +++ b/_modules/dff/script/core/types.html @@ -0,0 +1,696 @@ + + + + + + + + + + dff.script.core.types — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.core.types

    +"""
    +Types
    +-----
    +The Types module contains a set of basic data types that
    +are used to define the expected input and output of various components of the framework.
    +The types defined in this module include basic data types such as strings
    +and lists, as well as more complex types that are specific to the framework.
    +"""
    +from typing import Union, Callable, Tuple
    +from enum import Enum, auto
    +from typing_extensions import TypeAlias
    +
    +from .keywords import Keywords
    +
    +LabelType: TypeAlias = Union[str, Keywords]
    +"""Label can be a casual string or :py:class:`~dff.script.Keywords`."""
    +
    +NodeLabel1Type: TypeAlias = Tuple[str, float]
    +"""Label type for transitions can be `[node_name, transition_priority]`."""
    +
    +NodeLabel2Type: TypeAlias = Tuple[str, str]
    +"""Label type for transitions can be `[flow_name, node_name]`."""
    +
    +NodeLabel3Type: TypeAlias = Tuple[str, str, float]
    +"""Label type for transitions can be `[flow_name, node_name, transition_priority]`."""
    +
    +NodeLabelTupledType: TypeAlias = Union[NodeLabel1Type, NodeLabel2Type, NodeLabel3Type]
    +"""Label type for transitions can be one of three different types."""
    +
    +NodeLabelType: TypeAlias = Union[Callable, NodeLabelTupledType, str]
    +"""Label type for transitions can be one of three different types."""
    +
    +ConditionType: TypeAlias = Callable
    +"""Condition type can be only `Callable`."""
    +
    +ModuleName: TypeAlias = "str"
    +"""
    +Module name names addon state, or your own module state. For example module name can be `"dff_context_storages"`.
    +"""
    +# TODO: change example
    +
    +
    +
    +[docs] +class ActorStage(Enum): + """ + The class which holds keys for the handlers. These keys are used + for the actions of :py:class:`.Actor`. Each stage represents + a specific step in the conversation flow. Here is a brief description + of each stage. + """ + + CONTEXT_INIT = auto() + """ + This stage is used for the context initialization. + It involves setting up the conversation context. + """ + + GET_PREVIOUS_NODE = auto() + """ + This stage is used to retrieve the previous node. + """ + + REWRITE_PREVIOUS_NODE = auto() + """ + This stage is used to rewrite the previous node. + It involves updating the previous node in the conversation history + to reflect any changes made during the current conversation turn. + """ + + RUN_PRE_TRANSITIONS_PROCESSING = auto() + """ + This stage is used for running pre-transitions processing. + It involves performing any necessary pre-processing tasks. + """ + + GET_TRUE_LABELS = auto() + """ + This stage is used to retrieve the true labels. + It involves determining the correct label to take based + on the current conversation context. + """ + + GET_NEXT_NODE = auto() + """ + This stage is used to retrieve the next node in the conversation flow. + """ + + REWRITE_NEXT_NODE = auto() + """ + This stage is used to rewrite the next node. + It involves updating the next node in the conversation flow + to reflect any changes made during the current conversation turn. + """ + + RUN_PRE_RESPONSE_PROCESSING = auto() + """ + This stage is used for running pre-response processing. + It involves performing any necessary pre-processing tasks + before generating the response to the user. + """ + + CREATE_RESPONSE = auto() + """ + This stage is used for response creation. + It involves generating a response to the user based on the + current conversation context and any pre-processing performed. + """ + + FINISH_TURN = auto() + """ + This stage is used for finishing the current conversation turn. + It involves wrapping up any loose ends, such as saving context, + before waiting for the user's next input. + """
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/labels/std_labels.html b/_modules/dff/script/labels/std_labels.html new file mode 100644 index 0000000000..5810be1061 --- /dev/null +++ b/_modules/dff/script/labels/std_labels.html @@ -0,0 +1,779 @@ + + + + + + + + + + dff.script.labels.std_labels — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.labels.std_labels

    +"""
    +Labels
    +------
    +:py:const:`Labels <dff.script.NodeLabel3Type>` are one of the important components of the dialog graph,
    +which determine the targeted node name of the transition.
    +They are used to identify the next step in the conversation.
    +Labels can also be used in combination with other conditions,
    +such as the current context or user data, to create more complex and dynamic conversations.
    +
    +This module contains a standard set of scripting :py:const:`labels <dff.script.NodeLabelType>` that
    +can be used by developers to define the conversation flow.
    +"""
    +from typing import Optional, Callable, ForwardRef
    +from dff.script import Context, NodeLabel3Type
    +
    +Pipeline = ForwardRef("Pipeline")
    +
    +
    +
    +[docs] +def repeat(priority: Optional[float] = None) -> Callable: + """ + Returns transition handler that takes :py:class:`.Context`, + :py:class:`~dff.pipeline.Pipeline` and :py:const:`priority <float>`. + This handler returns a :py:const:`label <NodeLabelType>` + to the last node with a given :py:const:`priority <float>`. + If the priority is not given, `Pipeline.actor.label_priority` is used as default. + + :param priority: Priority of transition. Uses `Pipeline.actor.label_priority` if priority not defined. + """ + + def repeat_transition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> NodeLabel3Type: + current_priority = pipeline.actor.label_priority if priority is None else priority + if len(ctx.labels) >= 1: + flow_label, label = list(ctx.labels.values())[-1] + else: + flow_label, label = pipeline.actor.start_label[:2] + return (flow_label, label, current_priority) + + return repeat_transition_handler
    + + + + + + + +
    +[docs] +def to_start(priority: Optional[float] = None) -> Callable: + """ + Returns transition handler that takes :py:class:`~dff.script.Context`, + :py:class:`~dff.pipeline.Pipeline` and :py:const:`priority <float>`. + This handler returns a :py:const:`label <dff.script.NodeLabelType>` + to the start node with a given :py:const:`priority <float>`. + If the priority is not given, `Pipeline.actor.label_priority` is used as default. + + :param priority: Priority of transition. Uses `Pipeline.actor.label_priority` if priority not defined. + """ + + def to_start_transition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> NodeLabel3Type: + current_priority = pipeline.actor.label_priority if priority is None else priority + return (*pipeline.actor.start_label[:2], current_priority) + + return to_start_transition_handler
    + + + +
    +[docs] +def to_fallback(priority: Optional[float] = None) -> Callable: + """ + Returns transition handler that takes :py:class:`~dff.script.Context`, + :py:class:`~dff.pipeline.Pipeline` and :py:const:`priority <float>`. + This handler returns a :py:const:`label <dff.script.NodeLabelType>` + to the fallback node with a given :py:const:`priority <float>`. + If the priority is not given, `Pipeline.actor.label_priority` is used as default. + + :param priority: Priority of transition. Uses `Pipeline.actor.label_priority` if priority not defined. + """ + + def to_fallback_transition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> NodeLabel3Type: + current_priority = pipeline.actor.label_priority if priority is None else priority + return (*pipeline.actor.fallback_label[:2], current_priority) + + return to_fallback_transition_handler
    + + + +
    +[docs] +def _get_label_by_index_shifting( + ctx: Context, + pipeline: Pipeline, + priority: Optional[float] = None, + increment_flag: bool = True, + cyclicality_flag: bool = True, + *args, + **kwargs, +) -> NodeLabel3Type: + """ + Function that returns node label from the context and pipeline after shifting the index. + + :param ctx: Dialog context. + :param pipeline: Dialog pipeline. + :param priority: Priority of transition. Uses `Pipeline.actor.label_priority` if priority not defined. + :param increment_flag: If it is `True`, label index is incremented by `1`, + otherwise it is decreased by `1`. Defaults to `True`. + :param cyclicality_flag: If it is `True` the iteration over the label list is going cyclically + (e.g the element with `index = len(labels)` has `index = 0`). Defaults to `True`. + :return: The tuple that consists of `(flow_label, label, priority)`. + If fallback is executed `(flow_fallback_label, fallback_label, priority)` are returned. + """ + flow_label, node_label, current_priority = repeat(priority)(ctx, pipeline, *args, **kwargs) + labels = list(pipeline.script.get(flow_label, {})) + + if node_label not in labels: + return (*pipeline.actor.fallback_label[:2], current_priority) + + label_index = labels.index(node_label) + label_index = label_index + 1 if increment_flag else label_index - 1 + if not (cyclicality_flag or (0 <= label_index < len(labels))): + return (*pipeline.actor.fallback_label[:2], current_priority) + label_index %= len(labels) + + return (flow_label, labels[label_index], current_priority)
    + + + +
    +[docs] +def forward(priority: Optional[float] = None, cyclicality_flag: bool = True) -> Callable: + """ + Returns transition handler that takes :py:class:`~dff.script.Context`, + :py:class:`~dff.pipeline.Pipeline` and :py:const:`priority <float>`. + This handler returns a :py:const:`label <dff.script.NodeLabelType>` + to the forward node with a given :py:const:`priority <float>` and :py:const:`cyclicality_flag <bool>`. + If the priority is not given, `Pipeline.actor.label_priority` is used as default. + + :param priority: Float priority of transition. Uses `Pipeline.actor.label_priority` if priority not defined. + :param cyclicality_flag: If it is `True`, the iteration over the label list is going cyclically + (e.g the element with `index = len(labels)` has `index = 0`). Defaults to `True`. + """ + + def forward_transition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> NodeLabel3Type: + return _get_label_by_index_shifting( + ctx, pipeline, priority, increment_flag=True, cyclicality_flag=cyclicality_flag, *args, **kwargs + ) + + return forward_transition_handler
    + + + +
    +[docs] +def backward(priority: Optional[float] = None, cyclicality_flag: bool = True) -> Callable: + """ + Returns transition handler that takes :py:class:`~dff.script.Context`, + :py:class:`~dff.pipeline.Pipeline` and :py:const:`priority <float>`. + This handler returns a :py:const:`label <dff.script.NodeLabelType>` + to the backward node with a given :py:const:`priority <float>` and :py:const:`cyclicality_flag <bool>`. + If the priority is not given, `Pipeline.actor.label_priority` is used as default. + + :param priority: Float priority of transition. Uses `Pipeline.actor.label_priority` if priority not defined. + :param cyclicality_flag: If it is `True`, the iteration over the label list is going cyclically + (e.g the element with `index = len(labels)` has `index = 0`). Defaults to `True`. + """ + + def back_transition_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> NodeLabel3Type: + return _get_label_by_index_shifting( + ctx, pipeline, priority, increment_flag=False, cyclicality_flag=cyclicality_flag, *args, **kwargs + ) + + return back_transition_handler
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/script/responses/std_responses.html b/_modules/dff/script/responses/std_responses.html new file mode 100644 index 0000000000..bd406f029d --- /dev/null +++ b/_modules/dff/script/responses/std_responses.html @@ -0,0 +1,612 @@ + + + + + + + + + + dff.script.responses.std_responses — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.script.responses.std_responses

    +"""
    +Responses
    +---------
    +Responses determine the response that will be sent to the user for each node of the dialog graph.
    +Responses are used to provide the user with information, ask questions,
    +or guide the conversation in a particular direction.
    +
    +This module provides only one predefined response function that can be used to quickly
    +respond to the user and keep the conversation flowing.
    +"""
    +import random
    +from typing import List
    +
    +from dff.pipeline import Pipeline
    +from dff.script import Context, Message
    +
    +
    +
    +[docs] +def choice(responses: List[Message]): + """ + Function wrapper that takes the list of responses as an input + and returns handler which outputs a response randomly chosen from that list. + + :param responses: A list of responses for random sampling. + """ + + def choice_response_handler(ctx: Context, pipeline: Pipeline, *args, **kwargs): + return random.choice(responses) + + return choice_response_handler
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/stats/cli.html b/_modules/dff/stats/cli.html new file mode 100644 index 0000000000..9d3cc314dd --- /dev/null +++ b/_modules/dff/stats/cli.html @@ -0,0 +1,847 @@ + + + + + + + + + + dff.stats.cli — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.stats.cli

    +"""
    +Command Line Interface
    +----------------------
    +This modules defines commands that can be called via the command line interface.
    +
    +"""
    +from uuid import uuid4
    +import tempfile
    +import shutil
    +import sys
    +import argparse
    +import os
    +import logging
    +from urllib import parse
    +from pathlib import Path
    +from typing import Optional
    +
    +try:
    +    from omegaconf import OmegaConf
    +    from .utils import get_superset_session, drop_superset_assets
    +except ImportError:
    +    raise ImportError("Some packages are not found. Run `pip install dff[stats]`")
    +
    +logger = logging.getLogger(__name__)
    +logger.setLevel(logging.INFO)
    +
    +DFF_DIR = Path(__file__).absolute().parent.parent
    +"""
    +Root directory of the local `dff` installation.
    +
    +:meta hide-value:
    +"""
    +DASHBOARD_DIR = str(DFF_DIR / "config" / "superset_dashboard")
    +"""
    +Local path to superset dashboard files to import.
    +
    +:meta hide-value:
    +"""
    +DASHBOARD_SLUG = "dff-stats"
    +"""
    +This variable stores a slug used for building the http address of the DFF dashboard.
    +"""
    +DEFAULT_SUPERSET_URL = parse.urlunsplit(("http", "localhost:8088", "/", "", ""))
    +"""
    +Default location of the Superset dashboard.
    +"""
    +
    +TYPE_MAPPING_CH = {
    +    "FLOAT": "Nullable(Float64)",
    +    "STRING": "Nullable(String)",
    +    "LONGINTEGER": "Nullable(Int64)",
    +    "INTEGER": "Nullable(Int64)",
    +    "DATETIME": "Nullable(DateTime)",
    +}
    +"""
    +Mapping of standard sql column types to Clickhouse native types.
    +
    +:meta hide-value:
    +"""
    +
    +DFF_NODE_STATS_STATEMENT = """
    +WITH main AS (
    +    SELECT DISTINCT {table}.LogAttributes['context_id'] as context_id,
    +    toUInt64OrNull({table}.LogAttributes['request_id']) as request_id,
    +    toDateTime(otel_traces.Timestamp) as start_time,
    +    otel_traces.SpanName as data_key,
    +    {table}.Body as data,
    +    {lblfield} as label,
    +    {flowfield} as flow_label,
    +    {nodefield} as node_label,
    +    {table}.TraceId as trace_id,
    +    otel_traces.TraceId\nFROM {table}, otel_traces
    +    WHERE {table}.TraceId = otel_traces.TraceId and data_key = 'get_current_label'
    +    ORDER BY context_id, request_id
    +) SELECT context_id,
    +    request_id,
    +    start_time,
    +    data_key,
    +    data,
    +    label,
    +    {label_lag} as prev_label,
    +    {flow_lag} as prev_flow,
    +    flow_label,
    +    node_label
    +FROM main
    +"""
    +DFF_STATS_STATEMENT = """
    +WITH main AS (
    +    SELECT DISTINCT {table}.LogAttributes['context_id'] as context_id,
    +    toUInt64OrNull({table}.LogAttributes['request_id']) as request_id,
    +    toDateTime(otel_traces.Timestamp) as start_time,
    +    otel_traces.SpanName as data_key,
    +    {table}.Body as data,
    +    {lblfield} as label,
    +    {flowfield} as flow_label,
    +    {nodefield} as node_label,
    +    {table}.TraceId as trace_id,
    +    otel_traces.TraceId\nFROM {table}, otel_traces
    +    WHERE {table}.TraceId = otel_traces.TraceId
    +    ORDER BY data_key, context_id, request_id
    +) SELECT context_id,
    +    request_id,
    +    start_time,
    +    data_key,
    +    data,
    +    label,
    +    {label_lag} as prev_label,
    +    {flow_lag} as prev_flow,
    +    flow_label,
    +    node_label
    +FROM main
    +"""
    +DFF_FINAL_NODES_STATEMENT = """
    +WITH main AS (
    +    SELECT LogAttributes['context_id'] AS context_id,
    +    max(toUInt64OrNull(LogAttributes['request_id'])) AS max_history
    +    FROM {table}\nGROUP BY context_id
    +)
    +SELECT DISTINCT LogAttributes['context_id'] AS context_id,
    +toUInt64OrNull({table}.LogAttributes['request_id']) AS request_id,
    +toDateTime(otel_traces.Timestamp) AS start_time,
    +{lblfield} AS label,
    +{flowfield} AS flow_label,
    +{nodefield} AS node_label
    +FROM {table}
    +INNER JOIN main
    +ON context_id  = main.context_id
    +AND request_id = main.max_history
    +INNER JOIN otel_traces
    +ON {table}.TraceId = otel_traces.TraceId
    +WHERE otel_traces.SpanName = 'get_current_label'
    +"""
    +
    +SQL_STATEMENT_MAPPING = {
    +    "dff_stats.yaml": DFF_STATS_STATEMENT,
    +    "dff_node_stats.yaml": DFF_NODE_STATS_STATEMENT,
    +    "dff_final_nodes.yaml": DFF_FINAL_NODES_STATEMENT,
    +}
    +"""
    +Select statements for dashboard configuration with names and types represented as placeholders.
    +The placeholder system makes queries database agnostic, required values are set during the import phase.
    +
    +:meta hide-value:
    +"""
    +
    +
    +
    +[docs] +def import_dashboard(parsed_args: Optional[argparse.Namespace] = None, zip_file: Optional[str] = None): + """ + Import an Apache Superset dashboard to a local instance with specified arguments. + Before using the command, make sure you have your Superset instance + up and running: `ghcr.io/deeppavlov/superset_df_dashboard:latest`. + The import will override existing dashboard configurations if present. + + :param parsed_args: Command line arguments produced by `argparse`. + :param zip_file: Zip archived dashboard config. + """ + host = parsed_args.host if hasattr(parsed_args, "host") else "localhost" + port = parsed_args.port if hasattr(parsed_args, "port") else "8088" + superset_url = parse.urlunsplit(("http", f"{host}:{port}", "/", "", "")) + zip_filename = os.path.basename(zip_file) + db_password = getattr(parsed_args, "db.password") + + session, headers = get_superset_session(parsed_args, superset_url) + drop_superset_assets(session, headers, superset_url) + import_dashboard_url = parse.urljoin(superset_url, "/api/v1/dashboard/import/") + # upload files + with open(zip_file, "rb") as f: + response = session.request( + "POST", + import_dashboard_url, + headers=headers, + data={ + "passwords": '{"databases/dff_database.yaml":"' + db_password + '"}', + "overwrite": "true", + }, + files=[("formData", (zip_filename, f, "application/zip"))], + ) + response.raise_for_status() + logger.info(f"Upload finished with status {response.status_code}.")
    + + + +
    +[docs] +def make_zip_config(parsed_args: argparse.Namespace) -> Path: + """ + Make a zip-archived Apache Superset dashboard config, using specified arguments. + + :param parsed_args: Command line arguments produced by `argparse`. + """ + if hasattr(parsed_args, "outfile") and parsed_args.outfile: + outfile_name = parsed_args.outfile + else: + outfile_name = f"config_{str(uuid4())}.zip" + + file_conf = OmegaConf.load(parsed_args.file) + sys.argv = [__file__] + [f"{key}={value}" for key, value in parsed_args.__dict__.items() if value] + cmd_conf = OmegaConf.from_cli() + cli_conf = OmegaConf.merge(file_conf, cmd_conf) + + if OmegaConf.select(cli_conf, "db.driver") == "clickhousedb+connect": + params = dict( + table="${db.table}", + label_lag="lagInFrame(label) OVER " + "(PARTITION BY context_id ORDER BY request_id ASC " + "ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)", + flow_lag="lagInFrame(flow_label) OVER " + "(PARTITION BY context_id ORDER BY request_id ASC " + "ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)", + texttype="String", + lblfield="JSON_VALUE(${db.table}.Body, '$.label')", + flowfield="JSON_VALUE(${db.table}.Body, '$.flow')", + nodefield="JSON_VALUE(${db.table}.Body, '$.node')", + ) + else: + raise ValueError("The only supported database driver is 'clickhousedb+connect'.") + + conf = SQL_STATEMENT_MAPPING.copy() + for key in conf.keys(): + conf[key] = {} + conf[key]["sql"] = SQL_STATEMENT_MAPPING[key].format(**params) + + resolve_conf = OmegaConf.create( + { + "database": { + "sqlalchemy_uri": "${db.driver}://${db.user}:XXXXXXXXXX@${db.host}:${db.port}/${db.name}", + }, + **conf, + } + ) + + user_config = OmegaConf.merge(cli_conf, resolve_conf) + OmegaConf.resolve(user_config) + + with tempfile.TemporaryDirectory() as temp_config_dir: + nested_temp_dir = os.path.join(temp_config_dir, "superset_dashboard") + logger.info(f"Copying config files to temporary directory: {nested_temp_dir}.") + + shutil.copytree(DASHBOARD_DIR, nested_temp_dir) + database_dir = Path(os.path.join(nested_temp_dir, "databases")) + dataset_dir = Path(os.path.join(nested_temp_dir, "datasets/dff_database")) + + logger.info("Overriding the initial configuration.") + # overwrite sqlalchemy uri + for filepath in database_dir.iterdir(): + file_config = OmegaConf.load(filepath) + new_file_config = OmegaConf.merge(file_config, OmegaConf.select(user_config, "database")) + OmegaConf.save(new_file_config, filepath) + + # overwrite sql expressions and column types + for filepath in dataset_dir.iterdir(): + file_config = OmegaConf.load(filepath) + new_file_config = OmegaConf.merge(file_config, getattr(user_config, filepath.name)) + if OmegaConf.select(cli_conf, "db.driver") == "clickhousedb+connect": + for col in OmegaConf.select(new_file_config, "columns"): + col.type = TYPE_MAPPING_CH.get(col.type, col.type) + OmegaConf.save(new_file_config, filepath) + + if ".zip" not in outfile_name: + raise ValueError(f"Outfile name missing .zip extension: {outfile_name}.") + logger.info(f"Saving the archive to {outfile_name}.") + shutil.make_archive(outfile_name[: outfile_name.rindex(".zip")], format="zip", root_dir=temp_config_dir) + + return Path(outfile_name)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/stats/default_extractors.html b/_modules/dff/stats/default_extractors.html new file mode 100644 index 0000000000..08b4e13dc8 --- /dev/null +++ b/_modules/dff/stats/default_extractors.html @@ -0,0 +1,685 @@ + + + + + + + + + + dff.stats.default_extractors — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.stats.default_extractors

    +"""
    +Default Extractors
    +------------------
    +This module includes a pool of default extractors
    +that you can use out of the box.
    +
    +The default configuration for Superset dashboard leverages the data collected
    +by the extractors below. In order to use the default charts,
    +make sure that you include those functions in your pipeline.
    +Detailed examples can be found in the `tutorials` section.
    +
    +"""
    +from datetime import datetime
    +
    +from dff.script import Context
    +from dff.pipeline import ExtraHandlerRuntimeInfo, Pipeline
    +from .utils import get_wrapper_field
    +
    +
    +
    +[docs] +async def get_current_label(ctx: Context, pipeline: Pipeline, info: ExtraHandlerRuntimeInfo): + """ + Extract the current label on each turn. + This function is required for running the dashboard with the default configuration. + + .. note:: + + Preferrably, it needs to be invoked as `after_handler` of the `Actor` service. + + """ + last_label = ctx.last_label + if last_label is None: + last_label = pipeline.actor.start_label[:2] + return {"flow": last_label[0], "node": last_label[1], "label": ": ".join(last_label)}
    + + + +
    +[docs] +async def get_timing_before(ctx: Context, _, info: ExtraHandlerRuntimeInfo): + """ + Extract the pipeline component's start time. + This function is required for running the dashboard with the default configuration. + + The function leverages the `framework_states` field of the context to store results. + As a result, the function output is cleared on every turn and does not get persisted + to the context storage. + """ + start_time = datetime.now() + ctx.framework_states[get_wrapper_field(info, "time")] = start_time
    + + + +
    +[docs] +async def get_timing_after(ctx: Context, _, info: ExtraHandlerRuntimeInfo): # noqa: F811 + """ + Extract the pipeline component's finish time. + This function is required for running the dashboard with the default configuration. + + The function leverages the `framework_states` field of the context to store results. + As a result, the function output is cleared on every turn and does not get persisted + to the context storage. + """ + start_time = ctx.framework_states[get_wrapper_field(info, "time")] + data = {"execution_time": str(datetime.now() - start_time)} + return data
    + + + +
    +[docs] +async def get_last_response(ctx: Context, _, info: ExtraHandlerRuntimeInfo): + """ + Extract the text of the last response in the current context. + This handler is best used together with the `ACTOR` component. + + This function is required to enable charts that aggregate requests and responses. + """ + data = {"last_response": ctx.last_response.text} + return data
    + + + +
    +[docs] +async def get_last_request(ctx: Context, _, info: ExtraHandlerRuntimeInfo): + """ + Extract the text of the last request in the current context. + This handler is best used together with the `ACTOR` component. + + This function is required to enable charts that aggregate requests and responses. + """ + data = {"last_request": ctx.last_request.text} + return data
    + + + +__all__ = ["get_current_label", "get_timing_before", "get_timing_after", "get_last_request", "get_last_response"] +""" +List of exported functions. + +:meta hide-avlue: +""" +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/stats/instrumentor.html b/_modules/dff/stats/instrumentor.html new file mode 100644 index 0000000000..b1dcce0f27 --- /dev/null +++ b/_modules/dff/stats/instrumentor.html @@ -0,0 +1,791 @@ + + + + + + + + + + dff.stats.instrumentor — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.stats.instrumentor

    +"""
    +Instrumentor
    +-------------
    +This modules contains the :py:class:`~OtelInstrumentor` class that implements
    +Opentelemetry's `BaseInstrumentor` interface and allows for automated
    +instrumentation of Dialog Flow Framework applications,
    +e.g. for automated logging and log export.
    +
    +For detailed reference, see `~OtelInstrumentor` class.
    +"""
    +import asyncio
    +from typing import Collection, Optional
    +
    +from wrapt import wrap_function_wrapper, decorator
    +from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
    +from opentelemetry.instrumentation.utils import unwrap
    +from opentelemetry.metrics import get_meter, get_meter_provider, Meter
    +from opentelemetry.trace import get_tracer, get_tracer_provider, Tracer
    +from opentelemetry._logs import get_logger, get_logger_provider, Logger, SeverityNumber
    +from opentelemetry.trace import SpanKind, Span
    +from opentelemetry.sdk.trace import TracerProvider
    +from opentelemetry.sdk._logs import LoggerProvider, LogRecord
    +from opentelemetry.sdk.metrics import MeterProvider
    +from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
    +from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
    +from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter
    +
    +from dff.script.core.context import get_last_index
    +from dff.stats.utils import (
    +    resource,
    +    get_wrapper_field,
    +    set_logger_destination,
    +    set_meter_destination,
    +    set_tracer_destination,
    +)
    +from dff.stats import default_extractors
    +
    +
    +INSTRUMENTS = ["dff"]
    +
    +
    +
    +[docs] +class OtelInstrumentor(BaseInstrumentor): + """ + Utility class for instrumenting DFF-related functions + that implements the :py:class:`~BaseInstrumentor` interface. + :py:meth:`~instrument` and :py:meth:`~uninstrument` methods + are available to apply and revert the instrumentation effects, + e.g. enable and disable logging at runtime. + + .. code-block:: + + dff_instrumentor = OtelInstrumentor() + dff_instrumentor.instrument() + dff_instrumentor.uninstrument() + + Opentelemetry provider instances can be optionally passed to the class constructor. + Otherwise, the global logger, tracer and meter providers are leveraged. + + The class implements the :py:meth:`~__call__` method, so that + regular functions can be decorated using the class instance. + + .. code-block:: + + @dff_instrumentor + async def function(context, pipeline, runtime_info): + ... + + :param logger_provider: Opentelemetry logger provider. Used to construct a logger instance. + :param tracer_provider: Opentelemetry tracer provider. Used to construct a tracer instance. + :parame meter_provider: Opentelemetry meter provider. Used to construct a meter instance. + """ + + def __init__(self, logger_provider=None, tracer_provider=None, meter_provider=None) -> None: + super().__init__() + self._logger_provider: Optional[LoggerProvider] = None + self._tracer_provider: Optional[TracerProvider] = None + self._meter_provider: Optional[MeterProvider] = None + self._logger: Optional[Logger] = None + self._tracer: Optional[Tracer] = None + self._meter: Optional[Meter] = None + self._configure_providers( + logger_provider=logger_provider, tracer_provider=tracer_provider, meter_provider=meter_provider + ) + + def __enter__(self): + if not self.is_instrumented_by_opentelemetry: + self.instrument() + return self + + def __exit__(self): + if self.is_instrumented_by_opentelemetry: + self.uninstrument() + +
    +[docs] + @classmethod + def from_url(cls, url: str, insecure: bool = True, timeout: Optional[int] = None): + """ + Construct an instrumentor instance using only the url of the OTLP Collector. + Inherently modifies the global provider instances adding an export destination + for the target url. + + .. code-block:: + + instrumentor = OtelInstrumentor.from_url("grpc://localhost:4317") + + :param url: Url of the running Otel Collector server. Due to limited support of HTTP protocol + by the Opentelemetry Python extension, GRPC protocol is preferred. + :param insecure: Whether non-SSL-protected connection is allowed. Defaults to True. + :param timeout: Connection timeout in seconds, optional. + """ + set_logger_destination(OTLPLogExporter(endpoint=url, insecure=insecure, timeout=timeout)) + set_tracer_destination(OTLPSpanExporter(endpoint=url, insecure=insecure, timeout=timeout)) + set_meter_destination(OTLPMetricExporter(endpoint=url, insecure=insecure, timeout=timeout)) + return cls()
    + + +
    +[docs] + def instrumentation_dependencies(self) -> Collection[str]: + """ + :meta private: + + Required libraries. Implements the Python Opentelemetry instrumentor interface. + + """ + return INSTRUMENTS
    + + +
    +[docs] + def _instrument(self, logger_provider=None, tracer_provider=None, meter_provider=None): + if any([logger_provider, meter_provider, tracer_provider]): + self._configure_providers( + logger_provider=logger_provider, tracer_provider=tracer_provider, meter_provider=meter_provider + ) + for func_name in default_extractors.__all__: + wrap_function_wrapper(default_extractors, func_name, self.__call__.__wrapped__)
    + + +
    +[docs] + def _uninstrument(self, **kwargs): + for func_name in default_extractors.__all__: + unwrap(default_extractors, func_name)
    + + +
    +[docs] + def _configure_providers(self, logger_provider, tracer_provider, meter_provider): + self._logger_provider = logger_provider or get_logger_provider() + self._tracer_provider = tracer_provider or get_tracer_provider() + self._meter_provider = meter_provider or get_meter_provider() + self._logger = get_logger(__name__, None, self._logger_provider) + self._tracer = get_tracer(__name__, None, self._tracer_provider) + self._meter = get_meter(__name__, None, self._meter_provider)
    + + + @decorator + async def __call__(self, wrapped, _, args, kwargs): + """ + Regular functions that match the :py:class:`~dff.pipeline.types.ExtraHandlerFunction` + signature can be decorated with the class instance to log the returned value. + This method implements the logging procedure. + The returned value is assumed to be `dict` or `NoneType`. + Logging non-atomic values is discouraged, as they cannot be translated using + the `Protobuf` protocol. + Logging is ignored if the application is in 'uninstrumented' state. + + :param wrapped: Function to decorate. + :param args: Positional arguments of the decorated function. + :param kwargs: Keyword arguments of the decorated function. + """ + ctx, _, info = args + pipeline_component = get_wrapper_field(info) + attributes = { + "context_id": str(ctx.id), + "request_id": get_last_index(ctx.requests), + "pipeline_component": pipeline_component, + } + + result: Optional[dict] + if asyncio.iscoroutinefunction(wrapped): + result = await wrapped(ctx, _, info) + else: + result = wrapped(ctx, _, info) + + if result is None or not self.is_instrumented_by_opentelemetry: + # self.is_instrumented_by_opentelemetry allows to disable + # the decorator programmatically if + # instrumentation is disabled. + return result + + span: Span + with self._tracer.start_as_current_span(wrapped.__name__, kind=SpanKind.INTERNAL) as span: + span_ctx = span.get_span_context() + record = LogRecord( + span_id=span_ctx.span_id, + trace_id=span_ctx.trace_id, + body=result, + trace_flags=span_ctx.trace_flags, + severity_text=None, + severity_number=SeverityNumber(1), + resource=resource, + attributes=attributes, + ) + self._logger.emit(record=record) + return result
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/stats/utils.html b/_modules/dff/stats/utils.html new file mode 100644 index 0000000000..0359e15321 --- /dev/null +++ b/_modules/dff/stats/utils.html @@ -0,0 +1,803 @@ + + + + + + + + + + dff.stats.utils — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.stats.utils

    +"""
    +Utils
    +-----
    +This module includes utility functions designed for statistics collection.
    +
    +The functions below can be used to configure the opentelemetry destination.
    +
    +.. code:: python
    +
    +    set_logger_destination(OTLPLogExporter("grpc://localhost:4317", insecure=True))
    +    set_tracer_destination(OTLPSpanExporter("grpc://localhost:4317", insecure=True))
    +
    +"""
    +import json
    +import getpass
    +from urllib import parse
    +from typing import Optional, Tuple
    +from argparse import Namespace, Action
    +
    +import requests
    +from opentelemetry.sdk.resources import Resource
    +from opentelemetry._logs import get_logger_provider, set_logger_provider
    +from opentelemetry.trace import get_tracer_provider, set_tracer_provider
    +from opentelemetry.metrics import get_meter_provider, set_meter_provider
    +from opentelemetry.sdk.trace import TracerProvider
    +from opentelemetry.sdk._logs import LoggerProvider
    +from opentelemetry.sdk.metrics import MeterProvider
    +from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
    +from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
    +from opentelemetry.sdk.trace.export import BatchSpanProcessor
    +from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter, SpanExporter
    +from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter, LogExporter
    +from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter, MetricExporter
    +
    +from dff.pipeline import ExtraHandlerRuntimeInfo
    +
    +SERVICE_NAME = "dialog_flow_framework"
    +
    +resource = Resource.create({"service.name": SERVICE_NAME})
    +"""
    +Singletone :py:class:`~Resource` instance shared inside the framework.
    +"""
    +tracer_provider = TracerProvider(resource=resource)
    +"""
    +Global tracer provider bound to the DFF resource.
    +"""
    +logger_provider = LoggerProvider(resource=resource)
    +"""
    +Global logger provider bound to the DFF resource.
    +"""
    +set_logger_provider(logger_provider)
    +set_tracer_provider(tracer_provider)
    +
    +
    +
    +[docs] +def set_logger_destination(exporter: Optional[LogExporter] = None): + """ + Configure the global Opentelemetry logger provider to export logs to the given destination. + + :param exporter: Opentelemetry log exporter instance. + """ + if exporter is None: + exporter = OTLPLogExporter(endpoint="grpc://localhost:4317", insecure=True) + get_logger_provider().add_log_record_processor(BatchLogRecordProcessor(exporter))
    + + + +
    +[docs] +def set_meter_destination(exporter: Optional[MetricExporter] = None): + """ + Configure the global Opentelemetry meter provider to export metrics to the given destination. + + :param exporter: Opentelemetry meter exporter instance. + """ + if exporter is None: + exporter = OTLPMetricExporter(endpoint="grpc://localhost:4317", insecure=True) + cur_meter_provider = get_meter_provider() + new_meter_provider = MeterProvider(resource=resource, metric_readers=[PeriodicExportingMetricReader(exporter)]) + if not isinstance(cur_meter_provider, MeterProvider): + set_meter_provider(new_meter_provider)
    + + + +
    +[docs] +def set_tracer_destination(exporter: Optional[SpanExporter] = None): + """ + Configure the global Opentelemetry tracer provider to export traces to the given destination. + + :param exporter: Opentelemetry span exporter instance. + """ + if exporter is None: + exporter = OTLPSpanExporter(endpoint="grpc://localhost:4317", insecure=True) + get_tracer_provider().add_span_processor(BatchSpanProcessor(exporter))
    + + + +
    +[docs] +def get_wrapper_field(info: ExtraHandlerRuntimeInfo, postfix: str = "") -> str: + """ + This function can be used to obtain a key, under which the wrapper data will be stored + in the context. + + :param info: Handler runtime info obtained from the pipeline. + :param postfix: Field-specific postfix that will be appended to the field name. + """ + path = info.component.path.replace(".", "-") + return f"{path}" + (f"-{postfix}" if postfix else "")
    + + + +
    +[docs] +def get_superset_session(args: Namespace, base_url: str = "http://localhost:8088/") -> Tuple[requests.Session, dict]: + """ + Utility function for authorized interaction with Superset HTTP API. + + :param args: Command line arguments including Superset username and Superset password. + :param base_url: Base Superset URL. + + :return: Authorized session - authorization headers tuple. + """ + healthcheck_url = parse.urljoin(base_url, "/healthcheck") + login_url = parse.urljoin(base_url, "/api/v1/security/login") + csrf_url = parse.urljoin(base_url, "/api/v1/security/csrf_token/") + + session = requests.Session() + # do healthcheck + response = session.get(healthcheck_url, timeout=10) + response.raise_for_status() + # get access token + access_request = session.post( + login_url, + headers={"Content-Type": "application/json", "Accept": "*/*"}, + data=json.dumps({"username": args.username, "password": args.password, "refresh": True, "provider": "db"}), + ) + access_token = access_request.json()["access_token"] + # get csrf_token + csrf_request = session.get(csrf_url, headers={"Authorization": f"Bearer {access_token}"}) + csrf_token = csrf_request.json()["result"] + headers = { + "Authorization": f"Bearer {access_token}", + "X-CSRFToken": csrf_token, + } + return session, headers
    + + + +
    +[docs] +def drop_superset_assets(session: requests.Session, headers: dict, base_url: str): + """ + Drop the existing assets from the Superset dashboard. + + :param session: Authorized Superset session. + :param headers: Superset session headers. + :param base_url: Base Superset URL. + """ + dashboard_url = parse.urljoin(base_url, "/api/v1/dashboard") + charts_url = parse.urljoin(base_url, "/api/v1/chart") + datasets_url = parse.urljoin(base_url, "/api/v1/dataset") + database_url = parse.urljoin(base_url, "/api/v1/database/") + delete_res: requests.Response + + dashboard_res = session.get(dashboard_url, headers=headers) + dashboard_json = dashboard_res.json() + if dashboard_json["count"] > 0: + delete_res = requests.delete(dashboard_url, params={"q": json.dumps(dashboard_json["ids"])}, headers=headers) + delete_res.raise_for_status() + + charts_result = session.get(charts_url, headers=headers) + charts_json = charts_result.json() + if charts_json["count"] > 0: + delete_res = requests.delete(charts_url, params={"q": json.dumps(charts_json["ids"])}, headers=headers) + delete_res.raise_for_status() + + datasets_result = session.get(datasets_url, headers=headers) + datasets_json = datasets_result.json() + if datasets_json["count"] > 0: + delete_res = requests.delete(datasets_url, params={"q": json.dumps(datasets_json["ids"])}, headers=headers) + delete_res.raise_for_status() + + database_res = session.get(database_url, headers=headers) + database_json = database_res.json() + if database_json["count"] > 0: + delete_res = requests.delete(database_url + str(database_json["ids"][-1]), headers=headers) + delete_res.raise_for_status()
    + + + +
    +[docs] +class PasswordAction(Action): + """ + Child class for Argparse's :py:class:`~Action` that prompts users for passwords interactively, + ensuring password safety, unless the password is specified directly. + + """ + + def __init__( + self, option_strings, dest=None, nargs=0, default=None, required=False, type=None, metavar=None, help=None + ): + super().__init__( + option_strings=option_strings, + dest=dest, + nargs=nargs, + default=default, + required=required, + metavar=metavar, + type=type, + help=help, + ) + + def __call__(self, parser, args, values, option_string=None): + if values: + print(f"{self.dest}: setting passwords explicitly through the command line is discouraged.") + setattr(args, self.dest, values) + else: + setattr(args, self.dest, getpass.getpass(prompt=f"{self.dest}: "))
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/db_benchmark/basic_config.html b/_modules/dff/utils/db_benchmark/basic_config.html new file mode 100644 index 0000000000..5584c4bbfa --- /dev/null +++ b/_modules/dff/utils/db_benchmark/basic_config.html @@ -0,0 +1,819 @@ + + + + + + + + + + dff.utils.db_benchmark.basic_config — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.db_benchmark.basic_config

    +"""
    +Basic Config
    +------------
    +This module contains basic benchmark configurations.
    +
    +It defines a simple configurations class (:py:class:`~.BasicBenchmarkConfig`)
    +as well as a set of configurations that covers different dialogs a user might have and some edge-cases
    +(:py:data:`~.basic_configurations`).
    +"""
    +from typing import Tuple, Optional
    +import string
    +import random
    +
    +from humanize import naturalsize
    +from pympler import asizeof
    +
    +from dff.script import Message, Context
    +from dff.utils.db_benchmark.benchmark import BenchmarkConfig
    +
    +
    +
    +[docs] +def get_dict(dimensions: Tuple[int, ...]): + """ + Return misc dictionary build in `dimensions` dimensions. + + :param dimensions: + Dimensions of the dictionary. + Each element of the dimensions tuple is the number of keys on the corresponding level of the dictionary. + The last element of the dimensions tuple is the length of the string values of the dict. + + e.g. dimensions=(1, 2) returns a dictionary with 1 key that points to a string of len 2. + whereas dimensions=(1, 2, 3) returns a dictionary with 1 key that points to a dictionary + with 2 keys each of which points to a string of len 3. + + So, the len of dimensions is the depth of the dictionary, while its values are + the width of the dictionary at each level. + """ + + def _get_dict(dimensions: Tuple[int, ...]): + if len(dimensions) < 2: + # get a random string of length dimensions[0] + return "".join(random.choice(string.printable) for _ in range(dimensions[0])) + return {str(i): _get_dict(dimensions[1:]) for i in range(dimensions[0])} + + if len(dimensions) > 1: + return _get_dict(dimensions) + elif len(dimensions) == 1: + return _get_dict((dimensions[0], 0)) + else: + return _get_dict((0, 0))
    + + + +
    +[docs] +def get_message(message_dimensions: Tuple[int, ...]): + """ + Return message with a non-empty misc field. + + :param message_dimensions: Dimensions of the misc field of the message. See :py:func:`~.get_dict`. + """ + return Message(misc=get_dict(message_dimensions))
    + + + +
    +[docs] +def get_context( + dialog_len: int, + message_dimensions: Tuple[int, ...], + misc_dimensions: Tuple[int, ...], +) -> Context: + """ + Return context with a non-empty misc, labels, requests, responses fields. + + :param dialog_len: Number of labels, requests and responses. + :param message_dimensions: + A parameter used to generate messages for requests and responses. See :py:func:`~.get_message`. + :param misc_dimensions: + A parameter used to generate misc field. See :py:func:`~.get_dict`. + """ + return Context( + labels={i: (f"flow_{i}", f"node_{i}") for i in range(dialog_len)}, + requests={i: get_message(message_dimensions) for i in range(dialog_len)}, + responses={i: get_message(message_dimensions) for i in range(dialog_len)}, + misc=get_dict(misc_dimensions), + )
    + + + +
    +[docs] +class BasicBenchmarkConfig(BenchmarkConfig, frozen=True): + """ + A simple benchmark configuration that generates contexts using two parameters: + + - `message_dimensions` -- to configure the way messages are generated. + - `misc_dimensions` -- to configure size of context's misc field. + + Dialog length is configured using `from_dialog_len`, `to_dialog_len`, `step_dialog_len`. + """ + + context_num: int = 30 + """ + Number of times the contexts will be benchmarked. + Increasing this number decreases standard error of the mean for benchmarked data. + """ + from_dialog_len: int = 300 + """Starting dialog len of a context.""" + to_dialog_len: int = 311 + """ + Final dialog len of a context. + :py:meth:`~.BasicBenchmarkConfig.context_updater` will return contexts + until their dialog len is less then `to_dialog_len`. + """ + step_dialog_len: int = 1 + """ + Increment step for dialog len. + :py:meth:`~.BasicBenchmarkConfig.context_updater` will return contexts + increasing dialog len by `step_dialog_len`. + """ + message_dimensions: Tuple[int, ...] = (10, 10) + """ + Dimensions of misc dictionaries inside messages. + See :py:func:`~.get_message`. + """ + misc_dimensions: Tuple[int, ...] = (10, 10) + """ + Dimensions of misc dictionary. + See :py:func:`~.get_dict`. + """ + +
    +[docs] + def get_context(self) -> Context: + """ + Return context with `from_dialog_len`, `message_dimensions`, `misc_dimensions`. + + Wraps :py:func:`~.get_context`. + """ + return get_context(self.from_dialog_len, self.message_dimensions, self.misc_dimensions)
    + + +
    +[docs] + def info(self): + """ + Return fields of this instance and sizes of objects defined by this config. + + :return: + A dictionary with two keys. + Key "params" stores fields of this configuration. + Key "sizes" stores string representation of following values: + + - "starting_context_size" -- size of a context with `from_dialog_len`. + - "final_context_size" -- size of a context with `to_dialog_len`. + A context of this size will never actually be benchmarked. + - "misc_size" -- size of a misc field of a context. + - "message_size" -- size of a misc field of a message. + """ + return { + "params": self.model_dump(), + "sizes": { + "starting_context_size": naturalsize(asizeof.asizeof(self.get_context()), gnu=True), + "final_context_size": naturalsize( + asizeof.asizeof(get_context(self.to_dialog_len, self.message_dimensions, self.misc_dimensions)), + gnu=True, + ), + "misc_size": naturalsize(asizeof.asizeof(get_dict(self.misc_dimensions)), gnu=True), + "message_size": naturalsize(asizeof.asizeof(get_message(self.message_dimensions)), gnu=True), + }, + }
    + + +
    +[docs] + def context_updater(self, context: Context) -> Optional[Context]: + """ + Update context to have `step_dialog_len` more labels, requests and responses, + unless such dialog len would be equal to `to_dialog_len` or exceed than it, + in which case None is returned. + """ + start_len = len(context.labels) + if start_len + self.step_dialog_len < self.to_dialog_len: + for i in range(start_len, start_len + self.step_dialog_len): + context.add_label((f"flow_{i}", f"node_{i}")) + context.add_request(get_message(self.message_dimensions)) + context.add_response(get_message(self.message_dimensions)) + return context + else: + return None
    +
    + + + +basic_configurations = { + "large-misc": BasicBenchmarkConfig( + from_dialog_len=1, + to_dialog_len=50, + message_dimensions=(3, 5, 6, 5, 3), + misc_dimensions=(2, 4, 3, 8, 100), + ), + "short-messages": BasicBenchmarkConfig( + from_dialog_len=500, + to_dialog_len=550, + message_dimensions=(2, 30), + misc_dimensions=(0, 0), + ), + "default": BasicBenchmarkConfig(), + "large-misc--long-dialog": BasicBenchmarkConfig( + from_dialog_len=500, + to_dialog_len=550, + message_dimensions=(3, 5, 6, 5, 3), + misc_dimensions=(2, 4, 3, 8, 100), + ), + "very-long-dialog-len": BasicBenchmarkConfig( + context_num=10, + from_dialog_len=10000, + to_dialog_len=10050, + ), + "very-long-message-len": BasicBenchmarkConfig( + context_num=10, + from_dialog_len=1, + to_dialog_len=3, + message_dimensions=(10000, 1), + ), + "very-long-misc-len": BasicBenchmarkConfig( + context_num=10, + from_dialog_len=1, + to_dialog_len=3, + misc_dimensions=(10000, 1), + ), +} +""" +Configuration that covers many dialog cases (as well as some edge-cases). + +:meta hide-value: +""" +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/db_benchmark/benchmark.html b/_modules/dff/utils/db_benchmark/benchmark.html new file mode 100644 index 0000000000..bec71224c6 --- /dev/null +++ b/_modules/dff/utils/db_benchmark/benchmark.html @@ -0,0 +1,1034 @@ + + + + + + + + + + dff.utils.db_benchmark.benchmark — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.db_benchmark.benchmark

    +"""
    +Context storage benchmarking
    +----------------------------
    +This module contains functions for context storages benchmarking.
    +
    +The basic function is :py:func:`~.time_context_read_write` but it has a low level interface.
    +
    +Higher level wrappers of the function provided by this module are:
    +
    +- :py:func:`~.save_results_to_file` -- saves results for a list of benchmark cases.
    +- :py:func:`~.benchmark_all` -- a wrapper of `save_results_to_file`. Creates cases from configs.
    +
    +Wrappers use :py:class:`~.BenchmarkConfig` interface to configure benchmarks.
    +A simple configuration class as well as a configuration set are provided by
    +:py:mod:`dff.utils.db_benchmark.basic_config`.
    +
    +To view files generated by :py:func:`~.save_results_to_file` use either
    +:py:func:`~dff.utils.db_benchmark.report.report` or
    +`our streamlit app <../_misc/benchmark_streamlit.py>`_.
    +"""
    +from uuid import uuid4
    +from pathlib import Path
    +from time import perf_counter
    +from typing import Tuple, List, Dict, Union, Optional, Callable, Any
    +import json
    +import importlib
    +from statistics import mean
    +import abc
    +from traceback import extract_tb, StackSummary
    +
    +from pydantic import BaseModel, Field
    +from tqdm.auto import tqdm
    +
    +from dff.context_storages import DBContextStorage
    +from dff.script import Context
    +
    +
    +
    +[docs] +def time_context_read_write( + context_storage: DBContextStorage, + context_factory: Callable[[], Context], + context_num: int, + context_updater: Optional[Callable[[Context], Optional[Context]]] = None, +) -> Tuple[List[float], List[Dict[int, float]], List[Dict[int, float]]]: + """ + Benchmark `context_storage` by writing and reading `context`\\s generated by `context_factory` + into it / from it `context_num` times. + If `context_updater` is not `None` it is used to update `context`\\s and benchmark update operation. + + This function clears `context_storage` before and after execution. + + :param context_storage: Context storage to benchmark. + :param context_factory: A function that creates contexts which will be written into context storage. + :param context_num: A number of times the context will be written and read. + :param context_updater: + None or a function. + If not None, function should accept :py:class:`~.Context` and return an updated :py:class:`~.Context`. + The updated context can be either the same object (at the same pointer) or a different object (e.g. copied). + The updated context should have a higher dialog length than the received context + (to emulate context updating during dialog). + The function should return `None` to stop updating contexts. + For an example of such function, see implementation of + :py:meth:`dff.utils.db_benchmark.basic_config.BasicBenchmarkConfig.context_updater`. + + To avoid keeping many contexts in memory, + this function will be called repeatedly at least `context_num` times. + :return: + A tuple of 3 elements. + + The first element -- a list of write times. Its length is equal to `context_num`. + + The second element -- a list of dictionaries with read times. + Each dictionary maps from int to float. The key in the mapping is the `dialog_len` of the context and the + values are the read times for the corresponding `dialog_len`. + If `context_updater` is None, all dictionaries will have only one key -- + dialog length of the context returned by `context_factory`. + Otherwise, the dictionaries will also have a key for each updated context. + + The third element -- a list of dictionaries with update times. + Structurally the same as the second element, but none of the elements here have a key for + dialog_len of the context returned by `context_factory`. + So if `context_updater` is None, all dictionaries will be empty. + """ + context_storage.clear() + + write_times: List[float] = [] + read_times: List[Dict[int, float]] = [] + update_times: List[Dict[int, float]] = [] + + for _ in tqdm(range(context_num), desc=f"Benchmarking context storage:{context_storage.full_path}", leave=False): + context = context_factory() + + ctx_id = uuid4() + + # write operation benchmark + write_start = perf_counter() + context_storage[ctx_id] = context + write_times.append(perf_counter() - write_start) + + read_times.append({}) + update_times.append({}) + + # read operation benchmark + read_start = perf_counter() + _ = context_storage[ctx_id] + read_time = perf_counter() - read_start + read_times[-1][len(context.labels)] = read_time + + if context_updater is not None: + updated_context = context_updater(context) + + while updated_context is not None: + update_start = perf_counter() + context_storage[ctx_id] = updated_context + update_time = perf_counter() - update_start + update_times[-1][len(updated_context.labels)] = update_time + + read_start = perf_counter() + _ = context_storage[ctx_id] + read_time = perf_counter() - read_start + read_times[-1][len(updated_context.labels)] = read_time + + updated_context = context_updater(updated_context) + + context_storage.clear() + return write_times, read_times, update_times
    + + + +
    +[docs] +class DBFactory(BaseModel): + """ + A class for storing information about context storage to benchmark. + Also used to create a context storage from the configuration. + """ + + uri: str + """URI of the context storage.""" + factory_module: str = "dff.context_storages" + """A module containing `factory`.""" + factory: str = "context_storage_factory" + """Name of the context storage factory. (function that creates context storages from URIs)""" + +
    +[docs] + def db(self): + """ + Create a context storage using `factory` from `uri`. + """ + module = importlib.import_module(self.factory_module) + return getattr(module, self.factory)(self.uri)
    +
    + + + +
    +[docs] +class BenchmarkConfig(BaseModel, abc.ABC, frozen=True): + """ + Configuration for a benchmark. + + Defines methods and parameters required to run :py:func:`~.time_context_read_write`. + Also defines a method (`info`) for displaying information about this configuration. + + A simple way to configure benchmarks is provided by + :py:class:`~.dff.utils.db_benchmark.basic_config.BasicBenchmarkConfig`. + + Inherit from this class only if `BasicBenchmarkConfig` is not enough for your benchmarking needs. + """ + + context_num: int = 30 + """ + Number of times the contexts will be benchmarked. + Increasing this number decreases standard error of the mean for benchmarked data. + """ + +
    +[docs] + @abc.abstractmethod + def get_context(self) -> Context: + """ + Return context to benchmark read and write operations with. + + This function will be called `context_num` times. + """ + ...
    + + +
    +[docs] + @abc.abstractmethod + def info(self) -> Dict[str, Any]: + """ + Return a dictionary with information about this configuration. + """ + ...
    + + +
    +[docs] + @abc.abstractmethod + def context_updater(self, context: Context) -> Optional[Context]: + """ + Update context with new dialog turns or return `None` to stop updates. + + This function is used to benchmark update and read operations. + + This function will be called AT LEAST `context_num` times. + + :return: Updated context or `None` to stop updating context. + """ + ...
    +
    + + + +
    +[docs] +class BenchmarkCase(BaseModel): + """ + This class represents a benchmark case and includes + information about it, its configuration and configuration of a context storage to benchmark. + """ + + name: str + """Name of a benchmark case.""" + db_factory: DBFactory + """DBFactory that specifies context storage to benchmark.""" + benchmark_config: BenchmarkConfig + """Benchmark configuration.""" + uuid: str = Field(default_factory=lambda: str(uuid4())) + """Unique id of the case. Defaults to a random uuid.""" + description: str = "" + """Description of the case. Defaults to an empty string.""" + +
    +[docs] + @staticmethod + def set_average_results(benchmark): + """ + Modify `benchmark` dictionary to include averaged benchmark results. + + Add field "average_results" to the benchmark that contains the following fields: + + - average_write_time + - average_read_time + - average_update_time + - read_times_grouped_by_context_num -- a list of read times. + Each element is the average of read times with the same context_num. + - read_times_grouped_by_dialog_len -- a dictionary of read times. + Its values are the averages of read times with the same dialog_len, + its keys are dialog_len values. + - update_times_grouped_by_context_num + - update_times_grouped_by_dialog_len + - pretty_write -- average write time with only 3 significant digits. + - pretty_read + - pretty_update + - pretty_read+update -- sum of average read and update times with only 3 significant digits. + + :param benchmark: + A dictionary returned by `BenchmarkCase._run`. + Should include a "success" and "result" fields. + "success" field should be true. + "result" field should be a dictionary with the values returned by + :py:func:`~.time_context_read_write` and keys + "write_times", "read_times" and "update_times". + :return: None + """ + if not benchmark["success"] or isinstance(benchmark["result"], str): + return + + def get_complex_stats(results): + if len(results) == 0 or len(results[0]) == 0: + return [], {}, None + + average_grouped_by_context_num = [mean(times.values()) for times in results] + average_grouped_by_dialog_len = {key: mean([times[key] for times in results]) for key in results[0].keys()} + average = float(mean(average_grouped_by_context_num)) + return average_grouped_by_context_num, average_grouped_by_dialog_len, average + + read_stats = get_complex_stats(benchmark["result"]["read_times"]) + update_stats = get_complex_stats(benchmark["result"]["update_times"]) + + result = { + "average_write_time": mean(benchmark["result"]["write_times"]), + "average_read_time": read_stats[2], + "average_update_time": update_stats[2], + "read_times_grouped_by_context_num": read_stats[0], + "read_times_grouped_by_dialog_len": read_stats[1], + "update_times_grouped_by_context_num": update_stats[0], + "update_times_grouped_by_dialog_len": update_stats[1], + } + result["pretty_write"] = ( + float(f'{result["average_write_time"]:.3}') if result["average_write_time"] is not None else None + ) + result["pretty_read"] = ( + float(f'{result["average_read_time"]:.3}') if result["average_read_time"] is not None else None + ) + result["pretty_update"] = ( + float(f'{result["average_update_time"]:.3}') if result["average_update_time"] is not None else None + ) + result["pretty_read+update"] = ( + float(f'{result["average_read_time"] + result["average_update_time"]:.3}') + if result["average_read_time"] is not None and result["average_update_time"] is not None + else None + ) + + benchmark["average_results"] = result
    + + +
    +[docs] + def _run(self): + try: + write_times, read_times, update_times = time_context_read_write( + self.db_factory.db(), + self.benchmark_config.get_context, + self.benchmark_config.context_num, + self.benchmark_config.context_updater, + ) + return { + "success": True, + "result": { + "write_times": write_times, + "read_times": read_times, + "update_times": update_times, + }, + } + except Exception as e: + return { + "success": False, + "result": { + "type": e.__class__.__name__, + "msg": getattr(e, "message", str(e)), + "traceback": "\n".join(StackSummary.from_list(extract_tb(e.__traceback__)).format()), + }, + }
    + + +
    +[docs] + def run(self): + """ + Run benchmark, return results. + + :return: + A dictionary with 3 keys: "success", "result", "average_results". + + Success is a bool value. It is false if an exception was raised during benchmarking. + + Result is either an exception message or a dictionary with 3 keys + ("write_times", "read_times", "update_times"). + Values of those fields are the values returned by :py:func:`~.time_context_read_write`. + + Average results field is as described in :py:meth:`~.BenchmarkCase.set_average_results`. + """ + benchmark = self._run() + BenchmarkCase.set_average_results(benchmark) + return benchmark
    +
    + + + +
    +[docs] +def save_results_to_file( + benchmark_cases: List[BenchmarkCase], + file: Union[str, Path], + name: str, + description: str, + exist_ok: bool = False, +): + """ + Benchmark all `benchmark_cases` and save results to a file. + + Result are saved in json format with this schema: + `utils/db_benchmark/benchmark_schema.json <../_misc/benchmark_schema.json>`_. + + Files created by this function cen be viewed either by using :py:func:`~dff.utils.db_benchmark.report.report` or + streamlit app located in the utils directory: + `utils/db_benchmark/benchmark_streamlit.py <../_misc/benchmark_streamlit.py>`_. + + :param benchmark_cases: A list of benchmark cases that specify benchmarks. + :param file: File to save results to. + :param name: Name of the benchmark set. + :param description: Description of the benchmark set. + :param exist_ok: Whether to continue if the file already exists. + """ + with open(file, "w" if exist_ok else "x", encoding="utf-8") as fd: + uuid = str(uuid4()) + result: Dict[str, Any] = { + "name": name, + "description": description, + "uuid": uuid, + "benchmarks": [], + } + cases = tqdm(benchmark_cases, leave=False) + case: BenchmarkCase + for case in cases: + cases.set_description(f"Benchmarking: {case.name}") + result["benchmarks"].append( + { + **case.model_dump(exclude={"benchmark_config"}), + "benchmark_config": case.benchmark_config.info(), + **case.run(), + } + ) + + json.dump(result, fd)
    + + + +
    +[docs] +def benchmark_all( + file: Union[str, Path], + name: str, + description: str, + db_uri: str, + benchmark_configs: Dict[str, BenchmarkConfig], + exist_ok: bool = False, +): + """ + A wrapper for :py:func:`~.save_results_to_file`. + + Generates `benchmark_cases` from `db_uri` and `benchmark_configs`: + `db_uri` is used to initialize :py:class:`~.DBFactory` instance + which is then used along with `benchmark_configs` to initialize :py:class:`~.BenchmarkCase` instances. + + :param file: File to save results to. + :param name: Name of the benchmark set. + :param description: Description of the benchmark set. The same description is used for benchmark cases. + :param db_uri: URI of the database to benchmark + :param benchmark_configs: Mapping from case names to configs. + :param exist_ok: Whether to continue if the file already exists. + """ + save_results_to_file( + [ + BenchmarkCase( + name=case_name, + description=description, + db_factory=DBFactory(uri=db_uri), + benchmark_config=benchmark_config, + ) + for case_name, benchmark_config in benchmark_configs.items() + ], + file, + name, + description, + exist_ok=exist_ok, + )
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/db_benchmark/report.html b/_modules/dff/utils/db_benchmark/report.html new file mode 100644 index 0000000000..d5517b4169 --- /dev/null +++ b/_modules/dff/utils/db_benchmark/report.html @@ -0,0 +1,646 @@ + + + + + + + + + + dff.utils.db_benchmark.report — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.db_benchmark.report

    +"""
    +Report
    +--------
    +This method contains a function to print benchmark results to console.
    +"""
    +from pathlib import Path
    +from typing import Union, Set, Literal
    +import json
    +
    +
    +
    +[docs] +def report( + file: Union[str, Path], + display: Set[Literal["name", "desc", "config", "metrics"]] = set({"name", "metrics"}), +): + """ + Print average results from a result file to stdout. + + Printed stats contain benchmark configs, object sizes, average benchmark values for successful cases and + exception message for unsuccessful cases. + + :param file: + File with benchmark results generated by + :py:func:`~dff.utils.db_benchmark.benchmark.save_results_to_file`. + :param display: + A set of objects to display in results. + Values allowed inside the set: + + - "name" -- displays the name of the benchmark case. + - "desc" -- displays the description of the benchmark case. + - "config" -- displays the config info of the benchmark case. + - "metrics" -- displays average write, read, update read+update times. + """ + with open(file, "r", encoding="utf-8") as fd: + file_contents = json.load(fd) + + sep = "-" * 80 + + report_result = "\n".join([sep, file_contents["name"], sep, file_contents["description"], sep, ""]) + + for benchmark in file_contents["benchmarks"]: + reported_values = { + "name": benchmark["name"], + "desc": benchmark["description"], + "config": "\n".join(f"{k}: {v}" for k, v in benchmark["benchmark_config"].items()), + "metrics": "".join( + [ + f"{metric.title() + ': ' + str(benchmark['average_results']['pretty_' + metric]):20}" + if benchmark["success"] + else benchmark["result"] + for metric in ("write", "read", "update", "read+update") + ] + ), + } + + result = [] + for value_name, value in reported_values.items(): + if value_name in display: + result.append(value) + result.append("") + + report_result += f"\n{sep}\n".join(result) + + print(report_result, end="")
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/testing/cleanup_db.html b/_modules/dff/utils/testing/cleanup_db.html new file mode 100644 index 0000000000..1c8b49ecfa --- /dev/null +++ b/_modules/dff/utils/testing/cleanup_db.html @@ -0,0 +1,713 @@ + + + + + + + + + + dff.utils.testing.cleanup_db — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.testing.cleanup_db

    +"""
    +Cleanup DB
    +----------
    +This module defines functions that allow to delete data in various types of databases,
    +including JSON, MongoDB, Pickle, Redis, Shelve, SQL, and YDB databases.
    +"""
    +import os
    +
    +from dff.context_storages import (
    +    JSONContextStorage,
    +    MongoContextStorage,
    +    PickleContextStorage,
    +    RedisContextStorage,
    +    ShelveContextStorage,
    +    SQLContextStorage,
    +    YDBContextStorage,
    +    json_available,
    +    mongo_available,
    +    pickle_available,
    +    redis_available,
    +    sqlite_available,
    +    postgres_available,
    +    mysql_available,
    +    ydb_available,
    +)
    +
    +
    +
    +[docs] +async def delete_json(storage: JSONContextStorage): + """ + Delete all data from a JSON context storage. + + :param storage: A JSONContextStorage object. + """ + if not json_available: + raise Exception("Can't delete JSON database - JSON provider unavailable!") + if os.path.isfile(storage.path): + os.remove(storage.path)
    + + + +
    +[docs] +async def delete_mongo(storage: MongoContextStorage): + """ + Delete all data from a MongoDB context storage. + + :param storage: A MongoContextStorage object + """ + if not mongo_available: + raise Exception("Can't delete mongo database - mongo provider unavailable!") + await storage.collection.drop()
    + + + +
    +[docs] +async def delete_pickle(storage: PickleContextStorage): + """ + Delete all data from a Pickle context storage. + + :param storage: A PickleContextStorage object. + """ + if not pickle_available: + raise Exception("Can't delete pickle database - pickle provider unavailable!") + if os.path.isfile(storage.path): + os.remove(storage.path)
    + + + +
    +[docs] +async def delete_redis(storage: RedisContextStorage): + """ + Delete all data from a Redis context storage. + + :param storage: A RedisContextStorage object. + """ + if not redis_available: + raise Exception("Can't delete redis database - redis provider unavailable!") + await storage.clear_async()
    + + + +
    +[docs] +async def delete_shelve(storage: ShelveContextStorage): + """ + Delete all data from a Shelve context storage. + + :param storage: A ShelveContextStorage object. + """ + if os.path.isfile(storage.path): + os.remove(storage.path)
    + + + +
    +[docs] +async def delete_sql(storage: SQLContextStorage): + """ + Delete all data from an SQL context storage. + + :param storage: An SQLContextStorage object. + """ + if storage.dialect == "postgres" and not postgres_available: + raise Exception("Can't delete postgres database - postgres provider unavailable!") + if storage.dialect == "sqlite" and not sqlite_available: + raise Exception("Can't delete sqlite database - sqlite provider unavailable!") + if storage.dialect == "mysql" and not mysql_available: + raise Exception("Can't delete mysql database - mysql provider unavailable!") + async with storage.engine.connect() as conn: + await conn.run_sync(storage.table.drop, storage.engine)
    + + + +
    +[docs] +async def delete_ydb(storage: YDBContextStorage): + """ + Delete all data from a YDB context storage. + + :param storage: A YDBContextStorage object. + """ + if not ydb_available: + raise Exception("Can't delete ydb database - ydb provider unavailable!") + + async def callee(session): + await session.drop_table("/".join([storage.database, storage.table_name])) + + await storage.pool.retry_operation(callee)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/testing/common.html b/_modules/dff/utils/testing/common.html new file mode 100644 index 0000000000..3922231ae6 --- /dev/null +++ b/_modules/dff/utils/testing/common.html @@ -0,0 +1,674 @@ + + + + + + + + + + dff.utils.testing.common — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.testing.common

    +"""
    +Common
    +------
    +This module contains several functions which are used to run demonstrations in tutorials.
    +"""
    +from os import getenv
    +from typing import Callable, Tuple, Any, Optional
    +from uuid import uuid4
    +
    +from dff.script import Context, Message
    +from dff.pipeline import Pipeline
    +from dff.utils.testing.response_comparers import default_comparer
    +
    +
    +
    +[docs] +def is_interactive_mode() -> bool: # pragma: no cover + """ + Checking whether the tutorial code should be run in interactive mode. + + :return: `True` if it's being executed by Jupyter kernel and DISABLE_INTERACTIVE_MODE env variable isn't set, + `False` otherwise. + """ + + shell = None + try: + from IPython import get_ipython + + shell = get_ipython().__class__.__name__ + finally: + return shell != "ZMQInteractiveShell" and getenv("DISABLE_INTERACTIVE_MODE") is None
    + + + +
    +[docs] +def check_happy_path( + pipeline: Pipeline, + happy_path: Tuple[Tuple[Any, Any], ...], + # This optional argument is used for additional processing of candidate responses and reference responses + response_comparer: Callable[[Any, Any, Context], Optional[str]] = default_comparer, + printout_enable: bool = True, +): + """ + Running tutorial with provided pipeline for provided requests, comparing responses with correct expected responses. + In cases when additional processing of responses is needed (e.g. in case of response being an HTML string), + a special function (response comparer) is used. + + :param pipeline: The Pipeline instance, that will be used for checking. + :param happy_path: A tuple of (request, response) tuples, so-called happy path, + its requests are passed to pipeline and the pipeline responses are compared to its responses. + :param response_comparer: A special comparer function that accepts received response, true response and context; + it returns `None` is two responses are equal and transformed received response if they are different. + :param printout_enable: A flag that enables requests and responses fancy printing (to STDOUT). + """ + + ctx_id = uuid4() # get random ID for current context + for step_id, (request, reference_response) in enumerate(happy_path): + ctx = pipeline(request, ctx_id) + candidate_response = ctx.last_response + if printout_enable: + print(f"(user) >>> {repr(request)}") + print(f" (bot) <<< {repr(candidate_response)}") + parsed_response_with_deviation = response_comparer(candidate_response, reference_response, ctx) + if parsed_response_with_deviation is not None: + raise Exception( + f"\n\npipeline = {pipeline.info_dict}\n\n" + f"ctx = {ctx}\n\n" + f"step_id = {step_id}\n" + f"request = {repr(request)}\n" + f"candidate_response = {repr(parsed_response_with_deviation)}\n" + f"reference_response = {repr(reference_response)}\n" + "candidate_response != reference_response" + )
    + + + +
    +[docs] +def run_interactive_mode(pipeline: Pipeline): # pragma: no cover + """ + Running tutorial with provided pipeline in interactive mode, just like with CLI messenger interface. + The dialog won't be stored anywhere, it will only be outputted to STDOUT. + + :param pipeline: The Pipeline instance, that will be used for running. + """ + + ctx_id = uuid4() # Random UID + print("Start a dialogue with the bot") + while True: + request = input(">>> ") + ctx = pipeline(request=Message(text=request), ctx_id=ctx_id) + print(f"<<< {repr(ctx.last_response)}")
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/testing/response_comparers.html b/_modules/dff/utils/testing/response_comparers.html new file mode 100644 index 0000000000..3a6ac7b210 --- /dev/null +++ b/_modules/dff/utils/testing/response_comparers.html @@ -0,0 +1,603 @@ + + + + + + + + + + dff.utils.testing.response_comparers — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.testing.response_comparers

    +"""
    +Response comparer
    +-----------------
    +This module defines function used to compare two response objects.
    +"""
    +from typing import Any, Optional
    +
    +from dff.script import Context, Message
    +
    +
    +
    +[docs] +def default_comparer(candidate: Message, reference: Message, _: Context) -> Optional[Any]: + """ + The default response comparer. Literally compares two response objects. + + :param candidate: The received (candidate) response. + :param reference: The true (reference) response. + :param _: Current Context (unused). + :return: `None` if two responses are equal or candidate response otherwise. + """ + return None if candidate == reference else candidate
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/testing/telegram.html b/_modules/dff/utils/testing/telegram.html new file mode 100644 index 0000000000..f6ae2449bb --- /dev/null +++ b/_modules/dff/utils/testing/telegram.html @@ -0,0 +1,885 @@ + + + + + + + + + + dff.utils.testing.telegram — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.testing.telegram

    +"""
    +Telegram testing utils
    +----------------------
    +This module defines functions used to test Telegram interface.
    +"""
    +from typing import List, Optional, cast, Tuple
    +from contextlib import asynccontextmanager, nullcontext
    +import logging
    +import asyncio
    +from tempfile import TemporaryDirectory
    +from pathlib import Path
    +from copy import deepcopy
    +
    +from telethon.tl.types import ReplyKeyboardHide
    +from telethon import TelegramClient
    +from telethon.types import User
    +from telethon.custom import Message as TlMessage
    +from telebot import types
    +
    +from dff.pipeline.pipeline.pipeline import Pipeline
    +from dff.script.core.message import Message, Attachments, Attachment, Button, Location
    +from dff.messengers.telegram.interface import PollingTelegramInterface
    +from dff.messengers.telegram.message import TelegramMessage, TelegramUI, RemoveKeyboard, _ClickButton
    +
    +
    +
    +[docs] +def replace_click_button(happy_path): + """ + Replace all _ClickButton instances in `happy_path`. + This allows using :py:func:`~dff.utils.testing.common.check_happy_path` instead of + :py:meth:~dff.utils.testing.telegram.TelegramTesting.check_happy_path`. + + :return: A `happy_path` with all `_ClickButton` replaced with payload values of the buttons. + """ + result = deepcopy(happy_path) + for index in range(len(happy_path)): + user_request = happy_path[index][0] + if not isinstance(user_request, TelegramMessage): + continue + if isinstance(user_request.callback_query, _ClickButton): + callback_query = None + for _, bot_response in reversed(happy_path[:index]): + if isinstance(bot_response, TelegramMessage) and bot_response.ui is not None and callback_query is None: + callback_query = bot_response.ui.buttons[user_request.callback_query.button_index].payload + if callback_query is None: + raise RuntimeError("Bot response with buttons not found.") + result[index][0].callback_query = callback_query + return result
    + + + +
    +[docs] +async def get_bot_user(client: TelegramClient, username: str): + async with client: + return await client.get_entity(username)
    + + + +
    +[docs] +class TelegramTesting: # pragma: no cover + """ + Defines functions for testing. + + :param pipeline: + Pipeline with the telegram messenger interface. + Required for :py:meth:`~dff.utils.testing.telegram.TelegramTesting.send_and_check` and + :py:meth:`~dff.utils.testing.telegram.TelegramTesting.check_happy_path` with `run_bot=True` + :param api_credentials: + Telegram API id and hash. + Obtainable via https://core.telegram.org/api/obtaining_api_id. + :param session_file: + A `telethon` session file. + Obtainable by connecting to :py:class:`telethon.TelegramClient` and entering phone number and code. + :param client: + An alternative to passing `api_credentials` and `session_file`. + :param bot_username: + Either a link to the bot user or its handle. Used to determine whom to talk with as a client. + :param bot: + An alternative to passing `bot_username`. + Result of calling :py:func:`~dff.utils.testing.telegram.get_bot_user` with `bot_username` as parameter. + """ + + def __init__( + self, + pipeline: Pipeline, + api_credentials: Optional[Tuple[int, str]] = None, + session_file: Optional[str] = None, + client: Optional[TelegramClient] = None, + bot_username: Optional[str] = None, + bot: Optional[User] = None, + ): + if client is None: + if api_credentials is None or session_file is None: + raise RuntimeError("Pass either `client` or `api_credentials` and `session_file`.") + client = TelegramClient(session_file, *api_credentials) + self.client = client + """Telegram client (not bot). Needed to verify bot replies.""" + self.pipeline = pipeline + if bot is None: + if bot_username is None: + raise RuntimeError("Pass either `bot_username` or `bot`.") + bot = asyncio.run(get_bot_user(self.client, bot_username)) + self.bot = bot + """Bot user (to know whom to send messages to from client).""" + +
    +[docs] + async def send_message(self, message: TelegramMessage, last_bot_messages: List[TlMessage]): + """ + Send a message from client to bot. + If the message contains `callback_query`, only press the button, ignore other fields. + + :param message: Message to send. + :param last_bot_messages: + The last bot response. Accepts a list because messages with multiple fields are split in telegram. + Can only contain one keyboard in the list. + Used to determine which button to press when message contains + :py:class:`~dff.messengers.telegram.message._ClickButton`. + """ + if message.callback_query is not None: + query = message.callback_query + if not isinstance(query, _ClickButton): + raise RuntimeError(f"Use `_ClickButton` during tests: {query}") + for bot_message in last_bot_messages: + if bot_message.buttons is not None: + await bot_message.click(i=query.button_index) + return None + if message.attachments is None or len(message.attachments.files) == 0: + return await self.client.send_message(self.bot, message.text) + else: + if len(message.attachments.files) == 1: + attachment = message.attachments.files[0] + files = attachment.source + else: + files = [file.source for file in message.attachments.files] + return await self.client.send_file(self.bot, files, caption=message.text)
    + + +
    +[docs] + @staticmethod + async def parse_responses(responses: List[TlMessage], file_download_destination) -> Message: + """ + Convert a list of bot responses into a single message. + This function accepts a list because messages with multiple attachments are split. + + :param responses: A list of bot responses that are considered to be a single message. + :param file_download_destination: A directory to download sent media to. + """ + msg = TelegramMessage() + for response in responses: + if response.text and response.file is None: + if msg.text: + raise RuntimeError(f"Several messages with text:\n{msg.text}\n{response.text}") + msg.text = response.text or msg.text + if response.file is not None: + file = Path(file_download_destination) / (str(response.file.media.id) + response.file.ext) + await response.download_media(file=file) + if msg.attachments is None: + msg.attachments = Attachments() + msg.attachments.files.append( + Attachment(source=file, id=None, title=response.file.title or response.text or None) + ) + if response.buttons is not None: + buttons = [] + for row in response.buttons: + for button in row: + buttons.append( + Button( + source=button.url, + text=button.text, + payload=button.data, + ) + ) + if msg.ui is not None: + raise RuntimeError(f"Several messages with ui:\n{msg.ui}\n{TelegramUI(buttons=buttons)}") + msg.ui = TelegramUI(buttons=buttons) + if isinstance(response.reply_markup, ReplyKeyboardHide): + if msg.ui is not None: + raise RuntimeError(f"Several messages with ui:\n{msg.ui}\n{types.ReplyKeyboardRemove()}") + msg.ui = RemoveKeyboard() + if response.geo is not None: + location = Location(latitude=response.geo.lat, longitude=response.geo.long) + if msg.location is not None: + raise RuntimeError(f"Several messages with location:\n{msg.location}\n{location}") + msg.location = location + return msg
    + + +
    +[docs] + @asynccontextmanager + async def run_bot_loop(self): + """A context manager that returns a function to run one polling loop of a messenger interface.""" + self.pipeline.messenger_interface.timeout = 2 + self.pipeline.messenger_interface.long_polling_timeout = 2 + await self.forget_previous_updates() + + yield lambda: self.pipeline.messenger_interface._polling_loop(self.pipeline._run_pipeline) + + self.pipeline.messenger_interface.forget_processed_updates()
    + + +
    +[docs] + async def send_and_check(self, message: Message, file_download_destination=None): + """ + Send a message from a bot, receive it as client, verify it. + + :param message: Message to send and check. + :param file_download_destination: + Temporary directory (used to download sent files). + Defaults to :py:class:`tempfile.TemporaryDirectory`. + """ + await self.forget_previous_updates() + + async with self.client: + messenger_interface = cast(PollingTelegramInterface, self.pipeline.messenger_interface) + + messages = await self.client.get_messages(self.bot, limit=1) + if len(messages) == 0: + last_message_id = 0 + else: + last_message_id = messages[0].id + + messenger_interface.messenger.send_response((await self.client.get_me(input_peer=True)).user_id, message) + + await asyncio.sleep(3) + bot_messages = [ + x async for x in self.client.iter_messages(self.bot, min_id=last_message_id, from_user=self.bot) + ] # iter_messages is used instead of get_messages because get_messages requires bot min_id and max_id + + if file_download_destination is None: + fd_context = TemporaryDirectory() + else: + fd_context = nullcontext(file_download_destination) + + with fd_context as file_download_destination: + result = await self.parse_responses(bot_messages, file_download_destination) + + assert result == message
    + + +
    +[docs] + async def forget_previous_updates(self): + messenger_interface = cast(PollingTelegramInterface, self.pipeline.messenger_interface) + messenger = messenger_interface.messenger + updates = messenger.get_updates(offset=messenger.last_update_id + 1, timeout=1, long_polling_timeout=1) + max_update_id = max([*map(lambda x: x.update_id, updates), -1]) + messenger.get_updates(offset=max_update_id + 1, timeout=1, long_polling_timeout=1)
    + + +
    +[docs] + async def check_happy_path(self, happy_path, file_download_destination=None, run_bot: bool = True): + """ + Play out a dialogue with the bot. Check that the dialogue is correct. + + :param happy_path: Expected dialogue + :param file_download_destination: Temporary directory (used to download sent files) + :param run_bot: Whether a bot inside pipeline should be running (disable this to test non-async bots) + :return: + """ + if run_bot: + bot = self.run_bot_loop() + else: + + async def null(): + ... + + bot = nullcontext(null) + + if file_download_destination is None: + fd_context = TemporaryDirectory() + else: + fd_context = nullcontext(file_download_destination) + + async with self.client, bot as boot_loop: + with fd_context as file_download_destination: + bot_messages = [] + last_message = None + for request, response in happy_path: + logging.info(f"Sending request {request}") + user_message = await self.send_message(TelegramMessage.model_validate(request), bot_messages) + if user_message is not None: + last_message = user_message + logging.info("Request sent") + await boot_loop() + await asyncio.sleep(2) + logging.info("Extracting responses") + bot_messages = [ + x async for x in self.client.iter_messages(self.bot, min_id=last_message.id, from_user=self.bot) + ] + # iter_messages is used instead of get_messages because get_messages requires bot min_id and max_id + if len(bot_messages) > 0: + last_message = bot_messages[0] + logging.info("Got responses") + result = await self.parse_responses(bot_messages, file_download_destination) + assert result == TelegramMessage.model_validate(response)
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/dff/utils/turn_caching/singleton_turn_caching.html b/_modules/dff/utils/turn_caching/singleton_turn_caching.html new file mode 100644 index 0000000000..246fa5bbd6 --- /dev/null +++ b/_modules/dff/utils/turn_caching/singleton_turn_caching.html @@ -0,0 +1,638 @@ + + + + + + + + + + dff.utils.turn_caching.singleton_turn_caching — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +

    Source code for dff.utils.turn_caching.singleton_turn_caching

    +"""
    +Singleton Turn Caching
    +----------------------
    +This module contains functions for caching function results on each dialog turn.
    +"""
    +import functools
    +from typing import Callable, List, Optional
    +
    +
    +USED_CACHES: List[Callable] = list()
    +"""Cache singleton, it is common for all actors and pipelines in current environment."""
    +
    +
    +
    +[docs] +def cache_clear(): + """ + Function for cache singleton clearing, it is called in the end of pipeline execution turn. + """ + for used_cache in USED_CACHES: + used_cache.cache_clear()
    + + + +
    +[docs] +def lru_cache(maxsize: Optional[int] = None, typed: bool = False) -> Callable: + """ + Decorator function for caching function results in scripts. + Works like the standard :py:func:`~functools.lru_cache` function. + Caches are kept in a library-wide singleton and cleared in the end of each turn. + """ + + def decorator(func): + global USED_CACHES + + @functools.wraps(func) + @functools.lru_cache(maxsize=maxsize, typed=typed) + def wrapper(*args, **kwargs): + return func(*args, **kwargs) + + USED_CACHES += [wrapper] + return wrapper + + return decorator
    + + + +
    +[docs] +def cache(func): + """ + Decorator function for caching function results in scripts. + Works like the standard :py:func:`~functools.cache` function. + Caches are kept in a library-wide singleton and cleared in the end of each turn. + """ + return lru_cache(maxsize=None)(func)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_modules/index.html b/_modules/index.html new file mode 100644 index 0000000000..5618a69874 --- /dev/null +++ b/_modules/index.html @@ -0,0 +1,623 @@ + + + + + + + + + + Overview: module code — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/_sources/about_us.rst.txt b/_sources/about_us.rst.txt new file mode 100644 index 0000000000..4eacd29d12 --- /dev/null +++ b/_sources/about_us.rst.txt @@ -0,0 +1,8 @@ +About us +-------- + +Dialog Flow Framework is developed by the DFF development department of `DeepPavlov `_. + +Founder and leader of the project -- Denis Kuznetsov. + +Developers -- Roman Zlobin, Aleksandr Sergeev, Daniil Ignatiev, Aleksandr Sakharov. \ No newline at end of file diff --git a/_sources/apiref/dff.context_storages.database.rst.txt b/_sources/apiref/dff.context_storages.database.rst.txt new file mode 100644 index 0000000000..d066c5dd6d --- /dev/null +++ b/_sources/apiref/dff.context_storages.database.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/database + +.. automodule:: dff.context_storages.database + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.json.rst.txt b/_sources/apiref/dff.context_storages.json.rst.txt new file mode 100644 index 0000000000..b0503ccfe3 --- /dev/null +++ b/_sources/apiref/dff.context_storages.json.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/json + +.. automodule:: dff.context_storages.json + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.mongo.rst.txt b/_sources/apiref/dff.context_storages.mongo.rst.txt new file mode 100644 index 0000000000..57163c5fc2 --- /dev/null +++ b/_sources/apiref/dff.context_storages.mongo.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/mongo + +.. automodule:: dff.context_storages.mongo + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.pickle.rst.txt b/_sources/apiref/dff.context_storages.pickle.rst.txt new file mode 100644 index 0000000000..b4c3eaf643 --- /dev/null +++ b/_sources/apiref/dff.context_storages.pickle.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/pickle + +.. automodule:: dff.context_storages.pickle + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.protocol.rst.txt b/_sources/apiref/dff.context_storages.protocol.rst.txt new file mode 100644 index 0000000000..4a2d208384 --- /dev/null +++ b/_sources/apiref/dff.context_storages.protocol.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/protocol + +.. automodule:: dff.context_storages.protocol + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.redis.rst.txt b/_sources/apiref/dff.context_storages.redis.rst.txt new file mode 100644 index 0000000000..05aa567cc3 --- /dev/null +++ b/_sources/apiref/dff.context_storages.redis.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/redis + +.. automodule:: dff.context_storages.redis + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.shelve.rst.txt b/_sources/apiref/dff.context_storages.shelve.rst.txt new file mode 100644 index 0000000000..71452671e8 --- /dev/null +++ b/_sources/apiref/dff.context_storages.shelve.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/shelve + +.. automodule:: dff.context_storages.shelve + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.sql.rst.txt b/_sources/apiref/dff.context_storages.sql.rst.txt new file mode 100644 index 0000000000..7f5e0ccecc --- /dev/null +++ b/_sources/apiref/dff.context_storages.sql.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/sql + +.. automodule:: dff.context_storages.sql + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.context_storages.ydb.rst.txt b/_sources/apiref/dff.context_storages.ydb.rst.txt new file mode 100644 index 0000000000..a59a14aeb5 --- /dev/null +++ b/_sources/apiref/dff.context_storages.ydb.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/context_storages/ydb + +.. automodule:: dff.context_storages.ydb + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.messengers.common.interface.rst.txt b/_sources/apiref/dff.messengers.common.interface.rst.txt new file mode 100644 index 0000000000..cf4b9fd411 --- /dev/null +++ b/_sources/apiref/dff.messengers.common.interface.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/messengers/common/interface + +.. automodule:: dff.messengers.common.interface + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.messengers.common.types.rst.txt b/_sources/apiref/dff.messengers.common.types.rst.txt new file mode 100644 index 0000000000..9bc80fbcc5 --- /dev/null +++ b/_sources/apiref/dff.messengers.common.types.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/messengers/common/types + +.. automodule:: dff.messengers.common.types + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.messengers.telegram.interface.rst.txt b/_sources/apiref/dff.messengers.telegram.interface.rst.txt new file mode 100644 index 0000000000..3e4e0d5c76 --- /dev/null +++ b/_sources/apiref/dff.messengers.telegram.interface.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/messengers/telegram/interface + +.. automodule:: dff.messengers.telegram.interface + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.messengers.telegram.message.rst.txt b/_sources/apiref/dff.messengers.telegram.message.rst.txt new file mode 100644 index 0000000000..5d552fdec3 --- /dev/null +++ b/_sources/apiref/dff.messengers.telegram.message.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/messengers/telegram/message + +.. automodule:: dff.messengers.telegram.message + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.messengers.telegram.messenger.rst.txt b/_sources/apiref/dff.messengers.telegram.messenger.rst.txt new file mode 100644 index 0000000000..c752252bf2 --- /dev/null +++ b/_sources/apiref/dff.messengers.telegram.messenger.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/messengers/telegram/messenger + +.. automodule:: dff.messengers.telegram.messenger + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.messengers.telegram.utils.rst.txt b/_sources/apiref/dff.messengers.telegram.utils.rst.txt new file mode 100644 index 0000000000..e8cea54a8b --- /dev/null +++ b/_sources/apiref/dff.messengers.telegram.utils.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/messengers/telegram/utils + +.. automodule:: dff.messengers.telegram.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.conditions.rst.txt b/_sources/apiref/dff.pipeline.conditions.rst.txt new file mode 100644 index 0000000000..f8390c6a85 --- /dev/null +++ b/_sources/apiref/dff.pipeline.conditions.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/conditions + +.. automodule:: dff.pipeline.conditions + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.pipeline.actor.rst.txt b/_sources/apiref/dff.pipeline.pipeline.actor.rst.txt new file mode 100644 index 0000000000..ecafe83dfc --- /dev/null +++ b/_sources/apiref/dff.pipeline.pipeline.actor.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/pipeline/actor + +.. automodule:: dff.pipeline.pipeline.actor + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.pipeline.component.rst.txt b/_sources/apiref/dff.pipeline.pipeline.component.rst.txt new file mode 100644 index 0000000000..ef42951245 --- /dev/null +++ b/_sources/apiref/dff.pipeline.pipeline.component.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/pipeline/component + +.. automodule:: dff.pipeline.pipeline.component + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.pipeline.pipeline.rst.txt b/_sources/apiref/dff.pipeline.pipeline.pipeline.rst.txt new file mode 100644 index 0000000000..5bee8a72d2 --- /dev/null +++ b/_sources/apiref/dff.pipeline.pipeline.pipeline.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/pipeline/pipeline + +.. automodule:: dff.pipeline.pipeline.pipeline + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.pipeline.utils.rst.txt b/_sources/apiref/dff.pipeline.pipeline.utils.rst.txt new file mode 100644 index 0000000000..44dd020256 --- /dev/null +++ b/_sources/apiref/dff.pipeline.pipeline.utils.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/pipeline/utils + +.. automodule:: dff.pipeline.pipeline.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.service.extra.rst.txt b/_sources/apiref/dff.pipeline.service.extra.rst.txt new file mode 100644 index 0000000000..b8525d2ac2 --- /dev/null +++ b/_sources/apiref/dff.pipeline.service.extra.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/service/extra + +.. automodule:: dff.pipeline.service.extra + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.service.group.rst.txt b/_sources/apiref/dff.pipeline.service.group.rst.txt new file mode 100644 index 0000000000..c9813524e2 --- /dev/null +++ b/_sources/apiref/dff.pipeline.service.group.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/service/group + +.. automodule:: dff.pipeline.service.group + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.service.service.rst.txt b/_sources/apiref/dff.pipeline.service.service.rst.txt new file mode 100644 index 0000000000..673ecb4ff1 --- /dev/null +++ b/_sources/apiref/dff.pipeline.service.service.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/service/service + +.. automodule:: dff.pipeline.service.service + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.service.utils.rst.txt b/_sources/apiref/dff.pipeline.service.utils.rst.txt new file mode 100644 index 0000000000..0fda2b8eef --- /dev/null +++ b/_sources/apiref/dff.pipeline.service.utils.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/service/utils + +.. automodule:: dff.pipeline.service.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.pipeline.types.rst.txt b/_sources/apiref/dff.pipeline.types.rst.txt new file mode 100644 index 0000000000..3658cd98fb --- /dev/null +++ b/_sources/apiref/dff.pipeline.types.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/pipeline/types + +.. automodule:: dff.pipeline.types + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.conditions.std_conditions.rst.txt b/_sources/apiref/dff.script.conditions.std_conditions.rst.txt new file mode 100644 index 0000000000..9452e07b1a --- /dev/null +++ b/_sources/apiref/dff.script.conditions.std_conditions.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/conditions/std_conditions + +.. automodule:: dff.script.conditions.std_conditions + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.core.context.rst.txt b/_sources/apiref/dff.script.core.context.rst.txt new file mode 100644 index 0000000000..8f40706bca --- /dev/null +++ b/_sources/apiref/dff.script.core.context.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/core/context + +.. automodule:: dff.script.core.context + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.core.keywords.rst.txt b/_sources/apiref/dff.script.core.keywords.rst.txt new file mode 100644 index 0000000000..6a66bbd854 --- /dev/null +++ b/_sources/apiref/dff.script.core.keywords.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/core/keywords + +.. automodule:: dff.script.core.keywords + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.core.message.rst.txt b/_sources/apiref/dff.script.core.message.rst.txt new file mode 100644 index 0000000000..16e406c701 --- /dev/null +++ b/_sources/apiref/dff.script.core.message.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/core/message + +.. automodule:: dff.script.core.message + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.core.normalization.rst.txt b/_sources/apiref/dff.script.core.normalization.rst.txt new file mode 100644 index 0000000000..5ae5f028a0 --- /dev/null +++ b/_sources/apiref/dff.script.core.normalization.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/core/normalization + +.. automodule:: dff.script.core.normalization + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.core.script.rst.txt b/_sources/apiref/dff.script.core.script.rst.txt new file mode 100644 index 0000000000..d55b17f08e --- /dev/null +++ b/_sources/apiref/dff.script.core.script.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/core/script + +.. automodule:: dff.script.core.script + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.core.types.rst.txt b/_sources/apiref/dff.script.core.types.rst.txt new file mode 100644 index 0000000000..e86e0857da --- /dev/null +++ b/_sources/apiref/dff.script.core.types.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/core/types + +.. automodule:: dff.script.core.types + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.extras.conditions.rst.txt b/_sources/apiref/dff.script.extras.conditions.rst.txt new file mode 100644 index 0000000000..6ebb47e585 --- /dev/null +++ b/_sources/apiref/dff.script.extras.conditions.rst.txt @@ -0,0 +1,12 @@ +:source_name: dff/script/extras/conditions + +dff.script.extras.conditions package +==================================== + +Module contents +--------------- + +.. automodule:: dff.script.extras.conditions + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.extras.slots.rst.txt b/_sources/apiref/dff.script.extras.slots.rst.txt new file mode 100644 index 0000000000..205fe4174b --- /dev/null +++ b/_sources/apiref/dff.script.extras.slots.rst.txt @@ -0,0 +1,12 @@ +:source_name: dff/script/extras/slots + +dff.script.extras.slots package +=============================== + +Module contents +--------------- + +.. automodule:: dff.script.extras.slots + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.labels.std_labels.rst.txt b/_sources/apiref/dff.script.labels.std_labels.rst.txt new file mode 100644 index 0000000000..db10a608c2 --- /dev/null +++ b/_sources/apiref/dff.script.labels.std_labels.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/labels/std_labels + +.. automodule:: dff.script.labels.std_labels + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.script.responses.std_responses.rst.txt b/_sources/apiref/dff.script.responses.std_responses.rst.txt new file mode 100644 index 0000000000..bc8a8e8b8c --- /dev/null +++ b/_sources/apiref/dff.script.responses.std_responses.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/script/responses/std_responses + +.. automodule:: dff.script.responses.std_responses + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.stats.cli.rst.txt b/_sources/apiref/dff.stats.cli.rst.txt new file mode 100644 index 0000000000..d23493194a --- /dev/null +++ b/_sources/apiref/dff.stats.cli.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/stats/cli + +.. automodule:: dff.stats.cli + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.stats.default_extractors.rst.txt b/_sources/apiref/dff.stats.default_extractors.rst.txt new file mode 100644 index 0000000000..a0ee6e2ba9 --- /dev/null +++ b/_sources/apiref/dff.stats.default_extractors.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/stats/default_extractors + +.. automodule:: dff.stats.default_extractors + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.stats.instrumentor.rst.txt b/_sources/apiref/dff.stats.instrumentor.rst.txt new file mode 100644 index 0000000000..bef1ed24c7 --- /dev/null +++ b/_sources/apiref/dff.stats.instrumentor.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/stats/instrumentor + +.. automodule:: dff.stats.instrumentor + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.stats.utils.rst.txt b/_sources/apiref/dff.stats.utils.rst.txt new file mode 100644 index 0000000000..e3094d7b26 --- /dev/null +++ b/_sources/apiref/dff.stats.utils.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/stats/utils + +.. automodule:: dff.stats.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.db_benchmark.basic_config.rst.txt b/_sources/apiref/dff.utils.db_benchmark.basic_config.rst.txt new file mode 100644 index 0000000000..204b26b546 --- /dev/null +++ b/_sources/apiref/dff.utils.db_benchmark.basic_config.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/db_benchmark/basic_config + +.. automodule:: dff.utils.db_benchmark.basic_config + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.db_benchmark.benchmark.rst.txt b/_sources/apiref/dff.utils.db_benchmark.benchmark.rst.txt new file mode 100644 index 0000000000..aad30022e9 --- /dev/null +++ b/_sources/apiref/dff.utils.db_benchmark.benchmark.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/db_benchmark/benchmark + +.. automodule:: dff.utils.db_benchmark.benchmark + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.db_benchmark.report.rst.txt b/_sources/apiref/dff.utils.db_benchmark.report.rst.txt new file mode 100644 index 0000000000..7d62dabd81 --- /dev/null +++ b/_sources/apiref/dff.utils.db_benchmark.report.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/db_benchmark/report + +.. automodule:: dff.utils.db_benchmark.report + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.testing.cleanup_db.rst.txt b/_sources/apiref/dff.utils.testing.cleanup_db.rst.txt new file mode 100644 index 0000000000..811aea1211 --- /dev/null +++ b/_sources/apiref/dff.utils.testing.cleanup_db.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/testing/cleanup_db + +.. automodule:: dff.utils.testing.cleanup_db + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.testing.common.rst.txt b/_sources/apiref/dff.utils.testing.common.rst.txt new file mode 100644 index 0000000000..346f64250a --- /dev/null +++ b/_sources/apiref/dff.utils.testing.common.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/testing/common + +.. automodule:: dff.utils.testing.common + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.testing.response_comparers.rst.txt b/_sources/apiref/dff.utils.testing.response_comparers.rst.txt new file mode 100644 index 0000000000..505cac3a52 --- /dev/null +++ b/_sources/apiref/dff.utils.testing.response_comparers.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/testing/response_comparers + +.. automodule:: dff.utils.testing.response_comparers + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.testing.telegram.rst.txt b/_sources/apiref/dff.utils.testing.telegram.rst.txt new file mode 100644 index 0000000000..b7efe86359 --- /dev/null +++ b/_sources/apiref/dff.utils.testing.telegram.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/testing/telegram + +.. automodule:: dff.utils.testing.telegram + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.testing.toy_script.rst.txt b/_sources/apiref/dff.utils.testing.toy_script.rst.txt new file mode 100644 index 0000000000..4e781ac81a --- /dev/null +++ b/_sources/apiref/dff.utils.testing.toy_script.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/testing/toy_script + +.. automodule:: dff.utils.testing.toy_script + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/dff.utils.turn_caching.singleton_turn_caching.rst.txt b/_sources/apiref/dff.utils.turn_caching.singleton_turn_caching.rst.txt new file mode 100644 index 0000000000..8fa7968f27 --- /dev/null +++ b/_sources/apiref/dff.utils.turn_caching.singleton_turn_caching.rst.txt @@ -0,0 +1,6 @@ +:source_name: dff/utils/turn_caching/singleton_turn_caching + +.. automodule:: dff.utils.turn_caching.singleton_turn_caching + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apiref/index_caching.rst.txt b/_sources/apiref/index_caching.rst.txt new file mode 100644 index 0000000000..3a2e87c87d --- /dev/null +++ b/_sources/apiref/index_caching.rst.txt @@ -0,0 +1,11 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +Caching +======= + +.. autosummary:: + :toctree: + + dff.utils.turn_caching.singleton_turn_caching diff --git a/_sources/apiref/index_context_storages.rst.txt b/_sources/apiref/index_context_storages.rst.txt new file mode 100644 index 0000000000..63ab43d0ee --- /dev/null +++ b/_sources/apiref/index_context_storages.rst.txt @@ -0,0 +1,19 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +Context Storages +================ + +.. autosummary:: + :toctree: + + dff.context_storages.protocol + dff.context_storages.database + dff.context_storages.redis + dff.context_storages.shelve + dff.context_storages.pickle + dff.context_storages.sql + dff.context_storages.mongo + dff.context_storages.json + dff.context_storages.ydb diff --git a/_sources/apiref/index_db_benchmark.rst.txt b/_sources/apiref/index_db_benchmark.rst.txt new file mode 100644 index 0000000000..9dd566453d --- /dev/null +++ b/_sources/apiref/index_db_benchmark.rst.txt @@ -0,0 +1,13 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +DB Benchmark +============ + +.. autosummary:: + :toctree: + + dff.utils.db_benchmark.benchmark + dff.utils.db_benchmark.basic_config + dff.utils.db_benchmark.report diff --git a/_sources/apiref/index_messenger_interfaces.rst.txt b/_sources/apiref/index_messenger_interfaces.rst.txt new file mode 100644 index 0000000000..a6c7d1e9d8 --- /dev/null +++ b/_sources/apiref/index_messenger_interfaces.rst.txt @@ -0,0 +1,16 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +Messenger Interfaces +==================== + +.. autosummary:: + :toctree: + + dff.messengers.telegram.utils + dff.messengers.telegram.messenger + dff.messengers.telegram.interface + dff.messengers.common.interface + dff.messengers.telegram.message + dff.messengers.common.types diff --git a/_sources/apiref/index_pipeline.rst.txt b/_sources/apiref/index_pipeline.rst.txt new file mode 100644 index 0000000000..eb486023b5 --- /dev/null +++ b/_sources/apiref/index_pipeline.rst.txt @@ -0,0 +1,20 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +Pipeline +======== + +.. autosummary:: + :toctree: + + dff.pipeline.service.utils + dff.pipeline.service.extra + dff.pipeline.pipeline.utils + dff.pipeline.pipeline.component + dff.pipeline.service.group + dff.pipeline.service.service + dff.pipeline.pipeline.pipeline + dff.pipeline.pipeline.actor + dff.pipeline.types + dff.pipeline.conditions diff --git a/_sources/apiref/index_script.rst.txt b/_sources/apiref/index_script.rst.txt new file mode 100644 index 0000000000..6f1f879fb0 --- /dev/null +++ b/_sources/apiref/index_script.rst.txt @@ -0,0 +1,21 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +Script +====== + +.. autosummary:: + :toctree: + + dff.script.conditions.std_conditions + dff.script.responses.std_responses + dff.script.core.types + dff.script.extras.conditions + dff.script.core.script + dff.script.labels.std_labels + dff.script.core.normalization + dff.script.core.message + dff.script.extras.slots + dff.script.core.keywords + dff.script.core.context diff --git a/_sources/apiref/index_stats.rst.txt b/_sources/apiref/index_stats.rst.txt new file mode 100644 index 0000000000..6658f73287 --- /dev/null +++ b/_sources/apiref/index_stats.rst.txt @@ -0,0 +1,14 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +Stats +===== + +.. autosummary:: + :toctree: + + dff.stats.cli + dff.stats.default_extractors + dff.stats.instrumentor + dff.stats.utils diff --git a/_sources/apiref/index_testing_utils.rst.txt b/_sources/apiref/index_testing_utils.rst.txt new file mode 100644 index 0000000000..3ad7a49008 --- /dev/null +++ b/_sources/apiref/index_testing_utils.rst.txt @@ -0,0 +1,15 @@ +:orphan: + +.. This is an auto-generated RST file representing documentation source directory structure + +Testing Utils +============= + +.. autosummary:: + :toctree: + + dff.utils.testing.toy_script + dff.utils.testing.cleanup_db + dff.utils.testing.common + dff.utils.testing.telegram + dff.utils.testing.response_comparers diff --git a/_sources/community.rst.txt b/_sources/community.rst.txt new file mode 100644 index 0000000000..3aae1a75f4 --- /dev/null +++ b/_sources/community.rst.txt @@ -0,0 +1,21 @@ +Community +--------- + +This section provides links to different platforms where users of DFF can ask questions, +share their experiences, report issues, and communicate with the DFF development team and other DFF users. + +Please take a short survey about DFF: +`Google Form `_. +This will allow us to make it better. + +`DeepPavlov Forum `_ is designed to discuss various aspects of DeepPavlov, +which includes the DFF. + +`Telegram `_ is a group chat where DFF users can ask questions and +get help from the community. + +`GitHub Issues `_ is a platform where users +can report issues, suggest features, and track the progress of DFF development. + +`Stack Overflow `_ is a platform where DFF users can ask +technical questions and get answers from the community. \ No newline at end of file diff --git a/_sources/development.rst.txt b/_sources/development.rst.txt new file mode 100644 index 0000000000..19163a38de --- /dev/null +++ b/_sources/development.rst.txt @@ -0,0 +1,23 @@ +Development +----------- + +Contribution +~~~~~~~~~~~~~~~ + +`Contribution rules `_ provide +guidelines and rules for contributing to the Dialog Flow Framework project. It includes information on +how to contribute code to the project, manage your workflow, use tests, and so on. + +Project roadmap +~~~~~~~~~~~~~~~ + +`Project roadmap `_ +outlines the future development plans for DFF, including new features and enhancements +that are planned for upcoming releases. + +Release notes +~~~~~~~~~~~~~ + +`Release notes `_ +contain information about the latest releases of DFF, including new features, improvements, and bug fixes. + diff --git a/_sources/examples.rst.txt b/_sources/examples.rst.txt new file mode 100644 index 0000000000..6c5854dbc4 --- /dev/null +++ b/_sources/examples.rst.txt @@ -0,0 +1,4 @@ +Examples +-------- + +Examples are available in this `repository `_. diff --git a/_sources/get_started.rst.txt b/_sources/get_started.rst.txt new file mode 100644 index 0000000000..b0749793ee --- /dev/null +++ b/_sources/get_started.rst.txt @@ -0,0 +1,74 @@ +Getting started +--------------- + +Installation +~~~~~~~~~~~~ + +DFF can be easily installed on your system using the ``pip`` package manager: + +.. code-block:: console + + pip install dff + +This framework is compatible with Python 3.8 and newer versions. + +The above command will set the minimum dependencies to start working with DFF. +The installation process allows the user to choose from different packages based on their dependencies, which are: + +.. code-block:: console + + pip install dff[json] # dependencies for using JSON + pip install dff[pickle] # dependencies for using Pickle + pip install dff[redis] # dependencies for using Redis + pip install dff[mongodb] # dependencies for using MongoDB + pip install dff[mysql] # dependencies for using MySQL + pip install dff[postgresql] # dependencies for using PostgreSQL + pip install dff[sqlite] # dependencies for using SQLite + pip install dff[ydb] # dependencies for using Yandex Database + pip install dff[telegram] # dependencies for using Telegram + pip install dff[benchmark] # dependencies for benchmarking + +For example, if you are going to use one of the database backends, +you can specify the corresponding requirements yourself. + +Additionally, you also have the option to download the source code directly from the +`GitHub `_ repository using the commands: + +.. code-block:: console + + git clone https://github.com/deeppavlov/dialog_flow_framework.git + cd dialog_flow_framework + +Once you are in the directory, you can run the command ``make venv`` to set up all the necessary requirements for the library. +If you need to update the requirements, use the command ``make clean`` to remove `venv` first. + +Key concepts +~~~~~~~~~~~~ + +DFF is a powerful tool for creating conversational services. +It allows developers to easily write and manage dialog systems by defining a special +dialog graph that describes the behavior of the service. +DFF offers a specialized language (DSL) for quickly writing dialog graphs, +making it easy for developers to create chatbots for a wide +range of applications, such as social networks, call centers, websites, personal assistants, etc. + +DFF has several important concepts: + +**Script**: First of all, to create a dialog agent it is necessary +to create a dialog :py:class:`~dff.script.core.script.Script`. +A dialog `script` is a dictionary, where keys correspond to different `flows`. +A script can contain multiple scripts, which are flows too, what is needed in order to divide +a dialog into sub-dialogs and process them separately. + +**Flow**: As mentioned above, the dialog is divided into flows. +Each flow represent a sub-dialog corresponding to the discussion of a particular topic. +Each flow is also a dictionary, where the keys are the `nodes`. + +**Node**: A `node` is the smallest unit of a dialog flow, and it contains the bot's response +to a user's input as well as a `condition` that determines +the `transition` to another node, whether it's within the current or another flow. + +**Keywords**: DFF uses several special `keywords`. These keywords are the keys in the dictionaries inside the script. +The most important for using the framework are `RESPONSE` and `TRANSITIONS` keywords. +The first one corresponds to the response that the bot will send to the user from the current node. +The second corresponds to the transition conditions from the current node to other nodes. \ No newline at end of file diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 0000000000..42b71d3f36 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,97 @@ +.. Dialog Flow Framework documentation master file, created by + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Dialog Flow Framework +===================== + +*Date*: |today| *Version*: |version| + +.. image:: https://pepy.tech/badge/dff + :alt: Number of downloads + :target: https://pypi.org/project/dff/ + +.. image:: https://img.shields.io/badge/python-3.8%20%7C%203.9%20%7C%203.10%20%7C%203.11-green.svg + :alt: Supported python versions + +The Dialog Flow Framework (DFF) is an open-source, `Apache 2.0 `_-licensed library +that was developed specifically for creating dialog systems. DFF provides a comprehensive set of tools and resources, +targeting a wide range of applications, including chatbots, virtual assistants, and other interactive systems. +It allows developers to easily create and manage complex dialog flows, integrate with natural language processing (NLP) tools, +and handle user input in a flexible and efficient manner. Additionally, the framework is highly customizable, +allowing developers to easily adapt it to their specific needs and requirements. + +DFF documentation includes the following sections: + +:doc:`Getting started <./get_started>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Essential information about installing and using the library +aimed at beginners can be found in the ``Getting started`` part +of the documentation. This section also introduces the basic terms +that form the principles of the framework. +For deeper understanding of the API, consult the documentation sections described below. + +:doc:`User guides <./user_guides>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``User guides`` section provides comprehensive human-readable explanations +of how your conversational service should be set up and function. +It specifically highlights the aspects that are not covered by the API reference, +e.g. deployment, optimization techniques, etc. + +:doc:`Tutorials <./tutorials>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Most capabilities of DFF can also be explored in the ``Tutorials`` +section. These interactive files dynamically showcase how different +modules and classes of the framework interact. + +:doc:`Examples <./examples>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Links to demonsration projects that leverage the library +integrating it with external services and models and serve as examples +can be found in this section. + +:doc:`API reference <./reference>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The API reference contains documentation for classes and abstractions +used in the library which can be used to determine the exact typing +and behavior of all the functions involved. + +:doc:`Development <./development>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``Development`` section shows the library's current development status and specifies the contribution rules. + +:doc:`Community <./community>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``Community`` section links you to useful resources where you can find supplemental information +about the framework and ask questions. + +:doc:`About us <./about_us>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can get more info about the development team in the ``About us`` section. + +.. toctree:: + :hidden: + :maxdepth: 1 + + get_started + user_guides + tutorials + examples + reference + development + community + about_us + +Indices and tables +------------------ + +* :ref:`genindex` +* :ref:`modindex` diff --git a/_sources/reference.rst.txt b/_sources/reference.rst.txt new file mode 100644 index 0000000000..467c763a2e --- /dev/null +++ b/_sources/reference.rst.txt @@ -0,0 +1,9 @@ +API reference +------------- + +.. toctree:: + :name: reference + :glob: + :maxdepth: 1 + + apiref/index_* diff --git a/_sources/tutorials.rst.txt b/_sources/tutorials.rst.txt new file mode 100644 index 0000000000..ba9b2e0986 --- /dev/null +++ b/_sources/tutorials.rst.txt @@ -0,0 +1,30 @@ +Tutorials +--------- +Tutorials page is a collection of instructional materials designed to help developers learn +how to use DFF to build conversational agents. The tutorials cover a range of topics, +from getting started with DFF to more advanced topics such as integrating external APIs. +Each tutorial includes detailed explanations and code examples. Tutorials cover different aspects +of the framework and are organized into sections. + +The Context Storages section describes how to use context storages in DFF. +The Messengers section covers how to use the Telegram messenger with DFF. +The Pipeline section teaches the basics of the pipeline concept, how to use pre- and postprocessors, +asynchronous groups and services, custom messenger interfaces, and extra handlers and extensions. +The Script section covers the basics of the script concept, including conditions, responses, transitions, +and serialization. It also includes tutorials on pre-response and pre-transitions processing. +Finally, the Utils section covers the cache and LRU cache utilities in DFF. + +The main difference between Tutorials and Examples is that Tutorials typically show how to implement +a specific feature or solve a particular problem, whereas Examples provide a more +comprehensive overview of how to build a complete application. + +| To understand the basics of DFF, read the following tutorials: +| 1) Script / Core / 1. Basics +| 2) Script / Core / 2. Conditions +| 3) Pipeline / 1. Basics + +.. toctree:: + :name: tutorials + :glob: + + tutorials/index_* diff --git a/_sources/tutorials/index_context_storages.rst.txt b/_sources/tutorials/index_context_storages.rst.txt new file mode 100644 index 0000000000..55d72b14b4 --- /dev/null +++ b/_sources/tutorials/index_context_storages.rst.txt @@ -0,0 +1,16 @@ +:orphan: + +.. This is an auto-generated RST index file representing tutorials directory structure + +Context Storages +================ + +.. nbgallery:: + tutorials.context_storages.1_basics.py + tutorials.context_storages.2_postgresql.py + tutorials.context_storages.3_mongodb.py + tutorials.context_storages.4_redis.py + tutorials.context_storages.5_mysql.py + tutorials.context_storages.6_sqlite.py + tutorials.context_storages.7_yandex_database.py + tutorials.context_storages.8_db_benchmarking.py diff --git a/_sources/tutorials/index_interfaces.rst.txt b/_sources/tutorials/index_interfaces.rst.txt new file mode 100644 index 0000000000..b2daaf6db8 --- /dev/null +++ b/_sources/tutorials/index_interfaces.rst.txt @@ -0,0 +1,28 @@ +:orphan: + +.. This is an auto-generated RST index file representing tutorials directory structure + +Interfaces +========== + +Telegram +-------- + +.. nbgallery:: + tutorials.messengers.telegram.1_basic.py + tutorials.messengers.telegram.2_buttons.py + tutorials.messengers.telegram.3_buttons_with_callback.py + tutorials.messengers.telegram.4_conditions.py + tutorials.messengers.telegram.5_conditions_with_media.py + tutorials.messengers.telegram.6_conditions_extras.py + tutorials.messengers.telegram.7_polling_setup.py + tutorials.messengers.telegram.8_webhook_setup.py + +Web API +------- + +.. nbgallery:: + tutorials.messengers.web_api_interface.1_fastapi.py + tutorials.messengers.web_api_interface.2_websocket_chat.py + tutorials.messengers.web_api_interface.3_load_testing_with_locust.py + tutorials.messengers.web_api_interface.4_streamlit_chat.py diff --git a/_sources/tutorials/index_pipeline.rst.txt b/_sources/tutorials/index_pipeline.rst.txt new file mode 100644 index 0000000000..87e65577a5 --- /dev/null +++ b/_sources/tutorials/index_pipeline.rst.txt @@ -0,0 +1,19 @@ +:orphan: + +.. This is an auto-generated RST index file representing tutorials directory structure + +Pipeline +======== + +.. nbgallery:: + tutorials.pipeline.1_basics.py + tutorials.pipeline.2_pre_and_post_processors.py + tutorials.pipeline.3_pipeline_dict_with_services_basic.py + tutorials.pipeline.3_pipeline_dict_with_services_full.py + tutorials.pipeline.4_groups_and_conditions_basic.py + tutorials.pipeline.4_groups_and_conditions_full.py + tutorials.pipeline.5_asynchronous_groups_and_services_basic.py + tutorials.pipeline.5_asynchronous_groups_and_services_full.py + tutorials.pipeline.6_extra_handlers_basic.py + tutorials.pipeline.6_extra_handlers_full.py + tutorials.pipeline.7_extra_handlers_and_extensions.py diff --git a/_sources/tutorials/index_script.rst.txt b/_sources/tutorials/index_script.rst.txt new file mode 100644 index 0000000000..7a7eec6a31 --- /dev/null +++ b/_sources/tutorials/index_script.rst.txt @@ -0,0 +1,29 @@ +:orphan: + +.. This is an auto-generated RST index file representing tutorials directory structure + +Script +====== + +Core +---- + +.. nbgallery:: + tutorials.script.core.1_basics.py + tutorials.script.core.2_conditions.py + tutorials.script.core.3_responses.py + tutorials.script.core.4_transitions.py + tutorials.script.core.5_global_transitions.py + tutorials.script.core.6_context_serialization.py + tutorials.script.core.7_pre_response_processing.py + tutorials.script.core.8_misc.py + tutorials.script.core.9_pre_transitions_processing.py + +Responses +--------- + +.. nbgallery:: + tutorials.script.responses.1_basics.py + tutorials.script.responses.2_buttons.py + tutorials.script.responses.3_media.py + tutorials.script.responses.4_multi_message.py diff --git a/_sources/tutorials/index_stats.rst.txt b/_sources/tutorials/index_stats.rst.txt new file mode 100644 index 0000000000..64fa941200 --- /dev/null +++ b/_sources/tutorials/index_stats.rst.txt @@ -0,0 +1,10 @@ +:orphan: + +.. This is an auto-generated RST index file representing tutorials directory structure + +Stats +===== + +.. nbgallery:: + tutorials.stats.1_extractor_functions.py + tutorials.stats.2_pipeline_integration.py diff --git a/_sources/tutorials/index_utils.rst.txt b/_sources/tutorials/index_utils.rst.txt new file mode 100644 index 0000000000..56e2a7a3a2 --- /dev/null +++ b/_sources/tutorials/index_utils.rst.txt @@ -0,0 +1,10 @@ +:orphan: + +.. This is an auto-generated RST index file representing tutorials directory structure + +Utils +===== + +.. nbgallery:: + tutorials.utils.1_cache.py + tutorials.utils.2_lru_cache.py diff --git a/_sources/tutorials/tutorials.context_storages.1_basics.py.txt b/_sources/tutorials/tutorials.context_storages.1_basics.py.txt new file mode 100644 index 0000000000..449f93ef27 --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.1_basics.py.txt @@ -0,0 +1,42 @@ +# %% [markdown] +""" +# 1. Basics + +The following tutorial shows the basic use of the database connection. + +See %mddoclink(api,context_storages.database,context_storage_factory) function +for creating a context storage by path. + +In this example JSON file is used as a storage. +""" + +# %pip install dff[json,pickle] + +# %% +import pathlib + +from dff.context_storages import context_storage_factory + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH + +pathlib.Path("dbs").mkdir(exist_ok=True) +db = context_storage_factory("json://dbs/file.json") +# db = context_storage_factory("pickle://dbs/file.pkl") +# db = context_storage_factory("shelve://dbs/file") + +pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + # a function for automatic tutorial running (testing) with HAPPY_PATH + + # This runs tutorial in interactive mode if not in IPython env + # and if `DISABLE_INTERACTIVE_MODE` is not set + if is_interactive_mode(): + run_interactive_mode(pipeline) # This runs tutorial in interactive mode diff --git a/_sources/tutorials/tutorials.context_storages.2_postgresql.py.txt b/_sources/tutorials/tutorials.context_storages.2_postgresql.py.txt new file mode 100644 index 0000000000..4a92685755 --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.2_postgresql.py.txt @@ -0,0 +1,47 @@ +# %% [markdown] +""" +# 2. PostgreSQL + +This is a tutorial on using PostgreSQL. + +See %mddoclink(api,context_storages.sql,SQLContextStorage) class +for storing your users' contexts in SQL databases. + +DFF uses [sqlalchemy](https://docs.sqlalchemy.org/en/20/) +and [asyncpg](https://magicstack.github.io/asyncpg/current/) +libraries for asynchronous access to PostgreSQL DB. +""" + +# %pip install dff[postgresql] + +# %% +import os + +from dff.context_storages import context_storage_factory + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH + + +# %% +db_uri = "postgresql+asyncpg://{}:{}@localhost:5432/{}".format( + os.environ["POSTGRES_USERNAME"], + os.environ["POSTGRES_PASSWORD"], + os.environ["POSTGRES_DB"], +) +db = context_storage_factory(db_uri) + + +pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.context_storages.3_mongodb.py.txt b/_sources/tutorials/tutorials.context_storages.3_mongodb.py.txt new file mode 100644 index 0000000000..f55ae3fbb7 --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.3_mongodb.py.txt @@ -0,0 +1,45 @@ +# %% [markdown] +""" +# 3. MongoDB + +This is a tutorial on using MongoDB. + +See %mddoclink(api,context_storages.mongo,MongoContextStorage) class +for storing you users' contexts in Mongo database. + +DFF uses [motor](https://motor.readthedocs.io/en/stable/) +library for asynchronous access to MongoDB. +""" + +# %pip install dff[mongodb] + +# %% +import os + +from dff.context_storages import context_storage_factory + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH + + +# %% +db_uri = "mongodb://{}:{}@localhost:27017/{}".format( + os.environ["MONGO_INITDB_ROOT_USERNAME"], + os.environ["MONGO_INITDB_ROOT_PASSWORD"], + os.environ["MONGO_INITDB_ROOT_USERNAME"], +) +db = context_storage_factory(db_uri) + +pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.context_storages.4_redis.py.txt b/_sources/tutorials/tutorials.context_storages.4_redis.py.txt new file mode 100644 index 0000000000..918b5d1276 --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.4_redis.py.txt @@ -0,0 +1,44 @@ +# %% [markdown] +""" +# 4. Redis + +This is a tutorial on using Redis. + +See %mddoclink(api,context_storages.redis,RedisContextStorage) class +for storing you users' contexts in Redis database. + +DFF uses [redis.asyncio](https://redis.readthedocs.io/en/latest/) +library for asynchronous access to Redis DB. +""" + +# %pip install dff[redis] + +# %% +import os + +from dff.context_storages import context_storage_factory + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH + + +# %% +db_uri = "redis://{}:{}@localhost:6379/{}".format( + "", os.environ["REDIS_PASSWORD"], "0" +) +db = context_storage_factory(db_uri) + + +pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.context_storages.5_mysql.py.txt b/_sources/tutorials/tutorials.context_storages.5_mysql.py.txt new file mode 100644 index 0000000000..aed04712ae --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.5_mysql.py.txt @@ -0,0 +1,47 @@ +# %% [markdown] +""" +# 5. MySQL + +This is a tutorial on using MySQL. + +See %mddoclink(api,context_storages.sql,SQLContextStorage) class +for storing you users' contexts in SQL databases. + +DFF uses [sqlalchemy](https://docs.sqlalchemy.org/en/20/) +and [asyncmy](https://github.com/long2ice/asyncmy) +libraries for asynchronous access to MySQL DB. +""" + +# %pip install dff[mysql] + +# %% +import os + +from dff.context_storages import context_storage_factory + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH + + +# %% +db_uri = "mysql+asyncmy://{}:{}@localhost:3307/{}".format( + os.environ["MYSQL_USERNAME"], + os.environ["MYSQL_PASSWORD"], + os.environ["MYSQL_DATABASE"], +) +db = context_storage_factory(db_uri) + + +pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.context_storages.6_sqlite.py.txt b/_sources/tutorials/tutorials.context_storages.6_sqlite.py.txt new file mode 100644 index 0000000000..8d7e0b53b4 --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.6_sqlite.py.txt @@ -0,0 +1,51 @@ +# %% [markdown] +""" +# 6. SQLite + +This is a tutorial on using SQLite. + +See %mddoclink(api,context_storages.sql,SQLContextStorage) class +for storing you users' contexts in SQL databases. + +DFF uses [sqlalchemy](https://docs.sqlalchemy.org/en/20/) +and [aiosqlite](https://readthedocs.org/projects/aiosqlite/) +libraries for asynchronous access to SQLite DB. + +Note that protocol separator for windows differs from one for linux. +""" + +# %pip install dff[sqlite] + +# %% +import pathlib +from platform import system + +from dff.context_storages import context_storage_factory + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH + + +# %% +pathlib.Path("dbs").mkdir(exist_ok=True) +db_file = pathlib.Path("dbs/sqlite.db") +db_file.touch(exist_ok=True) + +separator = "///" if system() == "Windows" else "////" +db_uri = f"sqlite+aiosqlite:{separator}{db_file.absolute()}" +db = context_storage_factory(db_uri) + + +pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.context_storages.7_yandex_database.py.txt b/_sources/tutorials/tutorials.context_storages.7_yandex_database.py.txt new file mode 100644 index 0000000000..2474900416 --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.7_yandex_database.py.txt @@ -0,0 +1,52 @@ +# %% [markdown] +""" +# 7. Yandex DataBase + +This is a tutorial on how to use Yandex DataBase. + +See %mddoclink(api,context_storages.ydb,YDBContextStorage) class +for storing you users' contexts in Yandex database. + +DFF uses [ydb.aio](https://ydb.tech/en/docs/) +library for asynchronous access to Yandex DB. +""" + +# %pip install dff[ydb] + +# %% +import os + +from dff.context_storages import context_storage_factory + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + run_interactive_mode, + is_interactive_mode, +) +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH + + +# %% +# ##### Connecting to yandex cloud +# https://github.com/zinal/ydb-python-sdk/blob/ex_basic-example_p1/examples/basic_example_v1/README.md +# export YDB_SERVICE_ACCOUNT_KEY_FILE_CREDENTIALS=$HOME/key-ydb-sa-0.json +# export YDB_ENDPOINT=grpcs://ydb.serverless.yandexcloud.net:2135 +# export YDB_DATABASE=/ru-central1/qwertyuiopasdfgh/123456789qwertyui +# ##### or use local-ydb with variables from .env_file +# db_uri="grpc://localhost:2136/local" + +db_uri = "{}{}".format( + os.environ["YDB_ENDPOINT"], + os.environ["YDB_DATABASE"], +) +db = context_storage_factory(db_uri) + +pipeline = Pipeline.from_script(*TOY_SCRIPT_ARGS, context_storage=db) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.context_storages.8_db_benchmarking.py.txt b/_sources/tutorials/tutorials.context_storages.8_db_benchmarking.py.txt new file mode 100644 index 0000000000..1b56414b41 --- /dev/null +++ b/_sources/tutorials/tutorials.context_storages.8_db_benchmarking.py.txt @@ -0,0 +1,241 @@ +# %% [markdown] +""" +# 8. Context storage benchmarking + +This tutorial shows how to benchmark context storages. + +For more info see [API reference](%doclink(api,utils.db_benchmark.benchmark)). +""" + +# %pip install dff[benchmark,json,pickle,postgresql,mongodb,redis,mysql,sqlite,ydb] + +# %% +from pathlib import Path +from platform import system +import tempfile + +import dff.utils.db_benchmark as benchmark + +# %% [markdown] +""" +## Context storage setup +""" + +# %% +# this cell is only required for pickle, shelve and sqlite databases +tutorial_dir = Path(tempfile.mkdtemp()) +db_path = tutorial_dir / "dbs" +db_path.mkdir() +sqlite_file = db_path / "sqlite.db" +sqlite_file.touch(exist_ok=True) +sqlite_separator = "///" if system() == "Windows" else "////" + +# %% +storages = { + "JSON": f"json://{db_path}/json.json", + "Pickle": f"pickle://{db_path}/pickle.pkl", + "Shelve": f"shelve://{db_path}/shelve", + "PostgreSQL": "postgresql+asyncpg://postgres:pass@localhost:5432/test", + "MongoDB": "mongodb://admin:pass@localhost:27017/admin", + "Redis": "redis://:pass@localhost:6379/0", + "MySQL": "mysql+asyncmy://root:pass@localhost:3307/test", + "SQLite": f"sqlite+aiosqlite:{sqlite_separator}{sqlite_file.absolute()}", + "YDB": "grpc://localhost:2136/local", +} + +# %% [markdown] +""" +## Saving benchmark results to a file + +Benchmark results are saved to files. + +For that there exist two functions: +%mddoclink(api,utils.db_benchmark.benchmark,benchmark_all) +and +%mddoclink(api,utils.db_benchmark.benchmark,save_results_to_file). + +Note: context storages passed into these functions will be cleared. + +Once the benchmark results are saved to a file, you can view and analyze them using two methods: + +* [Using the Report Function](#Using-the-report-function): This function + can display specified information from a given file. + By default, it prints the name and average metrics for each benchmark case. + +* [Using the Streamlit App](#Using-Streamlit-app): A Streamlit app + is available for viewing and comparing benchmark results. + You can upload benchmark result files using the app's "Benchmark sets" tab, + inspect individual results in the "View" tab, and compare metrics in the "Compare" tab. + +Benchmark results are saved according to a specific schema, +which can be found in the benchmark schema documentation. +Each database being benchmarked will have its own result file. + +### Configuration + +The first one is a higher-level wrapper of the second one. +The first function accepts +%mddoclink(api,utils.db_benchmark.benchmark,BenchmarkCase) +which configure databases that are being benchmark and configurations of the benchmarks. +The second function accepts only a single URI for the database and several benchmark configurations. +So, the second function is simpler to use, while the first function allows for more configuration +(e.g. having different databases benchmarked in a single file). + +Both function use +%mddoclink(api,utils.db_benchmark.benchmark,BenchmarkConfig) +to configure benchmark behaviour. +`BenchmarkConfig` is only an interface for benchmark configurations. +Its most basic implementation is +%mddoclink(api,utils.db_benchmark.basic_config,BasicBenchmarkConfig). + +DFF provides configuration presets in the +%mddoclink(api,utils.db_benchmark.basic_config) module, +covering various contexts, messages, and edge cases. +You can use these presets by passing them to the benchmark functions or create +your own configuration. + +To learn more about using presets see [Configuration presets](#Configuration-presets) + +Benchmark configs have several parameters: + +Setting `context_num` to 50 means that we'll run fifty cycles of writing and reading context. +This way we'll be able to get a more accurate average read/write time as well as +check if read/write times are dependent on the number of contexts in the storage. + +You can also configure the `dialog_len`, `message_dimensions` and `misc_dimensions` parameters. +This allows you to set the contexts you want your database to be benchmarked with. + +### File structure + +The files are saved according to [the schema]( +../_misc/benchmark_schema.json +). +""" + +# %% +for db_name, db_uri in storages.items(): + benchmark.benchmark_all( + file=tutorial_dir / f"{db_name}.json", + name="Tutorial benchmark", + description="Benchmark for tutorial", + db_uri=db_uri, + benchmark_configs={ + "simple_config": benchmark.BasicBenchmarkConfig( + context_num=50, + from_dialog_len=1, + to_dialog_len=5, + message_dimensions=(3, 10), + misc_dimensions=(3, 10), + ), + }, + ) + +# %% [markdown] +""" +Running the cell above will create a file with benchmark results for every benchmarked DB: +""" + +# %% +list(tutorial_dir.iterdir()) + +# %% [markdown] +""" +## Viewing benchmark results + +Now that the results are saved to a file you can either view them using the +%mddoclink(api,utils.db_benchmark.report,report) +function or [our streamlit app]( +../_misc/benchmark_streamlit.py +). +""" + +# %% [markdown] +""" +### Using the report function + +The report function will print specified information from a given file. + +By default it prints the name and average metrics for each case. +""" + +# %% +benchmark.report( + file=tutorial_dir / "Shelve.json", display={"name", "config", "metrics"} +) + +# %% [markdown] +""" +### Using Streamlit app + +To run the app, execute: + +``` +# download file +curl https://deeppavlov.github.io/dialog_flow_framework/_misc/benchmark_streamlit.py \ +-o benchmark_streamlit.py +# install dependencies +pip install dff[benchmark] +# run +streamlit run benchmark_streamlit.py +``` + +You can upload files with benchmark results using the first tab of the app ("Benchmark sets"): + +.. figure:: ../_static/images/benchmark_sets.png + +The second tab ("View") lets you inspect individual benchmark results. +It also allows you to add a specific benchmark result +to the "Compare" tab via the button in the top-right corner. + +.. figure:: ../_static/images/benchmark_view.png + +In the "Compare" tab you can view main metrics (write, read, update, read+update) +of previously added benchmark results: + +.. figure:: ../_static/images/benchmark_compare.png + +"Mass compare" tab saves you the trouble of manually adding +to compare every benchmark result from a single file. + +.. figure:: ../_static/images/benchmark_mass_compare.png +""" + +# %% [markdown] +""" +## Additional information + +### Configuration presets + +The +%mddoclink(api,utils.db_benchmark.basic_config) +module also includes a dictionary containing configuration presets. +Those cover various contexts and messages as well as some edge cases. +""" + +# %% +print(benchmark.basic_config.basic_configurations.keys()) + +# %% [markdown] +""" +To use configuration presets, simply pass them to benchmark functions: + + benchmark.benchmark_all( + ..., + benchmark_configs=benchmark.basic_configurations + ) +""" + +# %% [markdown] +""" +### Custom configuration + +If the basic configuration is not enough for you, you can create your own. + +To do so, inherit from the +%mddoclink(api,utils.db_benchmark.benchmark,BenchmarkConfig) +class. You need to define three methods: + +- `get_context` -- method to get initial contexts. +- `info` -- method for getting display info representing the configuration. +- `context_updater` -- method for updating contexts. +""" diff --git a/_sources/tutorials/tutorials.messengers.telegram.1_basic.py.txt b/_sources/tutorials/tutorials.messengers.telegram.1_basic.py.txt new file mode 100644 index 0000000000..45fccc2729 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.1_basic.py.txt @@ -0,0 +1,92 @@ +# %% [markdown] +""" +# Telegram: 1. Basic + +The following tutorial shows how to run a regular DFF script in Telegram. +It asks users for the '/start' command and then loops in one place. + +Here, %mddoclink(api,messengers.telegram.interface,PollingTelegramInterface) +class and [telebot](https://pytba.readthedocs.io/en/latest/index.html) +library are used for accessing telegram API in polling mode. + +Telegram API token is required to access telegram API. +""" + +# %pip install dff[telegram] + +# %% +import os + +from dff.script import conditions as cnd +from dff.script import labels as lbl +from dff.script import RESPONSE, TRANSITIONS, Message +from dff.messengers.telegram import PollingTelegramInterface +from dff.pipeline import Pipeline +from dff.utils.testing.common import is_interactive_mode + + +# %% [markdown] +""" +In order to integrate your script with Telegram, you need an instance of +`TelegramMessenger` class and one of the following interfaces: +`PollingMessengerInterface` or `WebhookMessengerInterface`. + +`TelegramMessenger` encapsulates the bot logic. +Like Telebot, `TelegramMessenger` only requires a token to run. +However, all parameters from the Telebot class can be passed as keyword arguments. + +The two interfaces connect the bot to Telegram. They can be passed directly +to the DFF `Pipeline` instance. +""" + + +# %% +script = { + "greeting_flow": { + "start_node": { + TRANSITIONS: { + "greeting_node": cnd.exact_match(Message(text="/start")) + }, + }, + "greeting_node": { + RESPONSE: Message(text="Hi"), + TRANSITIONS: {lbl.repeat(): cnd.true()}, + }, + "fallback_node": { + RESPONSE: Message(text="Please, repeat the request"), + TRANSITIONS: { + "greeting_node": cnd.exact_match(Message(text="/start")) + }, + }, + } +} + +# this variable is only for testing +happy_path = ( + (Message(text="/start"), Message(text="Hi")), + (Message(text="Hi"), Message(text="Hi")), + (Message(text="Bye"), Message(text="Hi")), +) + + +# %% +interface = PollingTelegramInterface(token=os.environ["TG_BOT_TOKEN"]) + + +# %% +pipeline = Pipeline.from_script( + script=script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), + messenger_interface=interface, + # The interface can be passed as a pipeline argument. +) + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.telegram.2_buttons.py.txt b/_sources/tutorials/tutorials.messengers.telegram.2_buttons.py.txt new file mode 100644 index 0000000000..efbbf2ab47 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.2_buttons.py.txt @@ -0,0 +1,192 @@ +# %% [markdown] +""" +# Telegram: 2. Buttons + +This tutorial shows how to display and hide a basic keyboard in Telegram. + +Here, %mddoclink(api,messengers.telegram.message,TelegramMessage) +class is used to represent telegram message, +%mddoclink(api,messengers.telegram.message,TelegramUI) and +%mddoclink(api,messengers.telegram.message,RemoveKeyboard) +classes are used for configuring additional telegram message features. + +Different %mddoclink(api,script.core.message,message) +classes are used for representing different common message features, +like Attachment, Audio, Button, Image, etc. +""" + + +# %pip install dff[telegram] + +# %% +import os + +import dff.script.conditions as cnd +from dff.script import TRANSITIONS, RESPONSE +from dff.script.core.message import Button +from dff.pipeline import Pipeline +from dff.messengers.telegram import ( + PollingTelegramInterface, + TelegramUI, + TelegramMessage, + RemoveKeyboard, +) +from dff.utils.testing.common import is_interactive_mode + + +# %% [markdown] +""" +To display or hide a keyboard, you can utilize the `ui` field of the `TelegramMessage` class. +It can be initialized either with a `TelegramUI` instance or with a custom telebot keyboard. + +Passing an instance of `RemoveKeyboard` to the `ui` field will indicate that the keyboard +should be removed. +""" + + +# %% +script = { + "root": { + "start": { + TRANSITIONS: { + ("general", "native_keyboard"): ( + lambda ctx, _: ctx.last_request.text + in ("/start", "/restart") + ), + }, + }, + "fallback": { + RESPONSE: TelegramMessage( + text="Finishing test, send /restart command to restart" + ), + TRANSITIONS: { + ("general", "native_keyboard"): ( + lambda ctx, _: ctx.last_request.text + in ("/start", "/restart") + ), + }, + }, + }, + "general": { + "native_keyboard": { + RESPONSE: TelegramMessage( + text="Question: What's 2 + 2?", + # In this case, we use telegram-specific classes. + # They derive from the generic ones and include more options, + # e.g. simple keyboard or inline keyboard. + ui=TelegramUI( + buttons=[ + Button(text="5"), + Button(text="4"), + ], + is_inline=False, + row_width=4, + ), + ), + TRANSITIONS: { + ("general", "success"): cnd.exact_match( + TelegramMessage(text="4") + ), + ("general", "fail"): cnd.true(), + }, + }, + "success": { + RESPONSE: TelegramMessage( + **{"text": "Success!", "ui": RemoveKeyboard()} + ), + TRANSITIONS: {("root", "fallback"): cnd.true()}, + }, + "fail": { + RESPONSE: TelegramMessage( + **{ + "text": "Incorrect answer, type anything to try again", + "ui": RemoveKeyboard(), + } + ), + TRANSITIONS: {("general", "native_keyboard"): cnd.true()}, + }, + }, +} + +interface = PollingTelegramInterface(token=os.environ["TG_BOT_TOKEN"]) + +# this variable is only for testing +happy_path = ( + ( + TelegramMessage(text="/start"), + TelegramMessage( + text="Question: What's 2 + 2?", + ui=TelegramUI( + buttons=[ + Button(text="5"), + Button(text="4"), + ], + is_inline=False, + row_width=4, + ), + ), + ), + ( + TelegramMessage(text="5"), + TelegramMessage( + text="Incorrect answer, type anything to try again", + ui=RemoveKeyboard(), + ), + ), + ( + TelegramMessage(text="ok"), + TelegramMessage( + text="Question: What's 2 + 2?", + ui=TelegramUI( + buttons=[ + Button(text="5"), + Button(text="4"), + ], + is_inline=False, + row_width=4, + ), + ), + ), + ( + TelegramMessage(text="4"), + TelegramMessage(text="Success!", ui=RemoveKeyboard()), + ), + ( + TelegramMessage(text="Yay!"), + TelegramMessage( + text="Finishing test, send /restart command to restart" + ), + ), + ( + TelegramMessage(text="/start"), + TelegramMessage( + text="Question: What's 2 + 2?", + ui=TelegramUI( + buttons=[ + Button(text="5"), + Button(text="4"), + ], + is_inline=False, + row_width=4, + ), + ), + ), +) + + +# %% +pipeline = Pipeline.from_script( + script=script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), + messenger_interface=interface, +) + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.py.txt b/_sources/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.py.txt new file mode 100644 index 0000000000..10d54927ff --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.3_buttons_with_callback.py.txt @@ -0,0 +1,181 @@ +# %% [markdown] +""" +# Telegram: 3. Buttons with Callback + +This tutorial demonstrates, how to add an inline keyboard and utilize +inline queries. + +Here, %mddoclink(api,messengers.telegram.message,TelegramMessage) +class is used to represent telegram message, +%mddoclink(api,messengers.telegram.message,TelegramUI) and +%mddoclink(api,messengers.telegram.message,RemoveKeyboard) +classes are used for configuring additional telegram message features. + +Different %mddoclink(api,script.core.message,message) +classes are used for representing different common message features, +like Attachment, Audio, Button, Image, etc. +""" + + +# %pip install dff[telegram] + +# %% +import os + +import dff.script.conditions as cnd +from dff.script import TRANSITIONS, RESPONSE +from dff.pipeline import Pipeline +from dff.script.core.message import Button +from dff.messengers.telegram import ( + PollingTelegramInterface, + TelegramUI, + TelegramMessage, +) +from dff.messengers.telegram.message import _ClickButton +from dff.utils.testing.common import is_interactive_mode + + +# %% [markdown] +""" +If you want to send an inline keyboard to your Telegram chat, +set `is_inline` field of the `TelegramUI` instance to `True` +(note that it is inline by default, so you could also omit it). + +Pushing a button of an inline keyboard results in a callback +query being sent to your bot. The data of the query +is stored in the `callback_query` field of a user `TelegramMessage`. +""" + + +# %% +script = { + "root": { + "start": { + TRANSITIONS: { + ("general", "keyboard"): ( + lambda ctx, _: ctx.last_request.text + in ("/start", "/restart") + ), + }, + }, + "fallback": { + RESPONSE: TelegramMessage( + text="Finishing test, send /restart command to restart" + ), + TRANSITIONS: { + ("general", "keyboard"): ( + lambda ctx, _: ctx.last_request.text + in ("/start", "/restart") + ) + }, + }, + }, + "general": { + "keyboard": { + RESPONSE: TelegramMessage( + **{ + "text": "Starting test! What's 9 + 10?", + "ui": TelegramUI( + buttons=[ + Button(text="19", payload="correct"), + Button(text="21", payload="wrong"), + ], + is_inline=True, + ), + } + ), + TRANSITIONS: { + ("general", "success"): cnd.exact_match( + TelegramMessage(callback_query="correct") + ), + ("general", "fail"): cnd.exact_match( + TelegramMessage(callback_query="wrong") + ), + }, + }, + "success": { + RESPONSE: TelegramMessage(text="Success!"), + TRANSITIONS: {("root", "fallback"): cnd.true()}, + }, + "fail": { + RESPONSE: TelegramMessage( + text="Incorrect answer, type anything to try again" + ), + TRANSITIONS: {("general", "keyboard"): cnd.true()}, + }, + }, +} + +# this variable is only for testing +happy_path = ( + ( + TelegramMessage(text="/start"), + TelegramMessage( + text="Starting test! What's 9 + 10?", + ui=TelegramUI( + buttons=[ + Button(text="19", payload="correct"), + Button(text="21", payload="wrong"), + ], + ), + ), + ), + ( + TelegramMessage(callback_query=_ClickButton(button_index=1)), + TelegramMessage(text="Incorrect answer, type anything to try again"), + ), + ( + TelegramMessage(text="try again"), + TelegramMessage( + text="Starting test! What's 9 + 10?", + ui=TelegramUI( + buttons=[ + Button(text="19", payload="correct"), + Button(text="21", payload="wrong"), + ], + ), + ), + ), + ( + TelegramMessage(callback_query=_ClickButton(button_index=0)), + TelegramMessage(text="Success!"), + ), + ( + TelegramMessage(text="Yay!"), + TelegramMessage( + text="Finishing test, send /restart command to restart" + ), + ), + ( + TelegramMessage(text="/restart"), + TelegramMessage( + text="Starting test! What's 9 + 10?", + ui=TelegramUI( + buttons=[ + Button(text="19", payload="correct"), + Button(text="21", payload="wrong"), + ], + ), + ), + ), +) + +interface = PollingTelegramInterface(token=os.environ["TG_BOT_TOKEN"]) + + +# %% +pipeline = Pipeline.from_script( + script=script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), + messenger_interface=interface, +) + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.telegram.4_conditions.py.txt b/_sources/tutorials/tutorials.messengers.telegram.4_conditions.py.txt new file mode 100644 index 0000000000..d6ba4f4c52 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.4_conditions.py.txt @@ -0,0 +1,143 @@ +# %% [markdown] +""" +# Telegram: 4. Conditions + +This tutorial shows how to process Telegram updates in your script +and reuse handler triggers from the `pytelegrambotapi` library. + +Here, %mddoclink(api,messengers.telegram.messenger,telegram_condition) +function is used for graph navigation according to Telegram events. +""" + + +# %pip install dff[telegram] + +# %% +import os + +from dff.script import TRANSITIONS, RESPONSE + +from dff.messengers.telegram import ( + PollingTelegramInterface, + telegram_condition, + UpdateType, +) +from dff.pipeline import Pipeline +from dff.messengers.telegram import TelegramMessage +from dff.utils.testing.common import is_interactive_mode + + +# %% [markdown] +""" +In our Telegram module, we adopted the system of filters +available in the `pytelegrambotapi` library. + +You can use `telegram_condition` to filter text messages from telegram in various ways. + +- Setting the `update_type` will allow filtering by update type: + if you want the condition to trigger only on updates of the type `edited_message`, + set it to `UpdateType.EDITED_MESSAGE`. + The field defaults to `message`. +- Setting the `command` argument will cause the telegram_condition to only react to listed commands. +- `func` argument on the other hand allows you to define arbitrary conditions. +- `regexp` creates a regular expression filter, etc. + +Note: +It is possible to use `cnd.exact_match` as a condition (as seen in previous tutorials). +However, the functionality of that approach is lacking: +At this moment only two fields of `Message` are set during update processing: + +- `text` stores the `text` field of `message` updates +- `callback_query` stores the `data` field of `callback_query` updates + +For more information see tutorial `3_buttons_with_callback.py`. +""" + + +# %% +script = { + "greeting_flow": { + "start_node": { + TRANSITIONS: { + "node1": telegram_condition(commands=["start", "restart"]) + }, + }, + "node1": { + RESPONSE: TelegramMessage(text="Hi, how are you?"), + TRANSITIONS: { + "node2": telegram_condition( + update_type=UpdateType.MESSAGE, regexp="fine" + ) + }, + # this is the same as + # TRANSITIONS: {"node2": telegram_condition(regexp="fine")}, + }, + "node2": { + RESPONSE: TelegramMessage( + text="Good. What do you want to talk about?" + ), + TRANSITIONS: { + "node3": telegram_condition( + func=lambda msg: "music" in msg.text + ) + }, + }, + "node3": { + RESPONSE: TelegramMessage( + text="Sorry, I can not talk about music now." + ), + TRANSITIONS: { + "node4": telegram_condition(update_type=UpdateType.ALL) + }, + # This condition is true for any type of update + }, + "node4": { + RESPONSE: TelegramMessage(text="bye"), + TRANSITIONS: {"node1": telegram_condition()}, + # This condition is true if the last update is of type `message` + }, + "fallback_node": { + RESPONSE: TelegramMessage(text="Ooops"), + TRANSITIONS: { + "node1": telegram_condition(commands=["start", "restart"]) + }, + }, + } +} + +# this variable is only for testing +happy_path = ( + (TelegramMessage(text="/start"), TelegramMessage(text="Hi, how are you?")), + ( + TelegramMessage(text="I'm fine"), + TelegramMessage(text="Good. What do you want to talk about?"), + ), + ( + TelegramMessage(text="About music"), + TelegramMessage(text="Sorry, I can not talk about music now."), + ), + (TelegramMessage(text="ok"), TelegramMessage(text="bye")), + (TelegramMessage(text="bye"), TelegramMessage(text="Hi, how are you?")), +) + + +# %% +interface = PollingTelegramInterface(token=os.environ["TG_BOT_TOKEN"]) + + +# %% +pipeline = Pipeline.from_script( + script=script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), + messenger_interface=interface, +) + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.telegram.5_conditions_with_media.py.txt b/_sources/tutorials/tutorials.messengers.telegram.5_conditions_with_media.py.txt new file mode 100644 index 0000000000..7f80ae3c68 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.5_conditions_with_media.py.txt @@ -0,0 +1,204 @@ +# %% [markdown] +""" +# Telegram: 5. Conditions with Media + +This tutorial shows how to use media-related logic in your script. + +Here, %mddoclink(api,messengers.telegram.messenger,telegram_condition) +function is used for graph navigation according to Telegram events. + +Different %mddoclink(api,script.core.message,message) +classes are used for representing different common message features, +like Attachment, Audio, Button, Image, etc. +""" + + +# %pip install dff[telegram] + +# %% +import os + +from telebot.types import Message + +import dff.script.conditions as cnd +from dff.script import Context, TRANSITIONS, RESPONSE +from dff.script.core.message import Image, Attachments +from dff.messengers.telegram import ( + PollingTelegramInterface, + TelegramMessage, + telegram_condition, +) +from dff.pipeline import Pipeline +from dff.utils.testing.common import is_interactive_mode + + +# %% + +picture_url = "https://avatars.githubusercontent.com/u/29918795?s=200&v=4" + + +# %% [markdown] +""" +To filter user messages depending on whether or not media files were sent, +you can use the `content_types` parameter of the `telegram_condition`. +""" + + +# %% +interface = PollingTelegramInterface(token=os.environ["TG_BOT_TOKEN"]) + + +# %% +script = { + "root": { + "start": { + TRANSITIONS: { + ("pics", "ask_picture"): telegram_condition( + commands=["start", "restart"] + ) + }, + }, + "fallback": { + RESPONSE: TelegramMessage( + text="Finishing test, send /restart command to restart" + ), + TRANSITIONS: { + ("pics", "ask_picture"): telegram_condition( + commands=["start", "restart"] + ) + }, + }, + }, + "pics": { + "ask_picture": { + RESPONSE: TelegramMessage(text="Send me a picture"), + TRANSITIONS: { + ("pics", "send_one"): cnd.any( + [ + # Telegram can put photos + # both in 'photo' and 'document' fields. + # We should consider both cases + # when we check the message for media. + telegram_condition(content_types=["photo"]), + telegram_condition( + func=lambda message: ( + # check attachments in message properties + message.document + and message.document.mime_type == "image/jpeg" + ), + content_types=["document"], + ), + ] + ), + ("pics", "send_many"): telegram_condition( + content_types=["text"] + ), + ("pics", "ask_picture"): cnd.true(), + }, + }, + "send_one": { + # An HTTP path or a path to a local file can be used here. + RESPONSE: TelegramMessage( + text="Here's my picture!", + attachments=Attachments(files=[Image(source=picture_url)]), + ), + TRANSITIONS: {("root", "fallback"): cnd.true()}, + }, + "send_many": { + RESPONSE: TelegramMessage( + text="Look at my pictures!", + # An HTTP path or a path to a local file can be used here. + attachments=Attachments(files=[Image(source=picture_url)] * 2), + ), + TRANSITIONS: {("root", "fallback"): cnd.true()}, + }, + }, +} + + +# testing +happy_path = ( + ( + TelegramMessage(text="/start"), + TelegramMessage(text="Send me a picture"), + ), + ( + TelegramMessage( + attachments=Attachments(files=[Image(source=picture_url)]) + ), + TelegramMessage( + text="Here's my picture!", + attachments=Attachments(files=[Image(source=picture_url)]), + ), + ), + ( + TelegramMessage(text="ok"), + TelegramMessage( + text="Finishing test, send /restart command to restart" + ), + ), + ( + TelegramMessage(text="/restart"), + TelegramMessage(text="Send me a picture"), + ), + ( + TelegramMessage(text="No"), + TelegramMessage( + text="Look at my pictures!", + attachments=Attachments(files=[Image(source=picture_url)] * 2), + ), + ), + ( + TelegramMessage(text="ok"), + TelegramMessage( + text="Finishing test, send /restart command to restart" + ), + ), + ( + TelegramMessage(text="/restart"), + TelegramMessage(text="Send me a picture"), + ), +) + + +# %% +def extract_data(ctx: Context, _: Pipeline): # A function to extract data with + message = ctx.last_request + if message is None: + return ctx + update = getattr(message, "update", None) + if update is None: + return ctx + if not isinstance(update, Message): + return ctx + if ( + # check attachments in update properties + not update.photo + and not (update.document and update.document.mime_type == "image/jpeg") + ): + return ctx + photo = update.document or update.photo[-1] + file = interface.messenger.get_file(photo.file_id) + result = interface.messenger.download_file(file.file_path) + with open("photo.jpg", "wb+") as new_file: + new_file.write(result) + return ctx + + +# %% +pipeline = Pipeline.from_script( + script=script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), + messenger_interface=interface, + pre_services=[extract_data], +) + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.telegram.6_conditions_extras.py.txt b/_sources/tutorials/tutorials.messengers.telegram.6_conditions_extras.py.txt new file mode 100644 index 0000000000..db161df036 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.6_conditions_extras.py.txt @@ -0,0 +1,124 @@ +# %% [markdown] +""" +# Telegram: 6. Conditions Extras + +This tutorial shows how to use additional update filters +inherited from the `pytelegrambotapi` library. + +%mddoclink(api,messengers.telegram.messenger,telegram_condition) +function and different types of %mddoclink(api,messengers.telegram.messenger,UpdateType) +are used for telegram message type checking. +""" + + +# %pip install dff[telegram] + +# %% +import os + +from dff.script import TRANSITIONS, RESPONSE, GLOBAL +import dff.script.conditions as cnd +from dff.messengers.telegram import ( + PollingTelegramInterface, + TelegramMessage, + telegram_condition, + UpdateType, +) +from dff.pipeline import Pipeline +from dff.utils.testing.common import is_interactive_mode + + +# %% [markdown] +""" +In our Telegram module, we adopted the system of filters +available in the `pytelegrambotapi` library. + +Aside from `MESSAGE` you can use +other triggers to interact with the api. In this tutorial, we use +handlers of other type as global conditions that trigger a response +from the bot. + +Here, we use the following triggers: + +* `chat_join_request`: join request is sent to the chat where the bot is. +* `my_chat_member`: triggered when the bot is invited to a chat. +* `inline_query`: triggered when an inline query is being sent to the bot. + +The other available conditions are: + +* `channel_post`: new post is created in a channel the bot is subscribed to; +* `edited_channel_post`: post is edited in a channel the bot is subscribed to; +* `shipping_query`: shipping query is sent by the user; +* `pre_checkout_query`: order confirmation is sent by the user; +* `poll`: poll is sent to the chat; +* `poll_answer`: users answered the poll sent by the bot. + +You can read more on those in the Telegram documentation or in the docs for the `telebot` library. +""" + + +# %% +script = { + GLOBAL: { + TRANSITIONS: { + ("greeting_flow", "node1"): cnd.any( + [ + # say hi when invited to a chat + telegram_condition( + update_type=UpdateType.CHAT_JOIN_REQUEST, + func=lambda x: True, + ), + # say hi when someone enters the chat + telegram_condition( + update_type=UpdateType.MY_CHAT_MEMBER, + func=lambda x: True, + ), + ] + ), + # send a message when inline query is received + ("greeting_flow", "node2"): telegram_condition( + update_type=UpdateType.INLINE_QUERY, + ), + }, + }, + "greeting_flow": { + "start_node": { + TRANSITIONS: { + "node1": telegram_condition(commands=["start", "restart"]) + }, + }, + "node1": { + RESPONSE: TelegramMessage(text="Hi"), + TRANSITIONS: {"start_node": cnd.true()}, + }, + "node2": { + RESPONSE: TelegramMessage(text="Inline query received."), + TRANSITIONS: {"start_node": cnd.true()}, + }, + "fallback_node": { + RESPONSE: TelegramMessage(text="Ooops"), + }, + }, +} + + +# %% +interface = PollingTelegramInterface(token=os.environ["TG_BOT_TOKEN"]) + + +# %% +pipeline = Pipeline.from_script( + script=script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), + messenger_interface=interface, +) + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.telegram.7_polling_setup.py.txt b/_sources/tutorials/tutorials.messengers.telegram.7_polling_setup.py.txt new file mode 100644 index 0000000000..d070e47280 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.7_polling_setup.py.txt @@ -0,0 +1,64 @@ +# %% [markdown] +""" +# Telegram: 7. Polling Setup + +The following tutorial shows how to configure `PollingTelegramInterface`. + +See %mddoclink(api,messengers.telegram.interface,PollingTelegramInterface) +for more information. +""" + +# %pip install dff[telegram] + +# %% +import os + +from dff.messengers.telegram.interface import PollingTelegramInterface +from dff.pipeline import Pipeline + +from dff.utils.testing.common import is_interactive_mode +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH +from telebot.util import update_types + + +# %% [markdown] +""" +`PollingTelegramInterface` can be configured with the same parameters +that are used in the `pytelegrambotapi` library, specifically: + +* interval - time between calls to the API. +* allowed updates - updates that should be fetched. +* timeout - general timeout. +* long polling timeout - timeout for polling. +""" + + +# %% +interface = PollingTelegramInterface( + token=os.environ["TG_BOT_TOKEN"], + interval=2, + allowed_updates=update_types, + timeout=30, + long_polling_timeout=30, +) + + +# testing +happy_path = HAPPY_PATH + + +# %% +pipeline = Pipeline.from_script( + *TOY_SCRIPT_ARGS, + messenger_interface=interface, + # The interface can be passed as a pipeline argument +) + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.telegram.8_webhook_setup.py.txt b/_sources/tutorials/tutorials.messengers.telegram.8_webhook_setup.py.txt new file mode 100644 index 0000000000..a7f4fd68f5 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.telegram.8_webhook_setup.py.txt @@ -0,0 +1,61 @@ +# %% [markdown] +""" +# Telegram: 8. Webhook Setup + +The following tutorial shows how to use `CallbackTelegramInterface` +that makes your bot accessible through a public webhook. + +See %mddoclink(api,messengers.common.interface,CallbackMessengerInterface) +for more information. +""" + +# %pip install dff[telegram] flask + +# %% +import os + +from dff.messengers.telegram import ( + CallbackTelegramInterface, +) +from dff.pipeline import Pipeline +from dff.utils.testing.toy_script import TOY_SCRIPT_ARGS, HAPPY_PATH +from dff.utils.testing.common import is_interactive_mode + + +# %% [markdown] +""" +To set up a webhook, you need a messenger and a web application instance. +This class can be configured with the following parameters: + +* app - Flask application. You can pass an application with an arbitrary + number of pre-configured routes. Created automatically if not set. +* host - application host. +* port - application port. +* endpoint - bot access endpoint. +* full_uri - full public address of the endpoint. HTTPS should be enabled + for successful configuration. +""" + + +# %% +interface = CallbackTelegramInterface(token=os.environ["TG_BOT_TOKEN"]) + + +# %% +pipeline = Pipeline.from_script( + *TOY_SCRIPT_ARGS, + messenger_interface=interface, + # The interface can be passed as a pipeline argument +) + +# testing +happy_path = HAPPY_PATH + + +def main(): + pipeline.run() + + +if __name__ == "__main__" and is_interactive_mode(): + # prevent run during doc building + main() diff --git a/_sources/tutorials/tutorials.messengers.web_api_interface.1_fastapi.py.txt b/_sources/tutorials/tutorials.messengers.web_api_interface.1_fastapi.py.txt new file mode 100644 index 0000000000..199d1eb282 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.web_api_interface.1_fastapi.py.txt @@ -0,0 +1,113 @@ +# %% [markdown] +""" +# Web API: 1. FastAPI + +This tutorial shows how to create an API for DFF using FastAPI and +introduces messenger interfaces. + +You can see the result at http://127.0.0.1:8000/docs. + +Here, %mddoclink(api,messengers.common.interface,CallbackMessengerInterface) +is used to process requests. + +%mddoclink(api,script.core.message,Message) is used in creating a JSON Schema for the endpoint. +""" + +# %pip install dff uvicorn fastapi + +# %% +from dff.messengers.common.interface import CallbackMessengerInterface +from dff.script import Message +from dff.pipeline import Pipeline +from dff.utils.testing import TOY_SCRIPT_ARGS, is_interactive_mode + +import uvicorn +from pydantic import BaseModel +from fastapi import FastAPI + +# %% [markdown] +""" +Messenger interfaces establish communication between users and the pipeline. +They manage message channel initialization and termination +as well as pipeline execution on every user request. +There are two built-in messenger interface types that can be extended +through inheritance: + +* `PollingMessengerInterface` - Starts polling for user requests + in a loop upon initialization, + it has following methods: + + * `_request()` - Method that is used to retrieve user requests from a messenger, + should return list of tuples: (user request, unique dialog id). + * `_respond(responses)` - Method that sends responses generated by pipeline + to users through a messenger, + accepts list of dialog `Contexts`. + * `_on_exception(e)` - Method that is called when a critical exception occurs + i.e. exception from context storage or messenger interface, not a service exception. + + Such exceptions lead to the termination of the loop. + * `connect(pipeline_runner, loop, timeout)` - + Method that starts the polling loop. + + This method is called inside `pipeline.run` method. + + It accepts 3 arguments: + + * a callback that runs pipeline, + * a function that should return True to continue polling, + * and time to wait between loop executions. + +* `CallbackMessengerInterface` - Creates message channel + and provides a callback for pipeline execution, + it has following methods: + + * `on_request(request, ctx_id)` or `on_request_async(request, ctx_id)` - + Method that should be called each time + user provides new input to pipeline, + returns dialog Context. + * `connect(pipeline_runner)` - Method that sets `pipeline_runner` as + a function to be called inside `on_request`. + + This method is called inside `pipeline.run` method. + +You can find API reference for these classes [here](%doclink(api,messengers.common.interface)). + +Here the default `CallbackMessengerInterface` is used to setup +communication between the pipeline on the server side and the messenger client. +""" + +# %% +messenger_interface = CallbackMessengerInterface() +# CallbackMessengerInterface instantiating the dedicated messenger interface +pipeline = Pipeline.from_script( + *TOY_SCRIPT_ARGS, messenger_interface=messenger_interface +) + + +# %% +app = FastAPI() + + +class Output(BaseModel): + user_id: str + response: Message + + +@app.post("/chat", response_model=Output) +async def respond( + user_id: str, + user_message: Message, +): + context = await messenger_interface.on_request_async(user_message, user_id) + return {"user_id": user_id, "response": context.last_response} + + +# %% +if __name__ == "__main__": + if is_interactive_mode(): # do not run this during doc building + pipeline.run() # runs the messenger_interface.connect method + uvicorn.run( + app, + host="127.0.0.1", + port=8000, + ) diff --git a/_sources/tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.py.txt b/_sources/tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.py.txt new file mode 100644 index 0000000000..4719d14f36 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.web_api_interface.2_websocket_chat.py.txt @@ -0,0 +1,116 @@ +# %% [markdown] +""" +# Web API: 2. WebSocket Chat + +This tutorial shows how to create a Web chat on FastAPI using websockets. + +You can see the result at http://127.0.0.1:8000/. + +This tutorial is a modified version of the FastAPI tutorial on WebSockets: +https://fastapi.tiangolo.com/advanced/websockets/. + +As mentioned in that tutorial, + +> ... for this example, we'll use a very simple HTML document with some JavaScript, +> all inside a long string. +> This, of course, is not optimal and you wouldn't use it for production. + +Here, %mddoclink(api,messengers.common.interface,CallbackMessengerInterface) +is used to process requests. + +%mddoclink(api,script.core.message,Message) is used to represent text messages. +""" + +# %pip install dff uvicorn fastapi + +# %% +from dff.messengers.common.interface import CallbackMessengerInterface +from dff.script import Message +from dff.pipeline import Pipeline +from dff.utils.testing import TOY_SCRIPT_ARGS, is_interactive_mode + +import uvicorn +from fastapi import FastAPI, WebSocket, WebSocketDisconnect +from fastapi.responses import HTMLResponse + + +# %% +messenger_interface = CallbackMessengerInterface() +pipeline = Pipeline.from_script( + *TOY_SCRIPT_ARGS, messenger_interface=messenger_interface +) + + +# %% +app = FastAPI() + +html = """ + + + + Chat + + +

    WebSocket Chat

    +
    + + +
    +
      +
    + + + +""" + + +@app.get("/") +async def get(): + return HTMLResponse(html) + + +@app.websocket("/ws/{client_id}") +async def websocket_endpoint(websocket: WebSocket, client_id: int): + await websocket.accept() + try: + while True: + data = await websocket.receive_text() + await websocket.send_text(f"User: {data}") + request = Message(text=data) + context = await messenger_interface.on_request_async( + request, client_id + ) + response = context.last_response.text + if response is not None: + await websocket.send_text(f"Bot: {response}") + else: + await websocket.send_text("Bot did not return text.") + except WebSocketDisconnect: # ignore disconnections + pass + + +# %% +if __name__ == "__main__": + if is_interactive_mode(): # do not run this during doc building + pipeline.run() + uvicorn.run( + app, + host="127.0.0.1", + port=8000, + ) diff --git a/_sources/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.py.txt b/_sources/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.py.txt new file mode 100644 index 0000000000..ccd1e13a77 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.py.txt @@ -0,0 +1,150 @@ +# %% [markdown] +""" +# Web API: 3. Load testing with Locust + +This tutorial shows how to use an API endpoint created in the FastAPI tutorial in load testing. +""" + +# %pip install dff locust + +# %% [markdown] +""" +## Running Locust + +1. Run this file directly: + ```bash + python {file_name} + ``` +2. Run locust targeting this file: + ```bash + locust -f {file_name} + ``` +3. Run from python: + ```python + import sys + from locust import main + + sys.argv = ["locust", "-f", {file_name}] + main.main() + ``` + +You should see the result at http://127.0.0.1:8089. + +Make sure that your POST endpoint is also running (run the FastAPI tutorial). +""" + + +# %% +################################################################################ +# this patch is only needed to run this file in IPython kernel +# and can be safely removed +import gevent.monkey + +gevent.monkey.patch_all() +################################################################################ + + +# %% +import uuid +import time +import sys + +from locust import FastHttpUser, task, constant, main + +from dff.script import Message +from dff.utils.testing import HAPPY_PATH, is_interactive_mode + + +# %% +class DFFUser(FastHttpUser): + wait_time = constant(1) + + def check_happy_path(self, happy_path): + """ + Check a happy path. + For each `(request, response)` pair in `happy_path`: + 1. Send request to the API endpoint and catch its response. + 2. Compare API response with the `response`. + If they do not match, fail the request. + + :param happy_path: + An iterable of tuples of + `(Message, Message | Callable(Message->str|None) | None)`. + + If the second element is `Message`, + check that API response matches it. + + If the second element is `None`, + do not check the API response. + + If the second element is a `Callable`, + call it with the API response as its argument. + If the function returns a string, + that string is considered an error message. + If the function returns `None`, + the API response is considered correct. + """ + user_id = str(uuid.uuid4()) + + for request, response in happy_path: + with self.client.post( + f"/chat?user_id={user_id}", + headers={ + "accept": "application/json", + "Content-Type": "application/json", + }, + # Name is the displayed name of the request. + name=f"/chat?user_message={request.json()}", + data=request.json(), + catch_response=True, + ) as candidate_response: + text_response = Message.model_validate( + candidate_response.json().get("response") + ) + + if response is not None: + if callable(response): + error_message = response(text_response) + if error_message is not None: + candidate_response.failure(error_message) + elif text_response != response: + candidate_response.failure( + f"Expected: {response.model_dump_json()}\n" + f"Got: {text_response.model_dump_json()}" + ) + + time.sleep(self.wait_time()) + + @task(3) # <- this task is 3 times more likely than the other + def dialog_1(self): + self.check_happy_path(HAPPY_PATH) + + @task + def dialog_2(self): + def check_first_message(msg: Message) -> str | None: + if msg.text is None: + return f"Message does not contain text: {msg.model_dump_json()}" + if "Hi" not in msg.text: + return ( + f'"Hi" is not in the response message: ' + f"{msg.model_dump_json()}" + ) + return None + + self.check_happy_path( + [ + # a function can be used to check the return message + (Message(text="Hi"), check_first_message), + # a None is used if return message should not be checked + (Message(text="i'm fine, how are you?"), None), + # this should fail + (Message(text="Hi"), check_first_message), + ] + ) + + +# %% +if __name__ == "__main__": + if is_interactive_mode(): + sys.argv = ["locust", "-f", __file__] + main.main() diff --git a/_sources/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.py.txt b/_sources/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.py.txt new file mode 100644 index 0000000000..90dd195dd5 --- /dev/null +++ b/_sources/tutorials/tutorials.messengers.web_api_interface.4_streamlit_chat.py.txt @@ -0,0 +1,188 @@ +# %% [markdown] +# # Web API: 4. Streamlit chat interface +# +# This tutorial shows how to use an API endpoint created in the FastAPI tutorial +# in a Streamlit chat. +# +# A demonstration of the chat: +# ![demo](https://user-images.githubusercontent.com/61429541/238721597-ef88261d-e9e6-497d-ba68-0bcc9a765808.png) + +# %pip install dff streamlit streamlit-chat + +# %% [markdown] +# ## Running Streamlit: +# +# ```bash +# streamlit run {file_name} +# ``` + + +# %% [markdown] +# ## Module and package import + + +# %% +########################################################### +# This patch is only needed to import Message from dff. +# Streamlit Chat interface can be written without using it. +import asyncio + +loop = asyncio.new_event_loop() +asyncio.set_event_loop(loop) +########################################################### + + +# %% +import uuid +import itertools + +import requests +import streamlit as st +from streamlit_chat import message +import streamlit.components.v1 as components +from dff.script import Message + + +# %% [markdown] +# ## API configuration +# +# Here we define methods to contact the API endpoint. + + +# %% +API_URL = "http://localhost:8000/chat" + + +def query(payload, user_id) -> requests.Response: + response = requests.post( + API_URL + f"?user_id={user_id}", + headers={ + "accept": "application/json", + "Content-Type": "application/json", + }, + json=payload, + ) + return response + + +# %% [markdown] +# ## Streamlit configuration +# +# Here we configure Streamlit page and initialize some session variables: +# +# 1. `user_id` -- stores user_id to be used in pipeline. +# 2. `bot_responses` -- a list of bot responses. +# 3. `user_requests` -- a list of user requests. + + +# %% +st.set_page_config(page_title="Streamlit DFF Chat", page_icon=":robot:") + +st.header("Streamlit DFF Chat") + +if "user_id" not in st.session_state: + st.session_state["user_id"] = str(uuid.uuid4()) + +if "bot_responses" not in st.session_state: + st.session_state["bot_responses"] = [] + +if "user_requests" not in st.session_state: + st.session_state["user_requests"] = [] + + +# %% [markdown] +# ## UI setup +# +# Here we configure elements that will be used in Streamlit to interact with the API. +# +# First we define a text input field which a user is supposed to type his requests into. +# Then we define a button that sends a query to the API, logs requests and responses, +# and clears the text field. + + +# %% +def send_and_receive(): + """ + Send text inside the input field. Receive response from API endpoint. + + Add both the request and response to `user_requests` and `bot_responses`. + + We do not call this function inside the `text_input.on_change` because then + we'd call it whenever the text field loses focus + (e.g. when a browser tab is switched). + """ + user_request = st.session_state["input"] + + if user_request == "": + return + + st.session_state["user_requests"].append(user_request) + + bot_response = query( + Message(text=user_request).model_dump(), + user_id=st.session_state["user_id"], + ) + bot_response.raise_for_status() + + bot_message = Message.model_validate(bot_response.json()["response"]).text + + # # Implementation without using Message: + # bot_response = query( + # {"text": user_request}, + # user_id=st.session_state["user_id"] + # ) + # bot_response.raise_for_status() + # + # bot_message = bot_response.json()["response"]["text"] + + st.session_state["bot_responses"].append(bot_message) + + st.session_state["input"] = "" + + +# %% +st.text_input("You: ", key="input") +st.button("Send", on_click=send_and_receive) + + +# %% [markdown] +# ### Component patch +# +# Here we add a component that presses the `Send` button whenever user presses the `Enter` key. + + +# %% +components.html( + """ + +""", + height=0, + width=0, +) + + +# %% [markdown] +# ### Message display +# +# Here we use the `streamlit-chat` package to display user requests and bot responses. + + +# %% +for i, bot_response, user_request in zip( + itertools.count(0), + st.session_state.get("bot_responses", []), + st.session_state.get("user_requests", []), +): + message(user_request, key=f"{i}_user", is_user=True) + message(bot_response, key=f"{i}_bot") diff --git a/_sources/tutorials/tutorials.pipeline.1_basics.py.txt b/_sources/tutorials/tutorials.pipeline.1_basics.py.txt new file mode 100644 index 0000000000..91d0dbbcd8 --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.1_basics.py.txt @@ -0,0 +1,84 @@ +# %% [markdown] +""" +# 1. Basics + +The following tutorial shows basic usage of `pipeline` +module as an extension to `dff.script.core`. + +Here, `__call__` (same as %mddoclink(api,pipeline.pipeline.pipeline,Pipeline.run)) +method is used to execute pipeline once. +""" + +# %pip install dff + +# %% +from dff.script import Context, Message + +from dff.pipeline import Pipeline + +from dff.utils.testing import ( + check_happy_path, + is_interactive_mode, + HAPPY_PATH, + TOY_SCRIPT, + TOY_SCRIPT_ARGS, +) + + +# %% [markdown] +""" +`Pipeline` is an object, that automates script execution and context management. +`from_script` method can be used to create +a pipeline of the most basic structure: +"preprocessors -> actor -> postprocessors" +as well as to define `context_storage` and `messenger_interface`. +Actor is a component of :py:class:`.Pipeline`, that contains the :py:class:`.Script` +and handles it. It is responsible for processing user input and determining +the appropriate response based on the current state of the conversation and the script. +These parameters usage will be shown in tutorials 2, 3 and 6. + +Here only required parameters are provided to pipeline. +`context_storage` will default to simple Python dict and +`messenger_interface` will never be used. +pre- and postprocessors lists are empty. +`Pipeline` object can be called with user input +as first argument and dialog id (any immutable object). +This call will return `Context`, +its `last_response` property will be actors response. +""" + +# %% +pipeline = Pipeline.from_script( + TOY_SCRIPT, + # Pipeline script object, defined in `dff.utils.testing.toy_script` + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), +) + + +# %% [markdown] +""" +For the sake of brevity, other tutorials might use `TOY_SCRIPT_ARGS` to initialize pipeline: +""" + +# %% +assert TOY_SCRIPT_ARGS == ( + TOY_SCRIPT, + ("greeting_flow", "start_node"), + ("greeting_flow", "fallback_node"), +) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + # a function for automatic tutorial running (testing) with HAPPY_PATH + + # This runs tutorial in interactive mode if not in IPython env + # and if `DISABLE_INTERACTIVE_MODE` is not set + if is_interactive_mode(): + ctx_id = 0 # 0 will be current dialog (context) identification. + while True: + message = Message(text=input("Send request: ")) + ctx: Context = pipeline(message, ctx_id) + print(ctx.last_response) diff --git a/_sources/tutorials/tutorials.pipeline.2_pre_and_post_processors.py.txt b/_sources/tutorials/tutorials.pipeline.2_pre_and_post_processors.py.txt new file mode 100644 index 0000000000..f26fafa54a --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.2_pre_and_post_processors.py.txt @@ -0,0 +1,95 @@ +# %% [markdown] +""" +# 2. Pre- and postprocessors + +The following tutorial shows more advanced usage of `pipeline` +module as an extension to `dff.script.core`. + +Here, %mddoclink(api,script.core.context,Context.misc) +dictionary of context is used for storing additional data. +""" + +# %pip install dff + +# %% +import logging + +from dff.messengers.common import CLIMessengerInterface +from dff.script import Context, Message + +from dff.pipeline import Pipeline + +from dff.utils.testing import ( + check_happy_path, + is_interactive_mode, + HAPPY_PATH, + TOY_SCRIPT_ARGS, +) + +logger = logging.getLogger(__name__) + + +# %% [markdown] +""" +When Pipeline is created with `from_script` method, additional pre- +and postprocessors can be defined. +These can be any `ServiceBuilder` objects (defined in `types` module) +- callables, objects or dicts. +They are being turned into special `Service` objects (see tutorial 3), +that will be run before or after `Actor` respectively. +These services can be used to access external APIs, annotate user input, etc. + +Service callable signature can be one of the following: +`[ctx]`, `[ctx, pipeline]` or `[ctx, actor, info]` (see tutorial 3), +where: + +* `ctx` - Context of the current dialog. +* `pipeline` - The current pipeline. +* `info` - dictionary, containing information about + current service and pipeline execution state (see tutorial 4). + +Here a preprocessor ("ping") and a postprocessor ("pong") are added to pipeline. +They share data in `context.misc` - +a common place for sharing data between services and actor. +""" + + +# %% +def ping_processor(ctx: Context): + ctx.misc["ping"] = True + + +def pong_processor(ctx: Context): + ping = ctx.misc.get("ping", False) + ctx.misc["pong"] = ping + + +# %% +pipeline = Pipeline.from_script( + *TOY_SCRIPT_ARGS, + context_storage={}, # `context_storage` - a dictionary or + # a `DBContextStorage` instance, + # a place to store dialog contexts + messenger_interface=CLIMessengerInterface(), + # `messenger_interface` - a message channel adapter, + # it's not used in this tutorial + pre_services=[ping_processor], + post_services=[pong_processor], +) + + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + ctx_id = 0 # 0 will be current dialog (context) identification. + while True: + message = Message(text=input("Send request: ")) + ctx: Context = pipeline(message, ctx_id) + print(f"Response: {ctx.last_response}") + ping_pong = ctx.misc.get("ping", False) and ctx.misc.get( + "pong", False + ) + print( + f"Ping-pong exchange: {'completed' if ping_pong else 'failed'}." + ) + logger.info(f"Context misc: {ctx.misc}") diff --git a/_sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.py.txt b/_sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.py.txt new file mode 100644 index 0000000000..dbe7fb1e5b --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.py.txt @@ -0,0 +1,97 @@ +# %% [markdown] +""" +# 3. Pipeline dict with services (basic) + +The following tutorial shows `pipeline` creation from +dict and most important pipeline components. + +Here, %mddoclink(api,pipeline.service.service,Service) +class, that can be used for pre- and postprocessing of messages is shown. + +Pipeline's %mddoclink(api,pipeline.pipeline.pipeline,Pipeline.from_dict) +static method is used for pipeline creation (from dictionary). +""" + +# %pip install dff + +# %% +import logging + +from dff.pipeline import Service, Pipeline, ACTOR + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +logger = logging.getLogger(__name__) + + +# %% [markdown] +""" +When Pipeline is created using `from_dict` method, +pipeline should be defined as a dictionary. +It should contain `services` - a `ServiceGroupBuilder` object, +basically a list of `ServiceBuilder` or `ServiceGroupBuilder` objects, +see tutorial 4. + +On pipeline execution services from `services` +list are run without difference between pre- and postprocessors. +Actor constant "ACTOR" should also be present among services. +ServiceBuilder object can be defined either with callable +(see tutorial 2) or with dict / object. +It should contain `handler` - a ServiceBuilder object. + +Not only Pipeline can be run using `__call__` method, +for most cases `run` method should be used. +It starts pipeline asynchronously and connects to provided messenger interface. + +Here pipeline contains 4 services, +defined in 4 different ways with different signatures. +""" + + +# %% +def prepreprocess(_): + logger.info( + "preprocession intent-detection Service running (defined as a dict)" + ) + + +def preprocess(_): + logger.info( + "another preprocession web-based annotator Service " + "(defined as a callable)" + ) + + +def postprocess(_): + logger.info("postprocession Service (defined as an object)") + + +# %% +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + { + "handler": prepreprocess, + }, + preprocess, + ACTOR, + Service( + handler=postprocess, + ), + ], +} + +# %% +pipeline = Pipeline.from_dict(pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) # This runs tutorial in interactive mode diff --git a/_sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.py.txt b/_sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.py.txt new file mode 100644 index 0000000000..91c29dbded --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.3_pipeline_dict_with_services_full.py.txt @@ -0,0 +1,167 @@ +# %% [markdown] +""" +# 3. Pipeline dict with services (full) + +The following tutorial shows `pipeline` creation from dict +and most important pipeline components. + +This tutorial is a more advanced version of the +[previous tutorial](%doclink(tutorial,pipeline.3_pipeline_dict_with_services_basic)). +""" + +# %pip install dff + +# %% +import json +import logging +import urllib.request + +from dff.script import Context +from dff.messengers.common import CLIMessengerInterface +from dff.pipeline import Service, Pipeline, ServiceRuntimeInfo, ACTOR +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + +from dff.utils.testing.toy_script import TOY_SCRIPT, HAPPY_PATH + +logger = logging.getLogger(__name__) + + +# %% [markdown] +""" +When Pipeline is created using `from_dict` method, +pipeline should be defined as `PipelineBuilder` objects +(defined in `types` module). +These objects are dictionaries of particular structure: + +* `messenger_interface` - `MessengerInterface` instance, + is used to connect to channel and transfer IO to user. +* `context_storage` - Place to store dialog contexts + (dictionary or a `DBContextStorage` instance). +* `services` (required) - A `ServiceGroupBuilder` object, + basically a list of `ServiceBuilder` or `ServiceGroupBuilder` objects, + see tutorial 4. +* `wrappers` - A list of pipeline wrappers, see tutorial 7. +* `timeout` - Pipeline timeout, see tutorial 5. +* `optimization_warnings` - Whether pipeline asynchronous structure + should be checked during initialization, + see tutorial 5. + +On pipeline execution services from `services` list are run +without difference between pre- and postprocessors. +If "ACTOR" constant is not found among `services` pipeline creation fails. +There can be only one "ACTOR" constant in the pipeline. +ServiceBuilder object can be defined either with callable (see tutorial 2) or +with dict of structure / object with following constructor arguments: + +* `handler` (required) - ServiceBuilder, + if handler is an object or a dict itself, + it will be used instead of base ServiceBuilder. + NB! Fields of nested ServiceBuilder will be overridden + by defined fields of the base ServiceBuilder. +* `wrappers` - a list of service wrappers, see tutorial 7. +* `timeout` - service timeout, see tutorial 5. +* `asynchronous` - whether or not this service _should_ be asynchronous + (keep in mind that not all services _can_ be asynchronous), + see tutorial 5. +* `start_condition` - service start condition, see tutorial 4. +* `name` - custom defined name for the service + (keep in mind that names in one ServiceGroup should be unique), + see tutorial 4. + +Not only Pipeline can be run using `__call__` method, +for most cases `run` method should be used. +It starts pipeline asynchronously and connects to provided messenger interface. + +Here pipeline contains 4 services, +defined in 4 different ways with different signatures. +First two of them write sample feature detection data to `ctx.misc`. +The first uses a constant expression and the second fetches from `example.com`. +Third one is "ACTOR" constant (it acts like a _special_ service here). +Final service logs `ctx.misc` dict. +""" + + +# %% +def prepreprocess(ctx: Context): + logger.info( + "preprocession intent-detection Service running (defined as a dict)" + ) + ctx.misc["preprocess_detection"] = { + ctx.last_request.text: "some_intent" + } # Similar syntax can be used to access + # service output dedicated to current pipeline run + + +def preprocess(ctx: Context, _, info: ServiceRuntimeInfo): + logger.info( + f"another preprocession web-based annotator Service" + f"(defined as a callable), named '{info.name}'" + ) + with urllib.request.urlopen("https://example.com/") as webpage: + web_content = webpage.read().decode( + webpage.headers.get_content_charset() + ) + ctx.misc["another_detection"] = { + ctx.last_request.text: "online" + if "Example Domain" in web_content + else "offline" + } + + +def postprocess(ctx: Context, pl: Pipeline): + logger.info("postprocession Service (defined as an object)") + logger.info( + f"resulting misc looks like:" + f"{json.dumps(ctx.misc, indent=4, default=str)}" + ) + fallback_flow, fallback_node, _ = pl.actor.fallback_label + received_response = pl.script[fallback_flow][fallback_node].response + responses_match = received_response == ctx.last_response + logger.info(f"actor is{'' if responses_match else ' not'} in fallback node") + + +# %% +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "messenger_interface": CLIMessengerInterface( + intro="Hi, this is a brand new Pipeline running!", + prompt_request="Request: ", + prompt_response="Response: ", + ), # `CLIMessengerInterface` has the following constructor parameters: + # `intro` - a string that will be displayed + # on connection to interface (on `pipeline.run`) + # `prompt_request` - a string that will be displayed before user input + # `prompt_response` - an output prefix string + "context_storage": {}, + "components": [ + { + "handler": { + "handler": prepreprocess, + "name": "silly_service_name", + }, + "name": "preprocessor", + }, # This service will be named `preprocessor` + # handler name will be overridden + preprocess, + ACTOR, + Service( + handler=postprocess, + name="postprocessor", + ), + ], +} + + +# %% +pipeline = Pipeline.from_dict(pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.py.txt b/_sources/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.py.txt new file mode 100644 index 0000000000..18b4527b5c --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.4_groups_and_conditions_basic.py.txt @@ -0,0 +1,125 @@ +# %% [markdown] +""" +# 4. Groups and conditions (basic) + +The following example shows `pipeline` service group usage and start conditions. + +Here, %mddoclink(api,pipeline.service.service,Service)s +and %mddoclink(api,pipeline.service.group,ServiceGroup)s +are shown for advanced data pre- and postprocessing based on conditions. +""" + +# %pip install dff + +# %% +import json +import logging + +from dff.pipeline import ( + Service, + Pipeline, + not_condition, + service_successful_condition, + ServiceRuntimeInfo, + ACTOR, +) + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +logger = logging.getLogger(__name__) + + +# %% [markdown] +""" +Pipeline can contain not only single services, but also service groups. +Service groups can be defined as `ServiceGroupBuilder` objects: + lists of `ServiceBuilders` and `ServiceGroupBuilders` or objects. +The objects should contain `services` - +a ServiceBuilder and ServiceGroupBuilder object list. + +To receive serialized information about service, + service group or pipeline a property `info_dict` can be used, + it returns important object properties as a dict. + +Services and service groups can be executed conditionally. +Conditions are functions passed to `start_condition` argument. +These functions should have following signature: + + (ctx: Context, pipeline: Pipeline) -> bool. + +Service is only executed if its start_condition returned `True`. +By default all the services start unconditionally. +There are number of built-in condition functions. +Built-in condition functions check other service states. +These are most important built-in condition functions: + +* `always_start_condition` - Default condition function, always starts service. +* `service_successful_condition(path)` - Function that checks, + whether service with given `path` executed successfully. +* `not_condition(function)` - Function that returns result + opposite from the one returned + by the `function` (condition function) argument. + +Here there is a conditionally executed service named +`never_running_service` is always executed. +It is executed only if `always_running_service` +is not finished, that should never happen. +The service named `context_printing_service` +prints pipeline runtime information, +that contains execution state of all previously run services. +""" + + +# %% +def always_running_service(_, __, info: ServiceRuntimeInfo): + logger.info(f"Service '{info.name}' is running...") + + +def never_running_service(_, __, info: ServiceRuntimeInfo): + raise Exception(f"Oh no! The '{info.name}' service is running!") + + +def runtime_info_printing_service(_, __, info: ServiceRuntimeInfo): + logger.info( + f"Service '{info.name}' runtime execution info:" + f"{json.dumps(info, indent=4, default=str)}" + ) + + +# %% +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + Service( + handler=always_running_service, + name="always_running_service", + ), + ACTOR, + Service( + handler=never_running_service, + start_condition=not_condition( + service_successful_condition(".pipeline.always_running_service") + ), + ), + Service( + handler=runtime_info_printing_service, + name="runtime_info_printing_service", + ), + ], +} + + +# %% +pipeline = Pipeline.from_dict(pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.pipeline.4_groups_and_conditions_full.py.txt b/_sources/tutorials/tutorials.pipeline.4_groups_and_conditions_full.py.txt new file mode 100644 index 0000000000..fcd6ef5ae0 --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.4_groups_and_conditions_full.py.txt @@ -0,0 +1,214 @@ +# %% [markdown] +""" +# 4. Groups and conditions (full) + +The following tutorial shows `pipeline` service group usage and start conditions. + +This tutorial is a more advanced version of the +[previous tutorial](%doclink(tutorial,pipeline.4_groups_and_conditions_basic)). +""" + +# %pip install dff + +# %% +import logging + +from dff.pipeline import ( + Service, + Pipeline, + ServiceGroup, + not_condition, + service_successful_condition, + all_condition, + ServiceRuntimeInfo, + ACTOR, +) + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +logger = logging.getLogger(__name__) + + +# %% [markdown] +""" +Pipeline can contain not only single services, but also service groups. +Service groups can be defined as lists of `ServiceBuilders` + (in fact, all of the pipeline services are combined + into root service group named "pipeline"). +Alternatively, the groups can be defined as objects + with following constructor arguments: + +* `components` (required) - A list of ServiceBuilder objects, + ServiceGroup objects and lists of them. +* `wrappers` - A list of pipeline wrappers, see tutorial 7. +* `timeout` - Pipeline timeout, see tutorial 5. +* `asynchronous` - Whether or not this service group _should_ be asynchronous + (keep in mind that not all service groups _can_ be asynchronous), + see tutorial 5. +* `start_condition` - Service group start condition. +* `name` - Custom defined name for the service group + (keep in mind that names in one ServiceGroup should be unique). + +Service (and service group) object fields +are mostly the same as constructor parameters, +however there are some differences: + +* `requested_async_flag` - Contains the value received + from `asynchronous` constructor parameter. +* `calculated_async_flag` - Contains automatically calculated + possibility of the service to be asynchronous. +* `asynchronous` - Combination af `..._async_flag` fields, + requested value overrides calculated (if not `None`), + see tutorial 5. +* `path` - Contains globally unique (for pipeline) + path to the service or service group. + +If no name is specified for a service or service group, + the name will be generated according to the following rules: + +1. If service's handler is an Actor, service will be named 'actor'. +2. If service's handler is callable, + service will be named callable. +3. Service group will be named 'service_group'. +4. Otherwise, it will be named 'noname_service'. +5. After that an index will be added to service name. + +To receive serialized information about service, service group +or pipeline a property `info_dict` can be used, +it returns important object properties as a dict. +In addition to that `pretty_format` method of Pipeline +can be used to get all pipeline properties as a formatted string +(e.g. for logging or debugging purposes). + +Services and service groups can be executed conditionally. +Conditions are functions passed to `start_condition` argument. +These functions should have following signature: + + (ctx: Context, pipeline: Pipeline) -> bool. + +Service is only executed if its start_condition returned `True`. +By default all the services start unconditionally. +There are number of built-in condition functions as well +as possibility to create custom ones. +Custom condition functions can rely on data in `ctx.misc` +as well as on any external data source. +Built-in condition functions check other service states. +All of the services store their execution status in context, + this status can be one of the following: + +* `NOT_RUN` - Service hasn't bee executed yet. +* `RUNNING` - Service is currently being executed + (important for asynchronous services). +* `FINISHED` - Service finished successfully. +* `FAILED` - Service execution failed (that also throws an exception). + +There are following built-in condition functions: + +* `always_start_condition` - Default condition function, + always starts service. +* `service_successful_condition(path)` - + Function that checks, whether service + with given `path` executed successfully (is `FINISHED`). +* `not_condition(function)` - + Function that returns result opposite + from the one returned by + the `function` (condition function) argument. +* `aggregate_condition(aggregator, *functions)` - + Function that aggregated results of + numerous `functions` (condition functions) + using special `aggregator` function. +* `all_condition(*functions)` - + Function that returns True only if all + of the given `functions` + (condition functions) return `True`. +* `any_condition(*functions)` - + Function that returns `True` + if any of the given `functions` + (condition functions) return `True`. +NB! Actor service ALWAYS runs unconditionally. + +Here there are two conditionally executed services: +a service named `running_service` is executed + only if both `simple_services` in `service_group_0` + are finished successfully. +`never_running_service` is executed only if `running_service` is not finished, +this should never happen. +`context_printing_service` prints pipeline runtime information, + that contains execution state of all previously run services. +""" + + +# %% +def simple_service(_, __, info: ServiceRuntimeInfo): + logger.info(f"Service '{info.name}' is running...") + + +def never_running_service(_, __, info: ServiceRuntimeInfo): + raise Exception(f"Oh no! The '{info.name}' service is running!") + + +def runtime_info_printing_service(_, __, info: ServiceRuntimeInfo): + logger.info( + f"Service '{info.name}' runtime execution info:" + f"{info.model_dump_json(indent=4, default=str)}" + ) + + +# %% +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + [ + simple_service, # This simple service + # will be named `simple_service_0` + simple_service, # This simple service + # will be named `simple_service_1` + ], # Despite this is the unnamed service group in the root + # service group, it will be named `service_group_0` + ACTOR, + ServiceGroup( + name="named_group", + components=[ + Service( + handler=simple_service, + start_condition=all_condition( + service_successful_condition( + ".pipeline.service_group_0.simple_service_0" + ), + service_successful_condition( + ".pipeline.service_group_0.simple_service_1" + ), + ), # Alternative: + # service_successful_condition(".pipeline.service_group_0") + name="running_service", + ), # This simple service will be named `running_service`, + # because its name is manually overridden + Service( + handler=never_running_service, + start_condition=not_condition( + service_successful_condition( + ".pipeline.named_group.running_service" + ) + ), + ), + ], + ), + runtime_info_printing_service, + ], +} + +# %% +pipeline = Pipeline.from_dict(pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + logger.info(f"Pipeline structure:\n{pipeline.pretty_format()}") + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.py.txt b/_sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.py.txt new file mode 100644 index 0000000000..4d25fa7b96 --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_basic.py.txt @@ -0,0 +1,65 @@ +# %% [markdown] +""" +# 5. Asynchronous groups and services (basic) + +The following tutorial shows `pipeline` asynchronous +service and service group usage. + +Here, %mddoclink(api,pipeline.service.group,ServiceGroup)s +are shown for advanced and asynchronous data pre- and postprocessing. +""" + +# %pip install dff + +# %% +import asyncio + +from dff.pipeline import Pipeline, ACTOR + +from dff.utils.testing.common import ( + is_interactive_mode, + check_happy_path, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +# %% [markdown] +""" +Services and service groups can be synchronous and asynchronous. +In synchronous service groups services are executed consequently. +In asynchronous service groups all services are executed simultaneously. + +Service can be asynchronous if its handler is an async function. +Service group can be asynchronous if all services +and service groups inside it are asynchronous. + +Here there is an asynchronous service group, that contains 10 services, +each of them should sleep for 0.01 of a second. +However, as the group is asynchronous, +it is being executed for 0.01 of a second in total. +Service group `pipeline` can't be asynchronous because `actor` is synchronous. +""" + + +# %% +async def time_consuming_service(_): + await asyncio.sleep(0.01) + + +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + [time_consuming_service for _ in range(0, 10)], + ACTOR, + ], +} + +# %% +pipeline = Pipeline.from_dict(pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.py.txt b/_sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.py.txt new file mode 100644 index 0000000000..137c029890 --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.5_asynchronous_groups_and_services_full.py.txt @@ -0,0 +1,153 @@ +# %% [markdown] +""" +# 5. Asynchronous groups and services (full) + +The following tutorial shows `pipeline` +asynchronous service and service group usage. + +This tutorial is a more advanced version of the +[previous tutorial](%doclink(tutorial,pipeline.5_asynchronous_groups_and_services_basic)). +""" + +# %pip install dff + +# %% +import asyncio +import json +import logging +import urllib.request + +from dff.script import Context + +from dff.pipeline import ServiceGroup, Pipeline, ServiceRuntimeInfo, ACTOR + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +logger = logging.getLogger(__name__) + +# %% [markdown] +""" +Services and service groups can be synchronous and asynchronous. +In synchronous service groups services are executed consequently, + some of them (`ACTOR`) can even return `Context` object, + modifying it. +In asynchronous service groups all services + are executed simultaneously and should not return anything, + neither modify Context. + +To become asynchronous service or service group + should _be able_ to be asynchronous + and should not be marked synchronous. +Service can be asynchronous if its handler is an async function. +Service group can be asynchronous if all services +and service groups inside it are asynchronous. +If service or service group can be asynchronous +the `asynchronous` constructor parameter is checked. +If the parameter is not set, +the service becomes asynchronous, and if set, it is used instead. +If service can not be asynchronous, +but is marked asynchronous, an exception is thrown. +NB! ACTOR service is always synchronous. + +The timeout field only works for asynchronous services and service groups. +If service execution takes more time than timeout, +it is aborted and marked as failed. + +Pipeline `optimization_warnings` argument can be used to + display optimization warnings during pipeline construction. +Generally for optimization purposes asynchronous + services should be combined into asynchronous + groups to run simultaneously. +Synchronous services should be expelled from (mostly) asynchronous groups. + +Here service group `balanced_group` can be asynchronous, + however it is requested to be synchronous, + so its services are executed consequently. +Service group `service_group_0` is asynchronous, + it doesn't run out of timeout of 0.02 seconds, + however contains 6 time consuming services, + each of them sleeps for 0.01 of a second. +Service group `service_group_1` is also asynchronous, +it logs HTTPS requests (from 1 to 15), + running simultaneously, in random order. +Service group `pipeline` can't be asynchronous because +`balanced_group` and ACTOR are synchronous. +""" + + +# %% +async def simple_asynchronous_service(_, __, info: ServiceRuntimeInfo): + logger.info(f"Service '{info.name}' is running") + + +async def time_consuming_service(_): + await asyncio.sleep(0.01) + + +def meta_web_querying_service( + photo_number: int, +): # This function returns services, a service factory + async def web_querying_service(ctx: Context, _, info: ServiceRuntimeInfo): + if ctx.misc.get("web_query", None) is None: + ctx.misc["web_query"] = {} + with urllib.request.urlopen( + f"https://jsonplaceholder.typicode.com/photos/{photo_number}" + ) as webpage: + web_content = webpage.read().decode( + webpage.headers.get_content_charset() + ) + ctx.misc["web_query"].update( + { + f"{ctx.last_request}" + f":photo_number_{photo_number}": json.loads(web_content)[ + "title" + ] + } + ) + logger.info(f"Service '{info.name}' has completed HTTPS request") + + return web_querying_service + + +def context_printing_service(ctx: Context): + logger.info(f"Context misc: {json.dumps(ctx.misc, indent=4, default=str)}") + + +# %% +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "optimization_warnings": True, + # There are no warnings - pipeline is well-optimized + "components": [ + ServiceGroup( + name="balanced_group", + asynchronous=False, + components=[ + simple_asynchronous_service, + ServiceGroup( + timeout=0.02, + components=[time_consuming_service for _ in range(0, 6)], + ), + simple_asynchronous_service, + ], + ), + ACTOR, + [meta_web_querying_service(photo) for photo in range(1, 16)], + context_printing_service, + ], +} + +# %% +pipeline = Pipeline.from_dict(pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.pipeline.6_extra_handlers_basic.py.txt b/_sources/tutorials/tutorials.pipeline.6_extra_handlers_basic.py.txt new file mode 100644 index 0000000000..386dd2885c --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.6_extra_handlers_basic.py.txt @@ -0,0 +1,123 @@ +# %% [markdown] +""" +# 6. Extra Handlers (basic) + +The following tutorial shows extra handlers possibilities and use cases. + +Here, extra handlers %mddoclink(api,pipeline.service.extra,BeforeHandler) +and %mddoclink(api,pipeline.service.extra,AfterHandler) +are shown as additional means of data processing, attached to services. +""" + +# %pip install dff + +# %% +import asyncio +import json +import logging +import random +from datetime import datetime + +from dff.script import Context + +from dff.pipeline import Pipeline, ServiceGroup, ExtraHandlerRuntimeInfo, ACTOR + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +logger = logging.getLogger(__name__) + +# %% [markdown] +""" +Extra handlers are additional function + lists (before-functions and/or after-functions) + that can be added to any `pipeline` components (service and service groups). +Extra handlers main purpose should be service +and service groups statistics collection. +Extra handlers can be attached to pipeline component using +`before_handler` and `after_handler` constructor parameter. + +Here 5 `heavy_service`s are run in single asynchronous service group. +Each of them sleeps for random amount of seconds (between 0 and 0.05). +To each of them (as well as to group) + time measurement extra handler is attached, + that writes execution time to `ctx.misc`. +In the end `ctx.misc` is logged to info channel. +""" + + +# %% +def collect_timestamp_before(ctx: Context, _, info: ExtraHandlerRuntimeInfo): + ctx.misc.update({f"{info.component.name}": datetime.now()}) + + +def collect_timestamp_after(ctx: Context, _, info: ExtraHandlerRuntimeInfo): + ctx.misc.update( + { + f"{info.component.name}": datetime.now() + - ctx.misc[f"{info.component.name}"] + } + ) + + +async def heavy_service(_): + await asyncio.sleep(random.randint(0, 5) / 100) + + +def logging_service(ctx: Context): + logger.info(f"Context misc: {json.dumps(ctx.misc, indent=4, default=str)}") + + +# %% +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + ServiceGroup( + before_handler=[collect_timestamp_before], + after_handler=[collect_timestamp_after], + components=[ + { + "handler": heavy_service, + "before_handler": [collect_timestamp_before], + "after_handler": [collect_timestamp_after], + }, + { + "handler": heavy_service, + "before_handler": [collect_timestamp_before], + "after_handler": [collect_timestamp_after], + }, + { + "handler": heavy_service, + "before_handler": [collect_timestamp_before], + "after_handler": [collect_timestamp_after], + }, + { + "handler": heavy_service, + "before_handler": [collect_timestamp_before], + "after_handler": [collect_timestamp_after], + }, + { + "handler": heavy_service, + "before_handler": [collect_timestamp_before], + "after_handler": [collect_timestamp_after], + }, + ], + ), + ACTOR, + logging_service, + ], +} + +# %% +pipeline = Pipeline(**pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.pipeline.6_extra_handlers_full.py.txt b/_sources/tutorials/tutorials.pipeline.6_extra_handlers_full.py.txt new file mode 100644 index 0000000000..3672f0f82b --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.6_extra_handlers_full.py.txt @@ -0,0 +1,192 @@ +# %% [markdown] +""" +# 6. Extra Handlers (full) + +The following tutorial shows extra handlers possibilities and use cases. + +This tutorial is a more advanced version of the +[previous tutorial](%doclink(tutorial,pipeline.6_extra_handlers_basic)). +""" + +# %pip install dff psutil + +# %% +import json +import logging +import random +from datetime import datetime + +import psutil +from dff.script import Context + +from dff.pipeline import ( + Pipeline, + ServiceGroup, + to_service, + ExtraHandlerRuntimeInfo, + ServiceRuntimeInfo, + ACTOR, +) + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +logger = logging.getLogger(__name__) + +# %% [markdown] +""" +Extra handlers are additional function lists + (before-functions and/or after-functions) + that can be added to any pipeline components (service and service groups). +Despite extra handlers can be used to prepare data for certain services, +that require some very special input type, + in most cases services should be preferred for that purpose. +Extra handlers can be asynchronous, +however there's no statistics that can be collected about them. +So their main purpose should be _really_ lightweight data conversion (etc.) + operations or service and service groups statistics collection. + +Extra handlers have the following constructor arguments / parameters: + +* `functions` - Functions that will be run. +* `timeout` - Timeout for that extra handler + (for asynchronous extra handlers only). +* `asynchronous` - Whether this extra handler should be asynchronous or not. +NB! Extra handlers don't have execution state, +so their names shouldn't appear in built-in condition functions. + +Extra handlers callable signature can be one of the following: +`[ctx]`, `[ctx, pipeline]` or `[ctx, pipeline, info]`, where: + +* `ctx` - `Context` of the current dialog. +* `pipeline` - The current pipeline. +* `info` - Dictionary, containing information about current extra handler + and pipeline execution state (see tutorial 4). + +Extra handlers can be attached to pipeline component in a few different ways: + +1. Directly in constructor - by adding extra handlers to + `before_handler` or `after_handler` constructor parameter. +2. (Services only) `to_service` decorator - + transforms function to service with extra handlers + from `before_handler` and `after_handler` arguments. + +Here 5 `heavy_service`s fill big amounts of memory with random numbers. +Their runtime stats are captured and displayed by extra services, +`time_measure_handler` measures time and +`ram_measure_handler` - allocated memory. +Another `time_measure_handler` measures total +amount of time taken by all of them (combined in service group). +`logging_service` logs stats, however it can use string arguments only, + so `json_encoder_handler` is applied to encode stats to JSON. +""" + + +# %% +def get_extra_handler_misc_field( + info: ExtraHandlerRuntimeInfo, postfix: str +) -> str: # This method calculates `misc` field name dedicated to extra handler + # based on its and its service name + return f"{info.component.name}-{postfix}" + + +def time_measure_before_handler(ctx, _, info): + ctx.misc.update( + {get_extra_handler_misc_field(info, "time"): datetime.now()} + ) + + +def time_measure_after_handler(ctx, _, info): + ctx.misc.update( + { + get_extra_handler_misc_field(info, "time"): datetime.now() + - ctx.misc[get_extra_handler_misc_field(info, "time")] + } + ) + + +def ram_measure_before_handler(ctx, _, info): + ctx.misc.update( + { + get_extra_handler_misc_field( + info, "ram" + ): psutil.virtual_memory().available + } + ) + + +def ram_measure_after_handler(ctx, _, info): + ctx.misc.update( + { + get_extra_handler_misc_field(info, "ram"): ctx.misc[ + get_extra_handler_misc_field(info, "ram") + ] + - psutil.virtual_memory().available + } + ) + + +def json_converter_before_handler(ctx, _, info): + ctx.misc.update( + { + get_extra_handler_misc_field(info, "str"): json.dumps( + ctx.misc, indent=4, default=str + ) + } + ) + + +def json_converter_after_handler(ctx, _, info): + ctx.misc.pop(get_extra_handler_misc_field(info, "str")) + + +memory_heap = dict() # This object plays part of some memory heap + + +# %% +@to_service( + before_handler=[time_measure_before_handler, ram_measure_before_handler], + after_handler=[time_measure_after_handler, ram_measure_after_handler], +) +def heavy_service(ctx: Context): + memory_heap[ctx.last_request.text] = [ + random.randint(0, num) for num in range(0, 1000) + ] + + +@to_service( + before_handler=[json_converter_before_handler], + after_handler=[json_converter_after_handler], +) +def logging_service(ctx: Context, _, info: ServiceRuntimeInfo): + str_misc = ctx.misc[f"{info.name}-str"] + assert isinstance(str_misc, str) + print(f"Stringified misc: {str_misc}") + + +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + ServiceGroup( + before_handler=[time_measure_before_handler], + after_handler=[time_measure_after_handler], + components=[heavy_service for _ in range(0, 5)], + ), + ACTOR, + logging_service, + ], +} + +# %% +pipeline = Pipeline(**pipeline_dict) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.py.txt b/_sources/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.py.txt new file mode 100644 index 0000000000..ca1d9a6526 --- /dev/null +++ b/_sources/tutorials/tutorials.pipeline.7_extra_handlers_and_extensions.py.txt @@ -0,0 +1,144 @@ +# %% [markdown] +""" +# 7. Extra Handlers and Extensions + +The following tutorial shows how pipeline can be extended +by global extra handlers and custom functions. + +Here, %mddoclink(api,pipeline.pipeline.pipeline,Pipeline.add_global_handler) +function is shown, that can be used to add extra handlers before +and/or after all pipeline services. +""" + +# %pip install dff + +# %% +import asyncio +import json +import logging +import random +from datetime import datetime + +from dff.pipeline import ( + Pipeline, + ComponentExecutionState, + GlobalExtraHandlerType, + ExtraHandlerRuntimeInfo, + ServiceRuntimeInfo, + ACTOR, +) + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) +from dff.utils.testing.toy_script import HAPPY_PATH, TOY_SCRIPT + +logger = logging.getLogger(__name__) + +# %% [markdown] +""" +Pipeline functionality can be extended by global extra handlers. +Global extra handlers are special extra handlers + that are called on some stages of pipeline execution. +There are 4 types of global extra handlers: + + * `BEFORE_ALL` is called before pipeline execution. + * `BEFORE` is called before each service and service group execution. + * `AFTER` is called after each service and service group execution. + * `AFTER_ALL` is called after pipeline execution. + +Global extra handlers have the same signature as regular extra handlers. +Actually `BEFORE_ALL` and `AFTER_ALL` + are attached to root service group named 'pipeline', + so they return its runtime info + +All extra handlers warnings (see tutorial 7) +are applicable to global extra handlers. +Pipeline `add_global_extra_handler` function is used to register + global extra handlers. It accepts following arguments: + +* `global_extra_handler_type` (required) - A `GlobalExtraHandlerType` instance, + indicates extra handler type to add. +* `extra_handler` (required) - The extra handler function itself. +* `whitelist` - An optional list of paths, if it's not `None` + the extra handlers will be applied to + specified pipeline components only. +* `blacklist` - An optional list of paths, if it's not `None` + the extra handlers will be applied to + all pipeline components except specified. + +Here basic functionality of `df-node-stats` library is emulated. +Information about pipeline component execution time and + result is collected and printed to info log after pipeline execution. +Pipeline consists of actor and 25 `long_service`s +that run random amount of time between 0 and 0.05 seconds. +""" + +# %% +start_times = dict() # Place to temporarily store service start times +pipeline_info = dict() # Pipeline information storage + + +def before_all(_, __, info: ExtraHandlerRuntimeInfo): + global start_times, pipeline_info + now = datetime.now() + pipeline_info = {"start_time": now} + start_times = {info.component.path: now} + + +def before(_, __, info: ExtraHandlerRuntimeInfo): + start_times.update({info.component.path: datetime.now()}) + + +def after(_, __, info: ExtraHandlerRuntimeInfo): + start_time = start_times[info.component.path] + pipeline_info.update( + { + f"{info.component.path}_duration": datetime.now() - start_time, + f"{info.component.path}_success": info.component.execution_state.get( + info.component.path, ComponentExecutionState.NOT_RUN + ), + } + ) + + +def after_all(_, __, info: ExtraHandlerRuntimeInfo): + pipeline_info.update( + {"total_time": datetime.now() - start_times[info.component.path]} + ) + logger.info( + f"Pipeline stats: {json.dumps(pipeline_info, indent=4, default=str)}" + ) + + +async def long_service(_, __, info: ServiceRuntimeInfo): + timeout = random.randint(0, 5) / 100 + logger.info(f"Service {info.name} is going to sleep for {timeout} seconds.") + await asyncio.sleep(timeout) + + +# %% +pipeline_dict = { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + [long_service for _ in range(0, 25)], + ACTOR, + ], +} + +# %% +pipeline = Pipeline(**pipeline_dict) + +pipeline.add_global_handler(GlobalExtraHandlerType.BEFORE_ALL, before_all) +pipeline.add_global_handler(GlobalExtraHandlerType.BEFORE, before) +pipeline.add_global_handler(GlobalExtraHandlerType.AFTER, after) +pipeline.add_global_handler(GlobalExtraHandlerType.AFTER_ALL, after_all) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.1_basics.py.txt b/_sources/tutorials/tutorials.script.core.1_basics.py.txt new file mode 100644 index 0000000000..a06ffb96de --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.1_basics.py.txt @@ -0,0 +1,167 @@ +# %% [markdown] +""" +# Core: 1. Basics + +This notebook shows basic tutorial of creating a simple dialog bot (agent). + +Here, basic usege of %mddoclink(api,pipeline.pipeline.pipeline,Pipeline) +primitive is shown: its' creation with +%mddoclink(api,pipeline.pipeline.pipeline,Pipeline.from_script) +and execution. + +Additionally, function %mddoclink(api,utils.testing.common,check_happy_path) +that can be used for Pipeline testing is presented. + +Let's do all the necessary imports from DFF: +""" + +# %pip install dff + +# %% +from dff.script import TRANSITIONS, RESPONSE, Message +from dff.pipeline import Pipeline +import dff.script.conditions as cnd + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% [markdown] +""" +First of all, to create a dialog agent, we need to create a dialog script. +Below script means a dialog script. +A script is a dictionary, where the keys are the names of the flows. +A script can contain multiple scripts, which is needed in order to divide +a dialog into sub-dialogs and process them separately. +For example, the separation can be tied to the topic of the dialog. +In this tutorial there is one flow called `greeting_flow`. + +Flow describes a sub-dialog using linked nodes. +Each node has the keywords `RESPONSE` and `TRANSITIONS`. + +* `RESPONSE` contains the response + that the agent will return from the current node. +* `TRANSITIONS` describes transitions from the + current node to another nodes. This is a dictionary, + where keys are names of the nodes and + values are conditions of transition to them. +""" + + +# %% +toy_script = { + "greeting_flow": { + "start_node": { # This is the initial node, + # it doesn't contain a `RESPONSE`. + RESPONSE: Message(), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + # If "Hi" == request of the user then we make the transition. + }, + "node1": { + RESPONSE: Message( + text="Hi, how are you?" + ), # When the agent enters node1, + # return "Hi, how are you?". + TRANSITIONS: { + "node2": cnd.exact_match(Message(text="I'm fine, how are you?")) + }, + }, + "node2": { + RESPONSE: Message(text="Good. What do you want to talk about?"), + TRANSITIONS: { + "node3": cnd.exact_match( + Message(text="Let's talk about music.") + ) + }, + }, + "node3": { + RESPONSE: Message(text="Sorry, I can not talk about music now."), + TRANSITIONS: { + "node4": cnd.exact_match(Message(text="Ok, goodbye.")) + }, + }, + "node4": { + RESPONSE: Message(text="Bye"), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + }, + "fallback_node": { + # We get to this node if the conditions + # for switching to other nodes are not performed. + RESPONSE: Message(text="Ooops"), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + }, + } +} + + +happy_path = ( + ( + Message(text="Hi"), + Message(text="Hi, how are you?"), + ), # start_node -> node1 + ( + Message(text="I'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="Bye")), # node3 -> node4 + (Message(text="Hi"), Message(text="Hi, how are you?")), # node4 -> node1 + (Message(text="stop"), Message(text="Ooops")), # node1 -> fallback_node + ( + Message(text="stop"), + Message(text="Ooops"), + ), # fallback_node -> fallback_node + ( + Message(text="Hi"), + Message(text="Hi, how are you?"), + ), # fallback_node -> node1 + ( + Message(text="I'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="Bye")), # node3 -> node4 +) + + +# %% [markdown] +""" +A `Pipeline` is an object that processes user +inputs and returns responses. +To create the pipeline you need to pass the script (`toy_script`), +initial node (`start_label`) and +the node to which the default transition will take place +if none of the current conditions are met (`fallback_label`). +By default, if `fallback_label` is not set, +then its value becomes equal to `start_label`. +""" + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), +) + +if __name__ == "__main__": + check_happy_path( + pipeline, + happy_path, + ) # This is a function for automatic tutorial + # running (testing tutorial) with `happy_path`. + + # Run tutorial in interactive mode if not in IPython env + # and if `DISABLE_INTERACTIVE_MODE` is not set. + if is_interactive_mode(): + run_interactive_mode(pipeline) + # This runs tutorial in interactive mode. diff --git a/_sources/tutorials/tutorials.script.core.2_conditions.py.txt b/_sources/tutorials/tutorials.script.core.2_conditions.py.txt new file mode 100644 index 0000000000..d8838b9f49 --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.2_conditions.py.txt @@ -0,0 +1,228 @@ +# %% [markdown] +""" +# Core: 2. Conditions + +This tutorial shows different options for +setting transition conditions from one node to another. + +Here, [conditions](%doclink(api,script.conditions.std_conditions)) +for script transitions are shown. + +First of all, let's do all the necessary imports from DFF. +""" + +# %pip install dff + +# %% +import re + +from dff.script import Context, TRANSITIONS, RESPONSE, Message +import dff.script.conditions as cnd +from dff.pipeline import Pipeline + +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + +# %% [markdown] +""" +The transition condition is set by the function. +If this function returns the value `True`, +then the actor performs the corresponding transition. +Actor is responsible for processing user input and determining +the appropriate response based on the current state of the conversation and the script. +See tutorial 1 of pipeline (pipeline/1_basics) to learn more about Actor. +Condition functions have signature + + def func(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool + +Out of the box `dff.script.conditions` offers the + following options for setting conditions: + +* `exact_match` returns `True` if the user's request completely + matches the value passed to the function. +* `regexp` returns `True` if the pattern matches the user's request, + while the user's request must be a string. + `regexp` has same signature as `re.compile` function. +* `aggregate` returns `bool` value as + a result after aggregate by `aggregate_func` + for input sequence of conditions. + `aggregate_func == any` by default. `aggregate` has alias `agg`. +* `any` returns `True` if one element of input sequence of conditions is `True`. + `any(input_sequence)` is equivalent to + `aggregate(input sequence, aggregate_func=any)`. +* `all` returns `True` if all elements of input + sequence of conditions are `True`. + `all(input_sequence)` is equivalent to + `aggregate(input sequence, aggregate_func=all)`. +* `negation` returns negation of passed function. `negation` has alias `neg`. +* `has_last_labels` covered in the following examples. +* `true` returns `True`. +* `false` returns `False`. + +For example function +``` +def always_true_condition(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> bool: + return True +``` +always returns `True` and `always_true_condition` function +is the same as `dff.script.conditions.std_conditions.true()`. + +The functions to be used in the `toy_script` are declared here. +""" + + +# %% +def hi_lower_case_condition(ctx: Context, _: Pipeline, *args, **kwargs) -> bool: + request = ctx.last_request + # Returns True if `hi` in both uppercase and lowercase + # letters is contained in the user request. + if request is None or request.text is None: + return False + return "hi" in request.text.lower() + + +def complex_user_answer_condition( + ctx: Context, _: Pipeline, *args, **kwargs +) -> bool: + request = ctx.last_request + # The user request can be anything. + if request is None or request.misc is None: + return False + return {"some_key": "some_value"} == request.misc + + +def predetermined_condition(condition: bool): + # Wrapper for internal condition function. + def internal_condition_function( + ctx: Context, _: Pipeline, *args, **kwargs + ) -> bool: + # It always returns `condition`. + return condition + + return internal_condition_function + + +# %% +toy_script = { + "greeting_flow": { + "start_node": { # This is the initial node, + # it doesn't contain a `RESPONSE`. + RESPONSE: Message(), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + # If "Hi" == request of user then we make the transition + }, + "node1": { + RESPONSE: Message(text="Hi, how are you?"), + TRANSITIONS: {"node2": cnd.regexp(r".*how are you", re.IGNORECASE)}, + # pattern matching (precompiled) + }, + "node2": { + RESPONSE: Message(text="Good. What do you want to talk about?"), + TRANSITIONS: { + "node3": cnd.all( + [cnd.regexp(r"talk"), cnd.regexp(r"about.*music")] + ) + }, + # Mix sequence of conditions by `cnd.all`. + # `all` is alias `aggregate` with + # `aggregate_func` == `all`. + }, + "node3": { + RESPONSE: Message(text="Sorry, I can not talk about music now."), + TRANSITIONS: {"node4": cnd.regexp(re.compile(r"Ok, goodbye."))}, + # pattern matching by precompiled pattern + }, + "node4": { + RESPONSE: Message(text="bye"), + TRANSITIONS: { + "node1": cnd.any( + [ + hi_lower_case_condition, + cnd.exact_match(Message(text="hello")), + ] + ) + }, + # Mix sequence of conditions by `cnd.any`. + # `any` is alias `aggregate` with + # `aggregate_func` == `any`. + }, + "fallback_node": { # We get to this node + # if an error occurred while the agent was running. + RESPONSE: Message(text="Ooops"), + TRANSITIONS: { + "node1": complex_user_answer_condition, + # The user request can be more than just a string. + # First we will check returned value of + # `complex_user_answer_condition`. + # If the value is `True` then we will go to `node1`. + # If the value is `False` then we will check a result of + # `predetermined_condition(True)` for `fallback_node`. + "fallback_node": predetermined_condition( + True + ), # or you can use `cnd.true()` + # Last condition function will return + # `true` and will repeat `fallback_node` + # if `complex_user_answer_condition` return `false`. + }, + }, + } +} + +# testing +happy_path = ( + ( + Message(text="Hi"), + Message(text="Hi, how are you?"), + ), # start_node -> node1 + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="bye")), # node3 -> node4 + (Message(text="Hi"), Message(text="Hi, how are you?")), # node4 -> node1 + (Message(text="stop"), Message(text="Ooops")), # node1 -> fallback_node + ( + Message(text="one"), + Message(text="Ooops"), + ), # fallback_node -> fallback_node + ( + Message(text="help"), + Message(text="Ooops"), + ), # fallback_node -> fallback_node + ( + Message(text="nope"), + Message(text="Ooops"), + ), # fallback_node -> fallback_node + ( + Message(misc={"some_key": "some_value"}), + Message(text="Hi, how are you?"), + ), # fallback_node -> node1 + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="bye")), # node3 -> node4 +) + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.3_responses.py.txt b/_sources/tutorials/tutorials.script.core.3_responses.py.txt new file mode 100644 index 0000000000..6d42b3b2b6 --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.3_responses.py.txt @@ -0,0 +1,213 @@ +# %% [markdown] +""" +# Core: 3. Responses + +This tutorial shows different options for setting responses. + +Here, [responses](%doclink(api,script.responses.std_responses)) +that allow giving custom answers to users are shown. + +Let's do all the necessary imports from DFF. +""" + +# %pip install dff + +# %% +import re +import random + +from dff.script import TRANSITIONS, RESPONSE, Context, Message +import dff.script.responses as rsp +import dff.script.conditions as cnd + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% [markdown] +""" +The response can be set by Callable or *Message: + +* Callable objects. If the object is callable it must have a special signature: + + func(ctx: Context, pipeline: Pipeline, *args, **kwargs) -> Any + +* *Message objects. If the object is *Message + it will be returned by the agent as a response. + + +The functions to be used in the `toy_script` are declared here. +""" + + +# %% +def cannot_talk_about_topic_response( + ctx: Context, _: Pipeline, *args, **kwargs +) -> Message: + request = ctx.last_request + if request is None or request.text is None: + topic = None + else: + topic_pattern = re.compile(r"(.*talk about )(.*)\.") + topic = topic_pattern.findall(request.text) + topic = topic and topic[0] and topic[0][-1] + if topic: + return Message(text=f"Sorry, I can not talk about {topic} now.") + else: + return Message(text="Sorry, I can not talk about that now.") + + +def upper_case_response(response: Message): + # wrapper for internal response function + def func(_: Context, __: Pipeline, *args, **kwargs) -> Message: + if response.text is not None: + response.text = response.text.upper() + return response + + return func + + +def fallback_trace_response( + ctx: Context, _: Pipeline, *args, **kwargs +) -> Message: + return Message( + misc={ + "previous_node": list(ctx.labels.values())[-2], + "last_request": ctx.last_request, + } + ) + + +# %% +toy_script = { + "greeting_flow": { + "start_node": { # This is an initial node, + # it doesn't need a `RESPONSE`. + RESPONSE: Message(), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + # If "Hi" == request of user then we make the transition + }, + "node1": { + RESPONSE: rsp.choice( + [ + Message(text="Hi, what is up?"), + Message(text="Hello, how are you?"), + ] + ), + # Random choice from candidate list. + TRANSITIONS: { + "node2": cnd.exact_match(Message(text="I'm fine, how are you?")) + }, + }, + "node2": { + RESPONSE: Message(text="Good. What do you want to talk about?"), + TRANSITIONS: { + "node3": cnd.exact_match( + Message(text="Let's talk about music.") + ) + }, + }, + "node3": { + RESPONSE: cannot_talk_about_topic_response, + TRANSITIONS: { + "node4": cnd.exact_match(Message(text="Ok, goodbye.")) + }, + }, + "node4": { + RESPONSE: upper_case_response(Message(text="bye")), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + }, + "fallback_node": { # We get to this node + # if an error occurred while the agent was running. + RESPONSE: fallback_trace_response, + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + }, + } +} + +# testing +happy_path = ( + ( + Message(text="Hi"), + Message(text="Hello, how are you?"), + ), # start_node -> node1 + ( + Message(text="I'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="BYE")), # node3 -> node4 + (Message(text="Hi"), Message(text="Hi, what is up?")), # node4 -> node1 + ( + Message(text="stop"), + Message( + misc={ + "previous_node": ("greeting_flow", "node1"), + "last_request": Message(text="stop"), + } + ), + ), + # node1 -> fallback_node + ( + Message(text="one"), + Message( + misc={ + "previous_node": ("greeting_flow", "fallback_node"), + "last_request": Message(text="one"), + } + ), + ), # f_n->f_n + ( + Message(text="help"), + Message( + misc={ + "previous_node": ("greeting_flow", "fallback_node"), + "last_request": Message(text="help"), + } + ), + ), # f_n->f_n + ( + Message(text="nope"), + Message( + misc={ + "previous_node": ("greeting_flow", "fallback_node"), + "last_request": Message(text="nope"), + } + ), + ), # f_n->f_n + ( + Message(text="Hi"), + Message(text="Hello, how are you?"), + ), # fallback_node -> node1 + ( + Message(text="I'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="BYE")), # node3 -> node4 +) + +# %% +random.seed(31415) # predestination of choice + + +pipeline = Pipeline.from_script( + toy_script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.4_transitions.py.txt b/_sources/tutorials/tutorials.script.core.4_transitions.py.txt new file mode 100644 index 0000000000..1a1ece5386 --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.4_transitions.py.txt @@ -0,0 +1,309 @@ +# %% [markdown] +""" +# Core: 4. Transitions + +This tutorial shows settings for transitions between flows and nodes. + +Here, [conditions](%doclink(api,script.conditions.std_conditions)) +for transition between many different script steps are shown. + +Some of the destination steps can be set using +[labels](%doclink(api,script.labels.std_labels)). + +First of all, let's do all the necessary imports from DFF. +""" + + +# %pip install dff + +# %% +import re + +from dff.script import TRANSITIONS, RESPONSE, Context, NodeLabel3Type, Message +import dff.script.conditions as cnd +import dff.script.labels as lbl +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + +# %% [markdown] +""" +Let's define the functions with a special type of return value: + + NodeLabel3Type == tuple[str, str, float] + +which means that transition returns a `tuple` +with flow name, node name and priority. +""" + + +# %% +def greeting_flow_n2_transition( + _: Context, __: Pipeline, *args, **kwargs +) -> NodeLabel3Type: + return ("greeting_flow", "node2", 1.0) + + +def high_priority_node_transition(flow_label, label): + def transition(_: Context, __: Pipeline, *args, **kwargs) -> NodeLabel3Type: + return (flow_label, label, 2.0) + + return transition + + +# %% [markdown] +""" +Priority is needed to select a condition +in the situation where more than one condition is `True`. +All conditions in `TRANSITIONS` are being checked. +Of the set of `True` conditions, +the one that has the highest priority will be executed. +Of the set of `True` conditions with largest +priority the first met condition will be executed. + +Out of the box `dff.script.core.labels` +offers the following methods: + +* `lbl.repeat()` returns transition handler + which returns `NodeLabelType` to the last node, + +* `lbl.previous()` returns transition handler + which returns `NodeLabelType` to the previous node, + +* `lbl.to_start()` returns transition handler + which returns `NodeLabelType` to the start node, + +* `lbl.to_fallback()` returns transition + handler which returns `NodeLabelType` to the fallback node, + +* `lbl.forward()` returns transition handler + which returns `NodeLabelType` to the forward node, + +* `lbl.backward()` returns transition handler + which returns `NodeLabelType` to the backward node. + +There are three flows here: `global_flow`, `greeting_flow`, `music_flow`. +""" + +# %% +toy_script = { + "global_flow": { + "start_node": { # This is an initial node, + # it doesn't need a `RESPONSE`. + RESPONSE: Message(), + TRANSITIONS: { + ("music_flow", "node1"): cnd.regexp( + r"talk about music" + ), # first check + ("greeting_flow", "node1"): cnd.regexp( + r"hi|hello", re.IGNORECASE + ), # second check + "fallback_node": cnd.true(), # third check + # "fallback_node" is equivalent to + # ("global_flow", "fallback_node"). + }, + }, + "fallback_node": { # We get to this node if + # an error occurred while the agent was running. + RESPONSE: Message(text="Ooops"), + TRANSITIONS: { + ("music_flow", "node1"): cnd.regexp( + r"talk about music" + ), # first check + ("greeting_flow", "node1"): cnd.regexp( + r"hi|hello", re.IGNORECASE + ), # second check + lbl.previous(): cnd.regexp( + r"previous", re.IGNORECASE + ), # third check + # lbl.previous() is equivalent + # to ("previous_flow", "previous_node") + lbl.repeat(): cnd.true(), # fourth check + # lbl.repeat() is equivalent to ("global_flow", "fallback_node") + }, + }, + }, + "greeting_flow": { + "node1": { + RESPONSE: Message(text="Hi, how are you?"), + # When the agent goes to node1, we return "Hi, how are you?" + TRANSITIONS: { + ( + "global_flow", + "fallback_node", + 0.1, + ): cnd.true(), # second check + "node2": cnd.regexp(r"how are you"), # first check + # "node2" is equivalent to ("greeting_flow", "node2", 1.0) + }, + }, + "node2": { + RESPONSE: Message(text="Good. What do you want to talk about?"), + TRANSITIONS: { + lbl.to_fallback(0.1): cnd.true(), # third check + # lbl.to_fallback(0.1) is equivalent + # to ("global_flow", "fallback_node", 0.1) + lbl.forward(0.5): cnd.regexp(r"talk about"), # second check + # lbl.forward(0.5) is equivalent + # to ("greeting_flow", "node3", 0.5) + ("music_flow", "node1"): cnd.regexp( + r"talk about music" + ), # first check + # ("music_flow", "node1") is equivalent + # to ("music_flow", "node1", 1.0) + lbl.previous(): cnd.regexp( + r"previous", re.IGNORECASE + ), # third check + }, + }, + "node3": { + RESPONSE: Message(text="Sorry, I can not talk about that now."), + TRANSITIONS: {lbl.forward(): cnd.regexp(r"bye")}, + }, + "node4": { + RESPONSE: Message(text="Bye"), + TRANSITIONS: { + "node1": cnd.regexp(r"hi|hello", re.IGNORECASE), # first check + lbl.to_fallback(): cnd.true(), # second check + }, + }, + }, + "music_flow": { + "node1": { + RESPONSE: Message( + text="I love `System of a Down` group, " + "would you like to talk about it?" + ), + TRANSITIONS: { + lbl.forward(): cnd.regexp(r"yes|yep|ok", re.IGNORECASE), + lbl.to_fallback(): cnd.true(), + }, + }, + "node2": { + RESPONSE: Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ), + TRANSITIONS: { + lbl.forward(): cnd.regexp(r"next", re.IGNORECASE), + lbl.repeat(): cnd.regexp(r"repeat", re.IGNORECASE), + lbl.to_fallback(): cnd.true(), + }, + }, + "node3": { + RESPONSE: Message( + text="The band achieved commercial success " + "with the release of five studio albums." + ), + TRANSITIONS: { + lbl.forward(): cnd.regexp(r"next", re.IGNORECASE), + lbl.backward(): cnd.regexp(r"back", re.IGNORECASE), + lbl.repeat(): cnd.regexp(r"repeat", re.IGNORECASE), + lbl.to_fallback(): cnd.true(), + }, + }, + "node4": { + RESPONSE: Message(text="That's all what I know."), + TRANSITIONS: { + greeting_flow_n2_transition: cnd.regexp( + r"next", re.IGNORECASE + ), # second check + high_priority_node_transition( + "greeting_flow", "node4" + ): cnd.regexp( + r"next time", re.IGNORECASE + ), # first check + lbl.to_fallback(): cnd.true(), # third check + }, + }, + }, +} + +# testing +happy_path = ( + (Message(text="hi"), Message(text="Hi, how are you?")), + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), + ( + Message(text="talk about music."), + Message( + text="I love `System of a Down` group, " + "would you like to talk about it?" + ), + ), + ( + Message(text="yes"), + Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ), + ), + ( + Message(text="next"), + Message( + text="The band achieved commercial success " + "with the release of five studio albums." + ), + ), + ( + Message(text="back"), + Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ), + ), + ( + Message(text="repeat"), + Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ), + ), + ( + Message(text="next"), + Message( + text="The band achieved commercial success " + "with the release of five studio albums." + ), + ), + (Message(text="next"), Message(text="That's all what I know.")), + ( + Message(text="next"), + Message(text="Good. What do you want to talk about?"), + ), + (Message(text="previous"), Message(text="That's all what I know.")), + (Message(text="next time"), Message(text="Bye")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="previous"), Message(text="Bye")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="nope"), Message(text="Ooops")), + (Message(text="hi"), Message(text="Hi, how are you?")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="previous"), Message(text="Hi, how are you?")), + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), + ( + Message(text="let's talk about something."), + Message(text="Sorry, I can not talk about that now."), + ), + (Message(text="Ok, goodbye."), Message(text="Bye")), +) + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("global_flow", "start_node"), + fallback_label=("global_flow", "fallback_node"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.5_global_transitions.py.txt b/_sources/tutorials/tutorials.script.core.5_global_transitions.py.txt new file mode 100644 index 0000000000..f0dc5a0fcc --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.5_global_transitions.py.txt @@ -0,0 +1,221 @@ +# %% [markdown] +""" +# Core: 5. Global transitions + +This tutorial shows the global setting of transitions. + +Here, global [conditions](%doclink(api,script.conditions.std_conditions)) +for default transition between many different script steps are shown. + +First of all, let's do all the necessary imports from DFF. +""" + + +# %pip install dff + +# %% +import re + +from dff.script import GLOBAL, TRANSITIONS, RESPONSE, Message +import dff.script.conditions as cnd +import dff.script.labels as lbl +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + +# %% [markdown] +""" +The keyword `GLOBAL` is used to define a global node. +There can be only one global node in a script. +The value that corresponds to this key has the +`dict` type with the same keywords as regular nodes. +The global node is defined above the flow level as opposed to regular nodes. +This node allows to define default global values for all nodes. + +There are `GLOBAL` node and three flows: +`global_flow`, `greeting_flow`, `music_flow`. +""" + +# %% +toy_script = { + GLOBAL: { + TRANSITIONS: { + ("greeting_flow", "node1", 1.1): cnd.regexp( + r"\b(hi|hello)\b", re.I + ), # first check + ("music_flow", "node1", 1.1): cnd.regexp( + r"talk about music" + ), # second check + lbl.to_fallback(0.1): cnd.true(), # fifth check + lbl.forward(): cnd.all( + [ + cnd.regexp(r"next\b"), + cnd.has_last_labels( + labels=[("music_flow", i) for i in ["node2", "node3"]] + ), + ] # third check + ), + lbl.repeat(0.2): cnd.all( + [ + cnd.regexp(r"repeat", re.I), + cnd.negation( + cnd.has_last_labels(flow_labels=["global_flow"]) + ), + ] # fourth check + ), + } + }, + "global_flow": { + "start_node": { + RESPONSE: Message() + }, # This is an initial node, it doesn't need a `RESPONSE`. + "fallback_node": { # We get to this node + # if an error occurred while the agent was running. + RESPONSE: Message(text="Ooops"), + TRANSITIONS: {lbl.previous(): cnd.regexp(r"previous", re.I)}, + # lbl.previous() is equivalent to + # ("previous_flow", "previous_node", 1.0) + }, + }, + "greeting_flow": { + "node1": { + RESPONSE: Message(text="Hi, how are you?"), + TRANSITIONS: {"node2": cnd.regexp(r"how are you")}, + # "node2" is equivalent to ("greeting_flow", "node2", 1.0) + }, + "node2": { + RESPONSE: Message(text="Good. What do you want to talk about?"), + TRANSITIONS: { + lbl.forward(0.5): cnd.regexp(r"talk about"), + # lbl.forward(0.5) is equivalent to + # ("greeting_flow", "node3", 0.5) + lbl.previous(): cnd.regexp(r"previous", re.I), + }, + }, + "node3": { + RESPONSE: Message(text="Sorry, I can not talk about that now."), + TRANSITIONS: {lbl.forward(): cnd.regexp(r"bye")}, + }, + "node4": {RESPONSE: Message(text="bye")}, + # Only the global transitions setting are used in this node. + }, + "music_flow": { + "node1": { + RESPONSE: Message( + text="I love `System of a Down` group, " + "would you like to talk about it?" + ), + TRANSITIONS: {lbl.forward(): cnd.regexp(r"yes|yep|ok", re.I)}, + }, + "node2": { + RESPONSE: Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ) + # Only the global transitions setting are used in this node. + }, + "node3": { + RESPONSE: Message( + text="The band achieved commercial success " + "with the release of five studio albums." + ), + TRANSITIONS: {lbl.backward(): cnd.regexp(r"back", re.I)}, + }, + "node4": { + RESPONSE: Message(text="That's all what I know."), + TRANSITIONS: { + ("greeting_flow", "node4"): cnd.regexp(r"next time", re.I), + ("greeting_flow", "node2"): cnd.regexp(r"next", re.I), + }, + }, + }, +} + +# testing +happy_path = ( + (Message(text="hi"), Message(text="Hi, how are you?")), + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), + ( + Message(text="talk about music."), + Message( + text="I love `System of a Down` group, " + "would you like to talk about it?" + ), + ), + ( + Message(text="yes"), + Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ), + ), + ( + Message(text="next"), + Message( + text="The band achieved commercial success " + "with the release of five studio albums." + ), + ), + ( + Message(text="back"), + Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ), + ), + ( + Message(text="repeat"), + Message( + text="System of a Down is " + "an Armenian-American heavy metal band formed in 1994." + ), + ), + ( + Message(text="next"), + Message( + text="The band achieved commercial success " + "with the release of five studio albums." + ), + ), + (Message(text="next"), Message(text="That's all what I know.")), + ( + Message(text="next"), + Message(text="Good. What do you want to talk about?"), + ), + (Message(text="previous"), Message(text="That's all what I know.")), + (Message(text="next time"), Message(text="bye")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="previous"), Message(text="bye")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="nope"), Message(text="Ooops")), + (Message(text="hi"), Message(text="Hi, how are you?")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="previous"), Message(text="Hi, how are you?")), + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), + ( + Message(text="let's talk about something."), + Message(text="Sorry, I can not talk about that now."), + ), + (Message(text="Ok, goodbye."), Message(text="bye")), +) + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("global_flow", "start_node"), + fallback_label=("global_flow", "fallback_node"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.6_context_serialization.py.txt b/_sources/tutorials/tutorials.script.core.6_context_serialization.py.txt new file mode 100644 index 0000000000..bcf6cb7e24 --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.6_context_serialization.py.txt @@ -0,0 +1,89 @@ +# %% [markdown] +""" +# Core: 6. Context serialization + +This tutorial shows context serialization. +First of all, let's do all the necessary imports from DFF. +""" + +# %pip install dff + +# %% +import logging + +from dff.script import TRANSITIONS, RESPONSE, Context, Message +import dff.script.conditions as cnd + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% [markdown] +""" +This function returns the user request number. +""" + + +# %% +def response_handler(ctx: Context, _: Pipeline, *args, **kwargs) -> Message: + return Message(text=f"answer {len(ctx.requests)}") + + +# %% +# a dialog script +toy_script = { + "flow_start": { + "node_start": { + RESPONSE: response_handler, + TRANSITIONS: {("flow_start", "node_start"): cnd.true()}, + } + } +} + +# testing +happy_path = ( + (Message(text="hi"), Message(text="answer 1")), + (Message(text="how are you?"), Message(text="answer 2")), + (Message(text="ok"), Message(text="answer 3")), + (Message(text="good"), Message(text="answer 4")), +) + +# %% [markdown] +""" +Draft function that performs serialization. +""" + + +# %% +def process_response(ctx: Context): + ctx_json = ctx.model_dump_json() + if isinstance(ctx_json, str): + logging.info("context serialized to json str") + else: + raise Exception(f"ctx={ctx_json} has to be serialized to json string") + + ctx_dict = ctx.model_dump() + if isinstance(ctx_dict, dict): + logging.info("context serialized to dict") + else: + raise Exception(f"ctx={ctx_dict} has to be serialized to dict") + + if not isinstance(ctx, Context): + raise Exception(f"ctx={ctx} has to have Context type") + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("flow_start", "node_start"), + post_services=[process_response], +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.7_pre_response_processing.py.txt b/_sources/tutorials/tutorials.script.core.7_pre_response_processing.py.txt new file mode 100644 index 0000000000..38269b6a65 --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.7_pre_response_processing.py.txt @@ -0,0 +1,135 @@ +# %% [markdown] +""" +# Core: 7. Pre-response processing + +This tutorial shows pre-response processing feature. + +Here, %mddoclink(api,script.core.keywords,Keywords.PRE_RESPONSE_PROCESSING) +is demonstrated which can be used for additional context processing before response handlers. + +There are also some other %mddoclink(api,script.core.keywords,Keywords) +worth attention used in this tutorial. + +First of all, let's do all the necessary imports from DFF. +""" + +# %pip install dff + +# %% +from dff.script import ( + GLOBAL, + LOCAL, + RESPONSE, + TRANSITIONS, + PRE_RESPONSE_PROCESSING, + Context, + Message, +) +import dff.script.labels as lbl +import dff.script.conditions as cnd + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% +def add_prefix(prefix): + def add_prefix_processing( + ctx: Context, _: Pipeline, *args, **kwargs + ) -> Context: + processed_node = ctx.current_node + processed_node.response = Message( + text=f"{prefix}: {processed_node.response.text}" + ) + ctx.overwrite_current_node_in_processing(processed_node) + return ctx + + return add_prefix_processing + + +# %% [markdown] +""" +`PRE_RESPONSE_PROCESSING` is a keyword that +can be used in `GLOBAL`, `LOCAL` or nodes. +""" + + +# %% +toy_script = { + "root": { + "start": { + RESPONSE: Message(), + TRANSITIONS: {("flow", "step_0"): cnd.true()}, + }, + "fallback": {RESPONSE: Message(text="the end")}, + }, + GLOBAL: { + PRE_RESPONSE_PROCESSING: { + "proc_name_1": add_prefix("l1_global"), + "proc_name_2": add_prefix("l2_global"), + } + }, + "flow": { + LOCAL: { + PRE_RESPONSE_PROCESSING: { + "proc_name_2": add_prefix("l2_local"), + "proc_name_3": add_prefix("l3_local"), + } + }, + "step_0": { + RESPONSE: Message(text="first"), + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_1": { + PRE_RESPONSE_PROCESSING: {"proc_name_1": add_prefix("l1_step_1")}, + RESPONSE: Message(text="second"), + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_2": { + PRE_RESPONSE_PROCESSING: {"proc_name_2": add_prefix("l2_step_2")}, + RESPONSE: Message(text="third"), + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_3": { + PRE_RESPONSE_PROCESSING: {"proc_name_3": add_prefix("l3_step_3")}, + RESPONSE: Message(text="fourth"), + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_4": { + PRE_RESPONSE_PROCESSING: {"proc_name_4": add_prefix("l4_step_4")}, + RESPONSE: Message(text="fifth"), + TRANSITIONS: {"step_0": cnd.true()}, + }, + }, +} + + +# testing +happy_path = ( + (Message(), Message(text="l3_local: l2_local: l1_global: first")), + (Message(), Message(text="l3_local: l2_local: l1_step_1: second")), + (Message(), Message(text="l3_local: l2_step_2: l1_global: third")), + (Message(), Message(text="l3_step_3: l2_local: l1_global: fourth")), + ( + Message(), + Message(text="l4_step_4: l3_local: l2_local: l1_global: fifth"), + ), + (Message(), Message(text="l3_local: l2_local: l1_global: first")), +) + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.8_misc.py.txt b/_sources/tutorials/tutorials.script.core.8_misc.py.txt new file mode 100644 index 0000000000..ac5eb813dd --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.8_misc.py.txt @@ -0,0 +1,167 @@ +# %% [markdown] +""" +# Core: 8. Misc + +This tutorial shows `MISC` (miscellaneous) keyword usage. + +See %mddoclink(api,script.core.keywords,Keywords.MISC) +for more information. + +First of all, let's do all the necessary imports from DFF. +""" + +# %pip install dff + +# %% +from dff.script import ( + GLOBAL, + LOCAL, + RESPONSE, + TRANSITIONS, + MISC, + Context, + Message, +) +import dff.script.labels as lbl +import dff.script.conditions as cnd +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% +def custom_response(ctx: Context, _: Pipeline, *args, **kwargs) -> Message: + if ctx.validation: + return Message() + current_node = ctx.current_node + return Message( + text=f"ctx.last_label={ctx.last_label}: " + f"current_node.misc={current_node.misc}" + ) + + +# %% +toy_script = { + "root": { + "start": { + RESPONSE: Message(), + TRANSITIONS: {("flow", "step_0"): cnd.true()}, + }, + "fallback": {RESPONSE: Message(text="the end")}, + }, + GLOBAL: { + MISC: { + "var1": "global_data", + "var2": "global_data", + "var3": "global_data", + } + }, + "flow": { + LOCAL: { + MISC: { + "var2": "rewrite_by_local", + "var3": "rewrite_by_local", + } + }, + "step_0": { + MISC: {"var3": "info_of_step_0"}, + RESPONSE: custom_response, + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_1": { + MISC: {"var3": "info_of_step_1"}, + RESPONSE: custom_response, + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_2": { + MISC: {"var3": "info_of_step_2"}, + RESPONSE: custom_response, + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_3": { + MISC: {"var3": "info_of_step_3"}, + RESPONSE: custom_response, + TRANSITIONS: {lbl.forward(): cnd.true()}, + }, + "step_4": { + MISC: {"var3": "info_of_step_4"}, + RESPONSE: custom_response, + TRANSITIONS: {"step_0": cnd.true()}, + }, + }, +} + + +# testing +happy_path = ( + ( + Message(), + Message( + text="ctx.last_label=('flow', 'step_0'): current_node.misc=" + "{'var1': 'global_data', " + "'var2': 'rewrite_by_local', " + "'var3': 'info_of_step_0'}" + ), + ), + ( + Message(), + Message( + text="ctx.last_label=('flow', 'step_1'): current_node.misc=" + "{'var1': 'global_data', " + "'var2': 'rewrite_by_local', " + "'var3': 'info_of_step_1'}" + ), + ), + ( + Message(), + Message( + text="ctx.last_label=('flow', 'step_2'): current_node.misc=" + "{'var1': 'global_data', " + "'var2': 'rewrite_by_local', " + "'var3': 'info_of_step_2'}" + ), + ), + ( + Message(), + Message( + text="ctx.last_label=('flow', 'step_3'): current_node.misc=" + "{'var1': 'global_data', " + "'var2': 'rewrite_by_local', " + "'var3': 'info_of_step_3'}" + ), + ), + ( + Message(), + Message( + text="ctx.last_label=('flow', 'step_4'): current_node.misc=" + "{'var1': 'global_data', " + "'var2': 'rewrite_by_local', " + "'var3': 'info_of_step_4'}" + ), + ), + ( + Message(), + Message( + text="ctx.last_label=('flow', 'step_0'): current_node.misc=" + "{'var1': 'global_data', " + "'var2': 'rewrite_by_local', " + "'var3': 'info_of_step_0'}" + ), + ), +) + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.core.9_pre_transitions_processing.py.txt b/_sources/tutorials/tutorials.script.core.9_pre_transitions_processing.py.txt new file mode 100644 index 0000000000..b875b4eb0e --- /dev/null +++ b/_sources/tutorials/tutorials.script.core.9_pre_transitions_processing.py.txt @@ -0,0 +1,106 @@ +# %% [markdown] +""" +# Core: 9. Pre-transitions processing + +This tutorial shows pre-transitions processing feature. + +Here, %mddoclink(api,script.core.keywords,Keywords.PRE_TRANSITIONS_PROCESSING) +is demonstrated which can be used for additional context +processing before transitioning to the next step. + +First of all, let's do all the necessary imports from DFF. +""" + +# %pip install dff + +# %% +from dff.script import ( + GLOBAL, + RESPONSE, + TRANSITIONS, + PRE_RESPONSE_PROCESSING, + PRE_TRANSITIONS_PROCESSING, + Context, + Message, +) +import dff.script.labels as lbl +import dff.script.conditions as cnd +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% +def save_previous_node_response_to_ctx_processing( + ctx: Context, _: Pipeline, *args, **kwargs +) -> Context: + processed_node = ctx.current_node + ctx.misc["previous_node_response"] = processed_node.response + return ctx + + +def get_previous_node_response_for_response_processing( + ctx: Context, _: Pipeline, *args, **kwargs +) -> Context: + processed_node = ctx.current_node + processed_node.response = Message( + text=f"previous={ctx.misc['previous_node_response'].text}:" + f" current={processed_node.response.text}" + ) + ctx.overwrite_current_node_in_processing(processed_node) + return ctx + + +# %% +# a dialog script +toy_script = { + "root": { + "start": { + RESPONSE: Message(), + TRANSITIONS: {("flow", "step_0"): cnd.true()}, + }, + "fallback": {RESPONSE: Message(text="the end")}, + }, + GLOBAL: { + PRE_RESPONSE_PROCESSING: { + "proc_name_1": get_previous_node_response_for_response_processing + }, + PRE_TRANSITIONS_PROCESSING: { + "proc_name_1": save_previous_node_response_to_ctx_processing + }, + TRANSITIONS: {lbl.forward(0.1): cnd.true()}, + }, + "flow": { + "step_0": {RESPONSE: Message(text="first")}, + "step_1": {RESPONSE: Message(text="second")}, + "step_2": {RESPONSE: Message(text="third")}, + "step_3": {RESPONSE: Message(text="fourth")}, + "step_4": {RESPONSE: Message(text="fifth")}, + }, +} + + +# testing +happy_path = ( + (Message(text="1"), Message(text="previous=None: current=first")), + (Message(text="2"), Message(text="previous=first: current=second")), + (Message(text="3"), Message(text="previous=second: current=third")), + (Message(text="4"), Message(text="previous=third: current=fourth")), + (Message(text="5"), Message(text="previous=fourth: current=fifth")), +) + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.responses.1_basics.py.txt b/_sources/tutorials/tutorials.script.responses.1_basics.py.txt new file mode 100644 index 0000000000..e021a4a670 --- /dev/null +++ b/_sources/tutorials/tutorials.script.responses.1_basics.py.txt @@ -0,0 +1,110 @@ +# %% [markdown] +""" +# Responses: 1. Basics + +Here, the process of response forming is shown. +Special keywords %mddoclink(api,script.core.keywords,Keywords.RESPONSE) +and %mddoclink(api,script.core.keywords,Keywords.TRANSITIONS) +are used for that. +""" + +# %pip install dff + +# %% +from typing import NamedTuple + +from dff.script import Message +from dff.script.conditions import exact_match +from dff.script import RESPONSE, TRANSITIONS +from dff.pipeline import Pipeline +from dff.utils.testing import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% +toy_script = { + "greeting_flow": { + "start_node": { + RESPONSE: Message(text=""), + TRANSITIONS: {"node1": exact_match(Message(text="Hi"))}, + }, + "node1": { + RESPONSE: Message(text="Hi, how are you?"), + TRANSITIONS: { + "node2": exact_match(Message(text="i'm fine, how are you?")) + }, + }, + "node2": { + RESPONSE: Message(text="Good. What do you want to talk about?"), + TRANSITIONS: { + "node3": exact_match(Message(text="Let's talk about music.")) + }, + }, + "node3": { + RESPONSE: Message(text="Sorry, I can not talk about music now."), + TRANSITIONS: {"node4": exact_match(Message(text="Ok, goodbye."))}, + }, + "node4": { + RESPONSE: Message(text="bye"), + TRANSITIONS: {"node1": exact_match(Message(text="Hi"))}, + }, + "fallback_node": { + RESPONSE: Message(text="Ooops"), + TRANSITIONS: {"node1": exact_match(Message(text="Hi"))}, + }, + } +} + +happy_path = ( + (Message(text="Hi"), Message(text="Hi, how are you?")), + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), + (Message(text="Ok, goodbye."), Message(text="bye")), + (Message(text="Hi"), Message(text="Hi, how are you?")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="stop"), Message(text="Ooops")), + (Message(text="Hi"), Message(text="Hi, how are you?")), + ( + Message(text="i'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about music now."), + ), + (Message(text="Ok, goodbye."), Message(text="bye")), +) + + +# %% +class CallbackRequest(NamedTuple): + payload: str + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), +) + +if __name__ == "__main__": + check_happy_path( + pipeline, + happy_path, + ) # This is a function for automatic tutorial running + # (testing) with `happy_path` + + # This runs tutorial in interactive mode if not in IPython env + # and if `DISABLE_INTERACTIVE_MODE` is not set + if is_interactive_mode(): + run_interactive_mode(pipeline) # This runs tutorial in interactive mode diff --git a/_sources/tutorials/tutorials.script.responses.2_buttons.py.txt b/_sources/tutorials/tutorials.script.responses.2_buttons.py.txt new file mode 100644 index 0000000000..ff6373c0ce --- /dev/null +++ b/_sources/tutorials/tutorials.script.responses.2_buttons.py.txt @@ -0,0 +1,259 @@ +# %% [markdown] +""" +# Responses: 2. Buttons + +In this tutorial %mddoclink(api,script.core.message,Button) +class is demonstrated. +Buttons are one of %mddoclink(api,script.core.message,Message) fields. +They can be attached to any message but will only work if the chosen +[messenger interface](%doclink(api,index_messenger_interfaces)) supports them. +""" + + +# %pip install dff + +# %% +import dff.script.conditions as cnd +import dff.script.labels as lbl +from dff.script import Context, TRANSITIONS, RESPONSE + +from dff.script.core.message import Button, Keyboard, Message +from dff.pipeline import Pipeline +from dff.utils.testing import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% +def check_button_payload(value: str): + def payload_check_inner(ctx: Context, _: Pipeline): + if ctx.last_request.misc is not None: + return ctx.last_request.misc.get("payload") == value + else: + return False + + return payload_check_inner + + +# %% +toy_script = { + "root": { + "start": { + RESPONSE: Message(text=""), + TRANSITIONS: { + ("general", "question_1"): cnd.true(), + }, + }, + "fallback": {RESPONSE: Message(text="Finishing test")}, + }, + "general": { + "question_1": { + RESPONSE: Message( + **{ + "text": "Starting test! What's 2 + 2?" + " (type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="5", payload="5"), + Button(text="4", payload="4"), + ] + ), + }, + } + ), + TRANSITIONS: { + lbl.forward(): check_button_payload("4"), + ("general", "question_1"): check_button_payload("5"), + }, + }, + "question_2": { + RESPONSE: Message( + **{ + "text": "Next question: what's 6 * 8?" + " (type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="38", payload="38"), + Button(text="48", payload="48"), + ] + ), + }, + } + ), + TRANSITIONS: { + lbl.forward(): check_button_payload("48"), + ("general", "question_2"): check_button_payload("38"), + }, + }, + "question_3": { + RESPONSE: Message( + **{ + "text": "What's 114 + 115? " + "(type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="229", payload="229"), + Button(text="283", payload="283"), + ] + ), + }, + } + ), + TRANSITIONS: { + lbl.forward(): check_button_payload("229"), + ("general", "question_3"): check_button_payload("283"), + }, + }, + "success": { + RESPONSE: Message(text="Success!"), + TRANSITIONS: {("root", "fallback"): cnd.true()}, + }, + }, +} + +happy_path = ( + ( + Message(text="Hi"), + Message( + **{ + "text": "Starting test! What's 2 + 2? " + "(type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="5", payload="5"), + Button(text="4", payload="4"), + ] + ) + }, + } + ), + ), + ( + Message(text="0"), + Message( + **{ + "text": "Starting test! What's 2 + 2? " + "(type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="5", payload="5"), + Button(text="4", payload="4"), + ] + ), + }, + } + ), + ), + ( + Message(text="1"), + Message( + **{ + "text": "Next question: what's 6 * 8? " + "(type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="38", payload="38"), + Button(text="48", payload="48"), + ] + ), + }, + } + ), + ), + ( + Message(text="0"), + Message( + **{ + "text": "Next question: what's 6 * 8? " + "(type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="38", payload="38"), + Button(text="48", payload="48"), + ] + ), + }, + } + ), + ), + ( + Message(text="1"), + Message( + **{ + "text": "What's 114 + 115? " + "(type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="229", payload="229"), + Button(text="283", payload="283"), + ] + ), + }, + } + ), + ), + ( + Message(text="1"), + Message( + **{ + "text": "What's 114 + 115? " + "(type in the index of the correct option)", + "misc": { + "ui": Keyboard( + buttons=[ + Button(text="229", payload="229"), + Button(text="283", payload="283"), + ] + ), + }, + } + ), + ), + (Message(text="0"), Message(text="Success!")), + (Message(text="ok"), Message(text="Finishing test")), +) + + +def process_request(ctx: Context): + ui = ( + ctx.last_response + and ctx.last_response.misc + and ctx.last_response.misc.get("ui") + ) + if ui and ui.buttons: + try: + chosen_button = ui.buttons[int(ctx.last_request.text)] + except (IndexError, ValueError): + raise ValueError( + "Type in the index of the correct option " + "to choose from the buttons." + ) + ctx.last_request = Message(misc={"payload": chosen_button.payload}) + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), + pre_services=[process_request], +) + +if __name__ == "__main__": + check_happy_path( + pipeline, + happy_path, + ) # For response object with `happy_path` string comparing, + # a special `generics_comparer` comparator is used + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.responses.3_media.py.txt b/_sources/tutorials/tutorials.script.responses.3_media.py.txt new file mode 100644 index 0000000000..ad29dd0546 --- /dev/null +++ b/_sources/tutorials/tutorials.script.responses.3_media.py.txt @@ -0,0 +1,127 @@ +# %% [markdown] +""" +# Responses: 3. Media + +Here, %mddoclink(api,script.core.message,Attachments) class is shown. +Attachments can be used for attaching different media elements +(such as %mddoclink(api,script.core.message,Image), %mddoclink(api,script.core.message,Document) +or %mddoclink(api,script.core.message,Audio)). + +They can be attached to any message but will only work if the chosen +[messenger interface](%doclink(api,index_messenger_interfaces)) supports them. +""" + +# %pip install dff + +# %% +from dff.script import RESPONSE, TRANSITIONS +from dff.script.conditions import std_conditions as cnd + +from dff.script.core.message import Attachments, Image, Message + +from dff.pipeline import Pipeline +from dff.utils.testing import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +# %% +img_url = "https://www.python.org/static/img/python-logo.png" +toy_script = { + "root": { + "start": { + RESPONSE: Message(text=""), + TRANSITIONS: {("pics", "ask_picture"): cnd.true()}, + }, + "fallback": { + RESPONSE: Message( + text="Final node reached, send any message to restart." + ), + TRANSITIONS: {("pics", "ask_picture"): cnd.true()}, + }, + }, + "pics": { + "ask_picture": { + RESPONSE: Message(text="Please, send me a picture url"), + TRANSITIONS: { + ("pics", "send_one", 1.1): cnd.regexp(r"^http.+\.png$"), + ("pics", "send_many", 1.0): cnd.regexp( + f"{img_url} repeat 10 times" + ), + ("pics", "repeat", 0.9): cnd.true(), + }, + }, + "send_one": { + RESPONSE: Message( + text="here's my picture!", + attachments=Attachments(files=[Image(source=img_url)]), + ), + TRANSITIONS: {("root", "fallback"): cnd.true()}, + }, + "send_many": { + RESPONSE: Message( + text="Look at my pictures", + attachments=Attachments(files=[Image(source=img_url)] * 10), + ), + TRANSITIONS: {("root", "fallback"): cnd.true()}, + }, + "repeat": { + RESPONSE: Message( + text="I cannot find the picture. Please, try again." + ), + TRANSITIONS: { + ("pics", "send_one", 1.1): cnd.regexp(r"^http.+\.png$"), + ("pics", "send_many", 1.0): cnd.regexp( + r"^http.+\.png repeat 10 times" + ), + ("pics", "repeat", 0.9): cnd.true(), + }, + }, + }, +} + +happy_path = ( + (Message(text="Hi"), Message(text="Please, send me a picture url")), + ( + Message(text="no"), + Message(text="I cannot find the picture. Please, try again."), + ), + ( + Message(text=img_url), + Message( + text="here's my picture!", + attachments=Attachments(files=[Image(source=img_url)]), + ), + ), + ( + Message(text="ok"), + Message(text="Final node reached, send any message to restart."), + ), + (Message(text="ok"), Message(text="Please, send me a picture url")), + ( + Message(text=f"{img_url} repeat 10 times"), + Message( + text="Look at my pictures", + attachments=Attachments(files=[Image(source=img_url)] * 10), + ), + ), + ( + Message(text="ok"), + Message(text="Final node reached, send any message to restart."), + ), +) + + +# %% +pipeline = Pipeline.from_script( + toy_script, + start_label=("root", "start"), + fallback_label=("root", "fallback"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.script.responses.4_multi_message.py.txt b/_sources/tutorials/tutorials.script.responses.4_multi_message.py.txt new file mode 100644 index 0000000000..e2b7836758 --- /dev/null +++ b/_sources/tutorials/tutorials.script.responses.4_multi_message.py.txt @@ -0,0 +1,149 @@ +# %% [markdown] +""" +# Responses: 4. Multi Message + +This tutorial shows Multi Message usage. + +The %mddoclink(api,script.core.message,MultiMessage) represents a combination of several messages. + +Let's do all the necessary imports from DFF. +""" + +# %pip install dff + +# %% + +from dff.script import TRANSITIONS, RESPONSE, Message, MultiMessage +import dff.script.conditions as cnd + +from dff.pipeline import Pipeline +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + +# %% +toy_script = { + "greeting_flow": { + "start_node": { # This is an initial node, + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + # If "Hi" == request of user then we make the transition + }, + "node1": { + RESPONSE: MultiMessage( + messages=[ + Message(text="Hi, what is up?", misc={"confidences": 0.85}), + Message( + text="Hello, how are you?", misc={"confidences": 0.9} + ), + ] + ), + TRANSITIONS: { + "node2": cnd.exact_match(Message(text="I'm fine, how are you?")) + }, + }, + "node2": { + RESPONSE: Message(text="Good. What do you want to talk about?"), + TRANSITIONS: { + "node3": cnd.exact_match( + Message(text="Let's talk about music.") + ) + }, + }, + "node3": { + RESPONSE: Message(text="Sorry, I can not talk about that now."), + TRANSITIONS: { + "node4": cnd.exact_match(Message(text="Ok, goodbye.")) + }, + }, + "node4": { + RESPONSE: Message(text="bye"), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + }, + "fallback_node": { # We get to this node + # if an error occurred while the agent was running. + RESPONSE: Message(text="Ooops"), + TRANSITIONS: {"node1": cnd.exact_match(Message(text="Hi"))}, + }, + } +} + +# testing +happy_path = ( + ( + Message(text="Hi"), + MultiMessage( + messages=[ + Message(text="Hi, what is up?", misc={"confidences": 0.85}), + Message(text="Hello, how are you?", misc={"confidences": 0.9}), + ] + ), + ), # start_node -> node1 + ( + Message(text="I'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about that now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="bye")), # node3 -> node4 + ( + Message(text="Hi"), + MultiMessage( + messages=[ + Message(text="Hi, what is up?", misc={"confidences": 0.85}), + Message(text="Hello, how are you?", misc={"confidences": 0.9}), + ] + ), + ), # node4 -> node1 + ( + Message(text="stop"), + Message(text="Ooops"), + ), + # node1 -> fallback_node + ( + Message(text="one"), + Message(text="Ooops"), + ), # f_n->f_n + ( + Message(text="help"), + Message(text="Ooops"), + ), # f_n->f_n + ( + Message(text="nope"), + Message(text="Ooops"), + ), # f_n->f_n + ( + Message(text="Hi"), + MultiMessage( + messages=[ + Message(text="Hi, what is up?", misc={"confidences": 0.85}), + Message(text="Hello, how are you?", misc={"confidences": 0.9}), + ] + ), + ), # fallback_node -> node1 + ( + Message(text="I'm fine, how are you?"), + Message(text="Good. What do you want to talk about?"), + ), # node1 -> node2 + ( + Message(text="Let's talk about music."), + Message(text="Sorry, I can not talk about that now."), + ), # node2 -> node3 + (Message(text="Ok, goodbye."), Message(text="bye")), # node3 -> node4 +) + +# %% + +pipeline = Pipeline.from_script( + toy_script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), +) + +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.stats.1_extractor_functions.py.txt b/_sources/tutorials/tutorials.stats.1_extractor_functions.py.txt new file mode 100644 index 0000000000..981333a1d7 --- /dev/null +++ b/_sources/tutorials/tutorials.stats.1_extractor_functions.py.txt @@ -0,0 +1,136 @@ +# %% [markdown] +""" +# 1. Extractor Functions + +The following example covers the basics of using the `stats` module. + +Statistics are collected from pipeline services by extractor functions +that report the state of one or more pipeline components. The `stats` module +provides several default extractors, but users are free to define their own +extractor functions. You can find API reference for default extractors +[here](%doclink(api,stats.default_extractors)). + +It is a preferred practice to define extractors as asynchronous functions. +Extractors need to have the following uniform signature: +the expected arguments are always `Context`, `Pipeline`, and `ExtraHandlerRuntimeInfo`, +while the expected return value is an arbitrary `dict` or a `None`. +The returned value gets persisted to Clickhouse as JSON +which is why it can contain arbitrarily nested dictionaries, +but it cannot contain any complex objects that cannot be trivially serialized. + +The output of these functions will be captured by an OpenTelemetry instrumentor and directed to +the Opentelemetry collector server which in its turn batches and persists data +to Clickhouse or other OLAP storages. + +
    + +Both the Opentelemetry collector and the Clickhouse instance must be running +during statistics collection. If you cloned the DFF repo, launch them using `docker compose`: +```bash +docker compose --profile stats up +``` + +
    + +For more information on OpenTelemetry instrumentation, +refer to the body of this tutorial as well as [OpenTelemetry documentation]( +https://opentelemetry.io/docs/instrumentation/python/manual/ +). + +""" + +# %pip install dff[stats] + +# %% +import asyncio + +from dff.script import Context +from dff.pipeline import ( + Pipeline, + ACTOR, + Service, + ExtraHandlerRuntimeInfo, + to_service, +) +from dff.utils.testing.toy_script import TOY_SCRIPT, HAPPY_PATH +from dff.stats import OtelInstrumentor, default_extractors +from dff.utils.testing import is_interactive_mode, check_happy_path + + +# %% [markdown] +""" +The cells below configure log export with the help of OTLP instrumentation. + +* The initial step is to configure the export destination. +`from_url` method of the `OtelInstrumentor` class simplifies this task +allowing you to only pass the url of the OTLP Collector server. + +* Alternatively, you can use the utility functions provided by the `stats` module: +`set_logger_destination`, `set_tracer_destination`, or `set_meter_destination`. These accept +an appropriate Opentelemetry exporter instance and bind it to provider classes. + +* Nextly, the `OtelInstrumentor` class should be constructed to log the output +of extractor functions. Custom extractors need to be decorated +with the `OtelInstrumentor` instance. Default extractors are instrumented +by calling the `instrument` method. + +* The entirety of the process is illustrated in the example below. + +""" + + +# %% +dff_instrumentor = OtelInstrumentor.from_url("grpc://localhost:4317") +dff_instrumentor.instrument() + +# %% [markdown] +""" +The following cell shows a custom extractor function. The data obtained from +the context and the runtime information gets shaped as a dict and returned +from the function body. The `dff_instrumentor` decorator then ensures +that the output is logged by OpenTelemetry. + +""" + + +# %% +# decorated by an OTLP Instrumentor instance +@dff_instrumentor +async def get_service_state(ctx: Context, _, info: ExtraHandlerRuntimeInfo): + # extract the execution state of a target service + data = { + "execution_state": info.component.execution_state, + } + # return the state as an arbitrary dict for further logging + return data + + +# %% +# configure `get_service_state` to run after the `heavy_service` +@to_service(after_handler=[get_service_state]) +async def heavy_service(ctx: Context): + _ = ctx # get something from ctx if needed + await asyncio.sleep(0.02) + + +# %% +pipeline = Pipeline.from_dict( + { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + heavy_service, + Service( + handler=ACTOR, + after_handler=[default_extractors.get_current_label], + ), + ], + } +) + + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + pipeline.run() diff --git a/_sources/tutorials/tutorials.stats.2_pipeline_integration.py.txt b/_sources/tutorials/tutorials.stats.2_pipeline_integration.py.txt new file mode 100644 index 0000000000..cd042d11e6 --- /dev/null +++ b/_sources/tutorials/tutorials.stats.2_pipeline_integration.py.txt @@ -0,0 +1,136 @@ +# %% [markdown] +""" +# 2. Pipeline Integration + +In the DFF ecosystem, extractor functions act as regular extra handlers ( +[see the pipeline module documentation](%doclink(tutorial,pipeline.6_extra_handlers_basic)) +). +Hence, you can decorate any part of your pipeline, including services, +service groups and the pipeline as a whole, to obtain the statistics +specific for that component. Some examples of this functionality +are showcased in this tutorial. + +
    + +Both the Opentelemetry collector and the Clickhouse instance must be running +during statistics collection. If you cloned the DFF repo, launch them using `docker compose`: +```bash +docker compose --profile stats up +``` + +
    +""" + +# %pip install dff[stats] + +# %% +import asyncio + +from dff.script import Context +from dff.pipeline import ( + Pipeline, + ACTOR, + Service, + ExtraHandlerRuntimeInfo, + ServiceGroup, + GlobalExtraHandlerType, +) +from dff.utils.testing.toy_script import TOY_SCRIPT, HAPPY_PATH +from dff.stats import ( + OtelInstrumentor, + set_logger_destination, + set_tracer_destination, +) +from dff.stats import OTLPLogExporter, OTLPSpanExporter +from dff.stats import default_extractors +from dff.utils.testing import is_interactive_mode, check_happy_path + +# %% +set_logger_destination(OTLPLogExporter("grpc://localhost:4317", insecure=True)) +set_tracer_destination(OTLPSpanExporter("grpc://localhost:4317", insecure=True)) +dff_instrumentor = OtelInstrumentor() +dff_instrumentor.instrument() + + +# example extractor function +@dff_instrumentor +async def get_service_state(ctx: Context, _, info: ExtraHandlerRuntimeInfo): + # extract execution state of service from info + data = { + "execution_state": info.component.execution_state, + } + # return a record to save into connected database + return data + + +# %% +# example service +async def heavy_service(ctx: Context): + _ = ctx # get something from ctx if needed + await asyncio.sleep(0.02) + + +# %% [markdown] +""" + +The many ways in which you can use extractor functions are shown in the following +pipeline definition. The functions are used to obtain statistics from respective components: + +* A service group of two `heavy_service` instances. +* An `Actor` service. +* The pipeline as a whole. + +As is the case with the regular extra handler functions, you can wire the extractors +to run either before or after the target service. As a result, you can compare +the pre-service and post-service states of the context to measure the performance +of various components, etc. + +Some extractors, like `get_current_label`, have restrictions in terms of their run stage: +for instance, `get_current_label` needs to only be used as an `after_handler` +to function correctly. + +""" +# %% +pipeline = Pipeline.from_dict( + { + "script": TOY_SCRIPT, + "start_label": ("greeting_flow", "start_node"), + "fallback_label": ("greeting_flow", "fallback_node"), + "components": [ + ServiceGroup( + before_handler=[default_extractors.get_timing_before], + after_handler=[ + get_service_state, + default_extractors.get_timing_after, + ], + components=[ + {"handler": heavy_service}, + {"handler": heavy_service}, + ], + ), + Service( + handler=ACTOR, + before_handler=[ + default_extractors.get_timing_before, + ], + after_handler=[ + get_service_state, + default_extractors.get_current_label, + default_extractors.get_timing_after, + ], + ), + ], + } +) +pipeline.add_global_handler( + GlobalExtraHandlerType.BEFORE_ALL, default_extractors.get_timing_before +) +pipeline.add_global_handler( + GlobalExtraHandlerType.AFTER_ALL, default_extractors.get_timing_after +) +pipeline.add_global_handler(GlobalExtraHandlerType.AFTER_ALL, get_service_state) + +if __name__ == "__main__": + check_happy_path(pipeline, HAPPY_PATH) + if is_interactive_mode(): + pipeline.run() diff --git a/_sources/tutorials/tutorials.utils.1_cache.py.txt b/_sources/tutorials/tutorials.utils.1_cache.py.txt new file mode 100644 index 0000000000..676f2f9e59 --- /dev/null +++ b/_sources/tutorials/tutorials.utils.1_cache.py.txt @@ -0,0 +1,77 @@ +# %% [markdown] +""" +# 1. Cache + +In this tutorial use of +%mddoclink(api,utils.turn_caching.singleton_turn_caching,cache) +function is demonstrated. + +This function is used a lot like `functools.cache` function and +helps by saving results of heavy function execution and avoiding recalculation. + +Caches are kept in a library-wide singleton +and are cleared at the end of each turn. +""" + +# %pip install dff + +# %% +from dff.script.conditions import true +from dff.script import Context, TRANSITIONS, RESPONSE, Message +from dff.script.labels import repeat +from dff.pipeline import Pipeline +from dff.utils.turn_caching import cache +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + + +external_data = {"counter": 0} + + +# %% +@cache +def cached_response(_): + """ + This function execution result will be saved + for any set of given argument(s). + If the function will be called again + with the same arguments it will prevent it from execution. + The cached values will be used instead. + The cache is stored in a library-wide singleton, + that is cleared in the end of execution of actor and/or pipeline. + """ + external_data["counter"] += 1 + return external_data["counter"] + + +def response(ctx: Context, _, *__, **___) -> Message: + if ctx.validation: + return Message() + return Message( + text=f"{cached_response(1)}-{cached_response(2)}-" + f"{cached_response(1)}-{cached_response(2)}" + ) + + +# %% +toy_script = { + "flow": {"node1": {TRANSITIONS: {repeat(): true()}, RESPONSE: response}} +} + +happy_path = ( + (Message(), Message(text="1-2-1-2")), + (Message(), Message(text="3-4-3-4")), + (Message(), Message(text="5-6-5-6")), +) + +pipeline = Pipeline.from_script(toy_script, start_label=("flow", "node1")) + + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/tutorials/tutorials.utils.2_lru_cache.py.txt b/_sources/tutorials/tutorials.utils.2_lru_cache.py.txt new file mode 100644 index 0000000000..b0fa4f0280 --- /dev/null +++ b/_sources/tutorials/tutorials.utils.2_lru_cache.py.txt @@ -0,0 +1,75 @@ +# %% [markdown] +""" +# 2. LRU Cache + +In this tutorial use of +%mddoclink(api,utils.turn_caching.singleton_turn_caching,lru_cache) +function is demonstrated. + +This function is used a lot like `functools.lru_cache` function and +helps by saving results of heavy function execution and avoiding recalculation. + +Caches are kept in a library-wide singleton +and are cleared at the end of each turn. + +Maximum size parameter limits the amount of function execution results cached. +""" + +# %pip install dff + +# %% +from dff.script.conditions import true +from dff.script import Context, TRANSITIONS, RESPONSE, Message +from dff.script.labels import repeat +from dff.pipeline import Pipeline +from dff.utils.turn_caching import lru_cache +from dff.utils.testing.common import ( + check_happy_path, + is_interactive_mode, + run_interactive_mode, +) + +external_data = {"counter": 0} + + +# %% +@lru_cache(maxsize=2) +def cached_response(_): + """ + This function will work exactly the same as the one from previous + tutorial with only one exception. + Only 2 results will be stored; + when the function will be executed with third arguments set, + the least recent result will be deleted. + """ + external_data["counter"] += 1 + return external_data["counter"] + + +def response(ctx: Context, _, *__, **___) -> Message: + if ctx.validation: + return Message() + return Message( + text=f"{cached_response(1)}-{cached_response(2)}-{cached_response(3)}-" + f"{cached_response(2)}-{cached_response(1)}" + ) + + +# %% +toy_script = { + "flow": {"node1": {TRANSITIONS: {repeat(): true()}, RESPONSE: response}} +} + +happy_path = ( + (Message(), Message(text="1-2-3-2-4")), + (Message(), Message(text="5-6-7-6-8")), + (Message(), Message(text="9-10-11-10-12")), +) + +pipeline = Pipeline.from_script(toy_script, start_label=("flow", "node1")) + +# %% +if __name__ == "__main__": + check_happy_path(pipeline, happy_path) + if is_interactive_mode(): + run_interactive_mode(pipeline) diff --git a/_sources/user_guides.rst.txt b/_sources/user_guides.rst.txt new file mode 100644 index 0000000000..0cb1a15316 --- /dev/null +++ b/_sources/user_guides.rst.txt @@ -0,0 +1,39 @@ +User guides +----------- + +:doc:`Basic concepts <./user_guides/basic_conceptions>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In the ``basic concepts`` tutorial the basics of DFF are described, +those include but are not limited to: dialog graph creation, specifying start and fallback nodes, +setting transitions and conditions, using ``Context`` object in order to receive information +about current script execution. + +:doc:`Context guide <./user_guides/context_guide>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``context guide`` walks you through the details of working with the +``Context`` object, the backbone of the DFF API, including most of the relevant fields and methods. + +:doc:`Superset guide <./user_guides/superset_guide>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``superset guide`` tutorial highlights the usage of Superset visualization tool +for exploring the telemetry data collected from your conversational services. +We show how to plug in the telemetry collection and configure the pre-built +Superset dashboard shipped with DFF. + +:doc:`Optimization guide <./user_guides/optimization_guide>` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``optimization guide`` demonstrates various tools provided by the library +that you can use to profile your conversational service, +and to locate and remove performance bottlenecks. + +.. toctree:: + :hidden: + + user_guides/basic_conceptions + user_guides/context_guide + user_guides/superset_guide + user_guides/optimization_guide diff --git a/_sources/user_guides/basic_conceptions.rst.txt b/_sources/user_guides/basic_conceptions.rst.txt new file mode 100644 index 0000000000..5344143e05 --- /dev/null +++ b/_sources/user_guides/basic_conceptions.rst.txt @@ -0,0 +1,388 @@ +Basic Concepts +-------------- + +Introduction +~~~~~~~~~~~~ + +The Dialog Flow Framework (DFF) is a modern tool for designing conversational services. + +DFF introduces a specialized Domain-Specific Language (DSL) based on standard Python functions and data structures +which makes it very easy for developers with any level of expertise to design a script for user - bot interaction. +The script comes in a form of a *dialog graph* where +each node equals a specific state of the dialog, i.e. a specific conversation turn. +The graph includes the majority of the conversation logic, and covers one or several user scenarios, all in a single Python dict. + +In this tutorial, we describe the basics of DFF API, +and walk you through the process of creating and maintaining a conversational service with the help of DFF. + + +Creating Conversational Services with DFF +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Installation +============ + +To get started with DFF, you need to install its core dependencies, which can be done using the following command: + +.. code-block:: shell + + pip3 install dff + +Defining Dialogue Goals and User Scenarios +========================================== + +To create a conversational service using Dialog Flow Framework (DFF), you start by defining the overall dialogue goal +and breaking down the dialogue into smaller scenarios based on the user intents or actions that you want to cover. +DFF's Domain-Specific Language makes it easy to break down the dialog script into `flows`, i.e. named groups of nodes +unified by a specific purpose. + +For instance, if one of the dialog options that we provide to the user is to play a game, +the bot can have a 'game' flow that contains dialog states related to this subject, while other flows +cover other topics, e.g. 'time' flow can include questions and answers related to telling the time, +'weather' to telling the weather, etc. + +Creating Dialogue Flows for User Scenarios +========================================== + +Once you have DFF installed, you can define dialog flows targeting various user scenarios +and combine them in a global script object. A flow consists of one or more nodes +that represent conversation turns. + +.. note:: + + In other words, the script object has 3 levels of nestedness: + **script - flow - node** + +Let's assume that the only user scenario of the service is the chat bot playing ping pong with the user. +The practical implementation of this is that the bot is supposed to reply 'pong' to messages that say 'ping' +and handle any other messages as exceptions. The pseudo-code for the said flow would be as follows: + +.. code-block:: text + + If user writes "Hello!": + Respond with "Hi! Let's play ping-pong!" + + If user afterwards writes "Ping" or "ping" or "Ping!" or "ping!": + Respond with "Pong!" + Repeat this behaviour + + If user writes something else: + Respond with "That was against the rules" + Go to responding with "Hi! Let's play ping-pong!" if user writes anything + +This leaves us with a single dialog flow in the dialog graph that we lay down below, with the annotations for +each part of the graph available under the code snippet. + +Example flow & script +===================== + +.. code-block:: python + :linenos: + + from dff.pipeline import Pipeline + from dff.script import TRANSITIONS, RESPONSE, Message + import dff.script.conditions as cnd + + ping_pong_script = { + "greeting_flow": { + "start_node": { + RESPONSE: Message(), # the response of the initial node is skipped + TRANSITIONS: { + ("greeting_flow", "greeting_node"): + cnd.exact_match(Message(text="/start")), + }, + }, + "greeting_node": { + RESPONSE: Message(text="Hi!"), + TRANSITIONS: { + ("ping_pong_flow", "game_start_node"): + cnd.exact_match(Message(text="Hello!")) + } + }, + "fallback_node": { + RESPONSE: fallback_response, + TRANSITIONS: { + ("greeting_flow", "greeting_node"): cnd.true(), + }, + }, + }, + "ping_pong_flow": { + "game_start_node": { + RESPONSE: Message(text="Let's play ping-pong!"), + TRANSITIONS: { + ("ping_pong_flow", "response_node"): + cnd.exact_match(Message(text="Ping!")), + }, + }, + "response_node": { + RESPONSE: Message(text="Pong!"), + TRANSITIONS: { + ("ping_pong_flow", "response_node"): + cnd.exact_match(Message(text="Ping!")), + }, + }, + }, + } + + pipeline = Pipeline.from_script( + ping_pong_script, + start_label=("greeting_flow", "start_node"), + fallback_label=("greeting_flow", "fallback_node"), + ) + + if __name__ == "__main__": + pipeline.run() + +The code snippet defines a script with a single dialogue flow that emulates a ping-pong game. +Likewise, if additional scenarios need to be covered, additional flow objects can be embedded into the same script object. + +* ``ping_pong_script``: The dialog **script** mentioned above is a dictionary that has one or more + dialog flows as its values. + +* ``ping_pong_flow`` is the game emulation flow; it contains linked + conversation nodes and possibly some extra data, transitions, etc. + +* A node object is an atomic part of the script. + The required fields of a node object are ``RESPONSE`` and ``TRANSITIONS``. + +* The ``RESPONSE`` field specifies the response that the dialog agent gives to the user in the current turn. + +* The ``TRANSITIONS`` field specifies the edges of the dialog graph that link the dialog states. + This is a dictionary that maps labels of other nodes to conditions, i.e. callback functions that + return `True` or `False`. These conditions determine whether respective nodes can be visited + in the next turn. + In the example script, we use standard transitions: ``exact_match`` requires the user request to + fully match the provided text, while ``true`` always allows a transition. However, passing custom + callbacks that implement arbitrary logic is also an option. + +* ``start_node`` is the initial node, which contains an empty response and only transfers user to another node + according to the first message user sends. + It transfers user to ``greeting_node`` if user writes text message exactly equal to "Hello!". + +* ``greeting_node`` is the node that will greet user and propose him a ping-pong game. + It transfers user to ``response_node`` if user writes text message exactly equal to "Ping!". + +* ``response_node`` is the node that will play ping-pong game with the user. + It transfers user to ``response_node`` if user writes text message exactly equal to "Ping!". + +* ``fallback_node`` is an "exception handling node"; user will be transferred here if + none of the transition conditions (see ``TRANSITIONS``) is satisfied. + It transfers user to ``greeting_node`` no matter what user writes. + +* ``pipeline`` is a special object that traverses the script graph based on the values of user input. + It is also capable of executing custom actions that you want to run on every turn of the conversation. + The pipeline can be initialized with a script, and with labels of two nodes: + the entrypoint of the graph, aka the 'start node', and the 'fallback node' + (if not provided it defaults to the same node as 'start node'). + +.. note:: + + See `tutorial on basic dialog structure <../tutorials/tutorials.script.core.1_basics.html>`_. + +Processing Definition +===================== + +.. note:: + + The topic of this section is explained in greater detail in the following tutorials: + + * `Pre-response processing <../tutorials/tutorials.script.core.7_pre_response_processing.html>`_ + * `Pre-transitions processing <../tutorials/tutorials.script.core.9_pre_transitions_processing.html>`_ + * `Pipeline processors <../tutorials/tutorials.pipeline.2_pre_and_post_processors.html>`_ + +Processing user requests and extracting additional parameters is a crucial part of building a conversational bot. +DFF allows you to define how user requests will be processed to extract additional parameters. +This is done by passing callbacks to a special ``PROCESSING`` fields in a Node dict. + +* User input can be altered with ``PRE_RESPONSE_PROCESSING`` and will happen **before** response generation. See `tutorial on pre-response processing`_. +* Node response can be modified with ``PRE_TRANSITIONS_PROCESSING`` and will happen **after** response generation but **before** transition to the next node. See `tutorial on pre-transition processing`_. + +Depending on the requirements of your bot and the dialog goal, you may need to interact with external databases or APIs to retrieve data. +For instance, if a user wants to know a schedule, you may need to access a database and extract parameters such as date and location. + +.. code-block:: python + + import requests + ... + def use_api_processing(ctx: Context, _: Pipeline, *args, **kwargs) -> Context: + # save to the context field for custom info + ctx.misc["api_call_results"] = requests.get("http://schedule.api/day1").json() + return ctx + ... + node = { + RESPONSE: ... + TRANSITIONS: ... + PRE_TRANSITIONS_PROCESSING: {"use_api": use_api_processing} + } + +.. note:: + + This function uses ``Context`` to store the result of a request for other functions to use. + Context is a data structure that keeps all the information about a specific conversation. + + To learn more about ``Context`` see the `relevant guide <../user_guides/context_guide.html>`__. + +If you retrieve data from the database or API, it's important to validate it to ensure it meets expectations. + +Since DFF extensively leverages pydantic, you can resort to the validation tools of this feature-rich library. +For instance, given that each processing routine is a callback, you can use tools like pydantic's `validate_call` +to ensure that the returned values match the function signature. +Error handling logic can also be incorporated into these callbacks. + +Generating a bot Response +========================= + +Generating a bot response involves creating a text or multimedia response that will be delivered to the user. +Response is defined in the ``RESPONSE`` section of each node and should be either a ``Message`` object, +that can contain text, images, audios, attachments, etc., or a callback that returns a ``Message``. +The latter allows you to customize the response based on the specific scenario and user input. + +.. code-block:: python + + def sample_response(ctx: Context, _: Pipeline, *args, **kwargs) -> Message: + if ctx.misc["user"] == 'vegan': + return Message(text="Here is a list of vegan cafes.") + return Message(text="Here is a list of cafes.") + +Handling Fallbacks +================== + +In DFF, you should provide handling for situations where the user makes requests +that do not trigger any of the transitions specified in the script graph. +To cover that use case, DFF requires you to define a fallback node that the agent will move to +when no adequate transition has been found. + +Like other nodes, the fallback node can either use a message or a callback to produce a response +which gives you a lot of freedom in creating situationally appropriate error messages. +Create friendly error messages and, if possible, suggest alternative options. +This ensures a smoother user experience even when the bot encounters unexpected inputs. + +.. code-block:: python + + def fallback_response(ctx: Context, _: Pipeline, *args, **kwargs) -> Message: + """ + Generate a special fallback response depending on the situation. + """ + if ctx.last_request is not None: + if ctx.last_request.text != "/start" and ctx.last_label is None: + # an empty last_label indicates start_node + return Message(text="You should've started the dialog with '/start'") + else: + return Message( + text=f"That was against the rules!\n" + f"You should've written 'Ping', not '{ctx.last_request.text}'!" + ) + else: + raise RuntimeError("Error occurred: last request is None!") + +Testing and Debugging +~~~~~~~~~~~~~~~~~~~~~ + +Periodically testing the conversational service is crucial to ensure it works correctly. +You should also be prepared to debug the code and dialogue logic if problems are discovered during testing. +Thorough testing helps identify and resolve any potential problems in the conversation flow. + +The basic testing procedure offered by DFF is end-to-end testing of the pipeline and the script +which ensures that the pipeline yields correct responses for any given input. +It requires a sequence of user request - bot response pairs that form the happy path of your +conversational service. + +.. code-block:: python + + happy_path = ( + (Message(text="/start"), Message(text="Hi!")), + (Message(text="Hello!"), Message(text="Let's play ping-pong!")), + (Message(text="Ping!"), Message(text="Pong!")) + ) + +A special function is then used to ascertain complete identity of the messages taken from +the happy path and the pipeline. The function will play out a dialog with the pipeline acting as a user while checking returned messages. + +.. code-block:: python + + from dff.utils.testing.common import check_happy_path + + check_happy_path(pipeline, happy_path) + +Monitoring and Analytics +~~~~~~~~~~~~~~~~~~~~~~~~ + +Setting up bot performance monitoring and usage analytics is essential to monitor its operation and identify potential issues. +Monitoring helps you understand how users are interacting with the bot and whether any improvements are needed. +Analytics data can provide valuable insights for refining the bot's behavior and responses. + +DFF provides a `statistics` module as an out-of-the-box solution for collecting arbitrary statistical metrics +from your service. Setting up the data collection is as easy as instantiating the relevant class in the same +context with the pipeline. +What's more, the data you obtain can be visualized right away using Apache Superset as a charting engine. + +.. note:: + + More information is available in the respective `guide <../user_guides/superset_guide.html>`__. + +Iterative Improvement +~~~~~~~~~~~~~~~~~~~~~ + +To continually enhance your chat-bot's performance, monitor user feedback and analyze data on bot usage. +For instance, the statistics or the charts may reveal that some flow is visited by users more frequently or +less frequently than planned. This would mean that adjustments to the transition structure +of the graph need to be made. + +Gradually improve the transition logic and response content based on the data received. +This iterative approach ensures that the bot becomes more effective over time. + +Data Protection +~~~~~~~~~~~~~~~ + +Data protection is a critical consideration in bot development, especially when handling sensitive information. + +.. note:: + + The DFF framework helps ensure the safety of your application by storing the history and other user data present + in the ``Context`` object under unique ids and abstracting the storage logic away from the user interface. + As a result, it offers the basic level of data protection making it impossible to gain unlawful access to personal information. + +Documentation +~~~~~~~~~~~~~ + +Creating documentation is essential for teamwork and future bot maintenance. +Document how different parts of the script work and how the bot covers the expected interaction scenarios. +It is especially important to document the purpose and functionality of callback functions and pipeline services +that you may have in your project, using Python docstrings. + +.. code-block:: python + + def fav_kitchen_response(ctx: Context, _: Pipeline, *args, **kwargs) -> Message: + """ + This function returns a user-targeted response depending on the value + of the 'kitchen preference' slot. + """ + ... + +This documentation serves as a reference for developers involved in the project. + +Scaling +~~~~~~~ + +If your bot becomes popular and requires scaling, consider scalability during development. +Scalability ensures that the bot can handle a growing user base without performance issues. +While having only one application instance will suffice in most cases, there are many ways +how you can adapt the application to a high load environment. + +* With the database connection support that DFF offers out of the box, DFF projects can be easily scaled through sharing the same database between multiple application instances. However, using an external database is required due to the fact that this is the only kind of storage that can be efficiently shared between processes. +* Likewise, using multiple database instances to ensure the availability of data is also an option. +* The structure of the `Context` object makes it easy to vertically partition the data storing different subsets of data across multiple database instances. + +Further reading +~~~~~~~~~~~~~~~ + +* `Tutorial on basic dialog structure <../tutorials/tutorials.script.core.1_basics.html>`_ +* `Tutorial on transitions <../tutorials/tutorials.script.core.4_transitions.html>`_ +* `Tutorial on conditions <../tutorials/tutorials.script.core.2_conditions.html>`_ +* `Tutorial on response functions <../tutorials/tutorials.script.core.3_responses.html>`_ +* `Tutorial on pre-response processing <../tutorials/tutorials.script.core.7_pre_response_processing.html>`_ +* `Tutorial on pre-transition processing <../tutorials/tutorials.script.core.9_pre_transitions_processing.html>`_ +* `Guide on Context <../user_guides/context_guide.html>`_ +* `Tutorial on global transitions <../tutorials/tutorials.script.core.5_global_transitions.html>`_ +* `Tutorial on context serialization <../tutorials/tutorials.script.core.6_context_serialization.html>`_ +* `Tutorial on script MISC <../tutorials/tutorials.script.core.8_misc.html>`_ \ No newline at end of file diff --git a/_sources/user_guides/context_guide.rst.txt b/_sources/user_guides/context_guide.rst.txt new file mode 100644 index 0000000000..4f3f2dbc75 --- /dev/null +++ b/_sources/user_guides/context_guide.rst.txt @@ -0,0 +1,250 @@ +Context guide +-------------- + +Introduction +~~~~~~~~~~~~ + +The ``Context`` class is a backbone component of the DFF API. +Like the name suggests, this data structure is used to store information +about the current state, or context, of a particular conversation. +Each individual user has their own ``Context`` instance and can be identified by it. + +``Context`` is used to keep track of the user's requests, bot's replies, +user-related and request-related annotations, and any other information +that is relevant to the conversation with the user. + +.. note:: + + Since most callback functions used in DFF script and DFF pipeline (see the `basic guide <./basic_conceptions.rst>`__) + need to either read or update the current dialog state, + the framework-level convention is that all functions of this kind + use ``Context`` as their first parameter. This dependency is being + injected by the pipeline during its run. + Thus, understanding the ``Context`` class is essential for developing custom conversation logic + which is mostly made up by the said functions. + +As a callback parameter, ``Context`` provides a convenient interface for working with data, +allowing developers to easily add, retrieve, +and manipulate data as the conversation progresses. + +Let's consider some of the built-in callback instances to see how the context can be leveraged: + +.. code-block:: python + :linenos: + + pattern = re.compile("[a-zA-Z]+") + + def regexp_condition_handler( + ctx: Context, pipeline: Pipeline, *args, **kwargs + ) -> bool: + # retrieve the current request + request = ctx.last_request + if request.text is None: + return False + return bool(pattern.search(request.text)) + +The code above is a condition function (see the `basic guide <./basic_conceptions.rst>`__) +that belongs to the ``TRANSITIONS`` section of the script and returns `True` or `False` +depending on whether the current user request matches the given pattern. +As can be seen from the code block, the current +request (``last_request``) can be easily retrieved as one of the attributes of the ``Context`` object. +Likewise, the ``last_response`` (bot's current reply) or the ``last_label`` +(the name of the currently visited node) attributes can be used in the same manner. + +Another common use case is leveraging the ``misc`` field (see below for a detailed description): +pipeline functions or ``PROCESSING`` callbacks can write arbitrary values to the misc field, +making those available for other context-dependent functions. + +.. code-block:: python + :linenos: + + import urllib.request + import urllib.error + + def ping_example_com( + ctx: Context, *_, **__ + ): + try: + with urllib.request.urlopen("https://example.com/") as webpage: + web_content = webpage.read().decode( + webpage.headers.get_content_charset() + ) + result = "Example Domain" in web_content + except urllib.error.URLError: + result = False + ctx.misc["can_ping_example_com"] = result + +.. + todo: link to the user defined functions tutorial + + .. note:: + For more information about user-defined functions see the `user functions guide <./user_functions.rst>`__. + +API +~~~ + +This sections describes the API of the ``Context`` class. + +For more information, such as method signatures, see +`API reference <../apiref/dff.script.core.context.html#dff.script.core.context.Context>`__. + +Attributes +========== + +* **id**: This attribute represents the unique context identifier. By default, it is randomly generated using uuid4. + In most cases, this attribute will be used to identify a user. + +* **labels**: The labels attribute stores the history of all passed labels within the conversation. + It maps turn IDs to labels. The collection is ordered, so getting the last item of the mapping + always shows the last visited node. + + Note that `labels` only stores the nodes that were transitioned to + so `start_label` will not be in this attribute. + +* **requests**: The requests attribute maintains the history of all received requests by the agent. + It also maps turn IDs to requests. Like labels, it stores the requests in-order. + +* **responses**: This attribute keeps a record of all agent responses, mapping turn IDs to responses. + Stores the responses in-order. + +* **misc**: The misc attribute is a dictionary for storing custom data. This field is not used by any of the + built-in DFF classes or functions, so the values that you write there are guaranteed to persist + throughout the lifetime of the ``Context`` object. + +* **framework_states**: This attribute is used for storing addon or pipeline states. + Each turn, the DFF pipeline records the intermediary states of its components into this field, + and clears it at the end of the turn. For this reason, developers are discouraged from storing + their own data in this field. + +Methods +======= + +The methods of the ``Context`` class can be divided into two categories: + +* Public methods that get called manually in custom callbacks and in functions that depend on the context. +* Methods that are not designed for manual calls and get called automatically during pipeline runs, + i.e. quasi-private methods. You may still need them when developing extensions or heavily modifying DFF. + +Public methods +^^^^^^^^^^^^^^ + +* **last_request**: Return the last request of the context, or `None` if the ``requests`` field is empty. + + Note that a request is added right after the context is created/retrieved from db, + so an empty ``requests`` field usually indicates an issue with the messenger interface. + +* **last_response**: Return the last response of the context, or `None` if the ``responses`` field is empty. + + Responses are added at the end of each turn, so an empty ``response`` field is something you should definitely consider. + +* **last_label**: Return the last label of the context, or `None` if the ``labels`` field is empty. + Last label is always the name of the current node but not vice versa: + + Since ``start_label`` is not added to the ``labels`` field, + empty ``labels`` usually indicates that the current node is the `start_node`. + After a transition is made from the `start_node` + the label of that transition is added to the field. + +* **clear**: Clear all items from context fields, optionally keeping the data from `hold_last_n_indices` turns. + You can specify which fields to clear using the `field_names` parameter. This method is designed for cases + when contexts are shared over high latency networks. + +.. note:: + + See the `preprocessing tutorial <../tutorials/tutorials.script.core.7_pre_response_processing.py>`__. + +Private methods +^^^^^^^^^^^^^^^ + +* **set_last_response, set_last_request**: These methods allow you to set the last response or request for the current context. + This functionality can prove useful if you want to create a middleware component that overrides the pipeline functionality. + +* **add_request**: Add a request to the context. + It updates the `requests` dictionary. This method is called by the `Pipeline` component + before any of the `pipeline services <../tutorials/tutorials.pipeline.3_pipeline_dict_with_services_basic.py>`__ are executed, + including `Actor <../apiref/dff.pipeline.pipeline.actor.html>`__. + +* **add_response**: Add a response to the context. + It updates the `responses` dictionary. This function is run by the `Actor <../apiref/dff.pipeline.pipeline.actor.html>`__ pipeline component at the end of the turn, after it has run + the `PRE_RESPONSE_PROCESSING <../tutorials/tutorials.script.core.7_pre_response_processing.py>`__ functions. + + To be more precise, this method is called between the ``CREATE_RESPONSE`` and ``FINISH_TURN`` stages. + For more information about stages, see `ActorStages <../apiref/dff.script.core.types.html#dff.script.core.types.ActorStage>`__. + +* **add_label**: Add a label to the context. + It updates the `labels` field. This method is called by the `Actor <../apiref/dff.pipeline.pipeline.actor.html>`_ component when transition conditions + have been resolved, and when `PRE_TRANSITIONS_PROCESSING <../tutorials/tutorials.script.core.9_pre_transitions_processing.py>`__ callbacks have been run. + + To be more precise, this method is called between the ``GET_NEXT_NODE`` and ``REWRITE_NEXT_NODE`` stages. + For more information about stages, see `ActorStages <../apiref/dff.script.core.types.html#dff.script.core.types.ActorStage>`__. + +* **current_node**: Return the current node of the context. This is particularly useful for tracking the node during the conversation flow. + This method only returns a node inside ``PROCESSING`` callbacks yielding ``None`` in other contexts. + +Context storages +~~~~~~~~~~~~~~~~ + +Since context instances contain all the information, relevant for a particular user, there needs to be a way +to persistently store that information and to make it accessible in different user sessions. +This functionality is implemented by the ``context storages`` module that provides +the uniform ``DBContextStorage`` interface as well as child classes thereof that integrate +various database types (see the +`api reference <../apiref/dff.context_storages.database.html#dff.context_storages.database.DBContextStorage>`_). + +The supported storage options are as follows: + +* `JSON `_ +* `pickle `_ +* `shelve `_ +* `SQLite `_ +* `PostgreSQL `_ +* `MySQL `_ +* `MongoDB `_ +* `Redis `_ +* `Yandex DataBase `_ + +``DBContextStorage`` instances can be uniformly constructed using the ``context_storage_factory`` function. +The function's only parameter is a connection string that specifies both the database type +and the connection parameters, for example, *mongodb://admin:pass@localhost:27016/admin*. +(`see the reference <../apiref/dff.context_storages.database.html#dff.context_storages.database.context_storage_factory>`_) + +.. note:: + To learn how to use ``context_storage_factory`` in your pipeline, see our `Context Storage Tutorials <../tutorials/index_context_storages.html>`__. + +The GitHub-based distribution of DFF includes Docker images for each of the supported database types. +Therefore, the easiest way to deploy your service together with a database is to clone the GitHub +distribution and to take advantage of the packaged +`docker compose file `_. + +.. code-block:: shell + :linenos: + + git clone https://github.com/deeppavlov/dialog_flow_framework.git + cd dialog_flow_framework + # assuming we need to deploy mongodb + docker compose up mongo + +The images can be configured using the docker compose file or the +`environment file `_, +also available in the distribution. Consult these files for more options. + +.. warning:: + + The data transmission protocols require the data to be JSON-serializable. DFF tackles this problem + through utilization of ``pydantic`` as described in the next section. + +Serialization +~~~~~~~~~~~~~ + +The fact that the ``Context`` class is a Pydantic model makes it easily convertible to other data formats, +such as JSON. For instance, as a developer, you don't need to implement instructions on how datetime fields +need to be marshalled, since this functionality is provided by Pydantic out of the box. +As a result, working with web interfaces and databases that require the transmitted data to be serialized +becomes as easy as calling the `model_dump_json` method: + +.. code-block:: python + + context = Context() + serialized_context = context.model_dump_json() + +Knowing that, you can easily extend DFF to work with storages like Memcache or web APIs of your liking. \ No newline at end of file diff --git a/_sources/user_guides/optimization_guide.rst.txt b/_sources/user_guides/optimization_guide.rst.txt new file mode 100644 index 0000000000..198e704022 --- /dev/null +++ b/_sources/user_guides/optimization_guide.rst.txt @@ -0,0 +1,107 @@ +Optimization Guide +------------------ + +Introduction +~~~~~~~~~~~~ + +When optimizing a dialog service to provide the best possible user experience, +it's essential to identify and address performance issues. +Similar to any complex system, a dialog service can have performance bottlenecks at various levels. +These bottlenecks can occur during I/O operations like receiving and sending messages, +as well as when synchronizing service states with a database. +As the number of callbacks in the script and pipeline increases, +the performance of DFF classes can degrade leading to longer response time. + +As a result, it becomes necessary to locate the part of the pipeline that is causing issues, so that +further optimization steps can be taken. DFF provides several tools that address the need for +profiling individual system components. This guide will walk you through the process +of using these tools in practice and optimizing the profiled application. + +Profiling with Locust testing +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`Locust `__ is a tool for load testing web applications that +simultaneously spawns several user agents that execute a pre-determined behavior +against the target application. Assuming that your pipeline is integrated into a web +server application, like Flask or FastAPI, that is not strongly impacted by the load, +the load testing reveals how well your pipeline would scale to a highly loaded environment. +Using this approach, you can also measure the scalability of each component in your pipeline, +if you take advantage of the Opentelemetry package bundled with the library (`stats` extra required) +as described below. + +Since Locust testing can only target web apps, +this approach only applies if you integrate your dialog pipeline into a web application. +The `FastAPI integration tutorial <../tutorials/tutorials.messengers.web_api_interface.1_fastapi.py>`_ +shows the most straightforward way to do this. +At this stage, you will also need to instrument the pipeline components that you want to additionally profile +using `extractor functions`. Put simply, you are decorating the components of the pipeline +with functions that can report their performance, e.g. their execution time or the CPU load. + +.. note:: + + You can get more info on how instrumentation is done and statistics are collected + in the `stats tutorial <../tutorials/tutorials.stats.1_extractor_functions.py>`__. + +When you are done setting up the instrumentation, you can launch the web server to accept connections from locust. + +The final step is to run a Locust file which will result in artificial load traffic being generated and sent to your server. +A Locust file is a script that implements the behavior of artificial users, +i.e. the requests to the server that will be made during testing. + +.. note:: + + An example Locust script along with instructions on how to run it can be found in the + `load testing tutorial <../tutorials/tutorials.messengers.web_api_interface.3_load_testing_with_locust.py>`_. + The simplest way, however, is to pass a locust file to the Python interpreter. + +Once Locust is running, you can access its GUI, where you can set the number of users to emulate. +After configuring this parameter, the active phase of testing will begin, +and the results will become accessible on an interactive dashboard. +These reported values include timing data, such as the average response time of your service, +allowing you to assess the performance's reasonableness and impact on user experience. + +The data provided by extractor functions will be available in the Clickhouse database; +you can view it using the Superset dashboard (see `instructions <./superset_guide.html>`__) +or analyze it with your own queries using the Clickhouse client. + +Profiling context storages +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Benchmarking the performance of context storage is crucial to understanding +how different storage methods impact your dialog service's efficiency. +This process involves running tests to measure the speed and reliability of various context storage solutions. +Given the exact configuration of your system, one or the other database type may be performing more efficiently, +so you may prefer to change your database depending on the testing results. + +.. note:: + The exact instructions of how the testing can be carried out are available in the + `DB benchmarking tutorial <../tutorials/tutorials.context_storages.8_db_benchmarking.py>`__. + +Optimization techniques +~~~~~~~~~~~~~~~~~~~~~~~ + +Aside from choosing an appropriate database type, there exists a number of other recommendations +that may help you improve the efficiency of your service. + +* Firstly, follow the DRY principle not only with regard to your code, but also with regard to + computational operations. In other words, you have to make sure that your callback functions work only once + during a dialog turn and only when needed. E.g. you can take note of the `conditions` api available as a part + of the `Pipeline` module: while normally a pipeline service runs every turn, you can restrict it + to only run on turns when a particular condition is satisfied, greatly reducing + the number of performed actions (see the + `Groups and Conditions tutorial <../tutorials/tutorials.pipeline.4_groups_and_conditions_full.py>`__). + +* Using caching for resource-consuming callbacks and actions may also prove to be a helpful strategy. + In this manner, you can improve the computational efficiency of your pipeline, + while making very few changes to the code itself. DFF includes a caching mechanism + for response functions. However, the simplicity + of the DFF API makes it easy to integrate any custom caching solutions that you may come up with. + See the `Cache tutorial <../tutorials/tutorials.utils.1_cache.py>`__. + +* Finally, be mindful about the use of computationally expensive algorithms, like NLU classifiers + or LLM-based generative networks, since those require a great deal of time and resources + to produce an answer. In case you need to use one, take full advantage of caching along with + other means to relieve the computational load imposed by neural networks such as message queueing. + +.. + todo: add a link to a user guide about using message queueing. diff --git a/_sources/user_guides/superset_guide.rst.txt b/_sources/user_guides/superset_guide.rst.txt new file mode 100644 index 0000000000..a819fd5449 --- /dev/null +++ b/_sources/user_guides/superset_guide.rst.txt @@ -0,0 +1,191 @@ +Superset guide +--------------------- + +Description +~~~~~~~~~~~ + +| The Dialog Flow Stats module can be used to obtain and visualize usage statistics for your service. +| The module relies on several open source solutions that allow for data persistence and visualization + +* `Clickhouse `_ serves as an OLAP storage for data. +* Batching and preprocessing data is based on `OpenTelemetry protocol `_ and the `OpenTelemetry collector `_. +* Interactive visualization is powered by `Apache Superset `_. + +All the mentioned services are shipped as Docker containers, including a pre-built Superset image that ensures API compatibility. + +Collection procedure +~~~~~~~~~~~~~~~~~~~~ + +**Installation** + +.. code-block:: shell + :linenos: + + # clone the original repository to access the docker compose file + git clone https://github.com/deeppavlov/dialog_flow_framework.git + # install with the stats extra + cd dialog_flow_framework + pip install .[stats] + +**Launching services** + +.. code-block:: shell + :linenos: + + # clone the original repository to access the docker compose file + git clone https://github.com/deeppavlov/dialog_flow_framework.git + # launch the required services + cd dialog_flow_framework + docker compose --profile stats up + +**Collecting data** + +Collecting data is done by means of instrumenting your conversational service before you run it. +DFF tutorials (`1 <../tutorials/tutorials.stats.1_extractor_functions.py>`_, `2 <../tutorials/tutorials.stats.2_pipeline_integration.py>`_) +showcase all the steps needed to achieve that. We will run +a special script in order to obtain richly-annotated sample data points to visualize. + +.. code-block:: shell + + python utils/stats/sample_data_provider.py + +Displaying the data +~~~~~~~~~~~~~~~~~~~ + +In order to display the Superset dashboard, you should update the default configuration with the credentials of your database. +The configuration can be optionally saved as a zip archive for inspection / debug. + +You can set most of the configuration options using a YAML file. +The default example file can be found in the `tutorials/stats` directory: + +.. code-block:: yaml + :linenos: + + # tutorials/stats/example_config.yaml + db: + driver: clickhousedb+connect + name: test + user: username + host: clickhouse + port: 8123 + table: otel_logs + +The file can then be used to parametrize the configuration script. + +.. code-block:: shell + + dff.stats tutorials/stats/example_config.yaml -P superset -dP pass -U superset --outfile=config_artifact.zip + +.. warning:: + + Here we passed passwords via CLI, which is not recommended. For enhanced security, call the command above omitting the passwords (`dff.stats -P -dP -U superset ...`) and you will be prompted to enter them interactively. + +Running the command will automatically import the dashboard as well as the data sources +into the running superset server. If you are using a version of Superset different from the one +shipped with DFF, make sure that your access rights are sufficient to edit the workspace. + +Using Superset +~~~~~~~~~~~~~~ + +| In order to view the imported dashboard, log into `Superset `_ using your username and password (which are both `superset` by default and can be configured via `.env_file`). +| The dashboard will then be available in the **Dashboards** section of the Superset UI under the name of **DFF stats**. +| The dashboard is split into four sections based on the types of charts and on the chart topic. + +* The **Overview** section summarizes the information about user interaction with your script. And displays a weighted graph of transitions from one node to another. The data is also shown in the form of a table for better introspection capabilities. + +.. figure:: ../_static/images/overview.png + + Overview plots. + +* The data displayed in the **Node stats** section reports, how frequent each of the nodes in your script was visited by users. The information is aggregated in several forms for better interpretability. + +.. figure:: ../_static/images/general_stats.png + + Node stats plots. + +* General service load data aggregated over time can be found in the **Service stats** section. + +.. figure:: ../_static/images/service_stats.png + + Service stats plots. + +* The **Annotations** section contains example charts that show how annotations from supplemental pipeline services can be viewed and analyzed. + +.. figure:: ../_static/images/annotations.png + + Plots for pipeline-produced dialog annotations. + +On some occasions, Superset can show warnings about the database connection being faulty. +In that case, you can navigate to the `Database Connections` section through the `Settings` menu and edit the `dff_database` instance updating the credentials. + +.. figure:: ../_static/images/databases.png + + Locate the database settings in the right corner of the screen. + +Customizing the dashboard +~~~~~~~~~~~~~~~~~~~~~~~~~ + +The most notable advantage of using Superset as a visualization tool is that it provides +an easy and intuitive way to create your own charts and to customize the dashboard. + +**Datasets** + +If you aim to create your own chart, Superset will prompt you to select a dataset to draw data from. +The current configuration provides three datasets `dff-node-stats`, `dff-stats`, and `dff-final-nodes`. +However, in most cases, you would use `dff-stats` or `dff-node-stats`. The former contains all data points, +while the latter only includes the logs produced by `get_current_label` extractor +(`see the API reference <../apiref/dff.stats.default_extractors.html#dff.stats.default_extractors.get_current_label>`_). +`dff-final-nodes` contains the same information as the said datasources, +but only aggregates the labels of nodes visited at the end of dialog graph traversal, +i.e. nodes that terminate the dialog. + +`dff-nodes-stats` uses the following variables to store the data: + +* The `context_id` field can be used to distinguish dialog contexts from each other and serves as a user identifier. +* `request_id` is the number of the dialog turn at which the data record was emitted. The data points can be aggregated over this field, showing the distribution of a variable over the dialog history. +* The `data_key` field contains the name of the extractor function that emitted the given record. Since in most cases you will only need the output of one extractor, you can filter out all the other records using filters. +* Finally, the `data` field is a set of JSON-encoded key-value pairs. The keys and values differ depending on the extractor function that emitted the data (you can essentially save arbitrary data under arbitrary keys), which makes filtering the data rows by their `data_key` all the more important. The JSON format implies that individual values need to be extracted using the Superset SQL functions (see below). + + +.. code-block:: + + JSON_VALUE(data, '$.key') + JSON_VALUE(data, '$.outer_key.nested_key') + +**Chart creation** + +.. note:: + + Chart creation is described in detail in the official Superset documentation. + We suggest that you consult it in addition to this section: + `link `_. + +Creating your own chart is as easy as navigating to the `Charts` section of the Superset app +and pressing the `Create` button. + +Initially, you will be prompted for the dataset that you want to use as well as for the chart type. +The Superset GUI provides comprehensive previews of each chart type making it very easy +to find the exact kind that you need. + +At the next step, you will be redirected to the chart creation interface. +Depending on the kind of chat that you have chosen previously, menus will be available +to choose a column for the x-axis and, optionally, a column for the y-axis. As mentioned above, +a separate menu for data filters will also be available. If you need to use the data +from the `data` column, you will need to find the `custom_sql` option when adding the column +and put in the extraction expression, as shown in the examples above. + +**Exporting the chart configuration** + +The configuration of a Superset dashboard can be easily exported and then reused +in other Superset instances. This can be done using the GUI: navigate to the +`Dashboards` section of the Superset application, locate your dashboard (named `DFF statistics` per default). +Then press the `export` button on the right and save the zip file to any convenient location. + +**Importing existing configuration files** + +If you need to restore your dashboard or update the configuration, you can import a configuration archive +that has been saved in the manner described below. + +Log in to Superset, open the `Dashboards` tab and press the import button on the right of the screen. +You will be prompted for the database password. If the database credentials match, +the updated dashboard will appear in the dashboard list. \ No newline at end of file diff --git a/_static/auto-render.min.js b/_static/auto-render.min.js new file mode 100644 index 0000000000..c169ec639f --- /dev/null +++ b/_static/auto-render.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},r={};function n(e){var a=r[e];if(void 0!==a)return a.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var a={};return function(){n.d(a,{default:function(){return s}});var e=n(771),t=n.n(e),r=function(e,t,r){for(var n=r,a=0,i=e.length;n0&&(a.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));var l=t.findIndex((function(t){return e.startsWith(t.left)}));if(-1===(n=r(t[l].right,e,t[l].left.length)))break;var d=e.slice(0,n+t[l].right.length),s=i.test(d)?d:e.slice(t[l].left.length,n);a.push({type:"math",data:s,rawData:d,display:t[l].display}),e=e.slice(n+t[l].right.length)}return""!==e&&a.push({type:"text",data:e}),a},l=function(e,r){var n=o(e,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;for(var a=document.createDocumentFragment(),i=0;i tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/binder_badge_logo.svg b/_static/binder_badge_logo.svg new file mode 100644 index 0000000000..327f6b639a --- /dev/null +++ b/_static/binder_badge_logo.svg @@ -0,0 +1 @@ + launchlaunchbinderbinder \ No newline at end of file diff --git a/_static/broken_example.png b/_static/broken_example.png new file mode 100644 index 0000000000000000000000000000000000000000..4fea24e7df4781c2c32c8d7995511ac89e953145 GIT binary patch literal 21404 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 + + + diff --git a/_static/clipboard.min.js b/_static/clipboard.min.js new file mode 100644 index 0000000000..54b3c46381 --- /dev/null +++ b/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/_static/copybutton.css b/_static/copybutton.css new file mode 100644 index 0000000000..f1916ec7d1 --- /dev/null +++ b/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

    Short

    + */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/_static/copybutton.js b/_static/copybutton.js new file mode 100644 index 0000000000..2ea7ff3e21 --- /dev/null +++ b/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/_static/copybutton_funcs.js b/_static/copybutton_funcs.js new file mode 100644 index 0000000000..dbe1aaad79 --- /dev/null +++ b/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/_static/css/custom.css b/_static/css/custom.css new file mode 100644 index 0000000000..4957fe1a45 --- /dev/null +++ b/_static/css/custom.css @@ -0,0 +1,45 @@ +.call-to-action-any { + width: 2rem; + height: 2rem; + margin-inline-end: 10px; + background-size: 100% 100%; +} + +.pytorch-colab { + background-image: url("../images/logo-colab.svg"); +} + +.pytorch-download { + background-image: url("../images/logo-download.svg"); +} + +.pytorch-github { + background-image: url("../images/logo-github.svg"); +} + + + +.call-to-action-desktop-view { + display: none; +} + +.call-to-action-mobile-view { + display: block; +} + +#google-colab-link, #download-notebook-link, #github-view-link { + padding-bottom: 0.625rem; + display: flex; +} + + + +@media screen and (min-width: 768px) { + .call-to-action-desktop-view { + display: block; + } + + .call-to-action-mobile-view { + display: none; + } +} diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 0000000000..d06a71d751 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 0000000000..d502447d2d --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '0.6.4', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: true, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/drawio/dfe/user_actor.png b/_static/drawio/dfe/user_actor.png new file mode 100644 index 0000000000000000000000000000000000000000..220270aafb393899bdee784e107ebbad4d78b4b7 GIT binary patch literal 72168 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 literal 0 HcmV?d00001 diff --git a/_static/images/additional_stats.png b/_static/images/additional_stats.png new file mode 100644 index 0000000000000000000000000000000000000000..2b9d2c3f5e66977d586147acb0bdd928fceaf482 GIT binary patch literal 31560 zcmeFZ2RNH;`!F8WR;N}KHQQ2JyS5tDR#787MuJ2rYD6UVE;>+K?bzwFI`VPectyye&7H2-sAWFkK?@^xt-U2UAe|NuIpTP_6GLe0ZywZDk}mg zC;$Ko@*iMtf?_~fUf$>rEe%CwHHGgLZvf=$;8g$siE^~pQo40PPakrD>fQHme62G! zb+G;V|DRmse%JfH_6`7a^Z%1J|LXD4du9%%c5{gb&}AXl-F=Ve3wvjA8F z%m5bv$^aC=6d*u`gaKCpLICkSB0wH+fa2@*^?u;%b&&Gw{m{XKlm`zVI(+!shwA8& z!&FD94j(>p{K(N`UoSFr;`p%>UkhJ5`To@dhbSoz9iuu-^{vVO)ot$;faVCr(}Q`G z6zqTlG!&FH6nk|5Rx-K|P=1}>&(#7Bex1ny@-XCT=xG22dA5{P$4^roK6LN^B^gna z2PqC6raD4Hd-Mz)C^D*(;i9Crj-yjVL09)#b|FzQaS2UbJqPE!{K6haj++B;HI{ym>eHbKPe2sl!tzPU!k9xh_mE>Z%?b6z-%$R_!n=oJR%NhoJ?u%7-{b zdohImP5s9apIdkw6W%881c_ERT#H}iZ4iK&i3FppThfFLii?WRKT5yIYc5>;3CM(r ziMIl3L%^6mRt+JwnGTk$&Y6RP!VW2nO1XORQLPqu`yo4^_#|djLIHFXydDjL1D$$- zPH3^U5B585<7HIoP`8xy7+oU=jQGWxIA43hT_Q4wcDzKAXSkL7D3V4%ldBcJ(Njno zk}5=Gbc!i%gQ)#xk493@K7Ik*zPx&%xmDFqwkl`C@ww|O58sQQoMc(f1&UIDnX z(ctJ&5*ndi!susf(eTH6dddt7i^DR$rnwkxnsB?wDlHbLDNX*1q6%lx+#sBoR#etX z%g%+538D_n^i$$T>Oxzp?^>7?2aI2{e%i*)qY4GXl~|Bh9PWo!XKN9>MwG;a<)s9f z(RBQ zpI^J1=92i)XZpc(XI29s!S$uZ0~oZ}AqToS*N(D4L3hj&yt)_WKCANZtwCFBFl*$X zhkKh^O&QP0uv0`>it{snye!zXC_W33hU8Q=#AsFC>muv{*r`u<@TE2ajfci7YKpFL z(Cc-(*2Xjm!`ZAqAG@VH=cDN2zNV?d6Hn4{A92TGGNp2ho=Pt9+avB6WP8gvKFpg$ z&}&qBKJ*cJVfWr(0srFIEj*Z1p@h(l!^}l3iCuQjF-Rd|SMpacuN=0Y-AKh>t1nYD zcW_Yyrmeb=d`esi$}qOzRtPSN`wqymF0c#pG_a50i~%`y>#^!n@fV0lh{iW%Z`bL! zrH|g9QDn<4h_?*!v&%4SFEYA%7Ak9Wi^yo}ZMBlsfPs{OL0h+PgAkO#=ZBLzu97r7m$@D0_j0UOL6L zjcG{|R)H4M<&P;Y?1ywk;Sk#N&23FP6vC!-dUg$l@5R_*%aud1EV8!VvDdsNT zQGsH+KwB71tDZKeVto0+VpXZh113u0Vu3>Xw&Avv1icLo=2)i+b#vs3pJ4aotFk5p z{t5b)*{6o5Wx9jd5Ul4O0DIr&O=ntd=&+>S+ioDcKRl!JHu@-9Oj8ss)r02l>+t|s z&8NIAR+M?vHf)rQth+Iv^l_A2~8i|zPN|9T)5NPHz=QG2?rc*!b7tIHtZxMxO|#tuL3EJ>@Xja&PZ z9cpGV;M`ED>(n+6ukObzKfPBD>_!$!;nrrj>6N4c4Rj-M2O{>OS0Jz#=7=vN4L?7& z={B7A_SPOC&Rzse3b(Ys-?Ap?fb6MbI5?C(Y>8XryoOQ>ybX=tTEjtbyoQx<$XW}P zidIywiWOQm@IQ!s{~t}IpK%-A9?B#rLN~nL=HdCUsR=V)XIE?#@sS$_g6JC`x6kVD z8?$jjkPzb6YAX8#7nU|Q8moy*I!ilxjRzM9OR_g}6>BYWaFwIm(xXLt0PmcB1dni^ zR$)`DUSVpYxy32eCyCuqhg-ABZuVI8bf0BvAXn+|cv*_IB2BQG;;x9Kh9cXrX<;01 z%BDyw+Jq*hxz!R&yVPjNm&Qpl}@Y=jn-X(D-bjkLN|=16f5-ymNrnDdAx)gP}t zSys+}6-ubQ2*RDyCYo2OD(DW3Efpn<5i5th<2KKg-^sR0q+jbk29J)D)ycTmV64_Q zFWPQwkZgLwL~`+V+Ld&WpatCh`c7SLi;j69Lc8$R+5&0&{?xYqarJFI4X z+u2ADJta2DI(sPau3DLqVf>tOZolD7Lbul3QN)j;s^APvO;^+0stQ4E<5oi!55R?CJ$Ns*oyi zaKpT(iB_)$CQnZ_1m@-wl}0%1Lh@*G#V?^gV4Y2dFU!FzE}w^*@L;sN47ATM8_#9D z#K9q&Yott)Zq=}UfOmMr=Ia1a?>2sJ2e#MYG4mfEGSHe3M{Qt(NfsvR=Wdt0jrBB0 z0oVKQG`!pc45ubcU5w}PcX9h;HqLhfc1hIbbzC$9myn<5yK?Z=#9ED-npi$D7Y%U1GHHSP_L4SPZ0~kC2xj;3%L(=I6_40a=9`NM#1JW}k&eOXe&bq6s)K>c7s*9eC(#vccsAob@MNS!&>o0-7@igfVW zaO>QVSbRHVe<(arB7{#5y=lLrzSh93{B(Fts`wHJh_A+J2VtW?F3sSrG7_8VgsPvC zx!>hC*>zn(LfLK?5giEz21Y@Gr8uYC<(y^e=hTWOuX)*RwfUYT#xz75VW6qvQK+C> zx|J^-F|&?E`uq`sy4ax8%EwSA1i@Hx<6w`_!@D!$Mt7s8$2$&99tY_2s%T43@ zm@BSn#|_7a7h=!hnu>>!AOBcA6GuMgrHKAGtwL@wv?T^yh~rgxJLR-3CFq)R*_O3f z6?a9bkF`a*=t#rDR3DcIy=s9oytcn#791kwU zy!3hq<}wqfe9er1=5Y1u4tmSb4y-Z3VB^9V%Y7!%IYguIVn%qeouhG-76zk-aP88W z3`)I{Nsoru9!~1gcBGO|I*qrphRDwla!w7KODLTqWXJ?WtUKW`k{Rqpll}?_l{u}* z+x;LXU7WVv`PQo09G#pliiAqAtY*y~fS9%2p+j1a>8nZ`MeG4$=U{%TyCJgzvo0Ac z2KCw%PwrRrIu`_F2*r6Tl?o=i$)|%4gvD)Md?r4uY7#{dAE_Bw-{iKFDsIDx^a3{7E_#MlGjadhO5F5Dotb3`I+*S-SdL+`evb=LR5#Q#r&4PV5J!>TZb0s z-$45|FzE&SqDT{8NHm_6j8H=)T=B}MFG|$* zf~17dN#|<3tYD@Fa3O!&#q4O@*jZP;3gUn0;8A16)aX2yY=d-20mFa$=D+S7} zA>k>m{1sMRajGSFlEn`>L8>V#sDL6eMPamTom*6r`B72+3nJXsx5Q zLBVyA&O~ZbAc}Ti4P-0bks2bzIRiyN@iyMzKr4mQBit3pBX=C}ytVelf*C1q7=okPcRx zinlP|MOe^Ex=1*P&=HsIt#u8$$_*?`25q(3THJhye;D(BDjSLmt%E9`qY2TGL@f#}^2Zbm#%4kQ z!p3@4Qa6YT>u5Tc)03Y|?cZBJ?~+zEsIAdIZ`xsPVOC+95Q-SN3k;0m?@WgvKjs}C ziaaygI}5Ub^8~s9MY}Ll+_$et=?COpXL_yY>@3)z=XWxr+uHvF2_oA_;Z;YGysbA>yMRV$qc%sp82sp{A zEA!$fpSEF}P)Fr3M0eO787JSgkwSyArWU`f`_bm%!8XxerjYk_CIRR!6Wpib(m95w za|mUD(%dmk6{SV9MOQd2Ow?LWWhWV|Cg&ayI)Bx6m!`~ub2Ceqg&Ask%!&W*=f2E$ zEx~iV+)m{sAFaA^eLMe3#-w>GvubKWGW zfb`&I{lf}${b+E^A7!c0nT81qFjQ$u;)8a%1q)EH@=h7iw((@s_{plu^=?a?SI7M4 zYI7W8e8bYEM0F|sXZTjZ}l8z5{*`4OLcwWaH- z!&!uPRe9>b+FP1Alw0X$bM4Jip-TXLN9->dLHn0XxnYJB2nIm|0k+Z`e8{gq6M&C(&5u`&exhp~ zP$b51lsooHj22ON=ypaTj&?3(1uXTt|Afdh$>U7T(Nu>gJro8%@GChZ#9JaYFjAMq zl%8pQ@CCn23+W4GC-f?06oSOM$~yY50iy;|XP>pbvyN$japg7VvUV^{^=8GDAVl#f z$tlA8d7j&ET02l6!&@-7vZW|up%yrvn@5ER)Sh!jjPglZHN`@1&pJH&j5s&|Ykekp zo;Fi>@ejO9umY+AmjJ7}J)M}gp_CAybhcHAyrE-!ZHQjDt|)5kGqcz`3v6}*mK|^A zrBft@y~GIDbYNHS^J&r$)5SE)q;<+^1VGcI0vtn@awZPPJMYx-`t6g`MtSCbrP_f) zz(uq68M~Hp(FEUyaZVdK?x`BMs#7BaBnzR1g^-Un1f-9U)#2)Dbnf1+_avWE+NVTS z`}$VXiZPdyischf-zlB=-oW8`$K2sYqg0Tt0nX*628p*q)g4epa`1HEhZ6w6VCRnF+2{F9PxMj9!>4~;6wMuM(Vv!<>3*7;CIr=pRPk(pvfAO6NO zL^w7S9Dvp#a30O5DvMUp&ViiIu-le%P-Qh|(^o5k_a^BTpE5Ve4K-+MX|2SqD-eQ) zSRxsT+2|q0p4NVCPU_CJk|%W3Asisnu0l)^HEhP~X>3U6#?^+q7M!V^D~tvH7sl*2 z=LhRV7HM-G>_*o_bY5Ez89rnT2{gSv(vJ$PKyx4S!g!ca-L}Wxk@4xUuo3zwFTLz1 z>_FYIMtwo?Y+W8otVm_8XW&k{3qzhmAGS|Ws}kuxVio76EUMWSoZSZOB>7$J+ye+* zHJ7Xb-uuW;!`#vWxhodCGO3PK8$z`qVL0g|J8EU5CAO7{#!rDt=k@?P-gQJ9Z1osf&Frn}Cwn?~4O{33dE#YZLLy-4 z&*Ss8Y1A<-q7GIIiQ+L;RbBAFtLxf+BB8QE*Wc8>=)<1eY6|3ASvky7)|hk{>S!-o zg6~9@#P1G~53z{mQ?Vu3>$Zy1$+jjHSg+~24?-gjr&=Bj#j^8AgmhW^_oRX#xFV}! zno6LzUMPVVW{$2cDL-NE?5fS>=+dn#Dg*|N6xbYm_2mBJ#QxIIH;;A#m%j{jE;dCg z^C0{6fZ(DroYsU@JhzzH6;$`-(Tr_})KSxuJvJhnCgbX=&CbOTs}TiSKRLENK$mw5 z=JpBAK--2RwcTVUtFz^&PjGaSvn_*hvCFvPxZ-;zL$5(NkD_Ix!G&mQqj!mDTo|K&95YnVI`o55e)^?lR7nkmzhGdTpU_dvje3 zPjfQv5|Y_HP>Tdw!h$e_-p`YF)NGg)(WNP6cg@)tlFZ&D)NYD66iK?;)d;G zE|~C-$RzglYAR`caURBofavVXcmjbu@g+&_#XbGol85>i-Q3K)?#IHM6=H;w-PEyO z1nwvj2$W-3)Ri0|k|@oxK3un(CEUJYgGJMSIVOs6Fko^p|KYQ9 z+%6ss*AouJV!Mk$&1M^8YCd39QV3MutEy~x4I13blNO|KYxzL_?Cg`A%_qr>6j7S1 z+Kk3ndd`Me=R9diUV31GoMUirgz1~m(yK}E_gtYb2qYvN#1m+R6YGa@)G^(fJQBxY zobeQ5JS~3CYcSG9$=+~^idEfLkbd$=|Lh7==wkhy@!2SNkb~o6_MFb1s)?SOIW!-2 z-b6Oyu`S<~4Hje&GRF1eOx|IR4gG~i`K}ZgvzZTfy;h)IJ;whQHz^83RuK@|pW1aS z@G?mu1);KOD#0^#;MRWMq-(YnoYAxOTKbR5&m?s6~g(v*A&q9mjjNgZoSuN(4lnIV z1b5pryJN5sXFssY7Eh|Ny43Zv(823tnsgJS)vmb|HYN|fe=Xkw(${X&B0zOuXD}HU zv_uck3DHZQr{^LtO*9)~Z7~ulA*{rzC&b@zY8-(VD4*CYlAvRso^&`n0~xfByq**JeFzE0Eq?Ub+k^g>unKuf`Z3mG3OLoCaYEUG-t3Ye%FsGpVuro6dTuf&a z7=X6&3ix~t9XcDsXye%m8J8Z}ez2g?hK@W*)D<4Tj!VU)(F`c?WWr$ZN)`BgUm+#k z8-BigC1tp7kRf1xY86eG!%54yD-O{*4|m8!c29ILG^@$Q#(yq zzBKV2%ex)Hcy+I-cXCrA-jZ^v(~&8quBSHD#@gvpybPo)N(sBqW^~Jyw&l~_%}~wW z?{e4>q}T&+Cv3jnG7?SPX?f+{Y`$yjxoJC_Jh^3>WVmpCfjaDQ;(7F{a>sB5)t3yL znd3sw!O_<;(dsO9y1`C1waW&DK;vh#g~TxxaP$im9H`LK(;KQ`syXJ;9IM)!t=}mU zya(__fm^LB!v*LJmqfeIYWqoog161tW#i3^U;l{)>m1e*=6K#NdOr6%96t*uqbJML z92DGdTzVw_19cb2<40NTdffBH#8Ea*ThTCYsLCE-bq{cr>%h-87X}Tb%Opf~(+~X1 zuKr`1(Oq`T)UaN9+i_+bDh?f3M%S0mGis=S7Kxlzw-TUmAWeS6D8>rpMC#wBcGLu+ zq0ej!3p3i2dZ8^|)Y@K&Ndncj!jqe#dw`Bp-I3`2#lr^PTq&EA)$`78_5jFSvR0b0 zb4?27_0FvEBYY2#d_MECYR>S9l3k$OYVEvpBhi{1FXXOPSC2I+VYK@a?>!UL@|-Jz zF&gb0mOb4r^ThO_Eo@XxLCEsKNBz-aoh5{dOj5+*Sr;tzWxh8`LO-Zb_`MHKFW>eLtpouP4+kb>ZaBFkD z)lT(&SSLu?P#>mWSFiD7xqNF-GfQ)9q9lrqyL3X|jx{i-NTd}y%5Hzwg(WStfI3z` zg7y#rQt-|%~JJ@86F26x6)|DB5sqboM8XypDGSOEoYwY-AfB7KQ6PC6&5^WM&{YA)N3(Yeh_onT z`un(@6e~f!_^7PN`5&@Nw{$0jzd-ehgSg_6+I8$f|9M5TW@%yCHJDZ55_Xqi7HG7? zS_Bp&>Xv4D(r@0+D;d~ofz8``Ei^jRDrSL6popf+!pkG%fG27US@W+g#RJ+i*ZR4mv_qIPb zB#!KeUkAi5>F6#~L3vv`pcmTtH}2dIAWR$&7XLtGxcw%a+OR#kU$N(lF0-8_8Ua(* z!o(x+7^gX8(%(p&fq9t-Ph_#mh@U)`cFvSh`RTQ5PfM+WUo-_%9zS9Hp0n)_zFsID zrXQ&4j7LLN${|`QI85=5mHQ$=%u7J&Lu3R*c5KnL9B`|yz(&^0&Rdu%&Pe&Xf{@5oT|2z^u zZ$;dVTS!ZW!I{kho~)7`ksJzs#bcq=q4lDm=3)0=4+5`$SIL3+Y} zUmD;atmx>4kblwaNt^HJd8g?eU8V#E%MdTLu2CNvvIl6~1L*Do;{T4Hqg)hmTLSm! z?MK7?SI_gm7{2_18)(isqi5%+0f~adL3qlvlB{e9Yh?|{--o5v(S;>Ws*THy_aco= zUDNCkY9Llx8le?0ofCPl=?xAp>W`Q6Td!M~Tw^vijhbg*R+)ux11nkYIAuz$;d_sz ze#n6-XjM8ey{V+nM<^*XAd;a_n;e6jUh~+XMZN|X19^uSKTC{o*YwD}H{sxfG5kve zygDmGS6 zx+Yu*T25A4Suoa}ZILkls~uOvHy`c;H+I#@>d~^F{)f!UJV9b|yo?bZKSJZb>i%}< zLsS8xW=nojRkn-+4m{(RcI&aTxhOaysw)5<^VX*;{$)Hf{)9MgIqpHth_BQx)WO7*^{VDT@n|ps=e~xs0-ahKOuT>7&&?;Sl|Gr(MwngfqJv2nUOXBc<)1?Y zdgdlLG&3O9Nxi1?W9yEXk1DG0P5<}sn^&p%d zbJ@(1#=&#N{@4DZDSE}WU6!+7KL0VUI+6GKmlDSg2jq@WdyaG1`V*zs?Wejn(`Ob9 zDR;FcRv&+=f?wN?eXs|JYWwnT`{Q`GY~!a!smdX_A=dL$e^FNHm2M#UR-q~_&X?mt z7Y5u9WQX0pZ3W?9$_Pp;bjFM!F9{mrlEkcf=X(~*r=aAV1ilY(4c;~7yygN%Z;FpC z#m2(}xocT?8axYV*xH2i8pvK4K1*`eh+bex0pnC6w=Nwf(3zb3Qg4WpLqx&hY0-NC zF|7=n-$mtUQIWX#r$r=pVA_{DjUZl^N<&oi;yiEsWe+BE6OZvthQz$r{lTS?(fkSt zR{2d2UV6xgxkSUmS<%`c=QGBV-7EdumXoTtW(_OpRMtA`-c&N%hbb{5+Yjpwp$gqM zt_d&c1}g=kBwCVQ_Y}o+>dp+O%W=bXMHY{r{&jET7NL9elAH z1On;w>P!m%+HL;THgYN_Afuq;B#p4@9bzlA$fmJg_sWW%DzzT_H2>nscn=-JJ%F3= zAib$=CKrLkEzD>isDT3)u7y1L9V>wDejtS~*HU0|!>LK@8FTG!1h?jM_{EUanp@=P z%pALji<m%gskmkdGS6B91L_Zh&|3)3$ zV5RLU>(hw=C&8@5>$PFtB#_Rj+~2KCz)7Vt$^qu2>KZ=f-Tq5NzqApG`IGHqRQRj5(D#R$mIxI!kdaT_3ER>o|haH$AIT$c@qKROTrHT zR5h22I6Y-$;!l+>2P^~_X=rdgxc=^M6QvR>c9Y#T>whG`28u*q-dBnMc0cif&M+hy z@*Dy1_dEws^urpi*Ocr5^k;TnUOVg5Zx@z}m+N!e16Uo29i@VpHTv}s-W|xY{o5el z9-NH??!IB%8E0sETW)r#+dKcTx2wWO$II^*g|d>{4S@@aeW?J3Y;s#iS|zy$*}U(- zUbQI}H$@#jAFHW4WHHZcpK?e&CQYnlBvaQ~VE(?PCzhIHLruvuNd4$$bSwt`Kge1T;1x-er0@7=`aqFPx z5X+ntFJePn?k&gS+n(w6og51UWr|VE($KD8DM-SooGIJe(A0|>Zq=MswlmOcy0yx@ z?4a73S;sHR?I4(>t6t%%ns|fq;M!dPz;LI*+jf<*YN6U$`S$U#l8!~TyDlTei%tB( z5?4BNYV^YH40lw((`L}lHx7?aUjP6?sEFDg)5*&D%1ozwskKg{NPG8Cp1@9l{6HE`a zB+im2?eO66$Ta!=hR?Ux>vA$PBX4e8r;*L$ot=IEmg;Y00sy9qmM&MfmMtsPHs?F0 z?=LBr*)9j&pIF7#-vk^givj?oNF|K}y5~tUdjJ9zduZ9B&^le?R)^fe%`@AtNNOd^ zLopQqkic)4_)$C%0k0mUl&fIhlwz<>kGEOB(Xn)-O5Nv6QiGVtU`tcw%b}hd2i6_{ z0Mw5xXO`)F?;qfjH!n@pCZ z{d{)ip~nW}PHijocG1otXNKYwlh|ifnpx(!jS$iMpYU%0!!mUM0L}AlE1Ub>P2$QN zH`jYcH!~xwk6!redVep~6;#XE*D9$Mm6$i6CY%?*2v1stYdYMG_bSSkAi=eF(BSPw zfkJuf)IdlNIjDuRy4^Co`D5m%sdmF#SNpG z?+V0mLpd@60Xbe4qWS1m;6x|V z0?rP?$O{q2v=XMW2%O(+$$m(8j$vN9unlhk?a>bmj|*XqZp>Uu_8ID29sd07CYH<3 zGqi1?#?CX-N=`NeT@2xcU?aRI!ykf4?{}-peL(H3(21On>?~Ivc8e{$D5x}FUGiZ~ zs+X2;R;mYMAdrVESl{q1fJbr(pUu#zJ?p0K{$fiEBonoyne)Pcj-jY&2EW;m{hJEH zVXI?EyqsJ(4WNasQP3@UeT=%wHcpU~|6mxqq@hy^0w6RL`5z z)E#G|4H~-q`4Yd}$HdRrTfVXT)EY#%n_`mJnVPLT(;-#y*WGm)9;L1i%B+n^{+#KV zo5gO?%zt}&gQkQ>5Ex%dI&z&HU7b0IRPxJ*<=6 zml7p^d?Vn(k>MX0s{Pq<1R&%;ty!aZvC9kL2I-cvi>Q8Bs`uyj{6?$#pGn&2#(%7` zQRXQ%RI^obd?$#;-D0f@Yt5CM#+*9?X_H1_hLHo54c`fuWH$_dP`gFnpf&6soxz!+ zq0b55dHESDA8{Gxa&G(Bwk`ttzKcTO1wu1Hnj-%*1x_>-5Yj|CC$t@huaxN|__ zkitT~8>!0n-OI`%4Oy4=OAr44+RRSHkr+&L+rCzq)!g-z!)iclx>BV?@uzsje^re%&1+3g?s=}(27 z;^$odhZ3rpxCbE9raRz|=xdl*3%R;EtdYeePIXihc%h1EMZz~}TW#9j&PsG1>A(>N zS#z#E@f#t?T7Sj-Uu5GgW&01=pe}->_7U02_2rgn_5c+w6PY_oGVOswJ8fZ~j%*i- zT`Q7OcJuMX|Op$dkI)A?oCn%h9 zy6`Q!waN)5wK6VX`&S8ldsPE0^G_xgn`2jWTyRimcgIFs2aCeJ_s!e`sHFrJUdj8H zYTlE-vCd=L)ieJ}RB6Vc96V}epeD8=1#Y0$aORgn-5gTcZqwGKpVroc|5etLZS-k1 z>uu;;LqM!{?)lCsLaSDROP$qY6h#l87xHu)uA+U%=!}O|qtuMypW)^AW6wPf zkkkqvOzcWFxir@&P50PQUKH8*ZqC6Z?nGbMH3d?}&e!27H5VVOAD*#U4m#saXc8a) z%{ZgbaxuP6u{_rI-i!VwGBC3I=<+GQ-C~aA{9|9Tn%3jR3Hssf<(bfXr9*(LHXs1t z(AF?&BPiqxKW&rbA6olNGk$x)E8S!h(ny)5v$$KSLuCeVvb>dSu>UmtA1~f#_b}1z z?rwU1s$?H#zJnBP$WaaNIHz|(PonS5D(^2vI*yOiZ`RM~20j8Dce(-q>^J(U$tmB% zrt`dEYsub2k2p6T_Qlza6Zl;L7=yo!@$JE(Usk`spt9)L{KJ${n)^vdH>HEEEDB;H zJv0d~9~>f)+p-?)?0Cm}>@!_T?#$p@Aj|H7+?i#u^hwEB_XoJWVtyDdrDE_<_`e;X@W&4 zK3>SGT-CTVaOTGEEB;YFR+{O2X+)}aVCLkAX1G<0ixUrj_F-v=470;t+2?VB;{z0lAY>p5>ktDgnc>-ZJ2RZ1aJ)l{jBL@1wswG)9P zI$vozzI&V~)2)ug+ap|zlj%yE-B6`m2xY}hZsTJLJc0bq@4v40zrMA<@xXt5YyUpq znrLXsIa4V+b2Wux%N0MNx-a*FTj%8zhD$L<;c7v@m6j z*;o>RuTsNrW3ZkhJ7-20c?D(;+rl-I^t@(+9Hwi7O!T9Tb2EmfWnO)%EoK^pANO#P zx9#f|?BhSLa`uU#Sy@)2VH$K@YbZ#R%u$=_Pv`GwsF)njPlTiSX`W%O6eCm+skERh zZZu+E`#we+=DvoOn(3iX%QKH)tWOtzG-ROI9*lkX*y1kfFlPaDo(6w3mR&|=yl9F& zViaj*X7Bwaera6{tDJ*V8A)}!S9g1D!*p2q0|a+7*QgtNm~tmf ztR;wRNKbM;>YUQ&H5*S<*`VR!f)yRqO<92Qejho%4W<5PjKqcHM;WMUD6;e8<&!x7 z6RCvymuM?L@_WH#^Of%RLv;F-^kHcg8OX`UtY|j=6U@CDH&$~^3)AYK4+sruPP{#( zu>W|K{nqOELdh(u_|2<<(fkYfWnBxjAaE})c1``h8D3$E$?3D|@mY>|@vX00_6@~% z2st{%_q1;%nL6q0m#>KZkw#@9u2B z6W8(akMVD|;YL23Hl3^}Pj>~fM;B`J->%W5xMpi>_*aA4bLfszg?vNy;n$&E zVf4Ob(erHLC!C{P3z@&si(;OHpFD4D;GMm?+r#qYJF!Tilfbeuj#~pQ;S{mFYO2?x zFhgi3ZHUx}JB?rkbzw``$t>ic(gnV^n8`QvORup}JPG1w-?SctyL zVWSnL6_q*nL8EEdR9iN&B4H>5r}h_#INnF`fz5e8;y?UygFm_cz2>W}nxGxW>>D$c zFBJ_Hk($fUhVRGm8DS>JBM?Y}X z6b{95K|t1F5H5u)@t~-+tO5lmZQM#<^#Me*wfsxr66(h=x8tvx{>f3`HX9h+$=!`c4S?Yrz*f13+AzTp0s zi9T=_^qQ0_aeFxCJXU_`1@W8kGLX&Gu>%T`=lgEc>taB~;2n&vE-rEy;xeTxb% zoOJum_w7^MlANtnCDp(C&dZb8 z4L24Z!U93s$gb$#6{iQ=ztlH6W+xY(^IS5|E|x>cc{ zrKI&2?CG*0B_S&b8yvGC35%mbgO zlY}Y-D}*BL%nOwCfm~v!2dmT>S$54J%=J1SgnURz*URXK!Hd9-3{#1)g0Tapsy>O8 zRc!$_HQ?h_5yB2U_o&!GL3o;}q*Fzu_1?NLd>26^3n;$4%3d~pR8 zd*bWb|Es|N;(#B}e--$Dp90U5@qu0g6*iM0l>bhadFAkt$5D79$-wDwX}EpOK+GzK z7fusWs!(Vkt3;iZDjsdj-(-YWF|>-tmxBS_@eET{Chyy!m$~hzgEnE&&z#>7k>lm! zdZtY-88Ea zjeGNj?-B7|1zQRMcSkYgi0;13kLT!p8Y|?zp=PF$Pi|GjwKSWIu;l1=09gUO0igU- z-5mZIo4;}X?-?4D@x+ScJ%BLjHNz>Mrmo1p6o2Vz2LbeR(&{v3cted~DN?Z8jxPt%{r#luTq>-QbX*}vep*7p-V@PVOeB{l*% z%+CT4>gaj}piC{Qb}-#JaD9Q=iItA9opAmG&4#6wgN0Xr0pVdsPK(QeH^cD$W0hd0 zGvYOGmAB&-LVkhdxAXG?#Upoeq<{Y@nR;kx*ka?uKkiX=Z(4>=G+X-^kxeH^4J5>_^W@p> zjHEE7xnYoaU{yD+3y;9iVf-Z048s{)0t;`q8Yl(E@}8YkE2^HzmZ>8mU(iK+yAP0> z0@pZ{Q2yCZG!-o~hLBgV1n|mHpk@4Fo4+JHJ&~~ub(&t}dn+NAU#((okqB=)w3)(MG9^YCq5be4qZNeVrRbEmzqr(kx zVfcr%jphPlEZ)29=-fC0(na2$I>){p_N&JO&Gl0tb(jc2Ek3%-G){p_~^U8b@^58_|ZGd zpLjVk`~y__G1gPE4)eERFZ`Q3`-`)9mg>j&kqOZ9?ssn*-CXomAuw*s6#Ps3=-#b9 zFZN$4WoJ%(C&|fj)>1aH<4(K-GRT32H!Cm2ztM|w@Gr?`r@m3^ML%mpLP*th-@I^k z5B|QA7*DuDxe6kq&}nOp-N=;{9?Qn8MLh5~G++$=H*oWBr@On0kWKkkW??_(JAe7x zsqcTUF9<4Y(kbb0yU%xlAZLXYKX)VM5yL0{ z_%0VzX}^vm$M26Er3T#!wTNudWet0P2VtADpR;z&GsRsNJf!tlw!Rd5^{;q6+@B?8 z`IA7=P^XD0RCtRylBm#=fgzPH# z!9W~8YtQ@{AO5)o-dV=?r7Opv4JNw+!@uvJ)}25{(ig{^od-Lo6@T_8`GY4Pl6_~t zvFC+4` zfHB<71{`s&O$j>w8z7?;g*HF)Q4|9e=2K8w*MM>HU@So!dn=9KuTvMHB9X=4$$XbW zyU@22OpJiA!B54x23-?MHlAo%R362330=SDJ~kJ_zk(~!sS^*kc|zkO9$hgvhl_^U zsrF3<^(2Ao{+mnsOI7`EF6qBaGWh?VO9~KU`*7+m%6SiPB=7RJK_rSP>@TUGfc+*C z{lNZw=A7ol6nGi}6vsj;b1G6zdQN$GjclqI;To1)OU7zCWg>kK3HD98R2bNdTP7>l z^s|2qk@~{v`zgGQ+4E}#tSx|8(F_2bKaxBU{pr(3%j>_g# zc%;M)tR9uPucR!Y&PHRCXz1kn@&ce(i=0rtFOBNG=6=2APo<^*!7=o!zm4(j!M;;| zA?jBO{r(f(A7Dr}EGYJ!+n!0k0_eEr`*c!};J!)cBv@`6;1I9v?*sj_q~AklyN-|N z(7Ni66;_)4g4-=F)2FF7^b1R_<>*>peMb@M6+;f$|7jsPyxf<~{8ukz)zp3i3HvW{ zVe9}WXnP+3DE2ej>HW4-;hW(!#p#-5Uo-trXZF9#Og~2*9rrlUK0%SCuI7+HM`3KioIL;HQ+YDA!NM)*#gRv?4s;0G!8b0@6nYZiU z(H8@`PuMV}o#ODUa({{TwC@J$;H#>0^-nvF@^M!Tv?W2ia+~y3#x9v1m!1l~-FthI zMshsoXu#*v|I^-eM>UnbTW0Jdf{LJk$kuQUW3blx9IdK$?I+ z02v7+BoIOiNGMUHh=2$o3DO*@m{0^vfY4raW*mO&jq~5E_ug7Bf8CXH&&^pU-`?N8 z_uR9;Ujzm|uNEYdmRP&-^0-E`*!UC3Ry%)G-fy`}#@=(Jsn{c9^33$X=*-A%?a+@= zfM1=qw2^mRXYDT;nvj`BH*xDmZDXx>Re~bWM^7anmTj?YTPn;NO1G!+Fx1}bCNzgA zYDd4SOKNINy3QFTjStzPCCM{rKV^TFkNA85);>QdK|;U;2z;~&u<={7XIpBn)GuGc z1UF`C*))%+Aeq}9Z$)?d+$;>h(gI}|d3=L~tWl(*{YtJL9o2?abDVjs&IxN?hmqT- zFj|ngv6QnMYjmw5`L!jTB#%S2x`QWU4+sJgu*_p`WdxM|Ukb_*= zWMnKtGz3s0v0+4QeWjC={oqDbsQ%vFhx^oaYEN0Y>|(hoY77&mtX90du>t<0Tp-0s)X!p%RV;#p|7ik1sV{0RmJ=ONI zDFS0bUy8J!lG-%d2MPR z0c1s6Tna_Fb7o*Gc~xXQ)l!ce-5X$tHJ()C%CCSlVRJ%%iWGn?QMWC=1vXf_^p=wl zxUjcASVg^6`jXx6awB6E^$T8kk`T1<IMj2&8ik3`Fy@Y6BZ(qxi{Ctl9aq=U zbd~}$V!0AfV;Q`Wm}+oTkU@=S2R)-l=%!+Pw&n>^_apMngz)ds2X4tkQ^#VL$uR!b zeW|M=-RbaUDZ#D4_c^!q%U7=cM^E2G@v`pE=T}%k_ZsoH`2;EY+DqyEP|Wsg z*0Oo;n2kq_YDJ1@Qs`&vGSV#E$rLCEqQ$| zK%Ou>g`4#^BRqxA$zQ)<+jtDU8yDKedHGqcip->9>6I6kUPSUtY64^I=~BB#!@+4E zUX3bG+XY{HeV6@vtj2Tm=^pwVK?>!sM$ES!4|By~NV>83LAF(JuOE}Q1|RM53d6Mt zXWg?w2*b#FZy~7eojd_D2T#2*?AgzDL1+(z0%QO^8uQoxOcKUN_Ml9s-e+~{Nn+G}0fM`2t;+#p}$n)W{s*YmI2Y~17n&Xq!1U|fVhA6U!? zSgGVD8Bc#+x zxHs%#2z(8VZ(76d@2+~_aCN;*#&4_)WYLG#-5Lv~yLqS2d}shUhxv}GJiLu+G94+_ zpYC>zo7!o2_%m}$mK%KB;dnHJ??MzV!Wu%jyVrMuw8C4=S@G?H|5 z*404+uT~V}E2Xp@Doo;F+cK|QA?IL#Y5wNg_(X*D`y)tnbTw3RlK5bLAq(jt<+msg zaRCp+7_}HA3Xg6L z-@ahH<{0_2(QNrxY;5Yh?Z6b|y*w~%Rm7)y|BCsc*;gxZrSHsx>z~Q0x~CXTC0fQe zLAl=UM$bNngCQmaBm{CGiEJ#;xq8snQ>UC{pPGJ5n6{qf7druI4wdk{EQNfO_++Na zp6|r&_Uf;!ooq{M<`30Sh~I(2o!^=6Z@680r-zxM7Q`yv+=opnf)!-WA6oa%%Z7sbjJNYxl^YTyO&W?%C?sLe#NkZm6$4?U0$bdk|V6H109z1r!%&cLDdLqPJ zvaSUsClS*WF<-cbuJ5d2aq0O#bI{7)G4dJ~7hU=TvwuhN;t%tA4MlUMZf9-kgQ;wa zL!PQGom*1@S{0F5j{U52^b3TU51E?6)C4W#LmvnHyCHrmC`7vm+WgZ#H*>D`2@oAKNcB zEUO}VZy6Fk6{!v#_&ywONZd|QCym#%2*Gm0r+Er}DbF;2EXnW)qIBl+WCIT6fg<8~ z7-IFzj`I?iX)&?8o3eco4^?XAQrGT}tvA>L*v^#JyugmxxV8p--Ss>?n``&mN6i+yVz7yGWN` zGmrvksc=>G{k;twHPv^_z*g{suj4y;*Sbq+Ae1mUR zFy!g%Y_4thkRgc@sxl{SGtb7;-%kPMedo_dZK%j2{6i|yz1%+N;rj8Dn+2t7b~GwA zFeggz)aV7ai-fw^nu?p$xkt!$`--8CZy16EMRqo6ZasD#3cebJcW}}<6zyDOwO88{f zuSq+bUj=t{*%M76KeeyBeU>FjlY!FCx|jl?RK-RF#>5;tn45T5-~D^z_+g!-H3jxi z)2no#;-@2QV z6>O+)>h|2@@Vf^BpPk5a)3K%zVR8tUixGz|a*F$_ac=1sDldRN47L65U*GUxH4>WfHav%q-h@Dg(+!Dx1B$aa6|C?&7eQyf>jqf)Y zF*K$!9wRzb!qVcbfOIUjxYtV4_(vd_Eg6ZIf@;2L*q<+r1#w%3e*8Dt( z$CibJLg==N!Q4HZk^AIF>b|*cjnsbRo$isBjuRucXaXr?@tU_&|AHd4o6#y%3ANT;zp<`b;l5uy{NTL zj}!qPy5V?`e;BdK+!rxrSW0c$a`VWMBB{7JGuQ)7%4WF4UG?%neHUT%kP)XGm}^-| zT$c-4bE9w(vfTPc`@v?SbR;4X+o9&x^nk<${75{<=?Qg8K~%+1g_L|51*~=a-^O2V0+&B?4F)- ze?L|q#+T``Sm-XhuV~Hc5SEJEc9;gru;lKioN$TJSQXjUL(x6HrQSR1WrjnnB0DoG zjPS}uRrOkT5#)IHHBw<&XDQ?YshmU>6+eleMs)|F?(R--ha}kG?iw5h9T;GMfseh< z`R#L0)mQf~xLq|hwce@juDAPH(!HKFATdiX57u@P4mfAOL&7WKjW?X&#eMNZ%S#S47ee|=ucYtWp( zc=50xFD0(^)#P{$-Ct`iTkJ75GSF4LL^=VVwnjmx-f}JjMUm!lbmHd@@)wjO-2QjC zZ%6lVVKgi>-ICa=Y>OajRU(kII?NMBm zp6Z`g!2jpB`9A_x0e|2Blm5LL|9>lynGqwP-c*M&4p4S`kM-Ye3cg=()_p%tox44) z$d){@tbnt6pIzqGwz+J|X2OUa@2^QbJv|ebF{y4WF{`tBMzD2SZdImfO8e3MTA`Cy zP(MKWpAGWp=6Byy5+WiMT?o&Zi&TRu2-p$ta^k#Su-PWqE&)KZhc?+cn!0_HVko}B z=b*&}rlRYH0_3FRbpO4D1()*ogruTILEpnr)Vnu65rm}1@sP2Jh!EKt@4m8o8C_;j z|3-TQoGK@^7cvAsW;I>*tU{qxtepI4x&>8IN>2d2fkPiA!=YhFg=P);RTx>3N2$>9 zhRcut%<#1o4Ws2GtM^`!Ko0Sf=GcJMIk72HeDq<#zbpM8UN zF6e7x0mZ2`A1krb(gh9P;W1<+M_!R*wEY<9>Op%uq4jJ1C#O1>advQlcZIs4VWjE; zo0N%jTh@P%7k(f-BNN=~q}9z&VTHV_nEd)sQ^#yZsMh?hOsNQ_^jX6D;vhR_^}V#- z#iJk#>5*7N<^7sPl0zcfKO=;PGgvrs?Vqn>uZk29s=zhkh3z=zh2znm?t@=vx#wH1 zy5OG0)xI5^487fKBi*=<5mf(MmC6>vJRRrmp5Tx5(ZyJniPKpTqo>+E+NC;>WH+~C zaxy7=R$P-^Kr!9uS9H6hwu_Imjn_w5vl2}tIxkt3)RGX73z^gB!P9hbW_F}jTZ($( zqRnoJ0)H&e5bb9RH@azORat|Z4`RIpE>$r}N|q+2+43`~JPd(7*q(O}zfxO%h#O$SsnillYO<5d;C-RK&h<1@ZGnQ1rZU9X5(vS3ZE_T4(+FXG)9p3u!Bbms zHLbitxDP!LY8vIsmeRdgx4T%!fHvLwMcj5Ql=YVdP#Jc=`_SstL zpXmsp%yTh%IgEBmQ##>`$xO#^Rv~$qMwxa-)~O=(8^b5ecQ*e5CKT3 z)e2))=XVxms(^ed8Fu*y8y^A(dI(RC(Y2xT>%h_mc=C@I-ZHEoa4wZBu7|hjJy>ES zTs3OG$!SPdJG4`SOQDo>F`9>HB&u6X)z!1~1{I(5kWkEzb5M%OMz zFnCweY$F@1Rb-MIVVNit16gO0k#F+PKUh>Z*7cz|)RZeDl{>2bq)U-aor#$buxSIH z(VXF8SJcRNJA%R%t8+65tP5Nk0*3{Bi>PH0Y99%f7VdMSI@$?maw5#~`~n$K2xiM5 zjE4yVS`L+_n{7-hGf1#PBK}$*b8PEwk~qlwAq!IjV9DEuR*SVg3EXbWEX&Y;3_{s% z)8poOE(w}@EmK1Ls-~#p8OB1P390k7WaLFo1AbG}@^;gd^$ZF_-(A?t!7(2O1LNp5 zH^lN99IW+pD$~yuTK2rZ^q3iuo`wtN7m04?_e1?hkVB#$FZ+Xw8T85Bz(h4S%zuy5 zqaTvzZnZiC*MuPFCNQVY8;=<0Wi)NFVX>-&iO?13oaaJU!v~+P9Zqc~DE^lfb&7^Y zu6OkADMo?fIZvb`UC^Iu8!2CRHt15BMcHI7G`8W4Vmhrz6b{Bgp-0HCr1c)gb*eJ6 zPrO-S_WOnWtDA^@75@GXw;UiQMWlz%i9lU-GUWXC0A8Ad5+MIH8awGEnT@Kch2~&! zhOYC+k>eRCz!u(S4H?wC33u+c3cVcT)RN-DR{qDA;TF$RkUqAPcM}=nVR&3oB-#&> zf^!hW_^LxPZuD((?>ZrKsuLG_t^TZT&MM!$c`lG(@F^6nPJ2QuT*!F9Z_ApMnDVrT z2csRrQ>SWuL-M$opac%!wMEpKO=oX2b%HF5)FT@rP;NXRkM(M8th&lAAbleiPY_8( zc1qF~7+gNwRusef=SqFRy&23*i@3`sbypOVRg8MPp&(y|+`3uPguVtcnq( z;|C8$uh^Nj+7KL4yTv=fdM%CJ<3zyh!oG{|ZOYoh{A{R&Bth(#Ef2wnXn<(ySvBJnU*(4aEs98W)6#=GDO-cwOdm=r)|t{-UZLdENkT- z8E-G=$B4XtIwP0~aJPw+bxS?l-S`Ka;RYrUOblCp42QW zz?EjEP9*vVP)1~X1-97>anSQ+K1q^6VzCj(EUGWC9#afQ?&~o;2jHpkG2D^jPIItB zxwB8Xm3C_TPkv#KoEq`?1use-X~x7HDvRC)1#tW*6>dqCqWxDRIv9BgGkaCdrcEzSM2(dhQnZU&-F)yqh?I`g@Dc}Hq z>jMA%w?&$=Pnei7JbB`xJOuvxK5nreZjfYs34ZEwCOiO(Sl_G+s{DhRS+C_ydW>^ zx2^EWgjXe={6?|uYBMoem6C{;aHC`t*)onx5mx?PO)jTYR32#CksZm5I}Nf@I`--R zc->_+5;Tn0@{;axGuqv1S!GfeSsJZ>*5(-JnT<~ZQ(dP|4&_oOl*!5lMI%piP8wYY z-B9H^eh0>N4iN2qb=ZLUlD7+@+XBVdbwL$3lA{o{6RG42+0FJ6N*EG+b@Y)~D}Xf@ z*|o4j@FS*^0(u&?P{?VyT(j%3r{W+LEp7ijVFx$szAoiIu_Ny^U2w0#HQPBvf4E1`c4<(+g&7vX|b@DTN+wPnd0t&vCQGqccE& zuR0)Rg$sc+1PL^ZNI*cP^W0T%Hww|ItkHBzX3|15Dm@KDP+_t=GkW}Ln3uDvl3rdJ z{x#(W#t{nJFMgh8q0%ZUBAOGqxp9^#1K*5;>NnB?Kl}yu5YnFAjS)v3HyS!T{LCGy z>ruA=9zVyU*D)95yEH}DDk&5H6U~^cpkbg6ZA0U8|B4;Yw>A+1xEk0kx0G;M872D% z+>%%sel>O=ZO;FG%dp{0+Uou>;E&}FERM~Sub6txIpaN_9ez~*`A|Q@%Cm#k|FKox z%kkBY=%`)L0qvpbg)D}fEFtn6do|%xCtRm0$wc$>`a?Z*g%TBMQ0I2jMILHRT^M9Rf*8eWwpvH4HDRqC4`6P3Kvjh!I7fgyF`VL=zIpVS7Y!q~{FqCRN z-lit#%Ce`6Oz!w9q4o*OWi+%sPd+h`qx(u^hXfhtgcOomOz5}o-@DrGqh};U5Mqls8|Eemt-05mWa!0;PWw&Aqr$qHQ&9xVlcGygV3$V)LH-4}1;0ZM7nnm~j`bp*EAxdWx+P%%?qlLAHVT&B> zN~Xc_2oFtLWjp^$qTaG#X{MJIxE{%jK>lGUchr>_zpx@4ZFls&^yr;3=}j#(&aRVs zu@cGirKTl6(s;l9#I8XV1q0Difl?dw*@~Pq-gtw;m&s6zv5%PS}%Z1eS{s?^m zIdnpI&nr3Io0ik}kl(vH3p_Y8sm}d=6RI-TF#O#a!qA5uFw~mL~t4oLvmpJf&XT zx0A5Q4IGFS^b(g?2oHOF#r-?r7`IzD$AqOh@xzIif$GeA*T=!`KiBO@dG?%6@+uOk zr!in;F~dJ?blkjI32dykj~7`^QiY<4GBohY(;jkJBi7km6{&g#0(oPc&3E1(%u80( zh7AyZ1HK$w)!y!(jxpL$mJOPO)q2h6zvPX{{s#nQp$sz$jU&I!3)1Si2)O=TJOApNn>rcp2-z8dHU{$N`vCuO z8l?(QPT;j|f<^p^#L5%HJ(r3a^f1$}8o$Z{C;)cIQiS4-qGted~ zI#0RlLzSPT>Oz!|BvbuZj+r(mG!3}}ACCh|-5qWq@_MBG8z zKptuce&K3?_up;b(ie$z_<8<4Mjzg$G`;AIp~^o&4vS3zSX(1;av}pBb=p|Sk8361 z%S>9;pQLwH+N!D#2_j1fJUtowq;_Vgt+w<>)L(mke*Ia4*=SSh(=Y(lQ(dFQ_eVG? zmztLvYn~3yT)zeQb_!(~pd?b;$2wrj9*pj2Zde!YN5rsBXWEh!Y?VfN%>`(pYyoJ5 zRj5^69hy`n)UE_I$0*M>TV_LGOw8K45z7U`bSBk5h@<5vgv zO*+SD)D@7l>(w4-?P~XGpTBkC;sozL$>2q%>ee^SGrOpEOi89rC}c zEtLCm`TK9Xa&morhx!Gu|1H5Ji*at)Py;lMkC|foe#pvE`B}l&q_fdxf#@%Mnr`2! za7p<%5R6I>y``)0w}sqJkpt|qEV@KhjmtdC#_oAN%pu`fuF`~JzQPfw6QPo<#b0rE zJ(c`UH)ec3u3M-vLCL|g>j(Zjv5Ki9tZy8JG5$apu$RBOEQSu>*ng{ZkLR0xdDG0K z)jxLd^L0ATp2ca1k{1mqJR_PTxy(l|EWBV^hydPj8NXuKO-E&??1~>u+7dmuy0jg? zq|KT~XhsqD4Wq$k0w^Im*iT@}lG~IpF>-#TC={Q@M{qf_`W3Qtw)^xwh9>owT@Pzzb)eFro6{OxB{#CIlv(~JjbtVu!-c=Ka z*WU`1o$czuuI*uL?kU7j7E_RR<7>N+Az;!;-KxH6F4+5wQ*)bYY4rGH8#oPir06Ep zH3|?A%wXwFP1e&l_z{6wxhc4em3pJ_XIDqxqXw(yW-5$S5W$u${E@`8H_x zy0^9Uo~PAl1@yjcBfw9MdVS@*(B1`|*k$t*uAgNdVKWS#!lIUNXglGwJ%{8@7R z$uxsLlKW<)MNaBx_6)2HUWPJ`pr6!#7{fZ}P)5X{XaxWX=>_R155oonhnZ$(9 zWHmSib46L8gD&f`*=38(IHf|Rn-OQm3{Q^lho#rKjdDP<6y=#((g_4Wm4*D0hfhgN zkVwwc?kgrEcPskai2N$d{Ft#Q;q}+!3dh1bzwktawy)w}^P820(R)?PF46z0zCn{+ zw%X!f=OrD)tdSUwt=bN8%gLOt(t?=It^0aBn4=_IwcAQct#FhCY`%x=PO^0qT7YAF z!tB>jk{(L=YXKne!$M#9C8z)Tm&SHlz^^tzt(vc7R(Eg@oc)=(^O$!~T0NQzNdi5- zZ{xZ~0BoUG7WtIxdJBpTX?7pXeM5^J0Kp8YPekJP)Z77#G54QNS_?mgHAAY>-IdE$ z9`V-=+Q>7T^^5ZZqX^1R**+qOrA}1v9iujuq_lyrr0OX`>vBAB9e;N)pSNqoQiWsc z9QUIav*-fW?vkhDSAt2xlqC0f_D5kjX-<2RXEZauu+0oBqb+|rHXQ#Uf%YHo?na_m>FTNc}K96yls5xb=MnYnXRBPe5Wc{c=~$D852tt zu{`!`Kx(hf^l7$=lnCNxrv3Avp(7fRi}HNcz)APjfy;2Jfyf~G#`HLWZzCzGCH?GQqefP-Im%Pt(G z3L=q>Y22-Z?5!C1#Jq{iPZV;7Lr8^pf#}ke*wi}a+mJNzuha-uu zp>vOt4u;g1cjvYqiui}0QtbxG(Dvr!Y_2{ zi?dCil(a1)B-1yF5YJsG)8A&lgG=Fyy@C{Jiw(0yOKps1HmAUG1fLw|95Y=9w2JDM z^sWIeYort7IU=b3H*4PHh^b{!U%`=?$_3*bTED)?21DV?I~eq;JurDc{CeN4#wrJd z=ojpIMILPZmDm5%!jyDp&0=l+!^J0P)0A$GRbleY7>@nn6>Q_$!N=d_*EO=Ab(Pqb zfWE*4my!U%_Qsv+6^r|ja@kI^EE~>*$6Y;b&ZiN2-#d~G=XUg=reQ9?7m6p(e!x%u zQsdfKtck&|DP(bwjOhukb94XPv#%|kJab(9E^9zqbY;Qm%IXE@yG$Qj^Pg&{8c~ZH0K;A^qg;d`6ztwqfgJ) zYHy~T)Al*yOR*a2vIDlV?yruvi5i4ANikV2qp)^MC-}P@z?=kE>`98Q-NW@hwY5;@ zn@gtM4ac2Or;Q_`-@AIkcd;fraBv6k&7idmx$|VN8fFtGCA1mpI58_81i8Lgg{{hN zRlU;BwxO8#Da-dYCM&rz6wg8^whDU8=WIa2;8Wf?!Pb4iVVQ0-hxk!nP>aLM zCb=_)P!#TX1=Ua;q|F?)un3&!+r8h(kaz>fW=XiE)SE-c;w!D;B@G@XaP|TLP-6J3 zVbeD`zsj)m^)bfmNcLReMK&Xey_RU4qEZ2D>sA_0V~e#7CEZxNV?_Z6bIwsVQ!3l> zi>f`Mg*hUuq%h#SMM{}u?HP_^4^&u5 zs4zEn<32fzlK1eC4021B=tjh19Y7ulEX1Bjc~)F@i7OxLH~pSM9Lj8wy!XA zMi*H#8hL&j@Ov4|1^?=fXYyE!Jr$I3;yS?kuu>H>bG6L;MrdIwe|o(@%(2wjZhQer z8d%LJwcIm1NUSuRgKyZsVeR;i;S4=T8sY6ti ziY1_ilr7J*JF1#>g18;E@B?1R$KpL+FybSO>+oi-O)A5zPr7`fV(3_T3MVST^=eMr``~0hpFt zB(mwZMI?%c&Ku)mGt8_b{XJo7f`~X{>hB=%u_z`XQu0X^1icwJ_LGJgWcoP)f;kFZ zg>7<9Tq8M_cb}Lb?)>g<2ng0F_`c4H<1! zj<;kTdAXIG?8cAD`%zUpHW-~J=^SOTHs^UCY>B~F5^|*!D`pd$`CP)4Uc;9{egh5m z#SXvFeadg`+JyI9BZXI8RQ*zzBx?8E z>V)c38R-wf<`1Jn#KhI=BiL4YZQ#{iMb&*K0X-HmJOv;Ah}U{66_CrDh1R(ZRytjH$fof_xKeHeBbFUdhB@Zwz7}f;LJb zLe?O)2I~*!%J~rsOXHbqs4y{}W7g`{L%|dKGaoJb_?lqg>rCLYrRmu=*&BP3R`IkN zVkwbPPf^Z#_>7@OvR%I!egCrV4182>C(s5t{Iu>4%fi~VNr47gSYGr2AGqD6jAj`Q znOV!2tVZ$2XBkg|-9#sRoBf1-@Xn~Fw3tv6_;|rRSqquPns2BfAdQ+qT#}I_;TE~= zW-~UYa1V`JK-f0}!Y%!mb1lnTT!G75K039`FIQUX5dtT# zkAF9;UpvXJ)$)&5#e0_%R6KI5RG}@3m|lu%w{l}JO~9zeD=&s7bD;yDun1;_V}90t zVB#IRit&7ik#6IrZLTfSZMYL2MwS__yXqL>s{KRLoYDBcgk}3~C1-FpQt-*WiD1T3 zzj215xnO@N?>E&%4$PsP&q2`{xszhReiWIUrcI=$9iS64ni6{45DAHhkH1+0%*Y&E z7#!MzM8m=bWIH)*I&46K?`V&Jzm(C`cZkZg`1EwbEcG7E>GOYwH`dTLtx|Pl8tXg@qA{V<(pbZlp3|bdk5_Efl*Q zF{ful*JZU7WqsFHn0AQXjtFmCRBhgwzGJ~*>nsi{KHiafib}}d*ZGp?JUO#<+1sUB z%BpEm?GDK9H`O<|^@*aRwIA%e?`|C@yohMDz2@hFtCysMZE2Gsn7AXa3_t<34AI}0 zF3zAV#1);gM&Tp0dw6Oax%!f9tk5&v$GxYa-S}jjxquj-ewr~O#YWUjxnPYl)Uvoi zI%MwTVLQS}Va=YAhQBavy4?E1eQd&q(P<&H85u*xGtq`z*eFhPKuX=~!azHgS3yAA z;^cnOEsGHv?gR7`^8jXb$H6wRdn*4UOZ?vO1teIl1kMZqz=W7o2 zQN%*A&{aoF*0hq^51edP>$m7f@GrsQ1LHOa9<$qFf&1(p&nk!|)_JjBWfX~;JNW&y zc@hvLot{wl$zPT&qTXR^lOyF>JYw4$Ehup%VvRLuh%&BNIeuSfeUtmk*G`sPKaT2%^ zhx_synsAe_mcdXD2YKI~%(=VG0PG%RR(0Rawbcbi>)Uc8=99oew3XBG4aA^G5rwO@=Vj!`ez=8kuy= zBEMxcF4~dwjkVt>i6mPEPKLdWA_HG>JU4{QT-0plTOy?c`7*Ab^S!cosToWA z(TDs|Ef1M}u?%?dm~zn|t*HBlaxrs(|4%zu+2JKH_9_D$RZbV4&^9OGF9s0j|c$hzCqkE=+k zfm?d7_pS~X#aHZ(Jj;)sL^1f2JTdt|?lGUwJS^8~a{Xv2+iVhUdtRak&ZjV3PH3N~ z0Vg<-+X`RZFkU^rtw$c-ue0!Vz$m)bxIUAT>}r;ps*@#lquWVW!e^U)!iG1tk*0%5 znI1Rxq{ajsvAR9}v{8VMxrh!CWM#EA7s;i>^c5=MJ+Kj}@9m!%Bk^3k$Hd3wXainf zfyJ*Kx1Mf{7mJ-Yw31fZYz0eH$d zgWgUtk7fsL6!%H@5AFCTTt}e-ooKM69dg?wGtsv0d_l7{Yklyebs|IX??VV6BbC#6 zS~i^Dy8h`ZXo<@B=Klx@2Nzm9 zyB$t8tQ8rg3B!s(-kT1dZeM3Q8LKvcZalDXAoFoDtPtQ5?e3wYq1~4;=J{nB-jA3exRk(Hf#hRrrF+?39W$5X2YOj&lK z_F2{jH#KAe&=jT)1PO1u>|Z^D^~N7U#QoL;nsDv zlsyG29W8uRS4nbPOZn4xwwI!)ICgr;uddJdxXeb-Ms)NluwZQn-?e7_P|A#XOEngP zkC=cA0Hhs1i3a@99WRKm#kvXWRU~G*v!U}TY02z{E@-T}oPvyVMVbSSX?E7rag3~m z!tJxgpMko(Uv?eP09GUsOPSlM(`;NTC-NZ_`$NMfXul9&@@E#Ym;i&>O_^l&NnDLf z)?i~c&*vSbHG>nP?Exz%7PA4Gs92`<%V(y7P7||tI4Y(=H8>~5sOfS&rpGPzB6fZD z#?c32jN5pJEw)(PMG)zzA?%Aw`>Z{PWoqbzGL=y&X~uw9$dg0WWTRJqGB!|z2QWV748bOxUWl<~qx zf=(tOh|EaQxBjSJbAxl74kX^Gz@U4Qi;b}%Io@i<_jIr4#w=YO=9A>lE7iI^L{V}x zK=RZ-0AJ@{;5wuPI`JYq$!mVk1e+3Jl1LYtP!sny0x^n8K^UXJsdN8w#8_K{OvpEn zqEd)0BP(kXMsgvB_5^MO0L>q_61^QN`2vQV{8TN~lYM2nOI=%vLyM^-v9xcS_5ij_ z{6&!-_gW-=PdeDJi$O{GJ-L!YKtZQxifZp95>PKZICMRd|48W1+#HMItB8yO2&&i2y@~bsdL!8t4E6M zZ!A?%H#zyf;)OH2dYjI={6~p~wC3~gO%^mFF7!~v5%q?RlMPS{)eIZrhsTNM$1rei zX8#imoxk7{NQLWq`@mA;b2~kix+psRQEUFg;=ufKg7X6e;fwtvvXh9t^|KM{eI##A zT23nZ-|NgtLyQzDrazZFg%pZM%J>8ed|xQ8=OSUV?_9>wTc%AScK3L6t0=f#CWrq^ zW9-MyE?aLRpE9x-xERkuRg-&t3?2{-NEh8|SFKKXh1H8u|D_}fjbA5}4FoDT&QRRP z$M9Ik3Jx0vD`K-l`j~fSUf7n~9sPn?nH?>z-t@-@q!rmWEtWsXO$~4+g+oo*J*&bU zCF5LGLCbXM5%q!OWcsG}#UKNRfuJ4BPl2=bcoF|gNo1yaJXXJR@9uq9O=>OwA~m+Z zwe*X7b()9FwuSMvp$eSxyI!dQsk<1KWb`&(O2RXE`^>CQ`q_E=Cz~=!Ae(5#4cgh*dpl)WbbzF zIYSOR)5(+Ysc-u5T0tTtQxd&~WzW7Eojg4wYE4>WFjP2w+IYgqxQMU9B}}@4EDF z2)58_nRj|=PeZqSQ6LkxP*}I{R5SIFme2!SL&Q0TlwCkmpvK;exAu2`aM&kyen#y>kjy7`BnX@~J~&5nO|xANGt zM6`s8CY&GALxzAY;N63!dElrN4xf?pc;ERb+Nwy~i_26eab@Gzq`E~^_d!DiT^9>F z7c|E}X#}Xz+ic%|EJOr9{><)(9H&kKZramY$AXFB5w&@GkE;EA?(rp#j1-@Np5hX~ zjFY+}z-%yd9jb6hkU_cX7g`RE(a8sWE4_T$P*pC&fa|mp8!GHTmRth?d%0{K@JLE* zwv$#DJ3f)EB)gXkWdxtjZx}rvcH)fd8MP1oYwc>K+FHsx_T?5G=`QpYei@*nLyNIP zN4M=8SBA2{^gLkVt1x@D!d3Y3I>!F}=l1Z#_f*ldm>XXF>V*#8wR*BeiUz*E=h>o##TBEPK(_M#v|ADSVC;fL| z9s*LP7xlZJmG^mS!N8{9n=T?1qUuOMX=E=Ca_D#RHt=yd+DBx6TFE)Aq1S_j2e2D8 z;|`KsCxhTnOsj2VKW4RC@WZ!Sf))K6e_BEJ;nE=FBk78aN}OoZ6_@-Skc8H;s?_*% zHu~_?K+D-6%#)d*@QV()1^}L1MZWc?Gtw&|T zc&+(ghpC`5r>T57Iq6gC$U19CX_==E!1&N;2j)?@H#C}E=l%`ho|;r|e`B~M%MEfwv*Z++mjCc1rV~Iy zaD)Lay(kk1AQy4uq638H`y-1%vD)$8Q!F5wEOI9$5FC-Mm8m^xt4m}Gx7?MLv5gbt zkSkozv4T&ND>fUOzK|U&#X*&u0f|xnCZr8!PjiUV?7V+o3SuEAGjd2@e)+Sa;mn97 zAb59H`P4c2K|Xjc`r?tQgSUBwwb^)s+drEVVoFyWNys$ps-3J!_O1pSi?cfR`X)ql z*mybF<Dv>2h+TI8RiLVeFc-Z13?_GKK zrd+hMZ>-Moh_No6MGkX2g}M^1AQ);toC#>KX(+cY3NA}~lg)KHjp@t#3iauK~YF3Qzt<35TlA_Lzr-HMLx!{f|og$l8=j}VNNdu(pfAH5YIB2cJY)65qFw;SM!s@h3PEU z`Hj2blMhl~W2zPBqk9X0r^%5It?Js<{$^=0JHH;w=lsSQIaHIzD>dVZk0dkGlC0DN zF~Yq!gvsHU#mHm1B>@=}Rpmo2soJG)JRhstP)n#aN#%?AH{v>?Y#(qP^Z%*|MyUAT zm9^>Jemi)V{lT%X`2z`RBJj?bC&px1ccx(8;GV;ru1)YnfHcRwkygEXFP?S_T# zC~RA^lQZNJvRG?{_Wt?&JQkw(8b)RCkPB=ge*t7-W$6o?<0<2`S4|e5nAo`_v`xMx z;~G1>1UDj9-Yu|_LW#tO>tG~TW=`q=AZIn(xh0$H^ zwsuD~Yth)7o;4|P*(`2Iok#fiMgW#=GX&SK1$eYeRG4?4(LOGSwX!PLd#gVazutRB z^Q|W&Q>VBIeAhk$Iw^@ReDM0bprzitQ=mrG`47s6A9pKkS9 zR`xLaddd$!+~`;t5k-P5S*Y<{hrCR+N?e(vdKb@R534o`M^lgS4VAl8vVxPp)D#}a z{C*p5>)_O|=<#R=`)!`e(5bSUa=D^JXO^mgY#ph#D-)`x%N7o^FQuf0>EJq`v1B;4 zsxpiu#NARmg0el6BeG{zA9RgD&7z35_lstHZ0-9W4dJu* zYuLCw6hCX-S(8Kr-gD(*A3AgbxP}2UK=9|;5$C3bv4kAZaZW*#FL)BwNG8? zGY+qN_EK&Ey(TexK{r(_m=&ruyTuH;z}0Px;_7#l8TF)n`G~wPg(T=fFy9_qNpiX{&b%F>;+#^q>cJhmzY}Cx2)X#@)O&OEQ==!9@{GM3$BsPdUtP&vTkMj zfiuF0?uo>YCN{mUt+>Ut?cYn)Z#xOSORdeq!z2G1#H+ckb+x_WvKf_HqR40zkJamM z+*>sGG5zaynr1nuNkKG{-|RN%*wQuV6BRZS?|qAyvY#S*U~#{+^&3uST_7P?cr5AB ztZ!z$>9em+HLJAMFCNvIb3y^3b95!PrVyaXH3ehaUHc`Jl%|F$ z8@Qb{zU3p65N_UIAV#HOmB-HqPYt)SqPnq*S9#*0NM7lCL>vy7r zMpmknRYPVEpMDk9LPOGIKL%fpgxHs9gMEGnQv$+$`;LdLvS+AAYR@TnJH1{{mZHHVLP}pOFe1#;}CdMK^Iw*oJ2RAlc&q7D@P5ftS85@=%Kx%%(*~V3Ejw4VBuR# zaod-z()Uy8TEN|g6>YL zU7BRAo}D(~%r6%fJK|Ly`TK7k&qQgWJ%ER$vg{OYo#zyO%ozCBhh15#Bns*w!pPx3 zUsAZ&9uGQRrU4Jo@Y#6uYHCd0Fz$BezI#rtCej>DUsb)C?c~SzR%N}49PB;Q-MSE? z_LgdX%670ua}79tH?_|(01NATn}uE2)w4-nm^P2r)-(KLgwS*rO1~1MKa70kCM}(E z{Ws!%?G+lCfO0e-w1+&h3JXuJTNB=O#{dFuU8xTh#M(HZT6Hwf1{pO794q$=inw$5 zH){ZDgfDW~Hfu7o?%xH-DIYX`PE2Dys5R&~&lxkZ?jk7Ha#*>VYHi{@T@3DSbut1?n|Bn=62U*dsrsY=v)3pgkYBU znumQ=@%8Ew?d7Vv$g^teLy92|rRgxJkP+ z$jaqgJB6~i4((!*8UAX^UE9~^u}>@QY5xR2cpl&&7-`~}F|sgl6*o?P;o##IbtB^4 zRj>L;*?BTyReqLU_gG}K)v$XZy5$_81eNg~XsCVQm`Hp40l<5vpV0fJgl|V1g{)xN zHaKLtDS7+g3+!^PEg9!XQ}^HBDZ{Gn3|JFYPL1}`IkbFo>(>T_4X^5r1XPW!eSlLt zp&IxDRz7#PT{dYp1H%DZEW!HZhH@`GotyK2gfMj=r}zvoKr&~0x%}3zh4Hm+!hGnu zAL2_X3jot)`W8Uy;hF$6o1Z@VhAd)y)buS34;B^hTaWEPsGA?swr&gV}{XZTH z34BEDey%(BUC<<4)_(~b!wC1R_&*T|sp`BP zkSz|Z8*Xrp)&EyI%~RcEFyvS=Gnr_{OPJelVL<(=)bTloCarNc23=Hn(r8(`JpOFe zMU;acM0r&Owx_MWXM{>o-U7gc??$l%XU3gc882YAfMHv{s|Vf*S*e4!C$I3%{;5?tN3@=<*mMheNWU z?zJ67WLPI)d7PR-mbn$oN$wvHjU}ZYC{8tD%58F1rYCk)SVyeUa!~HDF)Zur!k0tt z7a8;Hze7(#P$kB`zkDw7c@HPiHS?%)l5~3ug-RSyJ$H!q&MQYG#!0Arfur@PObFbCkO`Ui> zo~i`{K8!x&l4s_D`-{}lEE;ZiZdiYl`y70S3XhYwNxi4g=}-?%e{*1`W#0Tw+0ERZ zW1wuWZ$5mh9k((K|5LAkY-8Z=SJjr!0Zo3SIu_YEch^+qxz%Z@p9q8u%X-MIgx@cP z@g}90t+@VP7?)0Q?uJo2BtG+yR>CDuC}3W<q{)TMFxF?G5f#_B|I8%%Uux@heSkva1sgZ@N@IeI)DGnQ4ZnUF&h6 z&?`w?+_Sds(sL`z+N%iy=oGwO3>CV^4F&z{PbCB~XKR6IGx($buI&oYVGD$}zduFb zF=Pp1T7{9xQItF^j>E@8+h4OkiM)C4VAsNrAxS{IF5v(2%c?;Xk-Ne};FRI+=cDWy z^(!NC4WAWZtZcro`|Rre_TM4VuW&n!UM{?E12exo?0LRzr5M8P%DP-VRKSg46(2;N zrxe?XmBhxvQumuN88mDRqI@nTJRgk4kH|OTp>Nze>QQ4Riz(CKB78Dc#`*uNKG$|3CKLGODe0 z3)|imN`>OC1&X^nl;TpPxEF%EyOdJg-7UBmcPK>y!CitC2p%W|w|wc|`|NYhH{S97 zegB;GZ;fPRtjx#e^Q`-txAE3pTb5obRsVli&G=80V*?lUKfsO+%>So%Dz_x0qAOto zfM`oWI-^%db~I_cPQ>y}tq?nf_{zm+V$1kHD7|Y~v2dw>0Dl`B?xX zG_P{`El)1))>&WIX5%IU#|_F4<2+X9-9%2b9oryIAinWbH>I`6b}a|KUpDVCNL6uh zRC$_nCgmiiw#jee*0%(D;5lhHz{%R@Jz+RLR9Ts;GJxDoEF~~D^gK`T(odPsu+yYt z8JI1-xAX|=b*r#=L+$bmj1EQta_KeJ5+*|!RqvF{W|EoqdzSAt=#BJ(%NvVIml;xD zXt0?-CAAn<5wZj=kCF^V%HlrAg%P1rJ zy2){wz#xhDtEuUPehPi6@nO}*D$=4%>jpPKmBuqL?m2xX2R;grH1{wkdO3b?@GvnX z=Cnrh{am_TzqKg7Lt>4dT1Al_lg%(UkL6^V%QrNxq?@%UejGzMfGC@8sV&ilO8x%D z(OMiC!D{Gf)hILX0I+6y;GX|g)qFtL#KNdDoO5RCgjHSmQ>7i9X|BV-{sk_PuAxG- z*#dG!41(8Dn0=hfY|_ZPx@Sac&tkwh&iMwamo6+z?p{@kQ*Kk7qIyvks<%$$icFJO z0-F)+{%4-JE4i;i^{usLf?DTyj87|tw?@IBD}QI5ig>by5tGRx2gFAge3PH>0g(RI zh2}#-_>li_Kj1wr_N+%^tq4ykmKoJv>Z=p+z4s%2_LKugHFuPFUKm@{4z8l7prVS3 z0sRWJq!;#dS;vvpvUBPJ&K`Hu)J|H)cF-vMk~-njhGAIXjz`a~{0H7YRJI(;Q8Q$z?cc1C;+tX;- z1}pu_3HLpIWI^Lj?z|q6lkIdf_=uE$mWV;in#3hQCm0M1b#l72nYgy3(PU+j=nrMh z(=yU`Nhfhb4gkL^6Md(1=xWWz{NIxH7&yg&O6!JO5(DU4GdWp6+LuE6Kr5>*GJ|^y zywW8%MUjx>0p74tmLMvU968|sML&o8^I-Py3TpzWW%E6OZFq1q}pGOvlSPb%&$IK!84tvkF zftpoW=?4^%d*?!L@6>gy1sH$GF1P*h5 z7K{8FOh_k7Wqx&gktdyWA3|XeWHa&R0yd2J^?00Y*SDYNk(CC<&H&@#9eCTHs+5cW zzfc6X#qy_1EH$D(r>d~VF2%l&-FFF}O~G%|KB!EE`3BLxMMl3E;4qmjnHh>#ZU5{z6RSk_L~LT44>w0ZT<_+*r8P?Q;^*5rj;gl z$&eIuFbqoGuMKx~@)*$2G740RFC6Amsx&f)_U0LT8_wB5&LltFc=ozITlTTX9lKJqLO#(dSU}-J7&H>pDAE zC-=wux92-wYXe+#$gEfWUlkok2$ml1plVU}*N_tP6jZ(X#D<`lR_0GO>h%ub)bC zcTx!+?Enj<-1@yM)xl-t65e4~+a5OI0b)natuqRJr5VmfIu4jT+yd%R4OmFoSxqG6 zMyz4VB_SZZ*4IP&{+8+FCUaxq;xS_BlGybWVhH-|4s+H|&I(h)Z{9%SE2n!bEV)$S zCHcXOsqRaxxA)HVoLdCPX9oh=qb-MYUpz7WDrdnR*}P*(quQoExsTi!^@Z?6i>++? zp??(LCnoCVVjvYZ57T*rpD5ehQH>(}70RX@I1blN9RV}NO>^2IKdv6eLheHb5h`x% zzP1=nA84%XZjH0Lgo(5WPw9Yg4lGgk=2(CAEi(~GJ)8?&MqjacZKKf}n7NZq_nhL# z7&u+F>SdtqI5Wf}61HpFdbX{)a7EhIP3RQRqfL=?fbh^-cY|i|+6sKb7gdrrqNB2d z|A1O42>Dzv|61`_^E#8MaH={TAzT7YS7@>I7Q|XCBDl0%9L_H(L){V}}4;Tx}CVQY?A}>uIO@IJe^Y?U;hp`@JQWRWJDyX z`@!QaCU+km4$2QO;KEH0VfqYTp9~8F99kEnmu_kD- zqT6D_8K9%G>*o6>lyOQ8=K-c|az=V=aL5)O%sXeRoOxefL2_7>(G$H)mdDh`8B_J= z2Q~egBg{0tu(FzTbG$$g{0xOibgD)dEM1V^(V*TxXkxi(Y*?E4qvY}!{o%O-uD5R5W&Yz+p#)wAU=v@~ zAmHn&y`sKV3hJL=!*S-Wjs_b6!(oz4r--LtveC`c{=zr-JD9-S9hOvoSh1V#84=_D zBA+u)vfIP4o=7jIG8%;NymE)S+fJ5uGbR0(+hlpP%I-ZHfO&GJarcI7murb`6w z&cfe`OE(I6r%C||<9$1YO(H9Fx!q*Ybr;oOWUm=AGMxO0ixoBe4Y}u~9o?L6%C+om zX+o8@X+W-~TX{EqZjT$|X2Syk zgNAH&CrA;&`RJnx>B@vH;iXn;=4Ku2AF{fH+EJ%zbly_Z13@6Jxf zD+(&@&YKT)uJ^2%?R~C`!*I$^^dbA(^mg#@bV_j)YBRDzkWRd#wHf(gy6SIyLa~Dj zb@gI|FbUdfQ<$*3jk3s=7cmw!Wjy5lDcxee*?DpC+4#i<2XN{FD>^K|jIW)4(u!yj zG+mNw>1()lBmlHM9wG9w-451<7^WZ*j0Y-AyUA7Rtm|p_aqPyraP(E@O`%GrpdWWv zTRzOsv@XLpH6PEcqo#T_A@-u0enD!4Npd|K^bk>s_3<8F zN7w;e$ILQJXD2pWf=^I=o?&GF)M>2mDIi~5Wju3QAug8u zghUuVBi`7PV<9$|5{ySUgEsQTc(=}3QXiA?mVj(W-i!Q4x?quQB%JW9(xRP1+Y=RR zTj;gma=a-vSQch3_P$iGpailm-YX1{yheca9-2LKW@8I}Aovecv=s8kWJpu%s>&)z zwjM|0k0iribXW@hMT!t|YYJY-`-i{E^TP9v65O=9@=QMrTgLNsGV9sTTJu*w(7(#A zU*Q(Hj(5*`R6Bz_d#aaZq4w}fIgB4xuPd0Wi7i2tdgZ*XPP8Txfma!R#G~A=ByUGm zI%jsdS)Ep?ALNqe{^UolO=JCz(0lbY_PGJkbNpyv8;$B(H)DXJ&2!XIxUVU*VADan zmj$!_^#QeD_38?EbL1s`;?3tcosk6%VMS)X)?esUQ`#aFW|-eSM02=+`Xj`ZtQeI- zkX*HtNI>p+Q?q_4RJL+Wrm)D__}D|360#^t1q*^KPSmmtz@ifn8xHlY|JV1$i6>aFdl zzJ%d>xf8)@B3jH?)D5^DsJYFL6Ne=si!u#*!=j=<^2{1o5`=_)zlo#MG)fcDEalsQ zBwJ|hK1Yk%=A|_loch|G4SyJp8{&kVzxk@-rw*yr{013FuP2B+Jesak>a2V{h;q?u z+s{pz(L!1tkU(Riq=M*^Z-B*=dgve_#8uwn&?S4+5}A>unI^*FxMK?D8)fi2$E|B3 z6*gGkg^0ooFZID*?AGHTMwkRmcela%J^iiON?}#44+{-^r4rrB%6P?rZ#cluM@L?O z_`K3Wp)==A2tVgoHw)iN%-F_Nn!cNKsN0aqbPA)eKN#2)M^H`A#=_|x0}>*~{NIX=dXC(ohb%h(8fmB}t(tgb zSWpAtT`xvkX4s*8-1&2QEfJ5al7z@fl~-f$J0TnReeHAWm-U|r+bRd8zZWWIx!RxD zE|eLlcuH|tR%EyLKS=%IJ#vUsL4Q&3T*Knbm5T+z>3ET0w~)JXN-SRrSG_2>8$E7u z_riaTcbjuxX^|sK(Vgd~xux^YYw_~bU_-l3IM(i^AeT`TCkf{BLJaaKd;(Q*af6gw zf1v$tKz(Mhg_8G$UkA9pa=DOs@EN!v(S-PkD{_n}dejR6y8nbz1QtjWay*L9S3G)b zJ4nX;{rL8xf=6D7JP?V!m;)=;!Wk2#Z7?bCyYX+jbAfJ#g3@*bY$L!lIT#U_Hk0hKXT^b=2%RyM)oE`6w7+{-yHc zBXsv&3p!77Q;VWbqKDA!@@cb;n6G~zDuoKl@)*1ocFWk9D6E7JCuOFbL={MM<+pJb}n zUGY`6eX)~3#6x&;DTHj=xg5lR5X7(Gu z7fXM%=;*V@Hfn+_$a2jdcf>e6ayO~s2`p|+{!$#Ore>-@%4#-1YFVIl=+3g6Rv(lvZG%$OAk4n zHTsh>k1Z-8OB3f%{?)^#``WtIy}=GS(M#tyjj0KAO58Ix3Q3&mja842ss#p#tepEq zoa6j5uMmC&?$^nY+I5Uf=&l{Qcb8sxj2OIDk#9jC76)4eUXTe5qNv92#Mqi*@GJ(* z+itB+)ZP~)Ua^dlgWUh{B-0$tW^f9*wj)Y$|2 zjMjV@Hq9)*s@wa!DkEC#85AXT&4_M8mQ$O!A=~$z@VE+FqrU8Nz!DYHl0c*-9~DNK z_;pUy36qVg9v8vlqku^650k1hu~EWNe7E^QV`M?i`8Yeoq)(_Oq#(ry^^7yz){(A5 zM6JkbZQyQSGR+jrCtvp4>0fx5N-(_85Gv1uQSqJ|j7J{!bh8h=!a_)Ig`HK&K+!ul z3Mt|4@zu9di`O4n1?j+}yjT(r_~(b)uC>Z^P3_RNnDA~GCMdv1@W%tKV`$8NtVaxm zUBY;_;Iks*O<7--T8vCnm08s3iV_pg z{l!itw}Ne2DNw3QV!iYbq=w?WYy0?oUe<2m&Ho4nf~?=l|wz z?&6|l4-~ehRYYqfi^5Rlo=6GsSUG%@fkr$xi#i_-*Q=83yB|>zqjk$1gnxH|{i>1O zr+HXA4yol95@ZsfyrIZESl2Qk`-?rfC{aiKd?l<#IFz!qJrEe zxq<8a|AB0lux~j&5P0dkALE*7-%)rWmng0!l9- zDz&mLm0D6e1rF+^l4W|r$VW#lKu?GFLbj8&u1^*-8h}JJcxqz$*8_Vw_U38mA^Vc| zR;^#`Hh{v*ihJS-ah}1x#BW$MUg(}X`dPJK;$l@fx#u1AzQ+~CyQ5z%hc$N@8a8mZ z%zjDDz$R7H;46#(E`*TAtb^_3Qz&J~%5yk`E=}B2-pk$I1c4DOJ>`{!)E=(1*yvh$ zpB(W+qS8Zt6hTX|2v8mj`YiX5h1)bd?Bw#eC)pWyRwqg?@AOg%)V{WwH+M*n2I@^o zKJf#-R3ZYANCg>E3ual}lgcXNJX&#_+*;P5{-~gjTXc{e^6WQGa1;K$lI8jOJLfv2 z(5&ORxX=#w+sg>%XxI4SvQ$nl#BVOZl{rlizgGrLd_aU|jzCL1+URRrWX!K!b$<7x zPlwr0*nKw?lR6ltt}StkZb9MuQqq{Ay9?(yh~vs$Q8#hh{q`J!GCnJcM^CX%l&b_x zL^`(%&*ca}^sHGP;Oej&@%PwMw_(C~vFei_)LF~%j>v#d-hideDWE2-$nqYlwk$Gx zkDbW7bKaiX@jpXj#e|$(5_s%7Cr#-2JFcG-v~*)3q-Mu5K)jIi%Ot%m*(6x>%BijV z+$Jp@_;HMePf~B$8J?((O03%NafLTIha^rUA`J8_*zg<8g#hvRVs&8{DH&@Q(m2#{ z@iB)LQkDyv(A$Y4%Vh7KJVQ^fM2NrF%;L>Ef$e)?D5`HclAGz`A4pGoYclhz@)7+4 zGlDciIOU9lS(Mc!?8>$Ns=Mov%nZu!QM9$Oj&XeF%6W^)^eCKGiqUVu6Dg@FFd4%% zeN7%|rJM}xSVHkY6O81rX{S0$m0`T`#>|!lR2d=wlQPl5_=~F+EjMIu%F~J?gjqvv z^uFBEX=Y3wX(vthRg24z6!2<@%{37XKPOm=rtsE|6mFu!(6nE2EC4P|2vyD5|1t3l z+i#Vj5+kCOzkOYdfM$AF>_9GWJ64V_-uPWeU>lZvqG~^ zS2e@yFX1m#Y{PzB05ovgRkUE(yEWx`w5oN_ZU#3ZYOXoBb$p znM2nIEqhy!i1jM8iwN`*iMw1_r=@fL zHqIpJN>YrgR|!f?IJf2lhLiZJ>IZ-m76EN|ql^8}AIH+OuK@A!yiWlZVXwlYH5~7U zqWiX7mv3crmRdk5EuXVGpV=6KWsY8xout|!b(SXBM`LYRMAYU$MXNukla_cC>;2yE zwK1Bgt@UmP4>~k%?OoT%&Oh@hp-d+Q z!k)LRW`+MuCu;F=ezeWD@+G6~8Gp5`)WwrTsq3>H%~!f%00O(>fJ67*D%@l3hWZ59 z#r9YHgTqEX4(4%h(TGUv=}otY8;BGGUkJA~f#1u5g(Sb=PVKjsJ~@qCqjo+85m;oL z@m0&CO$FG=K8;dtnT)EzZ%r)-pFw~Ov8rKKVh#aB=IHHsM3;*1d%k?MEvuH0*m+xs zo)a?^v?WN1$u23OuH~@Fdl54!y5{j$W< z;rzWK#o3dVRhGUH0$W=;>+@1E#@uI)xpVRg3t$2o7|!I|E#X@9gVkDpX3`?Osjp9A z{KUl2?5BZU+`a~#28m{+KIq#SSvAMCm|kG5_N8|}&Rf$Srigu2)FM}A558@L3%|{+ z79Xm4rDCpXNQKk&unT2nV94vS2e=R0)SqDzh;6(Fog3q2t=6a&i+_ke+S`|k^PW62 zdu^RmvwN<5=?5+eSfVFpjLdj^*(^_7(z7q2mF+%uZg~}XAvm{8B9-NXWCbh~2O_H4 zRrTP386haY`wDE@Ergk~tG;sh?e#j3b5W)U#~ldcIoqK3R|ZFt_zHWGb%O-B40s zs)Sy3IL)*9GZ!7zhOM9;*@d7auYm_EWX4!M|l& zDM3gyqA;hPnMTfi4==Zq53j~SL^@CD`DnS7jlX>8x*(!Itlh1BFu%9&TL4wLvr*!;#xf6NROJHabfVpgT;k`aqcgNDfa@PB z)WhB>G#ZS~%Ada>c89b$QiV%RHdV~IfsGnCMq|F+UbTtl1(+1^ERnUwnm3pIjBTU= zaWcb=l!SI#_|+X4G8S?^XNe0qW?`O4h7;^Cs@Ch=)%Xe(hwAs!8{Vp7rMgMkRu^Ry zJfumH6o61jJl1$q?;qYDN)phK4R)}65uA*Hbg1ZhIr8hYlOew0D0!s@i|*FM5pk_W}7D~_!F}U8kdzl5@DT=sd?qbE5;yyl+DN( z_NrP0KUs+V+nGGJOo4B^VteA7I0)1__$(sWv~cwe@d*HOwjNb4v8GSAa~f4amxB&)29V6 zS1nNFGrr5*C;|51BVgPkLpw67cFQ~(eVna>Uy%LQ@qyBjP*Dw`gTlx=m&XdO(VLx} z4JTFp3jv_cdY$*z+XdX7&M(t}~W1RRb>zLBk64_+!zk+4C6fmy#+lg#*zY zyn%mRygZ%rn~1nTPtzOOGLaB+S8blX=6}+vO2qvrSCMPds%(*#fT&f9G{J}=CJA=q z6V$?wiI@!o@cPJPBaea@nxHy!o8tzKy2%*zP`lL<_P_E6o`URfRRpczsEtoSG**i! z$>P1F!?*I6)t$+uxNb}=dPMBJ5p}{#coqIR?dWduM!s9F%%t(<%W>ut^sMX1{QHdX zlN0l*_L@QxpPTsMrlvLm@X>Gu*hLmMuBV+?``uk$Wk)}^{Zm_uEUuHmOzrj=z8(-} z-KANMs`_nZAQ)GNIik&=v3$))Go0V>MF}&%Du|mT!G|`o4$z5F!t|}Ec`C}C&ZO2_ z4dTw+%ZNB=4o_ozP*#4>vI|V72eeCMD;sPD(sP|>GB&o>^>a?QAaN&M&B{~Z6f=Xc z*+z9Peld?{%>iHdSkJJb5_)gb*9tdori4XoYgdfIvMo0Y0gk-RKjy+OAlt#eGw65Q zuvTEXpz6(gtBLtn`U;WM9ob#vPzd#0eerwRXnb4^e^tpG9v3QsA{qy=XdZLTJFa3!e zm>?XI@~G(3kkt(>jm}0hzJ3%Dslf+vPCUA7r=j;3`vd^if4q|q_WfD2_X$NFKdFZ( zZOo3oGoVR!lrbp+aFP4V5OYt6tAOp9A}&;c)tU#1yuH1bj`E{v3ADVDmUBVH#zAvg z8kE~}()DM=3p@)H*f)?jKQGy<|Cki+yhCWo>@gW>m0hc6C=vce5YK zE<08^DRCo}Y1TV_k5A6`v9lzxP~Vz@VJX^@|E5rpwZR8+%Bh9Z1GbNCmi+eEuYbv_ zc0UHsQRG92?1gJt)wXj#8^n$v|=6r?kTo`+V;;6qQLb=b5jR5)3mEUZKmn(a}OL zcd%K}eS=Fw!^UWp9eoC2*{*n*Hy%5Sd1fPu)TVvJ=iXuGbdFD@Y%A=}j!i!%4Cp9* z;dYD*^sFz1JBPFSX_HU2&lQ}dr_=L2&?~8tfpZz9gN1&P881|IuOti1O6uCPNcTiO zh$&9B6c7ee9Y2YEQ+~Q!RzT0P@qDKJIvQKDb1Y=@TWL*A8=4iZpJ7zH8W;Oknfx{1 zE%H2ya_Nx1ud=G1DDtqGYx2zDu--QDu&L7=7=;CHwO|q>J#Uo-X_ZTs7e&qorn0#Y z1CoG;J1CRgIm?81`BAs`H1s}3UC*WZJ|E`egQ!gWuE8JUHHQZApt1yz7QAxSh|_Y# z0+m1EoLelA#`TvlCzjQM_!R9IcCH66ax zWVP-*0|7WE>uWj{Z2!ClBttfBJ2)a;&5t_mcgQAnk{NFl-Z*gnp%QuEN<6I6vc@7& z#$nGO>C0wdfZ~d0W~vf)LuzO1L2p!`jD1`E{ccoaAEUzz13d~v;3>u^ZMJgJm}Dl_ zoZb}Sj7un!AxWykwDHAKB+7~M+S=@seqZ4z)Zc2Mq4_CXD+40}5;3lNMqom_#J@;M zl5Tt;$#i~iQaOtnnygn*5-T5~$DQ|=9v&K#?3^@)q@NVXHoitq%-lp{|OWU5__dK_mG94i~xflxN3Dz)vHeMsTAoH|$ym&mZcXk$_Sf zv*4;5J&u*g9!hIhhB-=Ut6c|w<~ttxt^nGIRD6@EVek$u>?^$lc)n)E#=@jD0l^6y zPQ^!VP`RWY=#UtM{fL;sONFO|W;uL231x)0Ns2}~O(m>YJ@ppV^v%u&!C4!B9E(O; zblnKSHH0 zLAP%53=-VlT1?U3EIV#c5x=qkrD3W%FG_vXl1hevi57#P{Mc}5paprc@^jzRaC9p| z1e4PkIC#C~=SJ3Wql@PLvdFZGKR=NdPExlFodB0wdz`;3^Gh=_m1&n{NhI}VIdpzl z8zUeGRP8FN2s0X|zor{E`;DhW-a`%>O2Xkv`hr-1oh0D0&$0xEi=9Y<3=~jz!n9ah zdOXmP#*UAo@Y>61{%w-)(YqU@tI?~wh^$Tg!q-XAQV-&(sGa$HM0h088f~ zrcq^*r#RR9Y{+U88aWQK62+xE)qGMUJTiS>Xu8^A3DO_54xC0K0Zx}&@4K}H?)+&q zAGn-lOoxSN+VQ#%b&!jUa9-)>$V076s+fvXzgo8L z%*Vcm$skLq>2a>a7{%+KV+}+!x=|@0L3brG?BokRW>jZdB^mSg-)jf8joz3@*U940 zNPG4p3E1+;A!|SPu;I}J)R0e=OR@Cd3$cP!e~Il4M(*BaP?IeNN#6Jyekr5svh+jK zsY$+}i5Wkp($;^6t}G|MR$_bBi(IcG0=4IY+!tjUaUy}1TAgmz`=8b>lFwy+!!$I~ z(UJ(Xhz~l=ek^#vTnK4vH+E;rcmE#-oG~LA zM-&8--O@ya9^HDM^QlY9PMUtr1LAprkB2;-U2OAQY`Eaw2WwkNXN`2Q=x2x7WzJi7 z-5v?WK3MWtkO==NWuL7{Ezx5869OpRFWf;w24V96;bHVaH@sx{jN7&bc)pw~r-pIc zYv7E}Rzmn@S#*HQVH&G7W>Rjvdfvh_WbZbsQ;PL6?Rfg&w}8UresZ{vE0-mf36j3E z=zI}o(Ob|f?1u)LK6( z96R)az!!EOR$*na{=LFDMh}D2j+)h`j^^Wx<59UJ^T(S+7lVxBUB9bzCe6p*PD#nt z$L5e$R&$xRo*YusOe@LJwZ2XBy4i2&croJBPc+_j3i<*M*p(blz#!fd#ELVs89C_j z;bS7mAC8znzAin)LYz)iXa$Ua(-{_S?}|Sl^kbP?$qYcgLv7hQjq7Wz!8KbvUcU9L z8?Z8C7z{Ma;Q$Nzdy%|25Cj;~xz#bJZi(_z2=yxT*X3_EWD}wUT3GT|A@@l?H z&s6=50uWvO6;=Y%75|^LIZG)e$+NG)_0V&#oU(#YuaJA+G>efZk-{YVl0pF4>30_U zO`a(t0<&Dwm16%;Bk~wlNMlys}*NbofpfmTVEN+a0oh z?4{T+bc*q^h`d{PlAw310I>@ac0g^Mbic*Le?OBOXJt!N0+^Y5fd!&U9(9-gHr*Zm zmgNgvNHWv38Pl56gZ$ElgnXfyxCh~a!mF9QOgGHIe{`JZwq zdBl9BQq?jY(4Ad~gC)V0i;3$s#nYyh``L%(A=xnI z;sNQb{iM%dWxGGFZb@&xh*v_w38hIHN@1|F%R(cQ)|hyY`3tSp6!$>AVJx%sc3y|TZQT|a6EIq-XgM%S5Yy_z9vhtA5o?wJQsN=qfg=6j9{ z{2;_?#V>zCX%fSR$iQjG>jK0w`vF|4SyBluN@3r1P6`D;sv;Cm22!c4=6tj{DDOmw zA~H~(u)AAfpYm0Izj}Ur!E5b)FQOS@l^$G5+DO=_{M7#gbDJ>wVlnZ))0MW>LV(LD zjbf&q(cyk;=c&Vj!&g`o>>=79f9Y+eT}?86G*%NBaMrOik#%Y!J8s_Zee4c&fEUE* zQ62y_yCz32M63tuKE*2|?OIF*AM??6H=<8FB)npKT3e2qzagHKu`<8_Y(@W8ubk;t zE(OTgf=zP^RWCYt97d{UTGN9jQ^k90wV~s;!LsSPAswmK99roh^=KQg5Rkc`3DEwE z#^bdNM=@YUFR^#oilpaS5-4(6V4^bT=O$VwY#HB`ymDHRlsV0N%AIjV8uakKL6=); zpnTLu++r+C9P+0zfvW5WRAl;3jh85c;sI(53?kkVzGT2hpY2vIACb}jn|2_!C6foC z_1uvOXkYEUU(-?nRMkE!I#?OZ&hzzy-tQk{>jb9R1H>NYBD4Ed|s|SmJ z<%as{=JvUyBufR>*eH0ph9>Pov23>)`o`la(mIjVw8I7I5>YB*Q~CacIyT=_<`;$_ zzxU3k8?IMDM-4WA5fmyoXZWZekCAS4JEw8Pv-1?xg?IZWfZvvPU+%Vn%I^hf#p(&C z9U?1K$*EozjBaZBxU^vh7br}e1iB4kToyz~y8g6|6bfCzOI!4yWlY*RY{oM9#b5Ol z3v1FVAIWnlskiDo!fHaP1zwkR+Kb7S3h% zRP2@F@F>+H#t+tySTELuUN7zqsg4cHND_1)8zd}j2~Pmz=n{bFOGz6kQIyw}aY^Eq@bmx2UFiSYyQP)&ZwJ|r6*IIypWZt^!usdx*Uv;l=gYQ~+(g<%WGBAr z&@a{1iz&B*(yypfr~dObEY-@!p>@aENTR{PtiZY;=RmFhG938F4kV0zZfT_fI|ecU zK$IO7{D3Lm9n(R=bR_`tnmBf;M4^+#J zcP^4J=)X6^V{E1v=wGSnfs)PAltMJa_j?I8BP!THWt~v%6I}sbJD2=?c%y7r9nMUF zeYwOa#3BD|P|F5qBwS$rYa7hrC(ab>=YW&&b2@r#?u`Az}6>?;ubacW@*=!9E=yYO+fjPmOU2`S#j** z$J4<9|Mc7vIdl)VYjxl3EOCkR{SjPOWac>3T%n{6{1yLRom4@375>}euatFErm5g% zKL&2zVX1!VKdrUcy}y4&EOWeE@@VTvzr>ZjMh3xPffDe z8R%Uyjj#v&%esvU_-f*si{IBt#!{kZ()zPc_f^eMcwNa$Rl+m+PJ@=wp73}*6w7J8!g76TW-AokHiNe{cvTHxOwqZEI57D|?#*w_8%p;~jyQ&V%( zzbi;gyiN7~_tDDQ+87UTJNlY_aYQHVpGVmJ@!NI`$@5daKvwzSc!8pf2Q;-QxKkLG zC*~oWuE$n^Z)hW{ePI?ItLK>jP{4+1Uw>YveqTJ#jTfSV2<NPlJV__lkV(W~YCzpScWtN6mP#nqPzzMF= z{K?kotlDtK6Lrj@g@=7pNZDE8ImJaZ1V$hin7=QAu*g66CcZHWY@O<&HZ(gK6AO+n z4X|-0YJ>FWbho-RVxGQroyvJ;W&M7-pG*&N_0I!^=??xjnfguo{d4JNbMi0K{-@=S zDr94w{h#=%lK$`RuVDNy694KH|BJ-`B7x*)|2H%I-3|Wlk!ag(KkkAL?zEguDL}dY zy`o<1WIA+-OGrFX%Hj`n=)T8C?rM705Dy-Ay<&Gkf?bQPE*7q^CA{$P@RqyNVQ4#j zT!K9kum71B!{&}w+GpE?0aC4zR|6ytNi`cJ|A8czuBdKfKHMJ% z)Qqu^+JN=@5El-J;xW}_V#W&5fmOCH^;{za+dQQZT=U#ZPwiQ#9v#X*3r!f+%*Q9a zFU{J)7kWXQ>>W0-uhtO9h;j^QYh7jM`hP4rjU-@oY!)8&O0}k%!;+#s4>Xc=78|Dj z`aj~=C#~9J9HbFQpf%tmDyVlxH0zcegzzN=6(A<%{uLv^@!7dKutilt(Pha92kD@# zj-C~PnCzvW9nT!%5>zU3)2Z+LqWW%L&*>lzt7lW+xLSlkx|hw1^p zp(UfGpaLO2z<6%sj=_V#6CwtK1_C?j!g&#@PDPXXyzAWj-L?KiG5?6svCX9)tn*Zx zO}Gu`s?A|)jisyZ&r4gms%oKzxYi3b{pBQ{e`WXx8DF~V<2-26l zdZ+<8mCO0~%gx*GI)`5fV~=_{L|%In9TC+&z0tM+&p20-dsO+(UNqq^N9i~}WizYe zZ+cP7-*oJ>KVH(;9icD*1sU{p$47i}yz)S45ik3h&lP_AEi&l$?)Ud4P2qn<`Da(u5=C6aBEl-F+g=hFxW?<7 zACLR$L|eHg*3ayW+N<>d#(6*CPGD_l3BjUDw+r(}Bjp zoa|Z1@nG2LEp@N5nwymLws}{1v8E2;Il~*&8=xPl!!^GVC%O({KnbE{`@Vn4s9Gkx zs{NTE=%cU4$F`JDOKN&hEu{U}G>T5F!*`2ZzYy5L&YOc!XAY@#&a)B1ui_q-v0bE} zgk#U%8KpY}9Sy!4f91T2@mD_u4svsI4_fqe-Rv`|YiVsJDvO5SwAg=8I=BD|_9nj@+v`nipuiy$UO5Xr|u{nCM5-xNsm3PDVG8F6lzH!?3?|k3- z7&(Pe=Azu*t|6*d7k%`Jn8Hr;JB$`%l2vXUSk1 zX9*10Z6{^YTrzKd^r=?19b0IhwO)Yv3G5cUK1I94-;B0eXYIIP;@|nB5mV#@U(d?S z(%dwmvvi`i(kv+!gX^?>s`_hQ&H**axL>A0&aO(dFJ=<8+hC=LKeSVE(K0o@-U(Ho z=PL95T399gx@2K)yxOL_b}Qs64rYt^wO@&Lj1f*0%b>k`tqJSW%Es^>tJgk$*N&vBq(>95uzES*>!?E(Pl>&7G8A)Fa~Bd^URv`67ma)BP7 z7N(jrRru8?wqB~Vqiu$)#L@&l35rl_)E46-==MFC##A$DsXZ@qqGv}(V;akT56eL1 zIFfR(Zp={YX8N8@{qhSc3f^hfkyo+c7B@vS1^%a{$D7~3ZTOI`G(Epuws1h-Q|tD@ zZUx`X(1PIi@yfML>lQ5*WwVwQV$fyj4?5Vw?3Mg}xU)2u)XJnDeUcArTnkhP=!NtL z95c|s^?)HY@91?h0{N2-%(=8y1dOAdJ3M@S>TLP@QAKJCg2>YRE76B`ECQ6Dytf9)_)O%cEycivQ_X)2qK>2fHF1N}kez+WFt+c6Qda+`NOESde;ewuLsI#EI|kE&%9=D;e*Z~hn1U^P@oyK)Yn4b zH1u}6sG5c0dxFSmaFI2$*MNsT1HeD%HR7H~^!DD}_G+|KHr^wd+@PNRi`@%O#ChPF zLf`c^6X?QFAVo|NZ5|9GTjN-B?3y<@GocZIzxJ3kr!*QxJxQB=oJ%}g-CwuHLuq!^ zdlfx6JlpL>*o)R|k6M(?Uqdr~J$1K~i)Vc9Lt%UypaooxQv&f302el7Ub7r1K9`vv z`BC}$<_~wiGcv8OP@rfs+wdjXajPz~m*R{7OyhHvwubwRN^0?&1LA8sN@RoY(|BsG z8HL(#RH`J+Vl)AK%mnV97dba#BUWOoaOR=_^ z5GrtZGDlbYNDUc0A_a8JGGN*3^mpbM&+8^x=zrBqVKNv;IXE;_>q{Si=)v%Rvxb$E zeQzYI>*v_A=g{@2p9$x6L7p9r+e^(FqZnZ5QGZ@XCWd+RK- z(WOH@D-J6#Q>fL9;dZ~iq)NKqMmB!IXl9l(h_uqsw|Z`}<|h!$pQ%kEy2Y3Dquq*6aMNl53EGV#%{#5x+WTixhm} z;%mGzS<|?tMT`f9Z*2CNv~AN++q`E<@Pl06gZ-|m_+x#zK2EUkJh>dxJ-S?#Fmo`j z=>MFlx_;78Z~F4tiYrT-feW?tm|?UQvde^ia|fge`5$zBr+8q@1z^$&Ck2v&|L_l0 zn4sP?X7;=>M7v#NU%nlDdRLe@l->U*>N?iusJ~*vSB4REv1#K3I3i^Z@Q!m}Utu2% zkmI8f!9lxrdx1UUiy2E1GSXjKW@dZQIf&_%p5Vl`-EpF)D3=_dK6PXuvBcxvqddT9 z#qr!PG!pLVi}^8$lL|c1NR|CSt&E7<#(nrUzRzn27X<9-^T-<^)Vu!RH17`5Dn|bi z4HPx-nU;0xsM#>|dv|`&xL_JT%di>cwkOK0t!a7{*t>Fdk8X4)uzF2L$Yo9#@_Ikg zxIPsyMh2{mIO{HiG!A<1iaFMh=RDk?-u+~{7FG$xRrCTpNg)u4@;PoHz)&8YI=xF^ zwf3iV<=t}LdCC&oznPG?$MSc|xB(Hnli2D_Lfm#EYy@i@*Clk=KDu8xfX)%l+5gNs zj<-`N)W_Z9K6HgeqBy?>yGbnaHArRL8b!I6o=C{NKFuuAbeqOB-Ghf5-Oca~?v=2G z+%NN4mf!sR!_;hW=STYUXR3e#VhW#Q$D=RCy`d=CYT%X^goP#Z^AwwEkrZAdSN*$r zuIE0-t=7J})VX>u1BCfvSbjVffDHzqp}7cc$F>n28Q$Y&f^AMZDeZjjZhO<F!x5S>6h3gAccxMyDPB(v}P zN_Wm+{_sTS(X^<|$o|wDG^Nz>;DOEPQ=$o2v3Sd6zCfDV*~{&xN5{9cy)(F>j%Q)M z#CgNNP#ulFv;J#F7ZvIbzJN8anSf%*uC@}DnJK_)uo2_skKO&nBP^989KJ({OGH`h z1?So~)-lx38p-z_*W5{8pB|Iti5jiPUE2RB@VuTuOrN z&z$T1|FQR;VNI>=x~NkpHUy>xks{2gqS8^MNQ;Vq(j|ll2q+*Ry@+(8BBCImLg-a$ z5+L**B3*h7y-KfvKnMv5IRgd1xz_$xIr}<$?X&i^^Mh+JGV1$2<-YId$rvuL6g2L4 zB6qyb_*c00j=tmUngS;?_kEcKHP2?$RVfe<31_HNN};c+m_b#V6+^OqN@MD=Gt}U8 z5emoQ7K~5i>&$!U=jX2Hl2=J7M%kaD|rOz}!do+9< zZ2kL9*E5TZK5tuoBaK&Cgg;(>OUxKe#u*UBUZ0iH+#{aX`wFe0rSi8;DGsLMbPmu}QP$42{+^^GZ&_`>Zqi3zPBZeRJ2GYl8Wtp{Xc7zR*Ld$1w_HB3P-DwCxK^>!L$TxlSk-B zaUq`L`ZXc0%Z^RyO6fZF(A*%y0kp}Nk9!r^E;*b|8*t{*0uAJ*xJW%O6 z87MLZo*13OI8R>lttPS-bT6a` zi#B~-c^YAO*;rBd=1q3sGdG6CQef@za?{2a(wCqEFjYh*<(x=G*(2|(?L(o!I|o)i zzFIrI-Ng1a368BUiIA^b`&yManPAdcaL@*aEgQ4F^mb%|Q@tXu+&;TKnRE23dCeJ? zEo<=rD5RN9C^hD)gJjdJ^4dyFj4%F$EHp^*BJ8ar3+Vlo*(@S$9C{*7nw2IOUWIS{ znpM2`%<12J~P}`nn^a%64t-AGhz^BF{a)c-VqtULRmVU}D8kSk# za7|u4pCxzCV86{SpwQv%7hG4zZ+orPu}L|MzogKUu2vGbTYWC3o;ZvjoUA4RS#?3d zeKh{?I|G=*!#PJ+`7}3t7nQp_Vk~6ow*jX=Amj%bHp8F2LAs?={Bv)gglMd7e?nSs z4===s5YYw?K032-pTT=Ojrx{cnZ2D!w`LoQdnc6Au-bXt{Y5bIp%lU>i z5Klu=d*AoQPb?;okq1koMcj*;h9)<$D8u^lG?c3Ollx@zOqyukr%VTY>p2jEH}U!C z<|QSyPqQ0DI~$*QA2kCcdWb>qwDR`hGl#q}$0wEAs`Cg|z)ykdk?AW{A{aa?S<)+G zJ|vidAj92vit4lx`Ve9mIGJtb5`)!8K)0-~U2P^<>Wq{fg!NPTm}zTQnc=N9G*y)2 z9D3|fx}pz6q=s5pIk_0Kd79j!A5wAb9D=?O?NO;|vOMd5cc<@5+0y+FG37X!lKAU( z2j7xe?@bn*!9Dzp{oR^wEmWiw9#n)Artz-0Td_(&1F2hRh?~=fNN!6x`pgIJ>Fq-7 z8y>RHBm4CL#f+U~3H?l}!_XkL5s(BZ*NYCy-#`j=1{dpxVFs3)oeSGwUA^Z(tkv`t(~UxG#}jk*2Z2la_ja#S4O0ymrn=tT^uJ6#<-0 zhS)gif$c#;sq^e^)cR6Xq)Rh)xAo7%TCPY0_W)XESi4tCcp)5kNvG~%!piot)fA~) zx%UmYq42g2Q8{Ufy!KM)!%_fZhH(sZr)_Wt5T zd2xx~^Tz7fI`GE}M?^w&MQSoTfp_114jSH`F~!J7;%xso+roV|ziQz_m4f%7)&@{r zp2cxdx*zERN6Yc;Q2}L>s_vQ&h4}8Z^MqKX4+>QTO-wh_qZorXrM{VMR~ar|VYyR` zE;eZtWBFcngfYj`FiS)eoStauH23O}2+^&!XsQ`+-DleAOZwAu!`Ej>E$Y!5KFM!v zx^`NdsIdzkTnXW_?}mRX9-pCKBrI0(Zt27i^Gd2$)zmOOZC3F=F%?L~J_yk>MmJEm zofLP*e2*AE3{kj#)@3mwq``M)zV+*P0$E;ItIK_7n0$3~_#i1F{lgiTR7R^lp*vN+ z7eF(@)f9buyLSbiTqO3D1K2e-635{w=tLFQCnd?T4+e*aeaToE-`l=khZ=KxCRZ39 zj%Rg`p&GUmuX>VXEu}`8`63Ag_nem@V#Dt~xxcNNgR^|MC>|DUTR%%3>s-$*eD;Tl zWAw;jCW7}-rS6h5_1Znak*2MEut7^-*BXz;JWH;6lB954NqFELflT^q zk|XqXy~c>cWTO9CQ<~G%n7PE!0R}z4<_9-q84Ne7*y`Zyk%R@AZ}_1H!j@0?NKc4q zP|@ik?vlI0goO?UzM4R-%G{%Rqvdx^$J6}R7OFqpyLP#m$9kVdPsmHR=O#!`+IjUo1k2lH61m?C(~aH);onHb ze_?tk_g7v(W=oQRk<=+~^zkO4+~hMSJmy$!yjttm-cyY$M|Xvd(MN(^LuQ_m8s4mo zE1M!%WkX}PBjcu5Zuh|JzO}E8oXkAckWQ5{)*3Xtc?wHjuK9LUEm@<9@}-TzN9(lM z7Y(-eky=tMSTAH4Pd(@RFRr?imFMb~xLxUoQ9MmYuO^#l^3`Y+WF9>Pj53Jpt>5iu zrJRLA*BVazWU-wLfAaAm6w}>BwKtQO(7c8~4WQ9N-n@CRN%6;1zvUZ#J}>wcUUOpW zn7iwEonc2-OyhVQ+<9!$ZIUlB*=>x)wnC(LV^YiTwJ>PqlTG9P7Mh6g$PL*8Chj@A%hz)=+ELWR9+>&)Fj#sintGt*yNw(TwZJl8tOHnq%2b zcZLSycPihFIUj9aX{X z6c++d*ew9eO1fR|1T&aXl=;$&+f7)OTlVfG>!$YE$7Ut-;u&%ML51t1eiFod&h27b z#VkrqbS7xeK4J9ju{A(EtyDbx4*qHawp|PZYCsA@>c|dmKq6m@J9u{%1J0nuNkEGU zTMC!Jfm$-1??B(Y46wI(&h1x({H{Boh6gwo`7Vbo^9==&UOhPvel;iCb1mtJ$0K&C zLqUHJ;~CHM6QYeZ+|bL3rUDvcyN|5|K0WaxZj(XxR8;Vs-Nf3wP~AjsIFPmZmOz44>C5491^b8OTq6bVvH{-B+`4;JM&Rae-U4 z?@w=S4%y>wYdj4$d5S#x)GOb4wry^(5G7r_8+nDt6kq+l1a-!L%lG-utJ?kR81SpU zu>0S;|NGz1vH4dcG5523D&c4M)E>?;SyZE)EFrBZb|-}V#?2yp|K8n*9-Ze4QG$Jm z;TsL6u&NcB@pnzwv#+IC`uX<}u8R0Yk1x=6)HH_~baJdx(Xhsmi@s?bmf8o;hDC4&oA|f$y3QtYJXdL#`)E)P<8A zHtF;2{T1l5p20i!h1b$g{9%#4SuG@o{-l~A?&Z04AlM#Vix6>b=G_sdIi4ybZo5)f zuh6DXec4Jo!R)+mwpQ1U7(aT0VNoySI;R^uSk7jAhI)kgjQn2_kpm&K`NGwTdhLN0 zS%|DnPEHXa*y&ILqY%KYwz0DBUXugYc-qfQE)C>6A>QX}RLG`*JT3=pl+0b&fX#po zbt$Fc!st52h8a7~ecXZ>)Nf9YA3APr9jn+GlUZFTT3#?5>>=!ELtdew!UemhCp*gp z+ieL2hhbl1>3EXUv+Y7y)qw|nX?M^MUZEW~&lL%Ot64fu9z48m%kp*IbNXNa=YHYy z%h|PQG0h3f0ZszM4K`ZxTee=vH)zkJcDP_em*hpBj1lS+@w8TV-OB5^D^JzDO+jTL z9><=dnnh)<+~4`jCvyjLnv+yAg<5^VMd7K~s)98`d$f0`~KY)`LJh*nhbS_|pB6At?gLnbRB_E}ZAE}Qs2<&20YD~$-By%an3i{}qz8j<3? zSWA}^Xt&SnNaWKO6~2!pnAD~macIx*6rG~LYCdFfyA`$FvbTjZ4i<^9e0SYu`3C(o zwB2CpwodAGwF9qHU0j(silI%=PurV|`qXFLR^))IK90XmzAy}g#XjCnmQ`-DEuRMJ z&?ob@@s1(zwei91lDRM0bMC6#@$}V5YD{}Bi*fy%zYrzgFFZZ|M&P5g*+HY7Ei?fw z|0#PmeGPO?Tzv`a%B>4a6&VViZ8&jjfpsv95xT+svVy_DF_UR!PR4bG%ZRefL2iF(*8YU0E8 zNTX#wb^1z`^ei{IsggwE(MpdNb)H)uIM+!!PUI>#k~sh#lYc{xJr$V^tJ|zQ?Vzl$ z`5e-WjOQMzGxn+gGkEbfSr$Da1tc^P+rE}cvCxQRp;?(%#;(SZO~ljQX0d#Kcy{W^ zE&Jt2k+KV{hw5cRvZ`=75bAWY>$KQ*B{@@tHc|F?qCL0t8Lck_-oFmU-w>k67fCj; zR_jT!vWd+v=-CkPB_Eu^Fk4C&HX>Ev z0rGsOqVv1Jch9pI?3=F4$@~1(q+)S#@jFRWOn?zA;C1LB%ute5PY=A-hS-VJ(|?=C zOPUx2VSEwvbWmD$J~lofUqcqw?(If?2ovmChDn^CbW!WI`A5B_ zI9+8+c=|L>x)-G!0MUl5TDV+!l&CgG!{acA7_fQ)em6&Qt=EoDxp$+yQ|C8*jVGsE zEv8U&R1&o6kc|p^g{j#|`FW=!X9KQp^<=27HHOKE4nd=vDOUs7jW{6IQ92 z@_w0b3?I@K|0+RWaws>rCNuln5>`o%#Cs+s?&RY1MCB*f$M^Ug8ipfsH%d>=t$49t zRARfW*^1RwQ>4>F{axF>QM9B_)7q&}E$@EpOriLf?B+FZ7QdU2`2u3|U}+p7K?xT}9G zSj@&3-E(8Lkdqr}osFg7CgjDgx5)Qn^YpW1E^a>_uRL2w`^vTuHE=moT}bBel%a8Y z8c&!%bp%2|Xm z_YU4zmnif@TQ2L4c)KiMJj%;j6L_fa7Op?Q7Llq{=Z%$34oB#zl=aHyJROt_LSF?Qg z36hBU*`&ew7gv}N#LZI>*_bTk`EpH$nj&|-rr3+(wnAW^qNAg*c`1ReK>lc0O*}bB>`uZg5QtACu!| z;-^Tj$&$0V`;wk(O5M_VW$c#}AOErVlH~Oq&K(n!{+(@4yE#cq&%6ggAqfxl#itsB ze~;N-3d#=?7b)oM#_@ZmfHBI;E=gnG(=Ia+gMrrrU%9m9Ujtmnc^OJtFoqV6u))vb zw|?_D|GgZo>hEC%IY(nb#;(3lIPUX~kq%ly%M~Q6@wyi9Z^uh4kKPhpI{c<)cf?|F0`n?q#HjAMqAi{wt5_p6KO*2&d1$!nz-Hj6ya@8xYGq9Lu5BiEvMNZ&g7D4V}k z(AwUyd*9>Zc5iWzZQs%wm8cBPkFQ)`DL3Dk_`RXtucoFZ$y-!2FkEf;i1SpT!r1#@ z262Z(a8^hk%6w9vbvjEME=Q}K@KH4Gi5za-@JMJ1|C|&fmp6o!C_2#Id3j<_7JVG(i|w(hw)jD zT`~Lt&eO!cjP29RVipPOJ`@Rz-ZStK{e&>Lg=d55+Q3Y#rNpW*`Hv~*4A8XRJLPwU zO}F+TWvqHSMn&2Q)fobLpyRL1Rl~(`*HZ?qTa;7}SG6jlV>93vIjTfX1z07o zfX@0cO#w$;t7vv_DGP6Y+=mY#+xRV$I2EVsVc~`M$bI3cnfDUJ_BQCm7V0A?g9UgV zg1~IijK-SczHD)?~mTXUN)-e^ZpvoBWa+w zeupJrF6lwBhjBD@V1BgbMaQRf!R_kD=|gcjDR*Dtj9Be6!!%ow73GfA%47xEsHXCy zM}@8Bg>>9Wm*L6o)of{TwUW~Q2HPrXdraq%2=c&9%Epqj8moe1SGW6oC|VSTZ39_^ zn|m*S(>`~JEu+R|3SszKIfOE1a+b>{RRdo9cC#2&Y)wC@s!R8AksJH+R!A{4`wRVR zURMp+<@xiWJ{FmY2Q%oZ1%N58io7_*$AC!6$E)jMVvW0 zUDWg>^Pyeikk@8!CIB(A`5RqKEP8z292bIhvKQ3>4e}XIhK@1&GkWnq`cqt9o6Xzh zSq_*Ol+|@7fv|)UinEjK{O$x9o9JFOg(KarpITr@5C+?AUVtnejX2rJ?Y``;YWgR= z8D^!#GYp5;zR2!$Tb%!18U=&`?`KBg?Cj<|Hr|=?9z0Zc-{^Y(u@SlB%by5_V19f_ zAi=l2(CfM6O9S1MFHe)k7S=q(mHl4TSXEA+dTNFadhlfzfxcJIL z#!kO`q!_gXoeqClu?#1$WHk>iow2C`!2iPFm3Y zIJJqikufvF%3oS6>~#@c=BWzgmdp+KZ}99J##_hqh&WK6`>an1LT+cln!)@G=UQ)f zg~+2!XKm21y!SNQt*s08#z}ep zOEI-L)J!<5enFWLhDSbM!s$%^IS)CmOlaq+^=(=0BXyJt+`0Ujfu1Eonvtfim!i6rLI&pS^U z#tG9z6IqLuHAj`5VTn~%obrF;XnVR(sm>G7nOMS4Q3N^~3izMiM zpNRV4aBkQ3RzIo8<7ExKtiS5u$NYG$pSQ84MMZx}RAF+pu%Z_ohY#zg$1?^Lcq<1s zH5g9ERF>)5+7|Ll7c1Z-Bi-Mp%BEhoM=pdt-^Q=sy;VvRLLOcAWo2Qx3N!HKuczy-A40;)^y}6= zaSqm&AdGiD2eW74Gv(riJ~LI%@*dhrGuO>U!0xhCoGCany1XP5LBt8dZ@kEOTJv6@ zv3nYps4hgBQf==;wp2bF$tqlsFTTsC|a6 zo0_&>qi2e<%6~x8$%o`{dCfX)US!q4jT#}kf<+wMtoLz+vW#&Dh(7Zad~?07-7qo8 zSU^krb9ej;>vh5-h)0YWEwLlBW`2V{MaOZrW3i<#En3U(uJ?rr@R5^C2mbu{?se6l z&^^cFj-Zh|!-za+NnDg+4uPL`zm=r!$ATgZ6d*94DYVdOcSzos$pZTo>+x z1Xfxi#hS@fKgwnRC_(z1{G;?QnTq@#ISrYjMmCTk=g;^qO$ueM7EUDETWRd{sk@lZ z8kOBmpwHO;UUTc{{+V@smu)FDx{r?iG7YYGx;6gJ_v+8|ly=&5p*fSh3Y}n&?Ffl? zQ^NL_k7d4>pnqYk`OE1O9c9kcHWlH&U0^!)8*K)7A#${(-mJGiRH#hNxO9opyj8~o z0*yrF$qf+D0+7bfCxW=_z>|lFR;nx+&oph_vY$w~ZcH0n=S(JSYziD{iMC9Trsq>y zU|YyGELEh1@1VHx6(r4N|xY;AcWAGofK0rsNM+3=)2AbK-eda1$Q4eE zw3x><7se^r6z;sy#BKy@>lB!sgFADfVw0i3vW1lHO=a{j@3|9B)1qk>=Q#suPSpOM zMbHGp?ob>!5czBmbR9VG)$hOC;%6l#B|)+9hRJIeOK#u3{c3P%NS(FS120D_n(#~u zh|A5rmYR|h$^Sxr8*VMWxE>MBKUi*0y$#zM5CgvMu-1F_>>04o?p=6~Z`M4Lf3PzG zmNjAQ63zeOdn$BY7cHLL_||7l3_~lAP-EqMkzkX%f*U|QYa&EM^2-y6L_eO{wm43o z+6`dLU!dng#s2+CIK^DfK9S>Waom4fpIZ!=Z*vn+g9>co%f{$IKntMwM=wRnMdWY7ixKoDoh=g*(h9;OX* z|2*}}n3K#`0!$BCjm$yk739q8?v5;s@IFNgLdJ`3ZF~;3E!w->mq)87e*a^*FC!1- zRIsq4!4%^XTG5}J-2t?$zQEaK1sU~D-`(H%fUkqpia5&T{`-YZbA+2gDDrsA!h53y zNV*rnL!D{wuG4Qzagk&RnI|%yX!--fh61jqjAbQa=1n}FuRCDr1TXK?xz81+a0M)p zLVLT6pQ)ZGnS~PD^jSq>h0hi-q0-aA9GPI8!fi4>8(dTLvZ6{CvgO6^=`q-Nb#JE< zo&7YW!FKDyriad?K}vw1dR`H0v`dj4ZYxm7TQIS=*J=7v46aH8a(2pk{c)+j2XY#e zJNm7?y$`G@_Y`?7ll0uIAvx`qzTKcd0@5fYdDLe`4?GczKC_VNEN_dnG{wU7 zs*G2z!OMB$yo=0Xwn2!?oN}wLN979Ibyi-ypm4P|(N)1e#&p#dII!CC zF`3Y-urPL0_*{`YK}UNol(`5o$&k;ycN2F?oTQS}T&Ht{G9GuFrbynHKBk!s=^_%3 z-!MQL+V-;li*Pmc79Yj`qQ1U9?DJ<6WIuTcnvKhBH?~4r;w#sV5DR6^k^SuF&qJ)N zkO-66YWv~LFlR9}*5$coZ13X+O*K}TwGLEDeyEG%TCuwLK!=D=nk1=VGhOGb69-H18J>*R__ zNTh{@odL3x1=cC+N0w6bBn5#o(9_p|m2-0$+F-Ccs|=gZqGkGPu}Y3>tpkYm2tJ( zI@$f7nEi;yqTk>(2mT1Dmv>Iu3{I_mP9}QBuU^MFCrlA2nd|D%AH(`p`Tb8=5B&G& z-G8&itIy2LYOkBR%W{jo<~(!eOa=xsqSG171InJ=aZg8>Tsgbr|l3PoAOD9`| z5is)q+8>uZU4XQs+f>S)7VzRHwz~rC;5G;88fYvl*&0fV&ZLd8ERdl_;t-pD@4UJ) zXw+;RiZjB{4*5SZDfgt7%+neD$MOXsc&Y_p9sT{0+S=Mc1Q>f*_AtVG>pP8GDQ2Ix**0v4>?M12j=S+%BjqKo-4dP%#aqaxxxw4GHx~nzU}OM zkeZeT02*OxeXGh%$r`{)Dyh~?FQ~OTxu;n$D$+7~Y;3S0olrS)hzwB^v?#hi*Xtr> zTJU1D*k0@fT7f00@8$u3xn$IN#bORFR6lXUGYJ$5r8)#?^I!s*c>E{u z>t!dYVN^6q_yHV=>($SWHA9elPq50(Lu*u-_%$N*@g;XrgMqkC!&KRIh?Jj0e`&X0 z4I1Ne7qs97Kv>fw?zzlsHjCjR;QGuPV8x+6$;4ia9B`jN%pvGm%m>4bui?zz)TGDq zarrE#Yd%Y%7pDaTxy|F27y`ww;H}dFG-GX~8)D=D(ED$iU*LJ>E2{;kcF`qSH{y-& z6NLKt^0%odXk!BR=q>V1_pZR2g^;klIX`gmRn3!-8_FEa!FQVyiV@3+I+3%Xjc;+D zC6X2DChFn)AesmJJG1{f99Gz~X@ePL-pE*+P;zM&8N)?=N zr7uV;eJk~cmq&-t*;zhfskIl#c3HaJ@yw8{6X^ZR{t)_g!T~MKW3Mxt2(9D{m^P60 zF`rN)(~BPY#p~KuVvI)2_p$7s7hcs&*omKs$e6g%Xphe)BE519Flj#uL%{LwUU~@3 zDJiO>OCs&^Z1x*?x_BG}u*0sbySsM|m7#j5HF8~A9Rie8#@mNQ1*#Q+}7 zJ(R+ge|&F?KR&s2s|XIIgwK}u5WNajgxeo99@=yZNX@!GRBWd`ad6#bZ_AgVr`+0} zV37%UZ6Yr1x!)7;a*R!Ms!@8Wh2eK8iNxL@AGmyvsjk|pN?ZUTpr<1ttIL*Yu(C6~piL!< z|0;MfXJG%PKfGb~_XiZ z$t*JzLh2i5b}MA=Io-n6;jCtL$s3ybMi-n|&*+{)TE`Q)Jz~C(SybABepR{~8Wlcf5+-24eBOhfB0WPvPs^L2tNa8$X@e zyPUR5`!M7E4LOBfV}o>G6h{ukWLH}g;NsIfAmvm8RRwy&v41d~pqTsa#zDG*2(8W2 z;YG$4z3g%%bjOzms(_nm==^x-L4wF&^=Swib7i z=0;adt9DVX%+O2+64#(AjH?T~QEA2Rsw%%INShr#Ceq}nKS+lFQkP+xQ*mIPe0m<; z3j@#}cb|x0%#J6x)SyW*qA7o>UG2xvh;Q4&3;Hsw&F_w>FZQVh3o&`M=1 zrYlZVUCJv*NkBO3W6@II3R5Ro_4#NVit6c%yHRB5cRE{8cpvr-OgIqRU=jdt4+`Sr z<*n1nT@OkPbQzcx7KIe_jY@yvajAU#lkF_rNLsq`Y=rQ%DH3juwA`i~?kSVpELQ&D zZ!|EmdR_o)0zh7BLmVYN!6lMkVo83$WCTTKGt6ij>Wi|<>+_+6DN$h7$o_W`My*CU z51k2>=6jfH%50_OKgz&+ArN>;x}cuLBXbo|FAhehu>4yK3vuVlm@=%5i=RI&%8PP3 z_;aGaN&%KLc_zWD&&+zO@iI_wffTVV;;02-u5j2}HPoKLj3<8vET(wDUIaYA9zp2{ z7X!q}mtIynjRXkNE8_u?gvJG+1aL*7i2=mBKZ>Bh@xSmo0MTXT$fAyGeX2}BDx;t< zv^oATL!KuDX8pd`?pgOeBe?#cHAJexX3xhD)PIO|c1wX_U)b}7xjwOsS&6zan**J; zO~OuY#dHQu>OIUH?4>OfZ?97Ra=Bsu8PqMij{+xKzTNbfi!vfh+(1wk>>%EnAg@SpFy$0AF8L0S=&57|v^5 zHceC*r1@$CyuWonY+Pwgyy@@DAupTw>Q&;tPaf#LPj%ROoX^kb42OrMeF)48gTvEO zQUs^Z>LSUBzoOS4yty?K-Y)uu758FDC#*Z8Up5un^lb`FAJ5cFnUITtgh5lvpe;rF zcNhv>DYx!qxJqH0aPMXta50uyNXandbA>`Ho{=ntxFJaFXl9d8tGVaiE?Gygz^!{vpsM z-|a}|7`p&zwbsHX*QrQaYqIN31`Y7ve1xFcP7|UFrBV|UZ!Iq`rv*s7Sc)tvrlSCG z^!&LF04T$gcs4W8_h2N51~FMMVr!;O!0QN<*eUNo9gd z_{u{vD_DIKTMRb{apg<#J*%(m#BGjc5Iz}^ zi(C-Tyo<=kKe(1TY;CPgQetHAyE^ZFD9PWcUnEZR2CA_JIY@C#e! z0y<967(JG~qe}e+fEi|&rE|KYt#E$hnQMz5%t9(8dyqiyjYqs4>)O6*a#t0AQ&*W( z^yc-_;#)isQ0a3$Ilmn3Bw*g2aKk?fU5eCC?=YiWpeUV>=Lh#wpQsU#iBlz6RYMr2 z1V%IKXFYB>xc!+|(Vy8`C(png8eq@QyI)3lc?@uZ@UFfdgiE0DAO!JwIxx)Tfv#C2 zpZ2tHBQ_P{V%^o+yYGspPe}tC!;6z{8)E!{5}z*zM=L?ipPBdq@kGJMl5v0V?jGZ2 z=FHEByQ=2~*o!ucyEnz#?t`EMYS+bn(W&4ZRh&EXN^{dLywHkIPsq z{f(iOWA9wI3Tm1Cj{qg=&{V1n2LPb%8(Lw|cX*rg!@O;S%0i-W2Tbf%gZ^rj-d>6n zd1k?@Ub++dNFE+$R`!}@F)sHSMp8yDtvOe3)-M7PzkMm9Sb0p`@Q1C8xBNW_h-TJv z=0m#X!9-Igeq)K1b|1lv_$vZB9-eV;?FX}H23|AAK0vj!5;r$rfE8tYs3kiyZJvOB zWNK=va{vA{$WkVD&BNQh@d8-Ub2;lG<-sf?5FUP!++HE$v=4gE(gJ$dsslZ?czkSr zM1<5!R~D1-y3tm7J89`Rwz}ie0+`A*iyo5rm%o$s9cB&FqL<#Y`5>S>TW=927mYlK zsf_s>#5zWG*8kTOi2$!TztDdzvm!1w~bzPeVA3QpZa>KBYfY4)&LU{#vmSg z2>xljW-cz@m;9>c(5LA-b6ep}zST$_FEHOP!BFkvR{;D~rfFmuP`k2K;DW{}nSps1 zR5d>FyWZas+U+K@E84%T*pD5+#@Q82ObZKgDZv&TJsppnqr&X&k6m&2cD! zjO1_x1N{o8Avq2AvS`Qm|}jBuifbzPFlI*KV5z^ zv0806H`XC52GS?apHC9nkCBr=P>U6AKPVQfRKK**Vb1NYwqK9fg%U5NUZoTX!T+&m}|>xwhtkvk~kJ;8jG* zM5ixR9fpq>N!THv#bj2Xx*0lI_MwM zfTi$D3hd+C^B|u`Fy~ne;8DLsrQR_&Ol5`HC&U-bX75Q_#yZ2_W!+y?e$j10QI5(2 z0>E*t0$TfXD6zv;KwVr9)(z&M&TD|{-i}-`$n=E2So0DpSr-OUb1fsbM*!vpNERnW zFqAGoJqqQ!AK-_$^c|k_Jnln3)=Sd~2fYVltbah?bl^9D(Z|yj(6PDOX30fyxtw>fL|VRB}~S zPw$zEN|UzTlhkOIXxqJ+IPd_-W24Y?NONF;dwb5=tYaBo%`a@nw6niPD{_qH>nXY` zB0cMD_CvQ6ACRG*h}$7_7MDzH@vkV@gq5(X;BYiB)I*Z_Kv)sQ8>nQq4qHOh9VGLBhzR^tMAan}xN1-DcvM z(-~>q&1c8a0+;@l&jbNnJ3AR<<&`b@C>4zW*SI?2==Y)s7~`NSqh@uQ9t;Gx5~#ioLw+46pLQO!MCQ11Evw%!b8QkcXop zw5KCQ_EGCy2L%AYtTx_P2@t$y9;Ljyy+eM=r%#_k@gcI@A?$T1b2u+6!p=K1)7H=Y zynM#%*9QxWi(~i)*Crc?lCGlwZDZ%;1goe702r1Q)VJ8IdNzuG(AxfdXNa`1=-=wT z`M&^cFq=_N4Sm)0XZe@+rXGuTahFagQBp3oDq-cuz9##Ot-bHH4E{RKOtWHD6+>u{ z1nSajT__R5$W*k5ktMRR37^#)V}Bk{>}yrgmF~-ZL|n%je>_mEeg+f))2iozx*0$> z=WtQ~R;$3}L3jS~iS%YP#AY#8`VXH?7y$ zu#b_JFfWU{pi%l~gu}>Zk%jJEO0*g1ePp8+v~nF@4xk$p(ge^yJQuHINmGWo!KFj# zGp*gR_6&gZt7)`=!;i_D@Vjn*k6m|}rn;v^+c+=Rcr4Bh0qTi$C1tjZKmdvF#+a9P zue+{1607zvFf$gRV|4M^r$VSR9R`gRgDF~dk zu8MO7WRojKTd79mNzR{|afEP7S09_m4V>9DNq4ceICz&wr9#IlHWw*Yb8f8dfcjl> zq57|X)=IP6TG7A{sLbUK)2nK^Xe9xFG{KD1^&C}ZN3%QV-c3fQ_U-1Yl9cRe!Og~E zwFRHN+pWIlake>n#1L22zB5RNSN|9-z~t@(ALKkl;LZTgH=VNeNqG>&0Bq}UeW}8UwM}6==!sdT*d(+=e{7*Zb3QY0A^J6A2Z0391E~Te}9Ul%oG~;K_f(dmb?Jf5X_@_GRWwr zDXCEj-S*)}hr#5J4g;XupeDBouoB^_4o|)6Cu}l?Qa0y7+1^hV|ISvtcEauFD`Fpk z6}Lz5+b-=Sdc>}9@p_|`zAWKw*JiQH_P5SdKbdVi!wkdwhs^h3-3NX^pE3fy2?r}( z(Fdz5NqHTgSZ%ojv^V^q{J?3sei-L2{r}PTtfXUs>hW&mP*(@E6q_CU;(2Fhc~hiiJBUV~ z&oZWU0Yy&f6+R)MR-N4Z@7OV0rN5`t?J%L(QM-*RK+63eYo(XCUI1i%_NadxU_`PT>l){GIxhkk94Lxu zTVjnW3fpu-PckPsr8$(iE|OddEU-T~D*O{HbtbE{bN|aN+?680U%pS5#Fr9)=M=HO z{!u&MZ4dib?SOzX6s5aQ$o>y$eE@#aREW00{Jo;uK1L9ViwLzwT4LQN*gT%i3Io(d z=HkU@csS6LMAm+iB&_cih4{ims{s4MHs1YBa12W6@WHrQ$005++Iy(@f<~Sp`*XI< z0$tEu!trPZ*U_iQMvr12V`b0Hm>)@noeZ@ajphUx&);li9w&*Wl~tB`0VlzDPYJnD z696UzTmt@0@M1n-xs1XUS_6!1G5q=tlINcIFcz0c8_URu%&c zXaL=&5tFqpLT3aBSBnVDRw>sM4_(XAG`v15rtkG64e=dpY@9ID7H7>L%ZzcVUkME| zietw(0W4~_TjNblTbwW#w>!~Q+RYdaL@w@wnnO=v#;HB+KD|1fNBuSb;(8J6(0>y! zUkx_qkP4Z!BSQ&5V`FWzBMmKLj0^;Y0*xmxq-1jz?*quTVq@XUVsC;3m(L^_(Oxdk zw??4I$SiXiZt!4%5nXcFg8FX*EkFREB`4f8?lay2DnOYqWnZNuM}Fd5O;4=Xpu^TH zLr`}vX;cgVxy`vv*nU+hSziFx9+izthW_tpecbO0`2V2MGVI3n>n2gTyF{ak=~u%* z@7m-bv}pA24Og@Fd=Fqg4iPE=m3%5Z4Llo(geEKsie< zl6|a{yWTcr@6Tfq=d7`HP4_d1_RM?Iz*?Pk`CCWM&hixyAkbB;Z^|Uew_b-VJ#rgh zo2EGh1IE8*Pycdp+XwI>_w6{>=WUt&B>qM8j($S47?JdqjYQQ^1{6bxO~vVjP+MKD zjfEyOrPVSI42bqL=Mo+Dx)m5 z#04nzfSUmSxB~GR=%kP~*Vr`SHS&PFj2K%7+xsEDoR{&?k>gwecpu;va@#|$mYdan zyDe8^EE%NjTzZm1#YR(ks#4>u#`z2VPnuT_i9`WGWt!-!v5P?+|5rQ|8l?>SUK^k48Ml78adCQy5~vGKY%SiNW`8`gjt< z!$fgrXnJ$L$96IH+7Fv(E8V(oxH{Vxd7OvszrO!!B5LY!KG50{1`kU~VHAGgGhtrH z967s(eI9dFPegr(OS4Y1B9cG`sY4tE-pQKJ;^6uat+d`Jzo_Fb|GT@`%OQ?>=u)n) zQ&{;B`1P(eDVU$k+=E!CvdiD4L%W|{j(PN-R_$XvTKIo%b6^*)|9+$#=dIP$x*5%S z#f;z85qLILa=hs;>E;b^oZtVQTKq1D_}!P|n4H_^i@bY>jlKVm)~`2j@&FPNu5)$! znCcK(Z1F??Mr0EuHC1G9->q^)~zN|TzV0sb~RWWV?gy8<{q5Q+JTpBV^(4*|wn6~SV4 zqo7v5V#Dgi4qV!E(*|hwky$;$&|o6d4wXHR$}X|YW>+toOppOwE0`ycY7iI4wT%+V z-U;*)i~eAwsQSjJP9b5&EM+kOWN3!8v}aHz;?eX@0MLmv5XrOYi?5x{qxkjloHZO? z+vk5~m*(}n=Rns8&`9vz0Xv$np`>~3)77y<%FGo&>~bF7SXh#pgA7(T1F_|1_Y|`m zY}b`nKREo`_5VkDd$IjbphOa-YjXMF$K+TBZK!>So@4dPvP~CNsJTGQzRdVl3b3o! znw8dh;#9Lxjs}bCiluNy=U-8B2@oOLa!4Qbw6(##lxY zGH7f=c9o^&pki{+kV4I3#?lzOLSe*UOk_=rVT>h%!C3B>bMNnQ|Gtm=xWD`Vclmt3 z-}h(vzTdCc^CP;Fl7Y(s>d!i}sf1r!!q_Q^^TZ{}VUCB#@$m;&Qk+YX`L{zBj{~K@ zdtud;@|-(tVR?(yRsRncTZD-B{Dq>nBINvuncufsTrXY)Y^s*X3ebqUT4ts(-QFdO z>RkB8Q6b%rHlOl<7gA|^Atd#CLY()d)CcPY3i>v`o39-fdw_Q~7up_EgCJBkxUL`0s$xR=5oVM=+Y zXG3dfQ8rK61^EmKvet){2?a8EIBd+_brs$m91eFM>rRPu`-mPZbdCqZS)rIQJDlf| z>JK}){X8hk$2fa9q#PFjrqRMygdfc_v<%+NN=KnM<3U^q@kUJ3i!6-a)N(v87 zID6v2PUS8^{RHOpK(Emkzy2~VN!xie#^QVPiY;jfTP$^W3^&moa&qY8&ql({dq10? zmZ>moF8Ni>#7X@xiXjm-Y@nhF!#V{m{=kPwVQwlNL>D{(uY&pvbYnktW*(QCbjXD# z_Xe#9odf&B4aCXmCFHY5x+p<*GKojs0}SC7r>Zx@?eNt*9cResWW@&WIA zm)Dm)_%LC{^RR8s-DJ7%NCpF$J*y+dJJ|Y6xExJXsOVf@eiWyob7STXJ1kgfKG=Ffue0}iZsv?ha8b?nmlpfR&vC&Q z7%f)NZ*pGjdnYSFx9!f0SP|K)UbXQnYDpdP_c}%157V8SQr7RoX)8X7A=2$*Y|$Pi z{&nuKKC!gQ@~9AdDJ>iElOnN%@d=uoC=eYI4M=4Vvo0X5D&ANr2bi$g=8?BzQ1hzN z=Dy_9M-p9|%F% z@{qmP$8aKF&dHy(1L$T$?i|9^(gGk7;RijT-@dX-XOQmejs1Mz1Dy8F{H})EN&X@a8xoEd#uGBrn9 zRRkWCQ7luyY>Y{dfH8?mx8oq z>10UHH%vWOe(gb}6q)QWx7k*&Wr*i*|1@Li1ZNkuMHZ{wq$!;uK}>G5QL>?lNlJ=f zcwKs1lkh=DlL&&z=g3s8h0FX6sj43AVXny~7=CVTC$S{sYwsruwDXukWUhk(Iq^Ng zw@>@@wg>xPI#j%E)sH9VVV@_hW*Ip*mSunAaNh#&S`r+wSkWjWIGi0?&Z(d_n-m(( z(_yj9qsN4@2EZUx@7Hf!3*o+6c+xfc*LkDAj0$@}&T3j=b!QOZdBa%h%MPV1n7Io? z&v*6=GM?t?IU@BWBG=}KQld6W5I0?)k;>1FBn3{~B@J>SB$-mBfzbB>vazTz$M(}S zzu)|z>YrwAFI4NTD*YOYfMiFe_4FSGCYC8!PLe$!fE*dI{?+}67Uhu-b6dYQlWFf2 zyy*T&H!u&SJWh{uT!G)rdG|>I*fJPQrGI^3OA7K>Z`v)RVVQUl+L|P~`q3)OHA;q0 zUv_>MFl1vH*P8Vu3Y72VP>6HQGVJE&Nvg|h%nZ1rJ;E`pnqHz4S0<}h)O8~*qp$qg z!|D60Obng)t-EU0;j_@2Ufvg)X?2qSst%Pf=S{atb+->uwC`IbbR2x(d%*9_XNj+A zqqhaQ;v^%bU0ft5Un%I=;RBgpCRWZ3t#(%(3gh|SBR7GhCY}5I!WE9GNw2FtxOwjZ zYilMryUSzDn4)BHXjUv=vu1nx_%R5|_%EnZB|tT){suxR>|Ck6|1~^}Pm`cqSFQeq z%|l6D$kQ&&5(2~)bZgNqFA=J^WmnKxyRDW+pb9$6OI$%HD`7KnreS_G8b@g}PL*7c zzlbWT8`8|HEym2u**=BcjVd}8sC_smo&R;(hi{|${S&MN7eE`Fjei)FI04l&+}b*4 zzs8P*XRez2x@5y9N`!xIt!p(NXWP}#02Tr^Ju~f~$-+C?-OMd9b&nK>Jdg4#7884= zL|Km=6E2=K(|<6er=}J(wFJ^SF?THQgWt+ZfjYb^VxjUrP&vWNLNCWWeCG$fs`h4h zdbSpN^vqv_`H7$2>IrtRYr&wFZWr z1+~dG(9B4@rI{yb%7+0IZGn9yU6&>ja zd>3fY6aF<2k~Co;La)h+emw5t-4Hl4Z>SzWpi&rz>c?QsSU1@NP#;<;CzqFlI1$@w zEy-7Hylr3It3X~=e>ZSq?`{o)T9y(pBFD9-;ZR17jD82V)#% zO((PUg`q2`P)e-o&Yv&m^!|+N>J;5f zoLGQm3~Bwcsitd|ptHCULQB=DD(exH_*ALqtjL^V(^l5RD5TB?e-=%&{UZLDbKzc! zs$tWLKlN1S_DOWJFxuu=^$yvm!jk<0vC%aC*D4<7%-O&!ZZRY4;Cg0!^u1$hN`HnQ z{EpG@gL*Gb%DyK(%_qiJIG&Z~&;6kx?$8%mEEB)uk@5tFM6;qU*r#R7X3xl=t63vG zrbStoyY^?{j3YritK%UpYh&NPbu`MX)T;ibLnCGlJsHxh8gOA#1jz40HeYW$gpdr& zf>l220ZT5@yQLj|BVTN?UAtqn79fvf>R2uD=EJY@5bZnShT6Ihk;Y9&x7!T~wyCoG zu4;rQ*MS1mNBl|U#+@3iq`Y541HCcRZr6UiP)s$opu}G_JL{uEFT%O{@XpL%?Q&8K z?YCY_++TM5nEx)xtgN1Z)4kO8cn5M~rY_0tp=6CJghfi`3p=-IM79A7&T7_aUDB!F ze!Ws6p_7oYF}Jv%E)T_Y&)frCh+Fg;f&c%P@`O(gB+6)XQ49J9*m%GF3w7`oKea%z za|R-3c_cc0p_AyFh&(%xDB<*zia@zi74Gh+ng=%)m`v-wSRXKO%g5L@l>E_taLZ2D zg6l^I_UfbhUuR!@>J+-70H09znWbpnSa=-3iqN;eevLZUOS(}u@Qz<+Ezws1PiSDU zJD@r>4osIMEa}TM^s_GY_ZBIllldC{(4frQm{34EedC@}B682E8ShvL45fX>x`Gz< zlu4FC|M0z*CNO$<$@0_9YXB&!&&Btg*mxS_$XBuGg9On)IA;K#N1W>K`OryLVy?U{ zfN*-M==K)XsxdQv9yk{+QQbi(QT9Pkj>~jqKJ`yAJ)vV};WFa8`Ty8kXa+Oy&9-j- zDtniOB3!6$v8th7Q64mw8<8?Y9vhs;@=no4M+htJaG3MttorKX=u%Sz%+&tFxWDQ4 zVbPFfl?26zm6P43 zSbiCT(oD(ysHaS}-V zds%s?;$!@qZ@-N$-8d*6=fIw&w+lwgSU|`fJs`fj!OXa4?rH|nKNJ@H)W*#w!|Rdx z_|P-K$Z6A}p2;GFJcD{n-`rxzenLKj-J=p3X>f5#^Qebb6q2%}G6rpGiL6#lOm@EZ zhR?O{oC_$fJrGH;#mQi;n&C}n*=JCfE^QkAqw9sY65wR=wRO4Qa40UUpb9x}$}cdo z;m8=0mea2mA9`@Y8$SLP#rD~372hV(aRTZ_Pc8Fjz80;?&HC^WYr(&RkT3RRCY42A zsWRa}v7(J6lVa_G^_}TxITdopXx9~57~pkVY5Q~lF34X3g`RfGRRkPwsd?E|Qp9x^ zQu*X68gZxQuu|rpzXLWzSb7bg+yS8)Ay3&{p>d88Wqpn#+&ZEzFCJZQd5&*4o$O{` zQFz{mYDrNm;kr`7-=pr&NOkSz+{D8zG>d2LR8hIsmihF1 zrxE^joQzC!a+>F8>6fejl|%XIP~hN$N6yOmmL1*_p7P(27(jJGTkpSeE~PvEC9wSW znX~_GuJHe}8{fhJR-z+EH9b3CWMA=zdrq$A^UU2#%!kH{W(iP0gXDm zkw3cXrOH3Gp-tKyw#ndoq}nVYSE}QSMsok*w;?pUoC&Sxi=ApcVNQPd(1&?jfunzJ z+5DJ4FG3yzs?SXO$Tk3DR>do4YE1T!JHqVsy$#qrd*sX99`>eZZl-!O%G6pzQUv%( zV)>uEkOGucd<&0|hcoIXGiv4RQ{3`$OMmR;EH`(Cx0#*A-%L`N2H8di{kb@Cx<~*E zLuqg?VrN^a6Wj2fT;KI~Z@hrqCT4omR^!xkq%h&;k@#RbL& zN3Xu?d#{`bwlMdsasths@s0JDK{VG;P*v{9nk@oSrC;(&woBqFHi0wCd}_vVOeJFS zQ}0sXb>_Js$25;`LSm#-wnAJ4fQ5VAGd;o(gpW;ExEGhV><3!=F>teMJ=@)(SDd08 z%8zj4Wt7ib^uL+9odr_$y3Ss{B{z7DIGeA7F4eFxY0IAybFbSOs!F`^nX(IK(VqQM z^!szF2r$H*b=00D+Ri6Gf2@7D*G+TgVM$|>N?ANljgti_DTod3Mg73*B*#3ySwQWjrHNtQ?XTuFDTQ#&{ z9@@KSGeq`+;YXA*Aq(Z=lhcFwv!C5#pBEb$&aEGkQcmb>7w_yD0O{z!$Fc2?eMZyw z;&czdho!?Zhh=-^h_~lUCtn2IsHQaTQ>CtGK^%3ITIfaBhSx_1whgqc_jZbGb2dho zJn)8?Kf1oHm!zv_hX3&+x;$7PU{17vD*SN!`_asW-u$7pMnQYrz7HpMp^7dAleN*D#CoZHrGFt)JYfLM?qgx!o3_0La4 zxb^f^U&;tt@Tynn$ez-jygNWSH!yx|vE^AqWaxCHb$ZjH9d+4R%3QY*$XGIpxF7CS zUrC;d7rrRgN`JS1+5DJeyIKD$25^gy7ZWyTQ9s@HQ_~a}r}%|1&sNSRZGPcB_cLnT zD(eZ{o#Fb8*BzZ6L`%N~N}H8m%#~M!VeXm**M4-BA_7kNTCG_y`|)HtduDENGLF3% z2p(Hk{pg)k#3p5m4d3+$COafBOVTzZ4~zFUL4s|G{cQF>FU1mn+I_80iP;m^Z}DC3;v2?31mjZzXoAJf)KgxJ(0`1Iygu*ntm5y>KA;z+tVMwluG7) z3$yyLuoeoS3g6NYOYCQSC}iX*(8A~>xqpVE24)6Kc(b3tiC0!=UC=DR(nIZ=aRKQW z)TJq}>nxuoi4p|b$L}$N9>fUn!J91Hh{GJ{qEStYhAf+mK~Z^Nsli|9v0qlWeN-5m zvS(?^^Lp3fpq{Z!MkWB)Wvk4u6li~N!kLW1-ea#k{{AB{98~t!&Y0Rs(4O-k^~&1g z_|W-cYYE3whVvV0f8?Wyy@=O;Gar3L)5y1M$ygU!RnOTTSG*&t?R@XKA( z2v~5ufsX#f#?u(dZ)gcORsgdhv_STj>A4HWEGi#d)Dt&@iHf2Q!fF!>c^{}fD2txTENw9#&a}SY*HUoLr3`l z)|PAKMX5_S!ozSN%*+!#PvF2Kd;evU`Ts%v`XB0}{x?tSdcGD_K4mr$bpG5-tiMKnNB>aQ7s*J0!t_2NEDy@Zc^30~6dKxHAbPNN@=5I{4r)xDPtG z4g-&z^UJyCpZnIk>)!jC#ms_TReM)=RqyKW>kijYQ^0>r`4|li4PQx7_8l79!&x*m zbkavy_x~wRyJo!q!f{g6b45cV==$@Ep2SW-g@#6trX>4X+skNg!Pj8IBIoXo42yq; z{!z)R7kehJ@qc!UPjq<%4@cCPWR%|j%xG5q=BS}MDXUG9njWF!zpNapf9HISh-bDEGh^6_ZH$S!!@`e0`+;ry23@)}GA>`JfOX8N6 zC6tW+#`p{);-8xvV9-9AZQ!w}4F>u7CdM=JLt2Df*K>u__=_Wv5o0-ADzIkoWM`>G zhlTlNKPu6VGWt%gTiQY|J1x5P5dL{ezp2Iz8(C7y4!mpdz+;g-CwPfVX1L}vhD9!J?aF{JIuVP58EfiB0D=eC9r?+YX zOpY$NZju#mXF0>P?k*$R0m%9_CyLN!jIa}DaAGF!+y_x=G6<2|6X5wRmv3cbYVY#skK+BU(vVW^uh% zmJnAJ$|Q&EQ$)Vt?ev2r$5x8I`wiX;mZ9pzF`LlXEC$A6$SH`PSEs2@t26hA77T)J zKD-rDbANSp*9VSJ0ery67-+<)XP-$tA#H2X37X60K&QMTvU!>C{I zX~kdA4)_s;k6vn#ZrEAeJA}}y2FG{mr#-b~-tnLAld{YE(L3nB5UI2cILloqhKcu9 zpIcsj!$n3=__3iQ`L7Ckj?!W`Bov}t^_)6f?XEscv&dP-08blEsH3{L=Vkh?iH75x zZ|7SV2P+ncv!*8%mwwyD6jSf`zo=o&Mw(#vzm2>sBX*}ool7K5jW-=81xwG-*pmC+ z=sjHs%(?ZwY=G|nSh8`M;(b*2ligS$^mqj1wvk}udFb9cr#Cv9(&&gHqU%|Ft=UR@ zbCisGaR%3{SeFYvhHTAUF`pAec)MFEDL6vja2xwATqyv@^2tarkQ#0ZBCQUOkWuZx zF}6$vaTGTAv_4S1W6rEA(vRV;oz2(ussY3SSPQ zA+O)WWpHyn%TSZH7|xT7Y48%s;H>g{%kycEKQ3By*eAPovSdM&f~g*~@+kG$`C z`#StoaCK}k)}{C}Aq6|z)1{Fg(HMG(DMOWg&KTEgOQ~GF8qUD`kfMg6 zsKbZPP!PwB8HLES+FQv=>Hf{$6}y^2%B^D8tS#}|3%foTw4yB5W$)03gL0F4!HT*! zrwNZV8Wh7R>LXHV|5DSSlq>SzIqVez4-_&ZdrC*Enz*6mp^tW>WKfqZYLX^FODAJ~ z<0vZeSt`=cnL#CzLMSMgTe>&PIWV;;A6F}zcIA;$4r`?)O7_9x9j8n~w-cOr_i}41 zyl1~7H1?Zqj{u^{?2-CGY*RVStHW0a9KX<`Kx}7tVl0lI7pH9qo%xg`&S{esjRa4^ z3(2fqN(_-|IEmjRcSx^a>xL6ld$Udj!cUOii`q<^2SDg)q2+?fGR#^ZhTt)KOMC#c zaAi?)Y}JjQD}o$Ru?)vC$kgVmN6D0JGZ|JosO*+*?ypV?c#^Ej z(w-jS!?jyCXDbURvpXS;W>P}n#Xc)?F)Z(WgDUpDKzFT(?L(WJH8o1sw z(;f@wtpexTo-=#9MXn6v*uwV55Y+d+V?rKc-m`6SMB9x}hLP_9d}kNR1P?R8D7 z;Il*{ku<4nILoTZOd#EEYxZ=D_--i`Ic&Z*&;M zEa05h-*E!9j8=X=gplCz(3+i`BExP>j6+I7kmK*d9h>Unq5yToy9ac#&^Y$zEp~>a z|9%-9;Splmx19O_*%b&5@_%e;)kw{Uql%VR3P=v=I)YX{EM`>&%u{~b=nQ2Dlg|W%h`BNL4 zw_X>hfS!Fc5&gDCWtwq1+jC&gXcb%U!dImVl5*;H16cTBX$*fkEg7QjfPpgHroz zb>CAft(*~9=}B`Y`H=jLoL0&q9fs9;k*m3Vl24lS^I4!R;V*DKal2lk8s#0!*C zdr{HRC(n?=EgJ;`Yy@BRfyudZ(?>0s<+RKfVM)uSh6b}s`F6t|4}GUrJ!gKm5+8N? zd|H2~XZzt0;ZGTWJk4Vl%*2mj?Em><-x!6x=xG@=G->fqfuim-9NPHN3Rb(PgQx%D z0XYtWKLDUyTRG`P*IC*4gnA^nWw)xnaYb)oixBB+=;`D?88P|!VQySG52)CpTX%li z`t6zr0vD}Vm%AUQm@L%NL?*4)iPaOE+HC2T=?h8jZcMRYrpo}u1FRu)y;p2NsQgpA zAmtEy8ol;QoDZ84sK;O_GZxPi+(GYcM{O)@;^n0bIl43J`7ZKL8(T=#%(^pv%jg?U zElX81GlXkq|Ht+{(cNBmIs-RMn@W#zkjcwVAIcZI8M4!;gRky=e$hd}?j1A2NrRb% z(H6HYY$7{^x>76yH{uA2iQwl;Qsp34x=ChUmI~q9DgUnfOC|4x%P`NDTxtw`-Z(r+ ze>@i@^>AkRo!jjj&EUy?Jvxk)SFm8yP*=pAG(>OKIgJu$!gXg}HOR*YUFzmqno$w| zOU`({NI!sUxCm-yPwfSl5e9qAkJgI=YK0Q3nU;a?`5`vqyK$Z~LoPjdFBv3u&@vXK zU$TAWJ#|D>b`E_jFW`NP)uxay()bXf?a!bw= z+aBdp*N8}^m2r#2JF@57P!87zH*oyBK3qkoeLQQRS13^)_#UPO;I1I-;baqW-yuil zG4mk5ARAJAQnAWSMKuE}9G|rVM;glaBQ9M*v+VQsX|iK8(1P~f!=zS*QC~q}^mf4} zAOaccRef*%OE6t*mRfA_n` z@jWfBeFc&t@`zhA2`UiVkv!;}oBjLc9(pl1;fjN;dhsS%CR1Z+%-NkyZy}+{1Yr{( zHz#~M_k(yoo_qtKUCL^P)Kp;AR@&XV*Mr5OA*~ck+@j_r$TQ-TU#JaYsBE3*iBn{_ zf+~Vapj^v5wDayJ{?2ZvNwWK6Ti%eMooYse`yH;i-pXxHFz0=?pF7?-(#~8mYPRYQ zPE8xNSKdi|(0lCVIn2D6H67gbyV}kmseiPcyRy}!s-HNs(j&(_#|BwCVYtBKtVk<_eX zFcV!B6!b_7%e^Dh_izW}HJV!0`tG z=>vyCtn*`@r+uiZJU)s3M^nVqg3|`xboV_E#=MX|5l6({m+*9bhex^LYzb!v`t@)M z1s`D#%HC5L)8Wzy>4A~;M_M48S%{pefCr=BF|bFLq#U4(-t$F`yyAg;)U71>$>pO4 zqg%`0x+!x1UQd@MhXx24UrT1aR*FlDFB<|j>y2=|CVwA? zSbs$)1;^WMnN*@>`rQStJcjX8$c*F65nhJ{laz;h?3GbW9HqLd>k?O%#Jp| zViC8vR##M+E_>lOI6enuE@5YZ$|NC^uR_P)_nsQf9=t~u;(Z;D?M&Ht#QNd1`<*!p zmTz5*SF-y_BqTPnSmjk}#tJDPyqj|Q_L-1MYkA?txbAzrDHOYI>SQq7b?_Nb0DOrO z@3lwJb58v8wvH>>*q|d{J+@>gx-YM}H>c@X5TG3iQk(vyBf8e4fJ6+uMkHbC0@*(R zh=G-aK#r>HI_1&clMnxX;m6s^|2H=Cd8goi05zXw|1Y67|Lf4u^1ji?huV;k2C{Ik zi94hw*+mZ3;=VDBEBDiX{5XIKZ)_ms>~o0z3$|Lm?;e-MW{v+KQM2+)|9`+z|LYF^ ze*@SKJ-F*W8cFRR31N;6&yjJ{F&POjthfBdx59co5jV9g?)p)Z6xFRD>X&8&lg&TS>GaO$y zN;ZW<)qgsv4@*B|(7)r0M9+I=n#X17-VuwKx)mtQ# zGZ$eiA#RJK!&NA^1_lc4ZlUm5N)Gi7ADbDv>1H3QSh> z3!9*@<;7+>S`PdCQdpw9(=7k62Yw#uakStpVcsg~`PGVcZ{wFcwL}oth6Ob)UB?&F zxp3^?4XP214aYzNzif5QtEAscJo2S2A^x0bLVH3~9{QZR$08bb^sHP{B_*N!-*lcN zg`R7?CHaYYMg9DFZpngC(Tv@UoseBkUTMlT_a$#OLdu6n_|%@kxhrVObeI!ukJ{i!oSEmc}y9vlO0uIja@z7FJsmngel=z({hkLxmcZJh~7n8%ZK|O!S z7fBg2u(6vi3E*|i?|JZ~VnwD$OHF=9rr7*t(Rjd2=7-)d)@EBY+Pz~H{4Xdg;-?do zQ!|b$PrjF@AwNa10D5wx_6~}RLMvf)>-ca<&q)KrQwGzWm!vm*)EFxqgDRUd#h#M+UX9KYkaA1O2DM{PI7KtnC$vYijk!t(HWTgbc@zJ zw^Ae}8rO&gGUhdHSXzYc17HB#c_q20#eAx$;IateVP)}mc#XBw&!;Dv|9x1d>Vgc7 zD(^P-_-38iv;#jzXuJ*;3{7_+@4oE%EJkVbVz%O|oH&X+Ni4gI_PfS=#h!RLfFF8= zBV(%cmI7LSJL*R8z(-GNTY0mBbE%@KuZ6dI9w3F^p?K42%6e^Y=CNb>cAw!i`{qdAb0;R4$g4*zi}BIZzOP@sP~BD$?as~VoKU*MmB z3EOLC{{4AKj395Iy6*wRC4(XJ2keA`U*vH@3H3={N@{E2_mbM*YkCTom$JD0(;!pY&$PxiTh8bwl42%rb>fP(LavcLk#@P zS*0a^GLvaPf$x``uV9$UZXQMnJq>c1Ql%ZLo5;#!j$g;*j^DfBRnCt#>sSvqr;tC^ z-qENXC3L5rNgL=Z_>Sk1=KU=0iGtG+WL>xI*&WA;WtUkmAPJU0XLZYpOOyaVxtZz3 zrTQICxR5stze-emIZnoBcC5uQt4Dx^MoffrPrlXz~y>QE!TEHk~lqMUuPd-MIC)u7sY^Xswutgu!x_a2Q7ABJb?Kpct8lNfti3sC!XBa>>wm~P%*9JrugHvieJEbWF839dHVO!L#w-((0Is^Jgr-X7&sq$ zIzCP)80Urhk^JjNYjBn3y~Z-U=AIKpI|g>Py8!1x@j`@P_)-ZVWRb=3tJtd4JK@Qv z{8yS!WiqJ*w5E4Fq##?OY1&#U*Xu~~tkWm#Ct2#seiafToTMl5q2$6l02eO68=Dm= z6~7SdPGwzDfWX>2BU7t1{J#vSJ{XkM_99s7NqNOyD)6Udt=_`TPC;{#%3< zzxzTqv_H|gnEgvbCLl_ga(IhEHQ4Ucqi8E_0}^pEiQ(TA>>{5OKY7nGGiE|~yQTY@ zChp(xL+cfqguFhgq6_)Wz2qsLycFKi@VLvTQ>sYJ*0*|LFlhC#uqP;M?!F}G)s;Ty z0{2CUZc`IB{~o#@-+sg7=pQi+v5+a$qW#P9(4e|+L=t!|Oet+*W=h`|IyVL~$hmU;T-s{w zrnEGcUW26pS=0LX;gfPT$nMqJUAR$q1&l9btVXg zJhkPo1Kd;DcgpAXFS}w*%sq?ropv zoG;ctUE4OL8KO^^81W`_+j=_lv<9tRHO^$d4=GeIFnf+BWEVQc2hx&a+t*0BL-!fL zcZ(tL6b;jIg*;aIG#IAwR=BCFf6zCPbTi>>N7;^xfW_J_en2KRI!E=yi@)qaV{-sT z+SLR_f1mClmJg>#!7$UV21#DQ^As|TxdJ4RN!gS19rg?-T{%}X`S>#P^(9)eA%`Er z!o%_)cj8?~yWkuTu^QN@R2cGV0dA|;P!%NBNaOSAfmz7wseoYfO??qP&3h>-m~9wS zh0eHe$A_e$e$2+_B^W*{*n6B9kA*4)n!k$eQA00N-*tqCAAjFyu!J~Z*lAd~PVno< zQIS^iw_eA)e7i!TJ-ohpT@q}zF*)&mJ)zo^#)q3?VKkyaS4Y*IbEaHV=e=r{{?0nF zbV!`!uU-S5*sS`i#LWW}c)UFjrV?XXR+K|PHDgm)RJv*IF34tU|EWq-NB^~z5O>vY-s8%}gB(99 z8v@4mNPdt# zC^;zxO_v%5=8OC66a4P?FC2xKv?qr$ZZkOgWQDwrJ_vh!C>Fq)L-?T-~Tl{XFkMQRR*~g8S*C|2Zu8sA5y$g zN%S8R1aM`{yclBtah)>S71Y@tBE4SwL7Rgp#HF&5yViuB2!~1OZP-sA?I$#-03HpO zQSOEF$ZRp&!Ycpvk*?I(&6vsZy|23?Sh&~(N&L>b0z^`cJi^Z!si6*4CRL)PJ{TE8 zSXc=Iot-~-`q|5o!B40kYJXAJm42F#Kt94A&*kUmCP4oD>}0KDs6tau*JVXSvqJVV zn7C?PGM=&@t=#$0rL3oZT@1#>RRt?IX>;EGSZYfai{)a%4j-sgj<3K?ZzP<7HJWhx zjOSIFkJF!9`o6OCX5D;T3lRnP7L`V}kD5IEu;Kd6Bq%KO_spW5)6a{lN%v+^vVDx_ zTr1>C4?`bd#_Y~Y+K}jLaT)EKCn*=X&M6p{3HcKpgHo>jBl@kxm~Q6#ZS(>b$G}(ayG1dT!^q_qr)L z4d*D;1Chfuc2vb#Rk&jJ%63P~cE;A0+kn-FWU{)ZM`$kZq%|mu+x4VSIVx9uS*WsO zZ405(u?gj_(p2`1k_0zn9)7kHkP_$YI_1%5*u;378^66U&^4U-**jF{Xydptvc`c} ziy1?Heqg!oGvgc7BRsxOV(TAF=6Ce0^+-Z)O&%g&S?_W;{)u29v^3+}kY&-bm&uA8 z$WU0W{?5`mm&=xxcyr(SSO$f2$=B7rsItt6pgJaT`@G^ z{EVs>D|OtRcKn$3b=aKAiRy~fMMi~sQ@#4V5JF@ z^7Oj1gxk|H?r=}z3LGp``6#&Vu-agAd|K)ax~r#{V?guQEU07`TLlhtEM;F8OCR%{ z1#8u`(XFI8THY;=n=m<#>MgN8n>a51r*f7NHYYN@;if)Bwyw~3!Ciyq-IZ+P*P!ut z`i)^Uu9md!)<<}c2G<9IL;@l`kCYPj_ic8xsD5wXa9cQYXm}fgit#NouZ1|Q zZpD*hsLZsDZqcj(>Ft1rg)#H3k6W1J4_dQ3<<9T^+oC#=RL5i|>6HrArl$6$etBq* ziw?h*H`lu?)gJhW_=|9Kl*|>M_%v^Nn^8xKg%G2u88@Zol&Dbp@<&`b3pAk}J1iAH zE~bW?03Jh!R2gRmi2e7j)7GtEbAmV-C4>c&ZM%erC7H`u%$muhZ}XH5Lbp3OarVvj z;=mcE3`5uHm1h~P|HOG>ybufPBhd+~ zu0;i!`%!b+?vwB`Ibf7@Xdx8q+~#eSaMfwWi(-yPEY{jL-B;R0JEkWuIZ0*$7`Hct zNcLRbS69!@FSfZ}j9a$l|7=+6nUKEkEDB@NxvXiD1_;Dhz_3j9qbo>qC?8v?Pm_A? z^eOxJg;Uck?2|s=#V^8=Pl%>z-TJ~H#0xF!Ov6WCvJ$T74mVF?dCX))i8>KKeX44w zWDkNqt5|FgW=jM^GVk75?X9OWq_+oRv>UZoxNK4HirEi;KT6cEifLrGPROo<>y(h7 zREcM2r}pmg34N-eFSnX_TXb(VJE20JI@(~oVNl8R)JdzXAuagXD;0wW7~a9}(mm6l z7$rMqYP9`uFAZkiz_qaF0}ul^Ig8x^5#-AZ4<6=K3gAwkc>bDkeAyg}>e$O{Sj^>^ zn}1^>OI@Vd=b@%f=FCkXWiuw;v^G7r?ITSqSn(+okANPlE zujI!fWt7tSGuG=A#jrv~IZYS|Sq%|n4&vD3RfW6K;hNur*VhGZ!sp*?<{8)p<{wY| zU~r3!VrIRf$iB6B{!?72YMMYpP1Bhq?>1L4CX$uWfq8tq=ZSN@CdDMoZunP@Pd`T< z+XWLNM||o!o0rWyX_e~9i4_G|AV<4NToEq!l7O%b{rRGJT!i*NA;|XRs1b7T0=SH-d0$nnM10@Bv8!Xy$9pOq&^WfzvDSBZ~ zx<^db2-CdS9fk5fY%N_5-tSJ8^QiV>LH7#4d1ltSwj8fb4>4X$G&7^abHcpn{0wA- z{lxisNGQUJ6EaZ5BiqeS&lfdpqT2du{s|={a2&zH$`|i|L!2fmN-zh{===R@&3#`w zDNQT%2@$Cxq}PvGm1g`J?FS6$6FozN4sx=iUg+ou3#02honUULE1PDfg1A-{K78p} z%#!;uIeZ+;q$4z};skKp_uUPbcZHZ-NyY7nwq8L^;0r%eP`_8?_K^d){~5$k5--sb z(P3Aiv3=ty;Yg;}jb*yJ#-pkD!4f_1Ho?nVTbhy4jDlxJk5<)9)%QM7GuUksX#W$a z^HY0Q>+2Iw6C}bL-{4*`!{f{NJU-j{x`gBq9pT6Z1&@mUa3?Drf`h`v2sV>H?MP>@ z7x0}MAx>WHUZ+<20`*ALOkJ4Sa5E1~*?V&*xRcj!SEvUZ_iI5$vt%$kp*=s7`vg#O z(&Y$b8?pd$Uwj&SRjaAa$H$O9Jc?3G=Z#z+G36VhIml|X%lN~e#O)5_Kl_cIYL^5YFgtU}M6_ zn!{SSd>E?6T}%!W2KB2V;988LHSN4f{p~S;&c}THo#a)Ycu(G~iPWsH)Q}j@K)QE$ zxYPP>XeMQU3|jPsSV#!IOze+;Y)6t-te+5T-DO~8%nuGfBKg4$%{%5xGaN`4C3R0V z&bn7|?^4Nz9t)nN%@oB%{Z1>k+eqvlxG(w*6b1XCz*f z190nmnLJ1#2cMsw0T%ou+?H5s)qWDk2cEoVwfdrba9Rw$0a!l%vL#7tx=MNT092nk zJ>ArsdRyXqX^oIdG#lpXNj&9H9$SL%3u=WwHyX$hyh4au%Ng3eUZ7n}J$dPaf23ku z838D~Fzq)|wq%#@6x@9~o1uWnr#Z>12AW2iU8lbv%!r$~jLs~z3+01ZN5bP+26RQ3 zaKJKUe4g!)Xu=V97;aizvXbFlA;-)iK~aiCpW$mEyCFATGF!y05qq$meoOe+;nAP& zy&r%pm#dHGQ#D6n=Wm3#p)6gG(mgUHc7^IY4pPYyGgM_Oq$LTEwHU;w_tteM?vZ)DscY#+)mJy%?^6<# z<_~KRNnGbFCa&WLGg255QkJKPOt*NagkpwRYv&j|`}qs^r4P z8r19A9RSmhe(j?Yp9k?iXJeBDbD0^N_Z`$l$8xC0*iT@`BDV@sp^7nB&J(gFmHs2Tn+3^>`FpFd8*#1w-_N1^Pe<*)spkLrVV9-_+|uNf6f!?Q)~06P z!=t0kJP+aevcE$xJyQ#B>2|2qGB$>8k5?li<<=<=KaXtg?nbtPux)JA%xXacFn%L1 z0ARFqA)42Ti=S%#`$*@_kQqL?4T3FT4cgUtCvGT9_nGJ9Z3-;jv-pw!g!8)C z>i&LbVfy&xRoXmRco_B{gKKLTA}yz{{t+oP#)l$etN=tu0)!9k7rnlJ{pbABy8Lo* zN`O$D?fRb`1pBkr0{?6w=*90C7}(8mWFaAf9w`pI!}uo>>v^{*jMis0cmLUFLPYfc zdT6OS*z+M%wqJ~MbMr!qfjC3B#JTBXPj@HdLmDSqpKpD>{$Yw#g?G=0j_{T~(|VnY z($*IxAfMJ}5(K86t}@;1eYn89vvi|Lzwk8#d(<9RZC9na<%5w=iRxd!_?)mC_?_^D zYtJZjx#eH3Qo{O06B|RJ5k=^SEhs5Vsbk^?XZp=v8kgk|#b&msgF~p<*khXmMqw<$ z(Hb$h(INLvV=2YHul1cFotA9N{YqL+wp2}g*+9^E^EOLnX+pez7P;y=`u2`dVm3vr zY_hd^$_U$Wb_p0LYd77L?L`dq5m=e_b_3di6s~pb4;b%E9lp|@UXR^QfqA%E2p7b! zTsAX0Z$JmPNxmd8G4(RFvhoD`orD-o6=1Qq=ZyzPup@7XKu)3>b)TfN`2o)Z3}7L5 z|LXoJhITeallZ9Zj3o1ET~gb*hT)Cp*b+=8?Ig8jA%yS6cj*<}LYf_1Q2oPD8N@w`n8x?iU|9tAfz&eYoC zia)lY8E?pAd+k8vkKs3H?~bio+qgoE;pM7t`uGL!hMgfw=k0IrCIejQB2SVRton>AM1YuP(cy;i=+%BkBnqByFMYbfb`zFi3~ ztFAZ4@^aBfrYzkC@L!JE&L>3e9eO4g&&vod1}&XDT2rArI&QS8hctr#;~j0=gd;1t za(m~#Um&3#-P4Wiu~6!+w9ah~nDa9+RH_dGg(K;B(h2c?aH1eS<9sNaz}w-TTi9}{ z4uY#_k4sZEiOVH?6$vxatQ~9DPl}&-W6aUvK;4M@B&{wY~P0-$967_ETX)G z9~{u}J8WtU+X0g7<<7ovW6*i0i^rCk^qBIGp`TlFnXu2f%I+b86711&4b_gt>{I#Ay&G-k&ylpUYHcI-H~ z7G=VcePSLoZUL?`n_GHO=n7l$ToEs0YjKNh&1l=pP0Vum{MrvM^OD)~BlQJ3y~q&} zZRAZr%Jklfn<8VZer0BxP z^>OmP!14o?r+=%%R;<5cODySKr9-1(+@kn8JjcG6E9UehA@4TG|LzD=yyZ9#*}O(h zVbotET>GgM@#@0CPg`8vbT)W&_dM55{{s6Z2Cu~1tG;2r948G8P-w-_VTG;T(h&F z?fboIMPDkn=q#cZ#SCH=Q%9R!%I?BI?er~vg{{h%9)4-8A3qdjC)@j8=}RstGwee7 zZG58)+ArL!lrq+mRB`N3Ji$u{rziv5lB-Hm9Ag$x0MM6j+rKQo!&t<`b9s6T+x#-ZPLo zd_%pp9jOrL^(k?{t6?C^RcpUF4PFHLJQC1*(W7P9*BV!qxHqsmB5YMCjl@T~;EFD= z1oWOe=^seVf2e_6k#%~%B=l1YcYL^jk(H5+47pK{5fkgS!MzjNS6Jr!;wXH*urd@! zc(*fufD;4M++fc7zT&^>>{FqK1@qT18dPb*kI+ z`eU-%#1FBD0XNk#g;*9=TO%w{%Z^Y}!b|ilgIhPPnhPcfA%{-w>52|h!*Q(PHgJ;~ zFqX-muP*cIp(N;8*o8H&LWDY6Nu3nqF}E5jKkU&f)b!7rwL7bW+s>SqCs?L5OE_Gh*+gYNxP68|t_uFRpmuQWvN+S1GuZ z)da&<;Fo2;hhS7hvwN+Rf;5TSL1+uKRn+AN3;%&&%jLHnkg$xOb6BjWw(}Hv49K_7 z-_h|W2ow!3)?vBueShuX1Voa6Z*n6NZksPBxf@+?@3glZnlVWv!y+E9-S}aM6M$E5 z2;l{yPKhAnG9~O?O#*E&Mw{jZ33klca?GJVcOk7>lJ77gaA|cU-oqrua5gcOU zdJC@S{OL>f=Ekk*Ovjmm`V205u#|$JBx(LFsj+a2Rt2WneEI&nW|qZ4v=;!e*dC09 zMl%1bSM`@G5Ottj|HxH;cmTx|3Skb#sCD~=h4PK%IbYOwo}k&NBcU#+`(95XB61f9 zcZxKc7nX|2aL{mWQul1Tk}F-`Bg@c*JeR-q5ZlJNvs@b9-+M0p(?I%77?>s;eE(T; zol7k$6(a6<5UfV>pnC4=`VF}ZGIV5t=uP?Ab2@$JZhFTfIsY2$1&lZ37ut%hKeQIM z+TH;;Gw)yRw&F|p%~*UM^Uo1`ei4p?OAiRNZ(klBbgK%tzZkDIVnm${`>$bR|3aiI z{|e1`L-%PuRna@^j`XC}&Pg-4e-5`zTXM@iAz~RB58#@u76Oq_Dom=Mwv?ATvc+`L z9fL!qAA0iuueH5><2$FAR9%g3%K~TZ2IJZinj?YAdLii2FHp3@G{Q$*@l81!En~apv;op6IZ+_sA|OiNRR6DK^T5 zoOspyFg8lKYc_`u&b8;3sbB#+pA=sp1_l2+U=dko+a?fmUaOOSp ztkC^!X{j>{4IeJz7?|<984ZrCDm5hghF+T?_PiG7&S-v2p&Ql-cM_OM+GwhHefXW@OOzSzNVQk&{BB#w)FSGeXzuvDn3~(ctp@jg;IUlu*CPZf{>ug zd5gW}7Cq*GyE6y$#hJHO4D_0R`2%7PgtO*hj}7xA&sn8qeW@7u))hAp(U>7F1_)~X zg;XtYLVKx=UdzXPKD{+-i;k}VLrI54N-XVUstuhEB7!1vBXvwr5w2g(BGTYU$X~x|a5)alE+^LjmL4PCE^6XPwqusAqwJ^X ztGN#6sc_QkrG;1{;a^)Mv=EurQ4QB`QB`e6oeH8pbCOZ@1AzI{(TgXeMcb|~d^c-Q z3l}Z841RBQ6x^DU1u}bpJ0E&(wgIQ;1RP0Ni%UiuO@SI0qPxNc6~wR3zIJ}0T#Kd2M1NCQCUieTdJa;Z7npWiO#rZHe=!s!pnN`_0d1!b_ zuHzE@a284$+Bf~<8$FG?J1Mm9%_D|chWiX+_^7C2r@Zr{guNsIalu+epO>7uyG6!Y z_FJv=@oQ%Zl=dU!Z8~JJNMdesEzj6#HHe*`J!ngSFGtltYJWjOYJ;{+rpP{2+H_$! zH|3@-@X5X9peH$jO_{NgMV;y=GDL5}iu{>pyEdx)x;KSek27Be{afbEqoXR;aG`tY zKPq)SnRkq_a>ib2B+~U_7>*q0na_hRMdR9g{$=prA8rqne&hV3aIZCr!#v9RA8QP< zY+q$F{@T8m%6j$G{{NhEYj$%0vffqwkm`c0}(!mORlHt1!nN zb}uTy_Wv;Vmcela&6=iV*eoe&wJ>792t17E9-zTdONqK|#dH)|1{U83Q|E)O>b$dt;q4}v0NUJ!0y$Mfw z%VTE#jPA^yaLN0&O-se1^qa7QXFLLC zzToldQVEfcN0=q3;%hoP9L$B9i_)IxM@np@y5*!x<+eoJ!cG3RiQ!DTMU5e3(=hR6 zsB(EJz7&=a7DvO{w~jlLrV!7SqkYihfOkmcJxXy?^6gYEtBQ>LuMQ`u7arM|j{7*A z?Rm8aQIw@j2Kzjw)?AY4a_|6BVtNciajJYDC`pE%bcxeFSuXm#<0-PVg0e@eh}D!U zmPK8_uO?<38>w=*LLl>XxTa~$<8SCQH_WHi`%7JArOPTm2Y2C`Fjl|q`zp#!uht}) z`A)5-gD~Yt%cIUJi)@C>jVsD2KHwKS4Bhy7_8NRO7Oyn`7#B{;mFAD=&>L^%5ng8w z_^v?E7)@Rt#5fW$2^Dfio(_|#{H4?JI+9!Z7?4*~siTU&-EUQ*y)hmZmVTf2&Q5#K zz!L9$HQNoazHU~uvLNU%NqvY5N+X+}ORy(3(Up`*RnR|{!y4?@K%l1KP*&3aO-hwI zyss3_E6zmQt$AcS_QcfRxC+$Joe1XrO+(jYNYACDqA$FK-Xtn4F{X&YLz7rBPC>|q z!z_{e9Bl4jrS>q076t(w^Os`0>lEvniTX?Q6CKx!st+ zI~%MMxUtV>6GwBJE>GrgfhoNHZs2)AUO@40WLYBqh$UC(Ms-Bj&uX|gf)$QwGD4C7H;{WXO|ZY@_ZqTtK$Hk3FnKNUr{eIZCAv^A_yqL`KEe zrm~5WPS7*}YsmNI!eVz|(0Do1XY8e~9!D)NtQ2JN_MuBW^e?h|J7d)6T`v(PgpN2V+Ma;=;&lK_m=x4Pa223 zR_snhC?eH3_jPtYaEKzoD$mmMgpJS~5eJmW&5B`VD_De&UrfKX9VgA0@e~o(DK{Hb zVx{}qKJ(N9GH`Y}S8VF-Wbb@NLm9(kB&_ZSKK^Q|m7m&k`!_6hgR1-3b9Ry0pY%18 zZ8}A3F!bZ)Ul>%C)S`Fht>2$8k4{(rL4Y|S0rr$<9r$+>mGjkwnJ%|W7~(!FW9Orx z%il>i+VdvmWwi>n_U}NM0d9-4tPN= zlYdXTz13vLZi-e-#I9T!zRo3GCER^&GjUfckEWGVMUWY^DsAhx(XpG8{LwXO;w($u zgeU>i=4VEm54}QjBRs1U-Du5m)n&U}JaVC} zV_w3gqHSjNBvfCA%#n{{#;T|Hb9?hwjIQp$<%a{_tR7Bhr)POnPC=+?zdGRFkv%wU z!c<3+7EdJ;C-fH}`S0B!9wf^iF*Q^RRG6SN$*6OqW;md6wx^Woi}G?8{o=9ufz$@u z)ql)0!8te0`iW4zlSffZZw#~g*m;m^@n!rMDblkF=?0MmHp=4m?Xw-wYW3d>9 zVPWlP%((p!%#u5n5e(n_6)%yP`+4s zxBIH-lauz)JX+~4NWIQVo83cn5TK4FF=!)o2z6G1xi5hy<-?r@hM~GH;`m#k@eeMq z}~h2m<)rTEq5^ox*FuvEPxC=e9j4C@xyNJqRM3ny$+)Koe|B{2sbtK zV1FXHS6V)mb}0_hv3;C-q$=AQ?2w9c9s@`s`${Rw)f9!k} zXtRhno!aEi;y@-dQTlg7NNG!{C6ia`%Mv%$_D^erDzw6N@u5>WBLrpObs|0zAKzfS z@K+snqJB8-9dm58#k6DFfp2%bEC}*8o7zz|*+K`6hR4_SH9k29=*2fnftGM&lRFxgHAkDfjTP(Jn1Z36R|N_IAkZ zqfpLHShL2J%sUgKJe;dRAJ*YB?=LLL{CyJFm%G?i$NZBE)KEDaH~iYbXpGNSHrC9G zBAKE?vyW>VhuG@?0{=IOSO12cij`KjOD+$`LCa0V=wQSoWkCkM$?jpkmL8V{ zd1E%5I{!9!w=QP?!q0L`o~-ZSpJHYl952zs0i;!X=f#Y1w-3@K+?IJot3Um{2|Xr< z^M8;L+o>XCC!{i)_vc#SyVW#>M2#l3l@G>fvL9=*-edn|;YfT{kSTe*!0c74;#+Og z^=S4mV-t`@wuD2SRcfk^u%kp=0H~enH~m>2L!Lm44H^OY5H1Mu0kGQ2YP4-25q9FT z);v-++pLB12%XxOzWlQU>^3UETtCP_vUmD3XWAO2jSqT6B5!=V3Y!}4Y%;mgBvTH^ zua)yRO|&!1DVGySS8kw6wy3!Zs)8?x7&*kqxEQ_F!{RsvFg!-*0~b`BTM~C1C1HF3%=@L@75X4IVV}d zuVD2(C3T0PcCz$X2@@&YeCCQVi4Ln^H^qj@RO%8gU|ln|UJWs_wzv>)Oe^woMRl!7 zIj!NmIvuJ2FM8~@bJiSE974Xc1XP>CXLT|MbG)fo0)>LIe6vsPqX;fqe;wM}5qAQ) zXJ*NkTG#puvrHi1shi)lF-<&NX$9o&6ObhCfbOs z63)MSXS77BGtF`&+f{4p&gNTuDpj-shY9oF@kO>&}p*NQ~mO5PppDv zxyQ)JW5IeffAFS+xS|ak{exurRM0;BnRWpOTSW8AR@VICa+j)hy*45?)7do6S&AyQ z=!MC6T+(E*6sU-r0e}1tjyCZ;@+GcO19hjFP~vDiyu9%dArW|;VQ_&~-X=2juhcZL zhQSMU+ubk=lO3(OGwbtY(%;4&QHV2hxx(heeu*NMJ|nz16UXZ9FP%=XD6HK_L~Qg% zG}CFSnMFd1_@3cs3)T)r=G(7Kt>7UZ>t|ViDV^jjQlR|kDncjzCL!Junb#7$5;?TV zm(_AhJotIhawTnMA^)|)0JDa+_>VNxlVssz#q`lsCJXT84^fS>HM6rej_@CZ-k~_N z%PsyShbF_iG|ihvsI!!-iRmZ=r`kT2t~!%E%B-;Po{Q>$zKaaxE>weoE^l(=__Z9+G62u zUYVbQg1W7^w_3z;=0D-Tvm#$FG|IN29EYIJ9^S8Nzsf^X-ESNC{vHHB^WYHPk;kU_ zwlYxnU+@tSGWG@lTnzlGRjj%aN2`o8)fP89h@b>t^f0Rbr`s!b^`lr(<^Ap5C)LFE z-rB0N>R5-OhjUiyZpg177nO4!_;=KPn%>g}uP@#LfXf!qR*Yqsogf!?66g3hr&CKn=w;B&fG;D5a`eoV*ruhM{cK_CNw*D^?KL5WKK5H63JAS9= zs7xHtT5k%g+R*a{?qJSPUFj(oAY*X{xX*pzNL4j|J!eBBT2^5@wt)g*9SNXF-KzYD z_>J8dcWbDr&dK1UZ7MMoOml`YCL+kB+5rbg)~>*iD6v{31~NV(r*mLrvi4&I>qKi~ z^<<#Rlq?zi-s%V?Z|*#Sx>caxEhYX+?+qqn*_+BM<*IqS(zHj6wivkLo;hgp+f^k= z2i>yNxRjT7_L~2@QD?))1>-e+ zGOR)v1h#)G`Z#t8l!iYk&wnTIsYNp;M-KZleEtkc76sAfa5Pi_H)kvh7qXQrJTSvt&w z>D{O(dnk=4Y7E8Inf7O&Ms2ufiEsY5Zs-^I{WTUcaA|;%8KsHL*)n=tZ-4&Ww|u-8 zMp@m2-piu5^CAjX>G8%Erw|n4$tZx6Y5TuZ-x!(Pj}X+zurf9zgO;y5{$zuCEg+j# zYNQ)9DrVs86(*+^eML4)1mC;j=5e(;Z8?1iDv}%H##hXfPaMJ7lD`+xBjZv>p8XM= zrWZSDVjhY3DU(L`cJQzu(||tcW8M@Ppg40Nno(m zB((-wWN^*hCo86~tmEO>*gS~~goKNS=KPBF@AniBw}eN%5k#M{AYeOSd5S+Nso?s< z$^HAW;`n|CD9jHH7Zuh0d`^FkLNGXojGy&*A|q>ifrWC`ZvpQ7ys$X%Hw!ynzmkHI z@$=0BgDP*@vx?izQ|Or@$G#wGh>cPVAbC&*ba9&E3I2rdLpX2|phwi>^x0azFA%Eo zKtyCG(EriTuf$Awz^M7j9UnSzw7dHGOKd*nEH2zCp_oXoAA1;zr4)=V!uU`8m#psU z6__+A_IHF=6cT&Jdp=*xbKK2)$z!ZXwBwL;=wEI)$k`g(+{%$V7kKQ=L^Fd&c zr3+#NvrHu_y+VwW=YK1IarBc_tW6fJ^$@Svro@hlv!kNUX<>0z8IcHubT@mExm?d9 zIQ4$;glAk>z8rU8_C7F}tVF{!3q?luh^sTK2^Y@C-TfqvUQoke8}X7@vIhQiq=$b9 z&jI2t-={ttOwK`*O)Vx}IwcaFHk{IPvT@TQwSoN;tHw;hP6u6NR1|1dAPT$S8x)Vd zF#h}77&BM6IjkaP_iO9XTdCbsR^{snVaiscWXKvf;%;1_xK( z&nFBFI7wy9`}A^QZeyBid(XYr&aQ}b*bJt}CVjZKo3aZAvg8L1sT1VFm!3%z@J2g% zr;YK%^L!**D|Sj4JnWbi>h(rwAzXfcZ{>~GdJsBSUO#UQ1Qdfh7v1fssJ9Wx1zJ!JiIuK{C~WD%QtUw_LS@Ur&mN0$t=^$#; zj@5SJQE+$fN*blL;kS9frCHAy-P9)A*jx>dOLY4~8xt9cmhk2$w^;u> z{_Mwl9v}TPI5d-I*>=?fMo*P}3x%$6Q}N*Ik5B6EUFjp@0Ic-+{^yJz$9cwh>lmT$ z`QpX1=$HiI{zGj2>sUkel>(`CtchFJd)!+xYf^N_>l&AqZF%>{pH8!@_th39Nei2o za{XS~1LY|BxUHXRS7R!D5$U2B0uyJT)k^LrltwEvbI)ZJVB({wlr4&#HP8yxr&hE3 z6aE;hH?O3el?27|@!Mm5`sG)zsnE)Sp6y2;5-H`BvY|hW55OYCZtSq>_P=0;DR-02 zz#KY4PHk_^$F}JRT_cDpRrOw78fX*%)C+UCytjo!33!2~)l|%(8Z5#Qi4~sbz6t6t z&cuJJenV`F^!TWasTUf+Ai|ieYjXv8`Qc%7?5{w=2R%smAd78xc}h=QPv-SweQ>aF zc>+zHDq5?qB`F21Z;Cq6s|t21PJ8&@p&z|FLF_SRZ$H&`&0ZI%99&+rQkj5dpF3AJ zRb;=IJ8vC{htZQ9jgH4o9;tRO%Bp{T_YAjjwrbHfeGG>XVdz>BiWQGa_WU=QB_84_ zNrX2&p`vjJrkGZKJAF`9WPRDAEKd$T+^&oDY7Ox`Wy|83$Gi4)@xfAW3tcN$zhUXa z_3MhC+?%oYZCtGNk-$1`#zc6))#MuOFY~n^T=-G~1luxj1sqo{P30i}B$ekJUqxYJ zA>rkryr25Sxq6}hv}`+-uQ3)vDZp;%l76*n^%GhkVbu1qgB4)EAj+7O>U63pyd(4x zv|;AwjU0P}Gv#Q@@SeT=3E9%tal$Uig>y=Gf)~pbvR<2idMutO)Y0WGYYPbPGGWEp z@SR9aXtrZTzIoY7ezpb=y`|~pyM1=NVP_<6+I;kckIiNn444(l-1CFBBD~VUZ=%RQ zCXs5A3)1zqiDV-^amkc^sZ@2xI;m*wEO6fqo!m<}RwqDbDzS2wG3i6J$R)<_~a-;v4`}VD;pT$U(*wX72(N^;$oe^j5Fxai+LN3=bKIoqS zjI=w0Nj;3Cz@Ykr7;*H+H-+2aI!y??4KYcM#V97y;!qSM`>YPS?7wJp(!s?- zTHSL7;m$*EY|FT>=%EfVRB#;6h79*BWeXQ^HezF!IJK$8bmV7DRZ5NsX3uzD6GH*0 zX(daizOIYzbKTFvWa_X>WsNn)B3RE$nwT&=%~oy5$7f4Q`A$BVO6BS%ax*P-j3|ksFXL>kOf5tR(Wt-@>7Aiah%NyY%DHzOGh-5CwX6= z?CBHe%$ZkHV(Ot`;(p=R3K~$F*JokjM&Lkj#6mOY*5SS8{ZZ>kM(jRd#aI#7#lTZR%toN z(p#t0B_OTGH8|6~CW=?V!DmbA=@kDTV>Bh6hCTJ0)q z@%P&6KRq)qBCj9S$g)w$X0pvgFpjg& z7>kdb!8gyE8+j1wV))%Kc=jy8?}6qWaQ>@sF~9YNrIl!b8{@Nnd?`-6nUmAASL^tT z!Yg55A57yyc8gr^mh>yGoAWvIyA48SykeGM;K!)&YZ(8bFQ)SqI=+x}KG*``#ieoq zzT3m*2zwPk@FO7p!wyeZmv5P8%{*9-?x^u7yW8qj9cL5AlO#6xQUBlp;bm>!ZAOi^ zu!;#t)R0?~q3lPS2v6#-ob2szu`*?td(Hrru%3wL`A@FasGKjyXJlY zjriwH$q&5<;=6}|6sFIbGcMo#o8eU&Mns?Cgfn6tXtupLkq!=snnsUvCdbR@gw z*E*9^GxsQrz6KK24g7wK*4<7gd2-%yH?n|a&aAI^(eEi)_>t5JD?_EKBpz3p*k2^R zt@rg##ZsA^Y~Tp)`S(_a6>gsgllICvr(=s)7kPVLo#*2h2&RBVTK4^JyIB~Wd#_cl{6 zoZR-?>CfapV9R=pVH2}1nHlzx)t2tDFod}4%&=C-ul?r1*#{=E4RtRH;XvHJBdZN zW>98kY+e5HArIb^sOYzMKL)x^k95lh|2Pze(j>MuT`=Kfj2`Q`Cn?gbdWGS5Ew0`>bBo>~V}O?J zcm(ZGO{`LouF-uvB>qI)&VfO_yeZcG_gDpVVRK2dgWXD0d}fDeW4>5Lie5j09{rI+ zB_&lynh}^m( zW;PucK{jY_Y%)8`bj)1T{&!5JjGwX?tKkU^z4~noARY_Dr|tvR#H${Bl+yt5vmwy2bsdzfFa-3>_JPWgyVirL+|DkyOPpEF|E&^V{P26tF)bXt+ zu;EB_BNY|5%pFB2$t57ZNOFOX+j)mWG^^G!G%!E8fN>+#5(I0qwCU{M=4E=G5>N7v zeX7q5d4QDE;d@;GjD6MFd_l|=VWATeDQDsf1$(UC0j%&w%k4U9GE)(X^;J7Lc(_sP z%4^5w7IpjFUNr3kzQyvfkwYk(9`^XL!R(H`FlFGaiJzJQOD5t3{^9X6+}7VOOI>Di zpd7cE{SRz6>p)K%*!cJXJ|wYN0eu@MziybV;o}xB`Yu{n9xq%NHo0RAklB%NKM{Un zXBS5bN&9Rub0qzC==QmUeZn-9^KTfupVh7(qpVZn-IOD+Uw8-L-P+;M7IxC_Czx?z z_+mqfOfWb*MMm<`Cqc>+C9akWwh%<+40X#AMC!Z;FAV(0ZRA(AQ8)uT+;`=2lwYE6 z^|JpvN^uxL#j2#MRv6%MkZLqFa z8llg`mwpOkNZ^?hm6tP{DEY>|#6nUw;PxDISAcb!D|+urDarmodGm3IR3JdCu-dni z`nsLOc`@Ro(P)I2I89^9j~1l<^)}AX)fUcjXL!ZRaP9S~|8_PHIqtiW{Esblj6yZT zHMM?wH$nye^Y@tev@L~x4F7_Nc)z{-_R{L2nJOxNT*tZEW1yn_ET6>N8n)m+td~>Y z3`h-RS|mKrS5vuIN=amVKf)XR2#K3zclQ9D?%nq)v*&PU@Mfs5u7mMFADS#fJ;stw z^okKImL=>Un}c#a9ZxAl*eBLvGlo}&UV)>OjUy`=ee%z(9oL~INs%3_(ER;*?#o(w z|E<%+H0s~Fo8fF^hxa4Ag(h!d(Na(_XI9KO1TWa~wUD3cVAEpe37I*wV^Y;oSqke& ziRJrlbWU$vZ+&ZG!Aen(5)1Cg*wn!~KI=kNc4rR>8F89G3q1ZN9*_5XPzDKnX(OIV)K6(8rb(bkF_Ih#Ut3x{0K2WTfcwI9ZQRt| zY`%a=?!*}juZ|O1+nE#poiL$yLt4&~X_n_t53Qpl$BwvJs*g2m?WZ_&$VO?>&jrlv z)g5g3A{@E6rP>9mv6 zf*RdMu!%01b}w#IY0A3ouYM;vo1XiHRA{AN<<*sr@ZrrrY!L|B4MspDk`fr}WvdclA)3S^C2jVOz7%e* zzmlP?Hbt>!^4_&|dSWpaR^EgQ$X=%vuonLq;tP91L0L&>goS54Iv)tx0GTbioyb$< zFCl;bWc41hg>hcIf1%dHU%c*^3i$RPJ@Vnf0{0d&4Q1hcS@^Nwu*iH>s49LkABgW~ zTTyqOILg1|Ucg%7m7W_i!B}u^NgNpr&~#bVn*0UO|KX8ppAOsM zSZCix6|a({O9_CU&=-i{FwOnrq@0=$WxoqKfnRwC%4rS$U-78#vY<~GBxl>NE>B&L-sY_1hGTJjP8pA%kJC_|4 z6^?pyRY#M|vMa?n5%6b_IEY=aF(g`r{qbP8%@2-5oW2L>&g#$f7H6L>-;9;v-nmHU z1%-@;ACWRRFx1_ZGi;Yd2NC#ZlEXX%x3?>DbD-?w54N{Omm0o)1XPO6w-w)Li1|G1 z!o2CeP7vjQnKRjVoaGj!4Dj_o0;64sUC%uXF_BevtoVJGmgPAs`?@aJ@&CaF(*7BI zQkc2PgblXIy2O@&qIX$^z+>q`X{^Hk}QMS22ni&0zAYgp8~Wv z51<~6$#mp0pEpY!+{vontw`H~RjBDJH_IEOO1KJ`-5S_}jqA!+I-iAx5XS&17)y0ZewugA(WyOiDgMF*`uJS^J%G;aqRL!g#FmLmsg{*^3{-9$?n#tZ*&@7(k{j%-B zKsrsjmI6-i?mRB4nxUs1{}vQJyAsWAJEn}{1u6Yw&7KAl-Fk!uqs<$z+uHCA2JwMu zS$NLC}jP z#BP$w)XxWkE0max-<0|i*8Vvw6sNtnBkfQib;+LWLz=VG9A53s0=?w?K1Ma~X)C2) zvA6SR;Z*&0>&ZzG9)rn%C;T*%T43i93w>m%B}yAcHctpnlrG>+qIfCeY4k|l&KLUS z=ly$r=2?l#1}!>UAClLyl`f-YE(lj@?VDq*&0RY?ggb>_xTvgTtg;Ks?!E&ig?&Z&~Sm_4l_4=_ZCLm8eAlgZ{B}{ovhoHGXS7>Q@rR*>Z_Xh0q1RFV$ zBjwuYx+Lit8^aAJLFsy38vGrMJJ%2l2gU{~L^keem2i8drAfASfv|9{IWTwKrU>_H zidP#EmV^Q1An-ud=y19f#7J9UUM>wOuyvNd&K03#NEnfW^ax5}XkqKE8 zUV;(FIG~TT0KBAu>y%Hdtb&eY0_~_xj_kW+EJO|Y#1B!wh5!Sebxst z=q(w+T<-v4jIK%ZdxMyzm1qD_%u^-_hTS7Wid56{2sa3uuzEdi1K@Hc1oKVOq+gFY zhbi{c{D)N2L6jwkey8_uCA;qj?OM{QTa|dJ?AO=#E=NMHongYLjo%y7XV8mF(yHG$ugF6F}ucl5CRI6$HJTyZG$uA=>qY0Ogp`(LfjvttQi+9Izq|z7qByiHI6-( zgcYgFwG(s;^KQyv-9aOyI=pbHiUx*2)(3!OYS$lKwnsAJd6b^iHP7u}u( z^2oq{Than$r}c-R@gBQlUG7K8E_jk7F@~Dka)wD!kjv9qa#>M^G`Cuv>kZ$tBi02R zoc!o)sEW%Lve!NR0m+Bkjf%fGw=YT%hknzj9*d3q|KL$9G{c^VMwe1-N63Qcd4I?oc?T zXx?=oKNsQ!Z}OF_O|DDD{pd2u`tkF<*O`mp5x z7-{{#g_8f5Cogg^Jp1!bMnW1+?kC(66{QMJT*C^<}>*Q+}Y)GO_G^<2wr$SRLF zAC|qADd#cgthN8QP}eNuIu1N1hgM-pK}@+}1O2iLEBbS@XnLFVbuqQP_3bGK4;b@L z8d~PO0ZL0H z|H)~FJXvHY1h0?UKqGJ&s-!pNQ5uQ@GRcq1Fz=FM;BB^m%x1*dsEQ+^My=!2@M*MD zMLlPwTs6^eDEkJTg5ikLAjchoeMjSx<0C; z*Yq&f8$!Ki=TM!_vCu zq540E?|ms9^I`t0!Uzv(-0lTwkj<+L;uV)1yRJ-aITf9zMCFdKYqKIOmy49OeCCW~ zN2t3Gd9lN|{zV@B+(F4skec=f+<10!08)w?i(D(JMZ@p4&e|sOm1&+d7&hh`-faXM zdz=coEV`RFBnSMVPxc2J`vXxDmIcSmbbg}GhO>`TS7A4bh*fB1jy2M@St!AJ_V1A* zg6r${adTB+zQjrztuc}ffhI0;DNIDt#y&A!Nyo?@Fdf$2@e)9TWI;5bqFLA za$yRJgdgF){id5BVKG{5{}UoJ;tw(SgAvEZnVz`p?4qzEp^N^=fTF%!sE;wQ9}DhH*_dgwc}qC@`{6b4>{}M%yrafzVc+{ z4fiQ0Qu4=1AG&p%s!K(Cgj?O(#2Ds8z;E%we;=iP(}E{lLU=?N?NE6c%s;k&Vaw9? zUBBYdEBJ{obb|#BEIAD?tp$BndQ%U^6DS0SrU@e(p{%SwGXoN0ByvMTlfTHYW zp6Wtt-p{Bq?eW@07Pn$uo@UE4$Dz0vs^^4f`k*2SmNMnc= z+yLdlmj@w9gYTEg3boIuiJDnLkpGW8QZxPqr&qVNHp{n4YbGDls}Sy0UT2*bT&#nxVdasOV<#hbEr?1dZRV=Sc@-=IPt@^eG?u2sArIDpf(< zXlPd_at4Vs0(Rp|NG*`RH(0S zeF~PA*pedPPu55X+j2~7B;~V*SBXVCsGanu#2BHP?W)mUu9Sv0PTs6ml-7+lR3ViB zB5yYtqm8%Cw0b4wdS#`Y|Kf^0p3%r|1z|h~RqA0-FfLD5pz}#;QROBFap^4*$uwY% zX%MZ9MD&#w5gw0;jUvT;#RtRS>Vb7TY{sIQ(0&8BqC^9VXZ;5upPP{7cjat;XjPM= z&9O#nJeM-D2`ojGi)X4D^4aITa#!v&8^2NCo^U1@Cn{_4o#m2k0B{7}4IGNSqGmaRlNk5u4m+@(QrSJ2obE5b;=~V%U})O){}dB zP=0Z(nkL3ilg*T%%pK>m;D{DXW4+7iC)Li9}n7- zn%5pQJ!!UBG!hrg7yzs{ZXEEa$G67!kx1nEm=M|o00UQHNnGvQg3W@O1~J^;9b$ay zs03WzC6zWmJCisv95}zMY4Ll_TFJM`+2pA%I6=l2e%N|l$i_m~DD<+xbY<$8kso$> zIFe)4tk9pI^Fo@hO$04YEjJ1ezeqVH(CXGLQ{8tA&W*0R-ldGL0WGWywcTRHr7a7HcC&75W z*(e`nOm%Z+``3N|q;_Nwjw87dWlHdy%ww+KI92hAA(85ti$48A`jVDzG^6H)yD*k; zFP)r65%TV&M;lwE`x^541tE)Ktve+Pl)LoDKhf>&A0YRdRAk##Gg4niYJ5M|rw@+A z%Rp|{Q8~*|7L;Hi-Kk>?!@>g6TeQsXx8<)z&n5y z*n`3Lc~!#3|0T*ksqB9xZ{I$^Z6A*%$9x+*)zYpL_A9a>Zoez=A}MKFC|j2Plzpi} z|K{;cPdSHD4X0VLTRGU61retCdoS6Ha;|dFD0FQorT&~~8mmUguYvD$1-0ZX?C>xc z$rQ6?cnfoE=(q1I@OYE}slZ5OUm=qC*S|LcF8;m~55AK;**5|Qe*`Vas-Ry=tIkfZ zl$AEY6D;`$D)q%37Nc1WvLq{ddGim{1vjNM^lzDfw+nTr)5=)cE{b5D$)wtkpI?Vi zFjxm+4H>FD%DL5b#0E&zSp-`A_}hX*yWEtovZ_54Ms`y5{s{z~v8vOB z4avFGkc&pt-e%A&ZD`7`-_xe)bg(BSUmJT_fHCR?tjkSi64uhU(}9r4 zKdIesW_-uYS2N8fSn2Yn%vQE9%L=F`j?;GTA;G5vxx3vigzu}no@>%kf_MWVAwfYV zth;R(%}rM66_63eyzYT)evy*n zNdx3K^5`eAgH7TwM)B;S{@w0$52wX*^th&=BPV6oQ*tR5sZMVjQ4Bdms<+9bVBG7D z&qb+SZP9_a)Mw_NK83MZA~EnyLJV0aI>05k3)CXks9@M914| zN(K@hnlhf4$dRC?BIc7RDDBR`qz~FHxA>m!3(?sFmLocYUlk&Qb>LP!+N|7B(cKf* zCyJG4&9gY;`{kmVcdnaMcF;lt+KGjktUBujz0qR_CWr#Kcmfzf@7&*2OwWQ~SdV{<_`BAqAKUvAC!MZR?qU zT;^h=lcwyz=N_bOhY90>IBWd2j1W!Wkl0nvi(E=<=w&u+HC!S&Tf6eUk6)e8yG0py86~!t3z%_H#CUN)Er^`=q8-gxTnTD zvH}fMwlRdszhu8?Vi3l3&5O(G@-HZw5p`Xd>kx1i|2-@X9wBfds>pf%NpoW1`T=JS z+Eugl;t%prH+4}F#^*WFo6E}SIG@kfGpH-d8iWFpXSql)8|rua@C3u_I zd_03%KaDdgU0IyPLjwagfF%etu$KbQru9Jwn|0Tj1&NX>Uw3h!Iy9gQV#aga2flfCF0=p-L2&DB#Mug?4y>qA3u!t7ENzM4VO~Mb&DG2Kn60nSxOhI_!b6IY+1HnV zgNJ6*lKT>ok1vBlS#rj)fZEZ(TE@FIDsxNLtjfAa{a#1N=G&f|2hk~W**ErF6UVhk zYeY5`F<#bWGJq3J9+ue0>8E!0L2-|^NP!6ys^i~O&!1{o{hb(Ts`e_XpoHiC=Ct+~ zhrg{D{Fe_RJr;3@14ywgU&>;OOEFqW;h73-h`Oq7O7?`5*d%$PpG|2l@^r1VQqpsg z|G}M(wp-8>IJ1E4@EU~{ouS&U^J}1-AeF0Cpl81P4QZoxd6k{>k#hCyNkIjJL^I6k z;7}8Ze#s%bJ4KT&5+3-IX<^G4e0qUobg70+XlIYwjYGxr?1bp_!Ax%W!6J$OZD=Ik zdg7j#ZB4@J@ui0x4@Y}J@YAQ@o<*U4k*iJq)}{`>C`y~T&-VU8@rePHo7SYN%VNhj zDXy=bBJ55Y5-zU*m<{g_J@x>PfpLD`!lc3Mh3g5wucmrLmw<9Y{xo-n3Fvelly58{ zq|;NE)6;eNgl{s?;vb|)@DjG2Gbyf>h$8P-oR2by`RD$@E7_dNd~aW|bxEdlXpO%& z6)}E4;B!#%KK0xfDya7T3OrZi4{|v+FY(mJ$~#q#YZ&GVbnm%Q(-^LAvjC1~4z>q? zFZkdIPd3Pg`p(^+Z25Kv`M0(kM2L+~uW;-#4$t1$jbSved{2{EELRn@C<-Rme?H|JQ?@qMH1u8wZ~9S{ zXEPN8=Vf-P8f^JYO+?LE!`v`YS50zHk9_qjt_{79sp)7goQ-WDaW4-ImMxv&!*<2u zvqjxrhxPm8^$vNG(0CM)-bDrM{IO4kO*UBgxbkZA%1}=7yuFX`Z+Av=`QznJ(pfSY z%~!-^CMZnEB{LPnF=t2~)q`V&0DID&##*;-U#NJ5ZaSRKQ8df%!ahAE~N=IxrHcx9|@o6_D*@q!I;a} z2(uaJ)D$s=T4xI);_7fRibBHMKs2i!o3zZ4I(1Y^n1wiE%-qJiR9byn>itc4CUZTS z@}@^|8tERT2IEjJ=&u7+O z|Ku=NdtGvL>Px%6WM+n(^?>+wngG*w`Vg-v_Q~F8@ZAEv@dN`!ZeDqoxb%0x1XE8DCfgaQr&Z;FiLAj3NoYq>U;w- zqHVH3wLQ7Rm2a(h!QcD*2KJ5442Uip${1Z^)SxW|DcInPu4}f^S^nwL+29#@|bm|k%%wb z%CzfiV__qTT6<8@U%ho<89T>2M>j8+Cy&&gM({9pM$7qN>)EPUnZd7d<;6P8ED@d8 zygYDz{ zAKa$|mr`hS9+P|FU2^^Juc*tfVkn_I#CJXyxRA|Nb}U_LTS`riVW!_?L6dw#EDGr< zXyQMe_dolovA}ENAXUZ2m~Y;F^lv`X6bPn|qT1wn-JTboT@*p@v=NkKE)J)gIOLlL z5Kq40J@Zrg6;7J0x$yI4=x~V)u&Jg-_+}e%_V|0GNHx$7ZP z6Hlck2p0c(gfLTTAN6M0&Or1k?|hwMJ9pW{SX8^moNDm0aL&d=|8y zLS1&#>O-w0C zxu&8xJw&TuV{vT5*yzMlB8Cli^_CrJvK=LMBViWYLx5#7gM8<&dqYe^CmNZX^&gs4 zh!x`*^S0HjK5JhK$*5hG(HO7n{>xT9gb<@~4>=Ooxmk)Z5vLQ$OQc=yuX~0&PNo<9 zP)RZ*H$e$kLkYtaexs(al#EbppJ&T#np_$PEMVf89MFA}FX>8qj#?fH=R0dp)_g$Hdg4^{J>9Il09*Zm{@HuS?Y8noOp)EqjTI<*OLl zqieir7M>oyuJbAwZdGf~))9$lEW+ZepbBDFieBnRr6J>b))$@=>s zD;5c_=abCNcTD7@R}?#eyI^11(v7y7+;792eX&2?L?w#2p9~lrQQxY7gWY4ud@D;YjP;1SaorD}xJhR<+wh(F&T^D<`Pi=%g z47%jp2I`5euc8p45_d+R&^RgQEpw^ktE#mc=9T_m{R77xt|w;C%+8SDzPNyb{(iJP zuYZDE7gO!-Q*a!2ea;?hAcWjOmsq2^ydxl4t9f8InboDQ$lAR%{789}Wan?NN@eMt zeS+$B1OP%MwObnV!vh*uOAWAt`b=kxj=FMmBDbd)C23|VvQZnEH(hy&A8vkr0VOX; zZGOII_C_hzkGyEKjY|}$V>ISuu~yX^Xbj}x<%7sIE2R_e{{Bh0FQ#Pq&4^u!6?u?* z`Jq)1{f7Y&RVJ;@$=3(@6<#&-$#_XU^MRZuY*#9sRyKE@#)2sa0_H=#zZS2p+b+8> z!q;8+syz(2sZH<>H$^3 zZTV%-7OTLSu!5iF_wm0M3lqid7s?f!TCQ`Z;Ph>g>3vZ0tQnU-ecFrrDb18u{lhlf z%))dF?jOJ5zOOb4Wq-;Y2Pj*`Q!BL6q{$I`H>)?gIWk^A9{0VK&wK*(eS?0VBNPr! ztVB2|I!(=Yc{e#ryIJPL!eOF0k$h$NoTL*nvS*wpFf*|IF<}n3n)9nAfKNzBH{eIh z_f^4-M7ix_I=myex4MACZn8F3$f^?brq$r}e!};Gg^=PoY|bY^8|3 z;Uig$qFN!XP*Fr|N~YZcsu9(*yFIs7d#B40~7kCWF)SZZ1NHpA3)iq>$`0`{iL4?ciQ^l9`kNC zc=Wh2zj*cY{Jn-;xjGV>n2#K=LPkx~CLKVGdJD(0OUkxNkF+y?aT~YIktD8@Q*Pac+`>Hh8gQyZeM zK;}x3xhmNom1jrdvA*2&W4-HWgV#gZ?3a(gg)zsKwTS>#ES+en<2{HQ1~%)iP#J2Y z((c!|wVTv=m7%T4{2*sog5JiAs)F15vLj~vcS*>!9sH4u))7eSCGEI!hknkbW|i29 zzeXoZ$Jtq5;QHI%8@pyT=dXNVH{04+SEPv;A;ZeHgjt?H4myWTqDT~*>J%+t6VCC_&O%;SGe**m4fQ3Pw#vV>?Ui+j zJr2V$10InVIr9zI+mcLYA3#Qwp1s>~YNGM6FlF({bv(R(6{v1orTV7B9EL!JEY@m-ZsiVD$2sS@sva{j3j0&8-) zcoBJCvw;pG^HE*!bphSO1+n=0CMC~?VuDoG{t3x*O*T!Iz-i6O>7qs_gcz4R9B;m4 zqZGv8gf{9Umgp_%^>?g#dRCTm4d21&x|^Y)V>W;U zpWyEvr%o8y+}L@hxP)EEfnHMST+y^?cz16dRBEeAQ%|QFZpID(3uPypz}`egOqUCO zg@cqZeUVm7yV$P62(?jc&$X^|W{AuTgti{E#Ba?zmgwF&wDjsirHE37qSE>re__Wb z7qP%w*-v;c*$ADq0f#=#_x!LeJ0kdhL3VphGH+R?--#WGYHqHRN~n2;aBbtaOv5YX z@;(z>J-C|{b|$5m0M$7CN|0q`{Dfo_%VKUh-D-Db+|J?;i&5IiRFt50u>%SbK)v2U zO4+f&;ETp|-Yw-xY1>1y6isfa^;viZ)>5RCA6`GLJ9_WnHypd53FPCCv#ENUC6CbV z<>c{OTbOwR0X8dgwr6!2d~}!#sC^kZHRZZ`UTeV)mQ({1$i;jsyGe5M8~UX_xe=PH ze)5G&y5)M_s*tkWk@XA3Q6m?-&DO6B=tc+Lu6-M$;O8|AJ8BrJHD9>0zMOA4Upi}x z??B~v(wKw zZ5ZB6ucnO?L+N^~o$5m%z29AD7US3H)o{`Hpo|suax_<+L4PZ78gm96(hu^+-Fk}f z!dC}?<`HEtXpfe~^myh9>bfMU`ODDtaokzG`*x-77PqrC1Lq%FDbJ`>__hNm2dVMi zsNn#ShO>*XBs1jD#*^OLoKrK9P51Y`QuoF_QYS;j?e_h~W^fGx%~rr~fhJ4(jXVVBRhYInXl$2hsV2h zH4NR`9fOKWn=yW-c&hksEt9A4x1=AAhF721HK;SZSDI* zTVY=ZuJ(k}g*egbcBT{;1g$vQJLK-E2@6eSo^DDFXM>sX1NW^V0Oq2#^#@u|w(gk+ zh_u1uql>i^wIeGS3&H_|#T$fbQ`X=@P7 zy7w$3dIA){PjK`zltR6sRb=U+il>I?=>op>f?ITTttooNZa|rO$FO?z|3p#zjq&$d z#~Bf+m;*3-3nmrk@b>7ZXBzlU$_t!~ ze3f6Pn)0mn23R|7eHlipPw!6G)s`mVG;yig1}CvA+9qoV#YdB;w5=`2j$%8<-B8E zSA0!Os?NCSiBJiUlVs`S!8vyb5`P@1B7knmpK~1}^&IC3xUc&{Xznw8C_t52r>N?k z*#P&|30xed`Rj)^^wvpyyndj?!bS(l)$Y7GoUA9__kFQU{abp&c zS1u6X(Wwu*qTc9If(1d=2azp3xK@PznA0!&wu*;N&ee{{E^#@XSadq6CK6JUhBq*U z4aK=lT57tTWnK{|aX6D@F|WhUB@0e#J|_EscklWgHCc81T6XVznzz08ae322EC77_ zHTSE(^|`$~q2WLF(&b+40ukm>Z^O;ko>XB)AvQM626@0)va8q=vD&$^Ph~ zq9-lZ{ik~n|FCS#8X;RPoq8!R*rCEh*27Dwn}t*62QnNlt_CJLo1|9Oii8K8nG8fF zjI4!;AeNX>3#r~B9TB5s-`XgZc(Lb?LP|0MaA^qg_gmIbl_X!GT^Vn`GH3X3%Yfr* zCa{k0^HP$gY!!O;Jt^Kji{xB-vq6#5r4Oj{bRtQ;fA7j-j(en=&5--&{mQDW+vKqZ zP>|4G!d?n?Ss6{2V8D8`hf=GhTwj4DtSZtNQ|Ta0j+nUIpSU|>fFB($QFrTuu<`Ke z^bd?O(r-QS2cat6p|aGG-+jshfQuZa9(U2ZK3~(JdJS(mbTk2YJacyS<7zs=cU($tf87vbK4rN9^Gu5#Cmxi@jyhJ6lo9 zrDxqOoRxErFYcbvqTL;W|ReMSxr{WyiBA@+Y1zn7Cd`lKRv-{P#yqd9V$OXC$AKl1r ze=w~%FI4N=dX(@8EZJJ z?+iYxXIUaP&Xm?w7+crp$9To!-x@~GCzB-i&Dk5yGT~_fJ1A$;bWg5DEk-asCU0V` zNA$}~3+SYxwQbr77kXsgDf|LHlnUP-i7{s%CJ@{Or=O%llN6kBCf#-A`tdo^1*<_Q zjfEi@?~AOve$~Ak#}WF#G4?exCaJrDF%VZ_mI$F#D7eR?_fZqjGr%zWHiZ~-{k-y+ zU^-&yttez@e6Q*eWxarMj^nwQZ7UUtll}#Ja+auA&{NR8X{(nw7qtnoMAt!kQX@P%6TwRtYAT*sHhpeU-ujx?Lg;#4T_434i3TIQ94>I{ z4Kwj+YJ3wGeBS!%a1A-Qzm1WMslq#L`8&C|%wscU!$15tSIbc}a)rm-;I~WYDO%Q0 znxQbmyC`Effs!EwWTfg{!;wTtdFv_|vSwjq+8xY&XA>TBG?8o>u$cOH+ig-4(4nOI zw;g=WRq}d0>{hH4(x|^-$9@p|viyE_ivie;neTsiC;9dA|J>qwvR(EM@rqUs8^ShA`9rclon1|3`Lg=8Q(6TUqI+T~ja>#k4gaYJ5?H GMf?Z-ff#lG literal 0 HcmV?d00001 diff --git a/_static/images/benchmark_mass_compare.png b/_static/images/benchmark_mass_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..71911c5546eb110da746d19cb746afab8a16a137 GIT binary patch literal 84227 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 z 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
    >Ac$oi5SP8T51px5%Hgu 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
  • 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ǦWmXg@mW3ZlcS2ksmozzzwvuN6YYTppW86VaC& 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 za + + + + + + + + + + + diff --git a/_static/images/logo-deeppavlov.svg b/_static/images/logo-deeppavlov.svg new file mode 100644 index 0000000000..5aa494ffaf --- /dev/null +++ b/_static/images/logo-deeppavlov.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/images/logo-dff.svg b/_static/images/logo-dff.svg new file mode 100644 index 0000000000..b2f644b0c9 --- /dev/null +++ b/_static/images/logo-dff.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/images/logo-download.svg b/_static/images/logo-download.svg new file mode 100644 index 0000000000..cc37d638e9 --- /dev/null +++ b/_static/images/logo-download.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/_static/images/logo-github.svg b/_static/images/logo-github.svg new file mode 100644 index 0000000000..2c2570da1d --- /dev/null +++ b/_static/images/logo-github.svg @@ -0,0 +1,15 @@ + + + + + + diff --git a/_static/images/logo-simple.svg b/_static/images/logo-simple.svg new file mode 100644 index 0000000000..b2f644b0c9 --- /dev/null +++ b/_static/images/logo-simple.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/images/overview.png b/_static/images/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..5bd0fb6a1bb9eb94175e899fa612844893008112 GIT binary patch literal 152260 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
    "},Jn={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Zn={entry:"(string|element|function|null)",selector:"(string|element)"};class ts extends ve{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Gn}static get DefaultType(){return Jn}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Zn)}_setContent(t,e,i){const n=ke.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?Mt(e)?this._putElementInTemplate(Ht(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return"function"==typeof t?t(this):t}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const es=new Set(["sanitize","allowList","sanitizeFn"]),is="fade",ns="show",ss=".modal",os="hide.bs.modal",rs="hover",as="focus",ls={AUTO:"auto",TOP:"top",RIGHT:Yt()?"left":"right",BOTTOM:"bottom",LEFT:Yt()?"right":"left"},cs={allowList:Un,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,0],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},hs={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class ds extends ye{constructor(t,i){if(void 0===e)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,i),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return cs}static get DefaultType(){return hs}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),ue.off(this._element.closest(ss),os,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=ue.trigger(this._element,this.constructor.eventName("show")),e=(Ft(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),ue.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(ns),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))ue.on(t,"mouseover",zt);this._queueCallback((()=>{ue.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!ue.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(ns),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))ue.off(t,"mouseover",zt);this._activeTrigger.click=!1,this._activeTrigger[as]=!1,this._activeTrigger[rs]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),ue.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(is,ns),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(is),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new ts({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(is)}_isShown(){return this.tip&&this.tip.classList.contains(ns)}_createPopper(t){const e="function"==typeof this._config.placement?this._config.placement.call(this,t,this._element):this._config.placement,i=ls[e.toUpperCase()];return Dt(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)ue.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===rs?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===rs?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");ue.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?as:rs]=!0,e._enter()})),ue.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?as:rs]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},ue.on(this._element.closest(ss),os,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=be.getDataAttributes(this._element);for(const t of Object.keys(e))es.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:Ht(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=ds.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Kt(ds);const us={...ds.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},fs={...ds.DefaultType,content:"(null|string|element|function)"};class ps extends ds{static get Default(){return us}static get DefaultType(){return fs}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=ps.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Kt(ps);const gs=".bs.scrollspy",ms=`activate${gs}`,_s=`click${gs}`,bs=`load${gs}.data-api`,vs="active",ys="[href]",ws=".nav-link",As=`${ws}, .nav-item > ${ws}, .list-group-item`,Es={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},Cs={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Ts extends ye{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Es}static get DefaultType(){return Cs}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=Ht(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(ue.off(this._config.target,_s),ue.on(this._config.target,_s,ys,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=ke.find(ys,this._config.target);for(const e of t){if(!e.hash||Wt(e))continue;const t=ke.findOne(e.hash,this._element);Bt(t)&&(this._targetLinks.set(e.hash,e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(vs),this._activateParents(t),ue.trigger(this._element,ms,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))ke.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(vs);else for(const e of ke.parents(t,".nav, .list-group"))for(const t of ke.prev(e,As))t.classList.add(vs)}_clearActiveClass(t){t.classList.remove(vs);const e=ke.find(`${ys}.${vs}`,t);for(const t of e)t.classList.remove(vs)}static jQueryInterface(t){return this.each((function(){const e=Ts.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}ue.on(window,bs,(()=>{for(const t of ke.find('[data-bs-spy="scroll"]'))Ts.getOrCreateInstance(t)})),Kt(Ts);const Os=".bs.tab",xs=`hide${Os}`,ks=`hidden${Os}`,Ls=`show${Os}`,Ds=`shown${Os}`,$s=`click${Os}`,Ss=`keydown${Os}`,Is=`load${Os}`,Ns="ArrowLeft",Ps="ArrowRight",js="ArrowUp",Ms="ArrowDown",Hs="active",Bs="fade",Ws="show",Fs=":not(.dropdown-toggle)",zs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',qs=`.nav-link${Fs}, .list-group-item${Fs}, [role="tab"]${Fs}, ${zs}`,Rs=`.${Hs}[data-bs-toggle="tab"], .${Hs}[data-bs-toggle="pill"], .${Hs}[data-bs-toggle="list"]`;class Vs extends ye{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),ue.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?ue.trigger(e,xs,{relatedTarget:t}):null;ue.trigger(t,Ls,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Hs),this._activate(Pt(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),ue.trigger(t,Ds,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Bs)))}_deactivate(t,e){t&&(t.classList.remove(Hs),t.blur(),this._deactivate(Pt(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),ue.trigger(t,ks,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Bs)))}_keydown(t){if(![Ns,Ps,js,Ms].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=[Ps,Ms].includes(t.key),i=Ut(this._getChildren().filter((t=>!Wt(t))),t.target,e,!0);i&&(i.focus({preventScroll:!0}),Vs.getOrCreateInstance(i).show())}_getChildren(){return ke.find(qs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=Pt(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`#${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=ke.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",Hs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Hs)}_getInnerElement(t){return t.matches(qs)?t:ke.findOne(qs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Vs.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}ue.on(document,$s,zs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this)||Vs.getOrCreateInstance(this).show()})),ue.on(window,Is,(()=>{for(const t of ke.find(Rs))Vs.getOrCreateInstance(t)})),Kt(Vs);const Ys=".bs.toast",Ks=`mouseover${Ys}`,Qs=`mouseout${Ys}`,Xs=`focusin${Ys}`,Us=`focusout${Ys}`,Gs=`hide${Ys}`,Js=`hidden${Ys}`,Zs=`show${Ys}`,to=`shown${Ys}`,eo="hide",io="show",no="showing",so={animation:"boolean",autohide:"boolean",delay:"number"},oo={animation:!0,autohide:!0,delay:5e3};class ro extends ye{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return oo}static get DefaultType(){return so}static get NAME(){return"toast"}show(){ue.trigger(this._element,Zs).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(eo),qt(this._element),this._element.classList.add(io,no),this._queueCallback((()=>{this._element.classList.remove(no),ue.trigger(this._element,to),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(ue.trigger(this._element,Gs).defaultPrevented||(this._element.classList.add(no),this._queueCallback((()=>{this._element.classList.add(eo),this._element.classList.remove(no,io),ue.trigger(this._element,Js)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(io),super.dispose()}isShown(){return this._element.classList.contains(io)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){ue.on(this._element,Ks,(t=>this._onInteraction(t,!0))),ue.on(this._element,Qs,(t=>this._onInteraction(t,!1))),ue.on(this._element,Xs,(t=>this._onInteraction(t,!0))),ue.on(this._element,Us,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ro.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}function ao(t){"loading"!=document.readyState?t():document.addEventListener("DOMContentLoaded",t)}we(ro),Kt(ro),ao((function(){[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new ds(t,{delay:{show:500,hide:100}})}))})),ao((function(){document.getElementById("pst-back-to-top").addEventListener("click",(function(){document.body.scrollTop=0,document.documentElement.scrollTop=0}))})),ao((function(){var t=document.getElementById("pst-back-to-top"),e=document.getElementsByClassName("bd-header")[0].getBoundingClientRect();window.addEventListener("scroll",(function(){this.oldScroll>this.scrollY&&this.scrollY>e.bottom?t.style.display="block":t.style.display="none",this.oldScroll=this.scrollY}))}))})(); +//# sourceMappingURL=bootstrap.js.map \ No newline at end of file diff --git a/_static/scripts/bootstrap.js.LICENSE.txt b/_static/scripts/bootstrap.js.LICENSE.txt new file mode 100644 index 0000000000..91ad10aa07 --- /dev/null +++ b/_static/scripts/bootstrap.js.LICENSE.txt @@ -0,0 +1,5 @@ +/*! + * Bootstrap v5.2.3 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ diff --git a/_static/scripts/bootstrap.js.map b/_static/scripts/bootstrap.js.map new file mode 100644 index 0000000000..04c27d7bcd --- /dev/null +++ b/_static/scripts/bootstrap.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/bootstrap.js","mappings":"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","sources":["webpack://pydata_sphinx_theme/webpack/bootstrap","webpack://pydata_sphinx_theme/webpack/runtime/define property getters","webpack://pydata_sphinx_theme/webpack/runtime/hasOwnProperty shorthand","webpack://pydata_sphinx_theme/webpack/runtime/make namespace object","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/enums.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/math.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/within.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/createPopper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper-lite.js","webpack://pydata_sphinx_theme/./node_modules/bootstrap/dist/js/bootstrap.esm.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/mixin.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/bootstrap.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","/*!\n * Bootstrap v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shout-out Angus Croll (https://goo.gl/pxwQGp)\n\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`;\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * Public Util API\n */\n\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n\n return prefix;\n};\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target');\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n\n if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n return null;\n } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n }\n\n return selector;\n};\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element);\n\n if (selector) {\n return document.querySelector(selector) ? selector : null;\n }\n\n return null;\n};\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element);\n return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n let {\n transitionDuration,\n transitionDelay\n } = window.getComputedStyle(element);\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n\n return typeof object.nodeType !== 'undefined';\n};\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object;\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(object);\n }\n\n return null;\n};\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false;\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed\n\n const closedDetails = element.closest('details:not([open])');\n\n if (!closedDetails) {\n return elementIsVisible;\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n\n if (summary === null) {\n return false;\n }\n }\n\n return elementIsVisible;\n};\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n\n if (element.classList.contains('disabled')) {\n return true;\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null;\n } // Can find the shadow root otherwise it'll return the document\n\n\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n\n if (element instanceof ShadowRoot) {\n return element;\n } // when we don't find a shadow root\n\n\n if (!element.parentNode) {\n return null;\n }\n\n return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\n\n\nconst reflow = element => {\n element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery;\n }\n\n return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback();\n }\n });\n }\n\n DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n /* istanbul ignore if */\n\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\n\nconst execute = callback => {\n if (typeof callback === 'function') {\n callback();\n }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n let called = false;\n\n const handler = ({\n target\n }) => {\n if (target !== transitionElement) {\n return;\n }\n\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\n };\n\n transitionElement.addEventListener(TRANSITION_END, handler);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement);\n }\n }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length;\n let index = list.indexOf(activeElement); // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n }\n\n index += shouldGetNext ? 1 : -1;\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, {\n delegateTarget: element\n });\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n\n return fn.apply(element, [event]);\n };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n\n for (let {\n target\n } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n\n hydrateObj(event, {\n delegateTarget: target\n });\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n\n return fn.apply(target, [event]);\n }\n }\n };\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check\n\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n let typeEvent = getTypeEvent(originalTypeEvent);\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n\n return [isDelegated, callable, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n return fn.call(this, event);\n }\n };\n };\n\n callable = wrapFunction(callable);\n }\n\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n return;\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n element.addEventListener(typeEvent, fn, isDelegated);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n if (!fn) {\n return;\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n\n for (const handlerKey of Object.keys(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n const event = storeElementEvent[handlerKey];\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '');\n return customEvents[event] || event;\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getElementEvents(element);\n const storeElementEvent = events[typeEvent] || {};\n const isNamespace = originalTypeEvent.startsWith('.');\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n\n for (const keyHandlers of Object.keys(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n const event = storeElementEvent[keyHandlers];\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n\n let evt = new Event(event, {\n bubbles,\n cancelable: true\n });\n evt = hydrateObj(evt, args);\n\n if (defaultPrevented) {\n evt.preventDefault();\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n\n return evt;\n }\n\n};\n\nfunction hydrateObj(obj, meta) {\n for (const [key, value] of Object.entries(meta || {})) {\n try {\n obj[key] = value;\n } catch (_unused) {\n Object.defineProperty(obj, key, {\n configurable: true,\n\n get() {\n return value;\n }\n\n });\n }\n }\n\n return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\nconst elementMap = new Map();\nconst Data = {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\n }\n\n const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n return;\n }\n\n instanceMap.set(key, instance);\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n\n return null;\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n\n const instanceMap = elementMap.get(element);\n instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n if (instanceMap.size === 0) {\n elementMap.delete(element);\n }\n }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(value) {\n if (value === 'true') {\n return true;\n }\n\n if (value === 'false') {\n return false;\n }\n\n if (value === Number(value).toString()) {\n return Number(value);\n }\n\n if (value === '' || value === 'null') {\n return null;\n }\n\n if (typeof value !== 'string') {\n return value;\n }\n\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (_unused) {\n return value;\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n\n const attributes = {};\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(element.dataset[key]);\n }\n\n return attributes;\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {};\n }\n\n static get DefaultType() {\n return {};\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n\n this._typeCheckConfig(config);\n\n return config;\n }\n\n _configAfterMerge(config) {\n return config;\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n return { ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n };\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const property of Object.keys(configTypes)) {\n const expectedTypes = configTypes[property];\n const value = config[property];\n const valueType = isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n }\n }\n }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst VERSION = '5.2.3';\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super();\n element = getElement(element);\n\n if (!element) {\n return;\n }\n\n this._element = element;\n this._config = this._getConfig(config);\n Data.set(this._element, this.constructor.DATA_KEY, this);\n } // Public\n\n\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element);\n config = this._configAfterMerge(config);\n\n this._typeCheckConfig(config);\n\n return config;\n } // Static\n\n\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY);\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n }\n\n static get VERSION() {\n return VERSION;\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n\n if (isDisabled(this)) {\n return;\n }\n\n const target = getElementFromSelector(this) || this.closest(`.${name}`);\n const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n\n instance[method]();\n });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$f;\n } // Public\n\n\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n if (closeEvent.defaultPrevented) {\n return;\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW$8);\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n } // Private\n\n\n _destroyElement() {\n this._element.remove();\n\n EventHandler.trigger(this._element, EVENT_CLOSED);\n this.dispose();\n } // Static\n\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](this);\n });\n }\n\n}\n/**\n * Data API implementation\n */\n\n\nenableDismissTrigger(Alert, 'close');\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$e;\n } // Public\n\n\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n } // Static\n\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\n\n if (config === 'toggle') {\n data[config]();\n }\n });\n }\n\n}\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n event.preventDefault();\n const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n const data = Button.getOrCreateInstance(button);\n data.toggle();\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector));\n },\n\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n\n return parents;\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling;\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n\n previous = previous.previousElementSibling;\n }\n\n return [];\n },\n\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling;\n\n while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n\n next = next.nextElementSibling;\n }\n\n return [];\n },\n\n focusableChildren(element) {\n const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n};\nconst DefaultType$c = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n};\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super();\n this._element = element;\n\n if (!element || !Swipe.isSupported()) {\n return;\n }\n\n this._config = this._getConfig(config);\n this._deltaX = 0;\n this._supportPointerEvents = Boolean(window.PointerEvent);\n\n this._initEvents();\n } // Getters\n\n\n static get Default() {\n return Default$c;\n }\n\n static get DefaultType() {\n return DefaultType$c;\n }\n\n static get NAME() {\n return NAME$d;\n } // Public\n\n\n dispose() {\n EventHandler.off(this._element, EVENT_KEY$9);\n } // Private\n\n\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n return;\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n\n this._handleSwipe();\n\n execute(this._config.endCallback);\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n\n const direction = absDeltaX / this._deltaX;\n this._deltaX = 0;\n\n if (!direction) {\n return;\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n } // Static\n\n\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n};\nconst DefaultType$b = {\n interval: '(number|boolean)',\n // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n};\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n\n this._addEventListeners();\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n } // Getters\n\n\n static get Default() {\n return Default$b;\n }\n\n static get DefaultType() {\n return DefaultType$b;\n }\n\n static get NAME() {\n return NAME$c;\n } // Public\n\n\n next() {\n this._slide(ORDER_NEXT);\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next();\n }\n }\n\n prev() {\n this._slide(ORDER_PREV);\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n\n this._clearInterval();\n }\n\n cycle() {\n this._clearInterval();\n\n this._updateInterval();\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n\n this.cycle();\n }\n\n to(index) {\n const items = this._getItems();\n\n if (index > items.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n\n const activeIndex = this._getItemIndex(this._getActive());\n\n if (activeIndex === index) {\n return;\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n this._slide(order, items[index]);\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n\n super.dispose();\n } // Private\n\n\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return;\n } // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n\n this.pause();\n\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n };\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n };\n this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n const direction = KEY_TO_DIRECTION[event.key];\n\n if (direction) {\n event.preventDefault();\n\n this._slide(this._directionToOrder(direction));\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n activeIndicator.removeAttribute('aria-current');\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n\n if (!element) {\n return;\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\n }\n\n const activeElement = this._getActive();\n\n const isNext = order === ORDER_NEXT;\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n\n if (nextElement === activeElement) {\n return;\n }\n\n const nextElementIndex = this._getItemIndex(nextElement);\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n });\n };\n\n const slideEvent = triggerEvent(EVENT_SLIDE);\n\n if (slideEvent.defaultPrevented) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return;\n }\n\n const isCycling = Boolean(this._interval);\n this.pause();\n this._isSliding = true;\n\n this._setActiveIndicatorElement(nextElementIndex);\n\n this._activeElement = nextElement;\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n nextElement.classList.add(orderClassName);\n reflow(nextElement);\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n this._isSliding = false;\n triggerEvent(EVENT_SLID);\n };\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n\n if (isCycling) {\n this.cycle();\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n } // Static\n\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config);\n\n if (typeof config === 'number') {\n data.to(config);\n return;\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n }\n });\n }\n\n}\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n const target = getElementFromSelector(this);\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n\n event.preventDefault();\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-bs-slide-to');\n\n if (slideIndex) {\n carousel.to(slideIndex);\n\n carousel._maybeEnableCycle();\n\n return;\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n\n carousel._maybeEnableCycle();\n\n return;\n }\n\n carousel.prev();\n\n carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel);\n }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n parent: null,\n toggle: true\n};\nconst DefaultType$a = {\n parent: '(null|element)',\n toggle: 'boolean'\n};\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isTransitioning = false;\n this._triggerArray = [];\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n for (const elem of toggleList) {\n const selector = getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n\n this._initializeChildren();\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n } // Getters\n\n\n static get Default() {\n return Default$a;\n }\n\n static get DefaultType() {\n return DefaultType$a;\n }\n\n static get NAME() {\n return NAME$b;\n } // Public\n\n\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n\n let activeChildren = []; // find active children\n\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n toggle: false\n }));\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n\n if (startEvent.defaultPrevented) {\n return;\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n\n const dimension = this._getDimension();\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n this._element.style[dimension] = 0;\n\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n\n this._isTransitioning = true;\n\n const complete = () => {\n this._isTransitioning = false;\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n this._element.style[dimension] = '';\n EventHandler.trigger(this._element, EVENT_SHOWN$6);\n };\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n\n this._queueCallback(complete, this._element, true);\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n\n if (startEvent.defaultPrevented) {\n return;\n }\n\n const dimension = this._getDimension();\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n reflow(this._element);\n\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n for (const trigger of this._triggerArray) {\n const element = getElementFromSelector(trigger);\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n\n this._isTransitioning = true;\n\n const complete = () => {\n this._isTransitioning = false;\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n };\n\n this._element.style[dimension] = '';\n\n this._queueCallback(complete, this._element, true);\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW$7);\n } // Private\n\n\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n config.parent = getElement(config.parent);\n return config;\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n\n for (const element of children) {\n const selected = getElementFromSelector(element);\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth\n\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n element.setAttribute('aria-expanded', isOpen);\n }\n } // Static\n\n\n static jQueryInterface(config) {\n const _config = {};\n\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n }\n });\n }\n\n}\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n event.preventDefault();\n }\n\n const selector = getSelectorFromElement(this);\n const selectorElements = SelectorEngine.find(selector);\n\n for (const element of selectorElements) {\n Collapse.getOrCreateInstance(element, {\n toggle: false\n }).toggle();\n }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n};\nconst DefaultType$9 = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n};\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._popper = null;\n this._parent = this._element.parentNode; // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n } // Getters\n\n\n static get Default() {\n return Default$9;\n }\n\n static get DefaultType() {\n return DefaultType$9;\n }\n\n static get NAME() {\n return NAME$a;\n } // Public\n\n\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n };\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n\n if (showEvent.defaultPrevented) {\n return;\n }\n\n this._createPopper(); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n\n this._element.focus();\n\n this._element.setAttribute('aria-expanded', true);\n\n this._menu.classList.add(CLASS_NAME_SHOW$6);\n\n this._element.classList.add(CLASS_NAME_SHOW$6);\n\n EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n };\n\n this._completeHide(relatedTarget);\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n\n super.dispose();\n }\n\n update() {\n this._inNavbar = this._detectNavbar();\n\n if (this._popper) {\n this._popper.update();\n }\n } // Private\n\n\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n\n if (hideEvent.defaultPrevented) {\n return;\n } // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n\n if (this._popper) {\n this._popper.destroy();\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW$6);\n\n this._element.classList.remove(CLASS_NAME_SHOW$6);\n\n this._element.setAttribute('aria-expanded', 'false');\n\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n }\n\n _getConfig(config) {\n config = super._getConfig(config);\n\n if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n }\n\n return config;\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n }\n\n let referenceElement = this._element;\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent;\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference);\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference;\n }\n\n const popperConfig = this._getPopperConfig();\n\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n }\n\n _getPlacement() {\n const parentDropdown = this._parent;\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER;\n } // We need to trim the value because custom properties can also include spaces\n\n\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n\n _getOffset() {\n const {\n offset\n } = this._config;\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n\n return offset;\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }; // Disable Popper if we have a static display or Dropdown is in Navbar\n\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove\n\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }];\n }\n\n return { ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n };\n }\n\n _selectMenuItem({\n key,\n target\n }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n\n if (!items.length) {\n return;\n } // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n } // Static\n\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n });\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n return;\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n\n if (!context || context._config.autoClose === false) {\n continue;\n }\n\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n\n if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n continue;\n } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue;\n }\n\n const relatedTarget = {\n relatedTarget: context._element\n };\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n\n context._completeHide(relatedTarget);\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n const isInput = /input|textarea/i.test(event.target.tagName);\n const isEscapeEvent = event.key === ESCAPE_KEY$2;\n const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n\n if (isInput && !isEscapeEvent) {\n return;\n }\n\n event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n\n instance._selectMenuItem(event);\n\n return;\n }\n\n if (instance._isShown()) {\n // else is escape and we check if it is shown\n event.stopPropagation();\n instance.hide();\n getToggleButton.focus();\n }\n }\n\n}\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body;\n } // Public\n\n\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n }\n\n hide() {\n const width = this.getWidth();\n\n this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow');\n\n this._resetElementAttributes(this._element, PROPERTY_PADDING);\n\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n }\n\n isOverflowing() {\n return this.getWidth() > 0;\n } // Private\n\n\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow');\n\n this._element.style.overflow = 'hidden';\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth();\n\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n\n this._saveInitialAttribute(element, styleProperty);\n\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero\n\n if (value === null) {\n element.style.removeProperty(styleProperty);\n return;\n }\n\n Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector);\n return;\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true,\n // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n\n};\nconst DefaultType$8 = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n};\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isAppended = false;\n this._element = null;\n } // Getters\n\n\n static get Default() {\n return Default$8;\n }\n\n static get DefaultType() {\n return DefaultType$8;\n }\n\n static get NAME() {\n return NAME$9;\n } // Public\n\n\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n\n this._append();\n\n const element = this._getElement();\n\n if (this._config.isAnimated) {\n reflow(element);\n }\n\n element.classList.add(CLASS_NAME_SHOW$5);\n\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n\n dispose() {\n if (!this._isAppended) {\n return;\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n this._element.remove();\n\n this._isAppended = false;\n } // Private\n\n\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div');\n backdrop.className = this._config.className;\n\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE$4);\n }\n\n this._element = backdrop;\n }\n\n return this._element;\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement);\n return config;\n }\n\n _append() {\n if (this._isAppended) {\n return;\n }\n\n const element = this._getElement();\n\n this._config.rootElement.append(element);\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n this._isAppended = true;\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n\n};\nconst DefaultType$7 = {\n autofocus: 'boolean',\n trapElement: 'element'\n};\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n } // Getters\n\n\n static get Default() {\n return Default$7;\n }\n\n static get DefaultType() {\n return DefaultType$7;\n }\n\n static get NAME() {\n return NAME$8;\n } // Public\n\n\n activate() {\n if (this._isActive) {\n return;\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n\n EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n\n EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n this._isActive = true;\n }\n\n deactivate() {\n if (!this._isActive) {\n return;\n }\n\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY$5);\n } // Private\n\n\n _handleFocusin(event) {\n const {\n trapElement\n } = this._config;\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return;\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement);\n\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n backdrop: true,\n focus: true,\n keyboard: true\n};\nconst DefaultType$6 = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n};\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._isShown = false;\n this._isTransitioning = false;\n this._scrollBar = new ScrollBarHelper();\n\n this._addEventListeners();\n } // Getters\n\n\n static get Default() {\n return Default$6;\n }\n\n static get DefaultType() {\n return DefaultType$6;\n }\n\n static get NAME() {\n return NAME$7;\n } // Public\n\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n relatedTarget\n });\n\n if (showEvent.defaultPrevented) {\n return;\n }\n\n this._isShown = true;\n this._isTransitioning = true;\n\n this._scrollBar.hide();\n\n document.body.classList.add(CLASS_NAME_OPEN);\n\n this._adjustDialog();\n\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n this._isShown = false;\n this._isTransitioning = true;\n\n this._focustrap.deactivate();\n\n this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY$4);\n }\n\n this._backdrop.dispose();\n\n this._focustrap.deactivate();\n\n super.dispose();\n }\n\n handleUpdate() {\n this._adjustDialog();\n } // Private\n\n\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop),\n // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n });\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element);\n }\n\n this._element.style.display = 'block';\n\n this._element.removeAttribute('aria-hidden');\n\n this._element.setAttribute('aria-modal', true);\n\n this._element.setAttribute('role', 'dialog');\n\n this._element.scrollTop = 0;\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n\n reflow(this._element);\n\n this._element.classList.add(CLASS_NAME_SHOW$4);\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n relatedTarget\n });\n };\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n if (event.key !== ESCAPE_KEY$1) {\n return;\n }\n\n if (this._config.keyboard) {\n event.preventDefault();\n this.hide();\n return;\n }\n\n this._triggerBackdropTransition();\n });\n EventHandler.on(window, EVENT_RESIZE$1, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\n }\n });\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return;\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n\n return;\n }\n\n if (this._config.backdrop) {\n this.hide();\n }\n });\n });\n }\n\n _hideModal() {\n this._element.style.display = 'none';\n\n this._element.setAttribute('aria-hidden', true);\n\n this._element.removeAttribute('aria-modal');\n\n this._element.removeAttribute('role');\n\n this._isTransitioning = false;\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN);\n\n this._resetAdjustments();\n\n this._scrollBar.reset();\n\n EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n });\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE$3);\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed\n\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return;\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n\n this._element.classList.add(CLASS_NAME_STATIC);\n\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC);\n\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY;\n }, this._dialog);\n }, this._dialog);\n\n this._element.focus();\n }\n /**\n * The following methods are used to handle overflowing modals\n */\n\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n const scrollbarWidth = this._scrollBar.getWidth();\n\n const isBodyOverflowing = scrollbarWidth > 0;\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n } // Static\n\n\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](relatedTarget);\n });\n }\n\n}\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n const target = getElementFromSelector(this);\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n\n EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n\n EventHandler.one(target, EVENT_HIDDEN$4, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n }); // avoid conflict when clicking modal toggler while another one is open\n\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide();\n }\n\n const data = Modal.getOrCreateInstance(target);\n data.toggle(this);\n});\nenableDismissTrigger(Modal);\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n backdrop: true,\n keyboard: true,\n scroll: false\n};\nconst DefaultType$5 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n};\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isShown = false;\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n\n this._addEventListeners();\n } // Getters\n\n\n static get Default() {\n return Default$5;\n }\n\n static get DefaultType() {\n return DefaultType$5;\n }\n\n static get NAME() {\n return NAME$6;\n } // Public\n\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n relatedTarget\n });\n\n if (showEvent.defaultPrevented) {\n return;\n }\n\n this._isShown = true;\n\n this._backdrop.show();\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n\n this._element.setAttribute('aria-modal', true);\n\n this._element.setAttribute('role', 'dialog');\n\n this._element.classList.add(CLASS_NAME_SHOWING$1);\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n\n this._element.classList.add(CLASS_NAME_SHOW$3);\n\n this._element.classList.remove(CLASS_NAME_SHOWING$1);\n\n EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n relatedTarget\n });\n };\n\n this._queueCallback(completeCallBack, this._element, true);\n }\n\n hide() {\n if (!this._isShown) {\n return;\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n this._focustrap.deactivate();\n\n this._element.blur();\n\n this._isShown = false;\n\n this._element.classList.add(CLASS_NAME_HIDING);\n\n this._backdrop.hide();\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n\n this._element.removeAttribute('aria-modal');\n\n this._element.removeAttribute('role');\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n };\n\n this._queueCallback(completeCallback, this._element, true);\n }\n\n dispose() {\n this._backdrop.dispose();\n\n this._focustrap.deactivate();\n\n super.dispose();\n } // Private\n\n\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n\n this.hide();\n }; // 'static' option will be translated to true, and booleans will keep their value\n\n\n const isVisible = Boolean(this._config.backdrop);\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n });\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n\n this.hide();\n });\n } // Static\n\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](this);\n });\n }\n\n}\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n const target = getElementFromSelector(this);\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n\n if (isDisabled(this)) {\n return;\n }\n\n EventHandler.one(target, EVENT_HIDDEN$3, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus();\n }\n }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide();\n }\n\n const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show();\n }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide();\n }\n }\n});\nenableDismissTrigger(Offcanvas);\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));\n }\n\n return true;\n } // Check if a regular expression validates the attribute.\n\n\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\n\nconst DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n\n return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n allowList: DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
    '\n};\nconst DefaultType$4 = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n};\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n};\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n } // Getters\n\n\n static get Default() {\n return Default$4;\n }\n\n static get DefaultType() {\n return DefaultType$4;\n }\n\n static get NAME() {\n return NAME$5;\n } // Public\n\n\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n\n hasContent() {\n return this.getContent().length > 0;\n }\n\n changeContent(content) {\n this._checkContent(content);\n\n this._config.content = { ...this._config.content,\n ...content\n };\n return this;\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n\n const template = templateWrapper.children[0];\n\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n\n return template;\n } // Private\n\n\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n\n this._checkContent(config.content);\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n\n if (!templateElement) {\n return;\n }\n\n content = this._resolvePossibleFunction(content);\n\n if (!content) {\n templateElement.remove();\n return;\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n\n return;\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n\n templateElement.textContent = content;\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg(this) : arg;\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n\n templateElement.textContent = element.textContent;\n }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
    ' + '
    ' + '
    ' + '
    ',\n title: '',\n trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n};\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n }\n\n super(element, config); // Private\n\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null; // Protected\n\n this.tip = null;\n\n this._setListeners();\n\n if (!this._config.selector) {\n this._fixTitle();\n }\n } // Getters\n\n\n static get Default() {\n return Default$3;\n }\n\n static get DefaultType() {\n return DefaultType$3;\n }\n\n static get NAME() {\n return NAME$4;\n } // Public\n\n\n enable() {\n this._isEnabled = true;\n }\n\n disable() {\n this._isEnabled = false;\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n\n this._activeTrigger.click = !this._activeTrigger.click;\n\n if (this._isShown()) {\n this._leave();\n\n return;\n }\n\n this._enter();\n }\n\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n\n this._disposePopper();\n\n super.dispose();\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n const shadowRoot = findShadowRoot(this._element);\n\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n } // todo v6 remove this OR make it optional\n\n\n this._disposePopper();\n\n const tip = this._getTipElement();\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n\n const {\n container\n } = this._config;\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n\n this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n\n if (this._isHovered === false) {\n this._leave();\n }\n\n this._isHovered = false;\n };\n\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n\n hide() {\n if (!this._isShown()) {\n return;\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n const tip = this._getTipElement();\n\n tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n\n if (!this._isHovered) {\n this._disposePopper();\n }\n\n this._element.removeAttribute('aria-describedby');\n\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n };\n\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n\n update() {\n if (this._popper) {\n this._popper.update();\n }\n } // Protected\n\n\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n\n return this.tip;\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml(); // todo: remove this check on v6\n\n\n if (!tip) {\n return null;\n }\n\n tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); // todo: on v6 the following can be achieved with CSS only\n\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE$2);\n }\n\n return tip;\n }\n\n setContent(content) {\n this._newContent = content;\n\n if (this._isShown()) {\n this._disposePopper();\n\n this.show();\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({ ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n });\n }\n\n return this._templateFactory;\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n };\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n } // Private\n\n\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n\n _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n }\n\n _createPopper(tip) {\n const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n const attachment = AttachmentMap[placement.toUpperCase()];\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n\n _getOffset() {\n const {\n offset\n } = this._config;\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n\n return offset;\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg.call(this._element) : arg;\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n }, {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n }\n }]\n };\n return { ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n };\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n\n context.toggle();\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n\n context._leave();\n });\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title');\n\n if (!title) {\n return;\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n\n this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n\n\n this._element.removeAttribute('title');\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n\n this._isHovered = true;\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n\n this._isHovered = false;\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n\n config = { ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n\n this._typeCheckConfig(config);\n\n return config;\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n return config;\n }\n\n _getDelegateConfig() {\n const config = {};\n\n for (const key in this._config) {\n if (this.constructor.Default[key] !== this._config[key]) {\n config[key] = this._config[key];\n }\n }\n\n config.selector = false;\n config.trigger = 'manual'; // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n\n return config;\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n\n this._popper = null;\n }\n\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n } // Static\n\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n });\n }\n\n}\n/**\n * jQuery\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = { ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
    ' + '
    ' + '

    ' + '
    ' + '
    ',\n trigger: 'click'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n};\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default$2;\n }\n\n static get DefaultType() {\n return DefaultType$2;\n }\n\n static get NAME() {\n return NAME$3;\n } // Overrides\n\n\n _isWithContent() {\n return this._getTitle() || this._getContent();\n } // Private\n\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n };\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n } // Static\n\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n });\n }\n\n}\n/**\n * jQuery\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n offset: null,\n // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n offset: '(number|null)',\n // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n};\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper\n\n this._targetLinks = new Map();\n this._observableSections = new Map();\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n this._activeTarget = null;\n this._observer = null;\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n };\n this.refresh(); // initialize\n } // Getters\n\n\n static get Default() {\n return Default$1;\n }\n\n static get DefaultType() {\n return DefaultType$1;\n }\n\n static get NAME() {\n return NAME$2;\n } // Public\n\n\n refresh() {\n this._initializeTargetsAndObservables();\n\n this._maybeEnableSmoothScroll();\n\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\n }\n }\n\n dispose() {\n this._observer.disconnect();\n\n super.dispose();\n } // Private\n\n\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n }\n\n return config;\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return;\n } // unregister any previous listeners\n\n\n EventHandler.off(this._config.target, EVENT_CLICK);\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash);\n\n if (observableSection) {\n event.preventDefault();\n const root = this._rootElement || window;\n const height = observableSection.offsetTop - this._element.offsetTop;\n\n if (root.scrollTo) {\n root.scrollTo({\n top: height,\n behavior: 'smooth'\n });\n return;\n } // Chrome 60 doesn't support `scrollTo`\n\n\n root.scrollTop = height;\n }\n });\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n };\n return new IntersectionObserver(entries => this._observerCallback(entries), options);\n } // The logic of selection\n\n\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n\n this._process(targetElement(entry));\n };\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n\n this._clearActiveClass(targetElement(entry));\n\n continue;\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop\n\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n\n if (!parentScrollTop) {\n return;\n }\n\n continue;\n } // if we are scrolling up, pick the smallest offsetTop\n\n\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue;\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible\n\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor);\n\n this._observableSections.set(anchor.hash, observableSection);\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n\n this._clearActiveClass(this._config.target);\n\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE$1);\n\n this._activateParents(target);\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n relatedTarget: target\n });\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n return;\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both

    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 beI}57?ti7Ly<=xg6vYF1HMyL-Pu~0w&79?9 literal 0 HcmV?d00001 diff --git a/_static/images/service_stats.png b/_static/images/service_stats.png new file mode 100644 index 0000000000000000000000000000000000000000..7ce72428634e1da53091275d102def239b3f7a59 GIT binary patch literal 26817 zcmeFY_ghn4&^C(thy|6$igbOH-jv=^5s@A@q`{D5yw>(1S=9=>`lfAW91) zN@$^lmPBfR&_W>jBEH}G2hMeVI&ZFQ*w^04tXZ>W?zw07%G<|AI_J-Fon>KRIj{TZ zp$Q8M>pd2hV=<>$nOAOc89rzJJM-+36^Mo9!uLPNv2?Ku+$=0NSacuWHw(>OnF`6w zH81Gi!1wzYlV80u`u%Tm!hgbASFZk3bv9f}>lpXD-&b2cIv;C3{_%>|6*l4j-UUc} zC@Xk$PsF+CbjR&iR|Zq3R@V9_HB9;?&lH`q*T^Sv%By6B;boeQp;Nofq+F9$`|49n zHCR|?!af%k7IxDJhO!rqE<8W4&2sGM?5xiJyOUBUQ}!c4EW%YZLDftfzh)WTfSwmL z_r$!ANnw)QiGPl6k2(4wR?*^KK+MOT9l}jl7h!vrawE)?2JL*@3tfGZGy%mXTsZ~msH)$H` znLCDRH~wlc&Zk2D`fKOV@>kQTq;VJOqJRcw-Yy=uh(to;@XY{LXlj)ZB!hwvvjEfE z%@Lcs)fiIZO8%fV?4x~!0AbTh4JjLn%-yFRj%*renV{WcbD@c_mQ|2PUcI#hJb-G| zZHim`nj3}oFE{$CxXW1VFc=q(KJjPx506IFo}1R_Rf_&GNfI1icQmS%{y?fDDwowae2MdK8diWW|8yF9Lt$0u>kE9e9_T zZf1?DCX;Q!rhJ^+XxoU{Ylsy%f4>wl0iA=~o^Ju}7Hc{L>Z|X6Vka=J`Q)V{BZ7=7 z9a0o>1GV_@o0W*o>|NIky_BW*?-?CG5G$pSK777qTFiYL(n+a^C?l2C-z$?qD~rYc zB8^Cej7Sm(mC}hFoR*btZd(}3-CVm|zxz|}(dj8{K=-aBnlPG(dR5M5%2{K+6N=;B ztO{wBZ{BeTt_mkI=1GXH6z|Puq&gJ04d$%f=2O}-B=@Q$j44Z?_~ghhY(qA*sB}XJ zYG~~~ZabZfrgeWNq&VA!EMRq76*Tf1bNDsq$9c{ITi*PjUokhnpUmU2*)+vbEPEfZw7~3K|*#P_!p3Cyw#O!# z-9GQ_@a=N9B`JmidGDtHbz5@^=UmOISjXjdhzR7d~`d~F>mw18$pNW(h zS3SiS6nKHx6cdeXQ}l?OnFy*t>d^^37q?TJU zA9DkZ4(=O4C>azI&@O$Wn*M0VK74HafY`FfrqQFr&R5qmcuw))!#Vno?XZJ}3F*Zl z-ufVf41_yGhd9Jlcjy%BM$;QqF*jpublR@h>z40K33=H1-#40U5ZR{AQ(mV|=Xulj zqirMb5JI%dRJvH(PHex=n1GN&xb8H<+r}h6X967onr2{^18`DCJ@&xs+n?cO`@3Y) zHwPo#N(@+uqQbFo-bPL^ZVfX!4c4nV=-%Cg=kwcp?`#g&jm(MJO3KmAeHm! zvq6YCnNrfL403v<4RN8vU!(U2f0VvGW4c1RKutHwey!>7MPP}Xi^G=)X&37f!yG8C zGJ@2e$7K?+B*n?VKrp^#KEaO?z`v6CPWa%K-|(n@$zAH4511IT9z0Au*l6G^mw(?| z5L@L_9cL}bpe7ttSnJ`Vr;|qgnq2`~CdgLMz5*mW|8OCtC8%4kiN8rLMBUubjmAOH z(jrQ&nfBW$N5cDgBaO&ZZ*m#zfa8#dmo-@uw0OR#Z>8>qom{qcuc_7cUb z&qoP+t2r475ttUbT=VC|yk$Un9Tm!HCsIs%K_;Z;(}JszgzBt@AKsu59dy4)tY7*j z7nskKGc|+1RR>xvYr&QKt8l-_HYYDfa?et-X&-<%>!7BnTpY;MSR^`z-4MG;)A!_56)ij^6;=&e%k8fem}0kuHu44GunB{T5f;SZ z6fh<;4w_eyd;eBU<+G{)*7N+?T_$RFAd;)SnrF^F&33E2dZDQ~zvrWui62+ez^PFv z+P=IL7JjXt2}^yPcYG|f0g59tPMRa(GSuNGoRqHIh@Dg=atb$S*SHPZTxF<7fS$us zGFuphWYon%Qq?rcKg+}=n+vcoXAJ_t~&G$H%_IAA=f8tvrM@5fjOGf0l{c6 z1;$zS;>es=y8a(Zq0FQd-yMi3z$Ar14*2pKhNoCmjDajO6Xt|5cx_uaI2> zx;E&?`4gFI!d2g`o8N1*>$4R0!Nf&-#Z0$E4U5Z`-dWFZ-wPUDp!+ux+LRiJ8`he^ z>ML%zfMWlTxi6wwi_%204i~n>(N+5Lzm3%5+>QF)pWOa(0WTd*+cjnc)IF`g1tMnY zxKr%AMR)P?(fL7D21+NOdEVpi0|hY#2VDko)n(wH2Zr(n2cMbf2fbGR zg{%EKIzKK=%mi(&7HZ^LB^viI`CVQPIMCd$g_fNgL6_&G!80nSNgG+}CY=}hJss5U zkS*`XC91ABPJ+76Q>TX;2__z5o^)Ka|WC6!j(3IQ7r`Z!xL>YR4v9`yVwv@spA z;0%ePPa*cw=0PjV(>WD^gRo1wNe>{AjUd+!g(yZlD^mEFV-qb(91`N7Xv)0P*rl_cux z67svzXQ;hlj2s!vo{8V$^<>^%71e48Id-#&S4`K}s08!dHV1H2?X-i2qAv6Gzs5I- za)6gVO)AWG#0O6Y!HzNGV6$cZyEh2a$VkRVZZh+l7BhDO0kCjq?Q4NT>9er}-|hrm z0fJA^WHV?|YC7K=9O7rBI@`5UZ|6-^4F%Bmt6zIgET0HlodCG37IsYqjOi<2@kYDfX_TMu!}nLCoD(KmZgEDzYt0Bl2940L2*;20h4L<;4qK2$id|R zEMMUu6@w&_jf0EbN*f7N)tu=8ZclN88jwi(UbhuuJ{hu564hwnIki@|YsEY=37E%dXz`g?sGR_! z`RURUz7ag>ySC4))B_zE!xJHevbUwwNSn6nYXH~AV<1X9?>yz{XxU20ffZt5xzx>P zA|-J&4!!4$R`nX)$`A7Z`yT=+j`;wR3pvU^+;(3o5$#WklJMYd3~BIzWpwjp!{}19 zN9v4*yv=?#gGxQqU=;#IiL}SzPH8|J z%FzLcSp`V%%1s(^jNLw$4c`Xhs%Hkx;0zDFR)4cR^#ZzKI~IgGkL>5?m+Vu{hf@X4#G?rq3sMi5jwGEkiru%)5h(?`bbAdCvkT)?2I_9qKT4N%>e9B z!$l4q4u=o+FH0F=>opdY3Mj<-fSy=L&JTTTuEeh+Q847rSXg&_!^-fxf0B+bA?Nie z*)G9)zKb*o7X=%XTfKaIUs=@VQXx$oSEi=x7I$~i#qDp~VC1<#&5=VrC$&!NJL1g$ zb~l81j{R*v{O<|VI{#~g|24w@SK*KwV;D5I^i7C@iRDAPBpUX9L9o@86{?(#X-@rNDFCY8OcP^kgZimz;ZNCr4{sP4EXS3>2fZffJ zjPcw_Mk-qX{iFuk!9CDzz{pY$RmMRu^nj&@v<4XLr;T7UKN%BX-fd~dcF&^tGEMCY z@1|$VqrgCQG5(0%WL%YR)cMm#AY^I7%gd`ajh{JIq)vv}Zp^YTR3P(H&_PP3<#H2k zOSh;?rS=)THlw}#YVp-E-D)CABkgbiD(C37| zxb0{<_UKp8INe03)o)`h(y!3VmHU_Xdc6c#W1bJsWg2J zYI!7O$8+)5eZ6!a@X8MaT}CRN^{=OKJCIrGNTc6Hxg53G7_=^FwrhNZW2N z&+dEXm-IX*i0io<1KykI^9{P#ck|T%nQae;-t@~Oj`xn%rJc3@{_&o<4TS|piCM(7 z6=#-r9y=T(r%UCvoazx4Qn(Gkd<)7sw+LY zG(u|qa{Wl=RWohko5UzNGT+3w%Z_dMzE>EbHf$`y^W43<@Je@w(>2ORUHAtE6x4G05Jf||wLm2`opW|^ zauwMjeL2P&%C{oUm1lE84x-kUttp-V6H}wi5%RJQ_R{Qg-e=VRICjc?xla_f>BAK= z&>_VKgBe%554xmUh&>-7O{O-}ag^lZE{+BB>Pb;=m7<0y`{d||)o=EB8;u9POW20U zzt1q_>$dstE#+B_*&AYhl!)SdhTa4zS}7GaOty?tmaSSG?^}3$(+V1N$r_sSrdB+O za9w#56iSVs@F?}=4xa|(K+CcJ{Ci~Xv7r$Ni-=rtF=EoYydvCdJG@%B&fN<>jgc%K z98ZZ!S8poa&&6e7EA-Q16Z>o6mWNCDQlLJ5IwE#R1zQ_xXD@Ihs7C#>k%pyaJkE#W zB;xUdQ0^5LFgP?+*HC}&QU8i7HQ&5Px5OV$dgP!&>EBX3Yf-b|YZR=DG7Rq9_Aw{`~7=ZlR< z^vqaMw*C8n=((XUQ-;*G#%*9&=LJt&f4Q>p_mg|Qi3>|Q*Qz^`m#jh=#nhi1U2fCw zuo`-mIEn;Pzb5Nnf5ccSavrn;8XwT(3Qp|C{=fmRJc-;0XX`zVM zI@~A5K8G3`xila|Vnar$u401U>>sEe)PpE^VDp`j?J|DCR>W*X0Q#*>^~ffG`@v{5 zfbh}5U>PCAq=PM+zoY6FiA8_sj7nSD-p{VqgJ(DKBPBhUEmE)wyqPozC@wjNpMS#x z+PbLplsr{;_`87f=U~!Wf>IW}Iu^v((^vp#w5lr@XQr>gj14IA-6RwsN;h-9J7f-5b8zVK+(T5_)#c?F< zz+>X~vD>;P4w*U-h#`1AHJ{XFLr*Sk0x;5wy9#iGpQ8(38OnFN+d|`f>U=d!P^rlM zXGRC@=d(=gYQeIu6RB-^-k52HD0$r2k;EAd8z#yjhP%)C+vH{UZl}VWND)f_|-rj?U;d9iXc*E+Q(DMX3jQ|0!53~dsV6}P9 zAIbVT(PeYIV&4_Kn`H_jveT2(jV6W72SX@%GQo|!b;HDHEE0ZmDvn4f7ZM~E(8#?S zFx#}HJ{W*6NzE7`j1OgiInBmz+#(mq9}**12FMtAV$jYT{^FQlO8a6O{ZyTEctz~f zqrsk=k1H}0vQT3_1Fy8&%wAkL`b$5(19$klk&vdqpP?Ddm)n)j_d!O6j1m)OMp{V^V5~%SrBjI_&3@n1bpMXz zCjWq?+=E!Hk>-N=dK3Fe%_zM@;sWXva&NI^@#G0pt4bGhnfU~L&`7K#x)R$QG0;9H z$cXv@r}luO>hBA_6yLXzRNMBYF6DttZ8qp8rVU|-TGVNw3%x(%@0>V!G)ibNH~8|_ z>qe4yK61lzqtL0sW%EacWRGqIuSQByiW3bfhTmI5CX zI=r{T>o_I$*R1N6)yInV_ilxKsV4=#H(6c_n?)~s43v$i?ewkPQy;g8h= zs3g#eMX>78@;)c!Y;)bytBe{f1+110z@UqH%cQ++Eo1kkT>E-8y(nxoe*8An+MT{3 zqeNKYmM*XGxF^CsCPZ#ts0hPmLgD;>EAE=!&!a3Rd~i2;a_a+gS}P}`aohBsGCf>p zZCP!iu+FUk=WLi!_Q_*h|H%%n2Q7TtwoLa{$+mcf`1m!ZENg3 z@3feazoAz}7y`>}{c zoQ5cFhaiP9^1gGd$a@Y>o$++&<82N0mXh<$bJ2iUq1B)EgwsD9`2-91M0nc>KDX5< z(xt0mCs*T1wNYOXzp`9D1G{B5x|hkMJIf$S0tlSv*$T5=gFK$z-_NUSIxJM)22g*i zs3+%?nn!%kH0dNNZDKP>sX9Ilg%&!6R+EU+IRzM`23~zTvt?tl z0yLT$2bh1f9jNLb(MC&FSQwM3>g`-@B_^irFT5rnJWiPQ*|vXhSnjXHNUPthhXifE z=TCQ1S}4pQfpmabF~iE2j%KiK`=`UR+@#Wtl>iIl!QDBVRE=HxIZYfC&L~1UK7w?JKYVy$xv}lS-@-^W=Wlk*WJxJf z4~djiUY(+LIau)BAF(b^agw4xlWbitS{ZLpHZF6YBLI7zIJ8JjErWO}1_Pg=`9nMt zcpbTej^;CF8Gb71d;>njvt3>3@Et#~zIsC75Vb7CnkE`uPqLBhAI4iw?bSXE+07=a z{_sMbs$SRh}j7b!kAi2iNCMPqjIHNJL)&{_vq)TbgNjm!1-|AzZCEB z9d0K)xyz@4VG}@SJ|3WvsfJa}YZ(Zt@jPX>oUN{IRSha8SH$=|RY$%bOOos6Pt90W zmTmeArZvj)V|+I-pH(RNq2i3lty+UzX*Cc@s_!G(OVrTUb6MfeEp1?WW#g3kM8ZnW z@Yp=h(e(D%8-K~)|0`q6Qhr?U_g_EEdB^g1E>{x%_k`ttjllGZ|6d!ysI!ERrDkLJ zPw)B_+(a~8e*37#drmrY>>qlxszYbDG^$JL)lu|dv{_y-SSrr)V=`_Gs)U}t`R8hT z{l$A9X2Nw6JR%r~5;M{5>+|n^71~$F-8j0dcjm@pN3ob_xkF0HmrrH2&gZOlu3tRr zqFHht`{%5eo6|gQdWTLa`Kc1{S^U{n8$QMI&o}P@kDtEs^V3{+-NZZcF1R1mQI}LZ zH!=Oo#m)b_&ykXje*~0-99UYhEJoREgykr|{45F?)oJK_M()0s1M zw7B-qyDRr#B9T{S<&LJb9Lp54?Gxdu%D-(-_rgVKh5G(czkOfe`Mr*-o~(~9W^5mQ zQvMv%lD})Bca2iMt;W~ReNOafI(iO!kLATn(YZ@cDy;WE30EIovV{EeukZ)_v^3pw z_o~39Dh#h>`_qQhkt)r^Cn@%O5--bQ?RGQeKnos>pXqSPZmWy3V4aq7b{oM+F66~$1; z3)kURe-7>K<@#yN2^Lii@s*{%el6ZCJTB{`-BcFxs|-a&1^dg+&;t%dd&$|st(Cpu zfdKFFVwhJYEPSbaGW6NJ63_Ygp=Y4P_iK2C z6WKZPL=@{ty~&jM!_evF*1MsV7B=7ti;BgyH6yt7K+;W3`He@T18E|rgFk;J#l*xg zos9rQ5jHn%%FXmV7Zv1-%_EuH2Di4_`>haBo2gXP7f$N(mn^0J4C1mn84E%CwK+_B5C+x}Yu!jdx!alsC&H^>JwnpHP zZ1&zZTZRuo?aMw3l@EJc1*bc^IdCj(hjWRg%ckjj3QHgyagDWi4|8$`kqD6!IXQJ! zcy-)oW1DPIi^CWaGf_)iCZSP9VQkW2^p^(q`@wxLwX&2UPVNmMu3aB@n9DIfq-mJ4 z1@!B?c1UwCy%}AHow<(-`~89Ej@QEmUPVV!_Vbo+kC+eJjmIp<-!N0R_Z(WNgfJpv zOdRPomGK+AoYhcs=$VLX0p_3c^wsrt5jaoK+h;nJ@qCKg=M?eQ$2f}4+x@c~ck}Jk zn78_h1-LIuE>*eH2MJ%?L&VWTui3D_4#}rw+1_9r5f*iIflKz1C{hRBfm!I|xzWD}f81dG4c71L-=)m&xq#pJ{vZ;<$OZ2&8q;VIbFbpR+Gwz&`(5<>cdHA1a5 zliScF!<61sq0-t~|FDC9@3G9_f=0a%zI~~j3Z7nF66g6SDiL&T!Utwp{Ki7*1BRTF zgSj1*61q{n1_{=!ux;ebu#8wnie7nI>9~rt8~vL>Hu46W#dV5)!=$PZxfV3tLNnqH zbA9Z?3~Jke}#ifj0pJV}G^QYmVrR`#lhu&5{htsKfcI8#hh_;JS z<8`Dr1-OWXb)FVNS&M62vgaqWk-1x}3>;s!oDjRZoC-Sz)*RT|k3ePgN0tzzQN<># zjSa5%OkJ$Gxv{n)rR65NHZGdhTwH@@lBEa}-Qt#o<$JBLp}K{Ll&i=KK4oNMJ^gM= zJrj`(lgi;i`${+a?z#TemHy8=Kf*q>&U?z3HLT#Jbo`p#>}#hilmaFsu!A$pXMN88 z$%I{JZ|qKmIJD8G$nFb0$(}wwk=87T`2>}K!|hSh-h3kFg33yb>SI|2g=%bA#>IP% zolJyF*Kx-TY5hk5@YmYzBGsmtua8V&hB!~lf(U@;)0ve z*4cw2V@XwBzH%OZK9R*HBJ~q0(m@>`Rh2#L$1~`H#4>Qy=1y%haiLblBaR-WupvB) zsJ5sk6jrH^q^Th;NKr9DoX|vElUBc~e=V%#@I4$Al6!W=e=q zZL}37%t$C;^c%)hPXU!gPXQ6s&7>2zjU_G9B1$m*YFOyxTAsQL`#?73Jp*a#zNp-3(O|G7=8K$s3A~{0+vhkFFa6!sP-ci{)R$F=)hl1~==zw@Z~0ZY-XilD zKr$T~n*{J_G;iP@gIrFyMz8-vN4Q0w=Y~v&;lQ+2O4Deor0!-bIZBGQ)(oUmF%aTx zEdScYdri&FpdFkCX~@)gU}plz_~J6`1wYv9)WVSOEf*8vL%#OMeTrHs)%4zS$hGsXk<^Db%n#RTqaWJOoUU>;RrmGiu5QQ8-b2^xEN ze6;ZZ`cTH5K<6|jv@Oa|_9jneDTYjgymXV8dFX^qb_Sz_ku(B5=jV$~fbZuijhQLm{gJnR zOar{Ac#!E6a#NU2{*$7`3maiYJn%C*jkEnWlUYh} z8Q&L`;y65<03pmg_s6`v!(N~CcTFrecc{Bzb|vL?x0@8883*#~?ZgtMioMKq%~TQk zLjI$jZz4J?gH|F%h5Ty8dJuukNzURx6oU+weFX)##~{$YycBM}6zJlzFE3Yu8SF{E zJsgf9IKzyghjr~AtJeChS`=kC;G}Y9kf{RiCw9x3i-z@Hy9HW@76#1x9$>(&HgyuPSsjqAOQQsu1-ilq!L=?B{8MH>uBWW%ru3>@s}F5Bxnp3^TURs93}@>Jy-4a1}%`AXi!iQMBO z+4m&|m>eOgAtq+a*LqW~u(I|pL7W=?q;gn(-(b+NpunuJ1zlxe_f^=q-yx}-?b`Mp zt+q3E;b&!I&#^*z)SrVHeDc2@73?vyMGW(IFEe3|KQfbU1H-X7DYp|eRX-T)Hwe=w}RwlL4%%C8hagI8XDXOi*z~fw8uEr z+?Dvf(igJE=w>vAke&oghqRLL7|KxFZrdjX-)UYeXogSloWO+(V>exACMVlD1#L5R zV_xt$X1+k&nLNYe@jy{Y;m$qQuQ!u&j$P^*@C!?H(b@PUSwHi zo9Z$Q<48^sd{?`R7xsXeLi%nO;@{`(#t8dlw^Y~Xsi;_oIe1LO@Y_zRsCCYl?uX8q z@f+u^&42$sl#bnY&JuF!>78 za2?;`zB&ID3|TOFCOS^1&iKGOa0fryCXc^;_NMFM%P!a4u7}Ugs{84eJ~b5Z)EDy9 zFO>}pKDlLx32<~x1H@`8DXMmLB;UPoF44r&xiQ#KRog~XSD8nUBhG{)(doJ)X2Q`~?qoBY1}puAkIupRDP9`4Gh!jQkFi`uBdNNv4*<9KYt(oP=lLN7LI zMMb5jtv;G#rPhHz@duR}v=4r+aJo11w`Mid%+@SDg`)^73%`$Nbvz+gObv zHJ>cm+jGqKt8ZBql4}w@x&)V9b6|`Fxd=IVdd01;3g+^YI{&iZS{I+lT?FsLC zpNihPR>AHa$IgED>D%=qt4vjqd`cbDsUD&Jj-eevzml|=mJ_{HAjnl9$ajnP!ZGci z+3!wX<=HtPv2{Aiv`7cOFuUEq^9Z_%5KkaUE7~|dlgE^od)o7H5eNmpmPo*g-hc=j zndWTnubQhRQ%V8oeye;(6$G<${*GzY zGvi&TTdRZl^EW;$8PfkmA>5y{MD8}@31hV`Y@+vIVMNZh{o(354-6l8jRZ~zK=k7e z2JlHJ!rpfw^^WP*h_L;|QfeiBUt(~vQ6cd0)f@i-6X(MscW@k3{f<-QJ+yn~g!=A3by5ulNWt@= zwo+558QiQe(p;#S4UpRL26-ZI?Yz-1f8kTWKzFgLeduEH)N)S|&N|h}#xP+OZdC;= zn{V2;9v}YrJB5djcekRRH5R9F=i7_qCo#~nC6=;yEl&f%o`(lN-i(L7dMIolFxK1b zKCM+*1x8SvY1w=(f-l>KV%1i=G4*Oq4h*yke;XDr)=lsn2^;qpgO0Nm^ zV`H54wT;KZzZ2JxRE2YQ&R-s-93)21R(q6sct)h&3#!b{nZMKc%p|~8v`SON@{Ney z2QAYO$<91pUnX3{tEh~R^y7E+mhyWkc`icKwYR3K;JS>rT1ZWt<4tA0y0Z8mJwFPI zzRiZcpzc@9e7$7Q*&b}G&8EfbLFqRW-7*@meFnQ9rK$}Q)dfl4_f@s_Rmw_ucsj=& zu0}`0=U_62;!@(YdwzU;buPNb?V`LPY;l>CkkGJ1 zlV4X*qk^6s{2L*eRMQGt4c71QKKQr_NWR7!`*QUTw^6$X1fl2%$Cds7Gc_0Fimj ziiak_pLqP=T^RiMFv9T7Bq@~}Rv>nzDW z@^+^a-{h>6wt7u#&bsoaD~htxXoUnGl0zcQvPMku+Sy;px+eLLe)4?r@PGL(YunFH zXJqofSVmWG$?vZnk~L?wCT{Y#yvP;-WC}wi$Jm>0UYs8parg7|or6NPr}4u^W40Q| z6JiBVRSwqstzfI%Gu*MFBsk)d-fELpM}qG&)-Fn)Gcq>B zDyX4;)xJGBIyE%e?ptX%IX&`iJ08CBxzeh3wy2YO9B5z!a*j+<5G+-^tNtUo)}NUI zWvqoI!*UP`ON);(ErlN{UlQc)w|--J)1Xrk_<@ps)(kLl;PmC{sDMNH9n*&BFg<}7 z%IlLI9PQ`hwJ~3RkE^sN2&acD023xy5Pv$AL6RW>+Ol)lm5;Y_%NF`6~T=UBJK!B2Wgr$S@*#oK*Slrd$+xv1O zTpna&Bh&arzN%uWb-OGiJO-lrEUlVPxlfEDdTD9?Zk1=507u+luEFEFQICp#IQl!g z0Fw;FxKj+$QA|v~)sfo{|Iamh7-7Uzwq`|SbEKTn^r?`6w z4h(niU_B3!Kq1+Y-=^5DH~?Q&V1QPKQA$m8aFjrIvFk*d-R?{7+mfpha%J(<7mp0Z z^?WDu9p*8$8^#n5r;#5nvbUXGGd!nP-S60oZv@=Y`TgUC6Kt7(ZvB$)S8wMhgUP2$ z)v0kA+uK)|S>YbQ>-2tZ@$n=fSm?`czKHi4`-K{x?B(y=Y3D!a;9q|&75TzaoVC5& zv~;XFM2g1zjoIb=y?>g6SDO~9D_9;bR8m*FVY49G&WUGsn!FPrtEE(by@rAGiEC@g z)ni)&{hM9iubiM*Oa6FpjopV#d~xI7tYwKdC=X{|SqvX$o84T>Smzrv@eaatvAOR} zgC~EyzLpa=i_DUV=9`rfK#D$9&a}E?wRx%?BX0fST$Ui2>_a-V^KC)a=c!5LxN!Xb z!>qPkrHu2GQ0$moHS&JU!(6CYih-IoMRgoQw<4zGcl2KFcJXko-YkYAP~t9YBVF1Pag{E320Na zSSha+d;#h4+E0xHbYmX4zRY`vc>1cw4PEiwrZ>M|d)_HaFtu3vgiQSwWW)*l>Q=#~v?@)^=!S{1n@4Q-yAqb zr}VaP8nnOcZp9ytu=BnDusVi#HV71Pn`xZM%ZYW(qJ!eyp1V;&;BO`T0huwgz?$>c zxe~=qXXf<|`u-s+K&?r4qsfhP;b}ayNl)uvn3)n~sN{8g*1H|$SaN4D~AJbqK+ znoBfG88Q2B>`l_gTdB-J)m8<1(t@6_7Stib$OElL^oS#o6McI!@FQVPc61!h| z)&Jv!Et+HgGEFnYZse{o%SGJtkq0aR2YdeNy9i8rdrjW|-3zdhg^7$Aw`Rl>=!Z0F zAE50UNrOS9tj*`(4+N`Qces$WW@JRK1K`-3o?;~>rGe_mU4K5MFxKbnTY*2*4Qb8J z7F4IZHVun8u-S!$K)C410|k0W2ynL5#u`yrm>vRe{EXf(_ua@mSe@27k8h%7~$U19^ z3K*aL#T*=mD*Qut7qTcXKQNuw+EjNi`Of*?Jw%PmWq6JC6Bwf_w8hd{*unA3W5-Ws z1rYb(AJf&P-<-VWYaRdfDI333DtK+1qnwwc+eX#tJ~Zw{$Ba*#GQbUd1Kx~CW+$%@ zJwp5lOHJA4s(o=04Z!DQK8+uZiFpgf9iRdoc`hd%--Hs^mr%3g>_aKqBNEs0U->_uhW; zWrG3l)DV5|%Z9!GRF=O&ChIW%>lKs+7)o>e+kqHqCwy3S?+r%37OKL-YD|1@67QIn z+nVTqv+Qy9HiW`_Vk$c*BTVTN-k_}oX|esNs-hR1kcNTU4c!Zg3ABRlGDrY4G?AxP zyusCk8QizO6?}l(r@dR2R0>%kuK`&8`!DXZ8O!ERP4-&f33>I+xDkDXQu; z9Oly5*L!2#>e>a5XHX7wX(ryyy*R};Gt&{BS)v;eq0-<>fmcVxKb7s1Vr)t|Y;G`J zEeym6-uef*In~W6a>Y|mFcc8M2Cw~{ZCfTaCf|DhdVsr^dq+_Dqf8a$@v*7N8BF5S zGB+E;s-|Usr7ONUquoMbZcozyG1|<$e8X5`Jf5G;%GMO1=`E_OBX5ZFm;8D{Z<>o~ zarJ5QFmxVi7`QkxI@8N_p^&r|2hpA9sQYW@DpnEq%Kd6N^a^QNWYxzmPywO z`bm4*!Q4VP9g-{1G>75QG`*jh>l*gu4YA(6+?P#NgNWjPpgtra z&-I!8>w%qdo++FxZA~ zd&_IXdahT2BKs54POg%(lc$_J^2T{`89t$ zYX4WFi0RzS z;F1-%G<+<$`doZ~afr%A)PK%ae~RqNN<;buzHTQncdISl62+`~Eo*!3)%+V=P+eOu zspBoJYxk#CxVSPjf+|jT=VHYY&U%!%E6S`QzrvVVRC#R`_l?H%RqXgfm;c)Ibi&)- zI=|)LKEJ+|Rj(RV!f0tbz&(BCD`&M7Eid;3HJIR=Z0^XZ4HuZ-c-u<}_G@cyeLXRe zjVP#1;O1J!J;||2K8d}2*|bGnzC*0DaAlc$LFh1=6*UjWUfHwM#dzo=JWGO83=+?+t`{ffRtHf!&a2mYxMb_lY>IXuGVXr^tQ0Xa2Iaf;Zw3?)rJXe7_pAfTxIsN*P zPUnL26X}bLFf5yUV~d@`e)(?e>cmTCjc|TZkNv)b#MyiDi7$Pz3ah&tJ0XPe`w;Zm zw>5a9?;5W?^#v5%90q>S4_*VPX8(dGfBotk4uXFkZB)3~`Qhorx&HlTde>R4u9qBd zP}I5~(uPaUPnIs<^>V(;B&OCTXT-6ecUGapPIDOr`B~Y-{w?uRp;FB9Ky#%a3I^5o z^YdJY=?ZTcc3teV4=%(c0B(L-NQD@rwHHGFyJ zu1MWQtLx_o6ei2z?B`IdeF*e=4mEpO3PKhg=nG!!WWc0~H=h6j^|1^+&5TVTULn9A)EoOP9b)sKOvgdYYo^v)mVfh_$ zIlRHvsl?=_Lv2>2nK14`efn7$LZ6NOd$t_+AmL40u}-D{W+RL5!bSGiZ(fT-j@4On z{sx?iF#vTuC~{)q8>XIP(PuZlQ}&g<5{n=`f9ougsbKD|=F8(%IOz zuMb9*Kp4p4qgMvvdZMlu>%?;%yV6%B88ZD2_z;rYl>Hx2C}MedtS5ZO0M8Dfz+108r7mM|P3voz|%Y=!hUQ#?5HseyosjE`KRX9iGa`di09pR1BgyLOn5BDY$C-Lip$|+KVDr)r~v_>OY!8UK1p~wF!^Nq`O)~kok zZ$Gm^oo43zgTrHfJ$RcO`J&eOZLRYekCUI^OLKRZUUJ@Lrg-K%>(TZ9)7q8CL)pFk zkaVu=w0ubB5x4+hj zyLVko1iLu>xSy$V+P&I?M2-uZ9}Y6vQ+21Qs))G6$^7tXN@{et(+Q)vL3NcV#=-!CbarrRCc^VLN|k`$a+vcj^``y66t`&v;dG;~acxzRK7icXGo zkq2_%cE7CC)s_rsYQM3edfQ4+g@8crOS!aWPjiX*4gfih5x&rHiQotNKA|f87N5D9 zo8k4UzTyYpY{YU|et!ffNy6u6N8hgv4o~sg%wz|7^T4Rb0{KU$$UvOqzps67@p&VI zmyD%Vot|BpzQg#jk8RRd+T;row$I3Vm5KvW6>W6i3`)=6pM#u0DA2RPq1nay>1T!} zB{{A&kM$%^d}0{A*L9w856|0W35_!1wC*_NY>ZIjEU?1*3$eeKXXM2h7^JtI824LQ zpQionsVsg$iUYe=c-E{-Am(Sas&o(+mKvLtwaE^n`{brQIUKa|`np&aKljr$^auAq%Bw&mQIzM95rfSRMA z&ws6alGz?h=-v<3-Q6Yv&G$jR40g9!c5p`(o}r4jgm{-ibML)E;Fg<|3{N(AY;YrI z9c7@NRt~9PF@adY5co6H!$qvIl4yc-2wLYLml*c#Ess;}=09DU7@a@!^L0nIrG|9b zU;Z1Z9g73M(ZxL;?FivH`T|Y-SfIcM4yWbff$Y4>=NT2dvjkMp-`|FybvT!T#Kbn z{9-?n6&2N%wGnE0u_ZKMRR*4Uo_*uPhd_|r0Tv*c5p|Ex;La*dsOOEhdm;hQ{tFo( z1iZZIs+k|5QcDXUg`)B~O!%`K4Sr;Hyb?0T{Q6Py;C0-Rz^Lb(Y-qk=pXD6f=qOk( z&eLydOvrQmg+XRQg{{kEJz>@*KO;+R-z$%;#~L2wR4kkJq;m(>MYlaadO|fflr^c! zwtJNRrmnbPQWhP|q$M2H? z{Mi}u<^%Ezciah0B;cKx%0oTUEq6xQ$OPuxiSs7dmC};pG|#+4C_s*?8Zs1BOj0;7zz!^b9XkS1Ml-HP zEBg7lJ)7(=y!fz7er&Z=6Xe1meUgV%RVpl^7SIp2125iMXc~=>uJ=jYBh`yRs@+}0 z3~}G}NPY4{&*bia>A+E_3@W7J`@=v=W3SzSZN1mDS z;>6Ya>fc(PQ;t^Ke_keo2-F<#q|YZAK!#4&%y&*D8;f;(c$K@!Z+R8p!|U%B1sZEf zGzV4w;}xRLCo%+94DpV&3QwGer7j(imKJ^7;aIHL=0?>TP^c0}jl;pz0>gu73GC|U z7w#lUe9#j@aQK=}3|LN%*F;IAcelPr{cBT1A2ZEKp|Y1YrES6qu=foi+uS@n!YAUs z_Vi%xF{@k!=^cbwd4)wx=ZTR=ZPuNdXz)0_rFon>?bAs`0IXXQwrTrua3Er-uXKHC zn4No{rwQd1vdO%EhOI;9NJgIJh&4C&7_*6`Pb~<(0H0Tf5o`RzCIb3PP;*-xryj&u z8YI8n$ZwcE56=N(EHTUM)Xwa5tvT@!cnL>Mu{Mnt?$g-i)W^K2G`cJPNUQWKx;X@3 z0sudHiTLtYDSQ>iHQpH~H$0jk-hAin2a`1y7fJ>?!wF~km3ljvb)HPoiRpL)p(%Gb zL|LGA?W6vE#_tTUm7lS}yJFH*yHD3@YlqH8MreO>PlFsBPt&i2r+mB$s zePd^alVx(IyZib+Y-}jLZP=0!)6JPI&)tFMImyb&QC|X?i?4;6l;3x{s{*{oCz2k8 z{8aAk5LV4P35l@%h!Fbc*LW`mXeq7;W??AM|@|v|4v%hJ+#a8FucETr=4@&j4u4pS4_)1lhdv z>Q!~2%M|((c3IT1DkbKAG)fIAS(1p4?{M$_E`XD~_rlD;QXL=*A6`l_oMRT*FnfF} z?{(;*}CW|7Kg;#}Xhvoae$=0lZD*l_c>Xzp%(xLD%$ny|TRjr6*kNZA~K z3E5j&@ecM{2L$zP=DFE#WuYUZv&S1&z6$aOuC-b@!pPtHbndvhyme&jf92g$nl2MTH%(5g>v~X5F0wI@ z5P80gisej{tj{<6+@778fjs@Yz+>i%pzBaxem=@f3gtG$PEP~wQ_FJeSp3A7k&(~J z>%;0k4+iCwk#Ewj=&UdA+^lEhxMr1UmHth1eE5sLZjk8bzD#J6UK{hph#`ZiVt$^; zW)nW$vxa`-HT>;Y)9p@ayKD`wA`PM~Eyw-uR0N)~EIr+?pfU8!aR|vHg~Qx6ckOyL zUafD2V{U_-KN9{vRkNimDt$LV_Lz{vgR7U->|Wf+y!qF|v4$yRPRhv*8QhlLvi;Ar#m-o23@l&^s+*%?x>M&T-`kVj@g+qQ`~||w)%$9vgstP_uYXDT zEOSHR><#E5@KxXqitinr&7iS#*QKav=Yb9Bdao7@;EjJpR1j0Ymy;Pz(qBSMKBp`a zIVECOQT66j)+VUkVY*bHFT_r7J)|JrNS1}rG4WDZDstxnS*Jpz&ugpIU70?WCQ|jv z^;BZkiP<-RXum$;KX%wHeaeKUxJq?6%|`0fS;j}&^4A=q-?fwKs(O>1rFb(;-Ks`3 zn!AToe#A9X-|g%5@HIawFxrg)L?lHQQc~_%T-3BU!Ap46oKzLu2=E}-P1zOa%uFrS z+hjAgyWLyx*8Ag^)BteA>|5OV(Kg^zz&eKQk(WPpb}kj@hQ!#(w%=A+J`M#DEY@?Z ziK=1cm9*!0%U?QA6r1~sP1AOaE|#6H#NkTIOX8=r>9whGGN+Z8A_>gU+(xrHr?mKc z8p~BZ=QJ7S)8^mQoG5uyC}?*=F$W98enjaf|7UHkuhd#s#g&+Vv41Lp9Dba@a--vv zt1+Mj|H(`K*7`y*$4|;*smW}_{rbOK*G^pzFoayIT8%4Okp9Zg3wyf@%Y!a&7vD2T zdk~AOq`3VXTyRn*rluFXrx@AT*d)E7IP(WCndzwyCeTKa5A08H=MfCW(^VnIpyO{5 z95HP+{78>)kF~!%)*cI(Hc2_dLhkmhrSKn{nz`G(?}SfLbvg)8EfsLcB#+m=GT?D=&YTl!_|0lmG$|BQ-U(oMQH# zfZk3c=VN;gvl*O@Tk(F(D-r({^Fp@Q7PA+EQK_k%&%4D#LPCHMl6CUYiywFbKylz^ zMU4Z|Bg1w)dDO_g{Sqp zFs%8)NQm)zsW0(XU|`_P+}tZY@kDLWf%4nT@SPs`b=i!UuUN=cjW2d=F$JcEW?N8TP!JQKjNXZUFo4x7gE^ z1aQ7#!odt@?lExr2sISb0^rq63W)xim*(*?j7-GwlaZj$ z{RXaD#;UwDxjei&I#L+I-O(u!*ie0xGgjgf0Fnm{TQ%XWCL zaO#g6`3npw$@hiHYPhF`NR-4r9tD6`g<{A%MtNwf4fG#9qglXto-fLN^Ub~^G-+=4 zWtv)=WJpy7Se4i@M$;QemV|mDmhJbRi3HzgeD$1w*Kh&-15wq>zIno|UAEOgk z*75G!^Mmfsvygk*Ar@orypKQ|Wq8P;^>Auuxl}EwTP>;J?~K`Nt#E0>^wWmog9;j0 zpj5L5* zZa^m5-Zqc-Ipx)gyu~F4UrFEYU#|1zxz8?9i9aN1XPqgUXK#~^+?MQ-Zv7@D z@vKpEP%{Pi*5Sdy7B{!ufHwKG?|Ra$nGUh^{$3fbCXs&6iWh|3ljds3ByG4f6O(sv@Gn#?kUI$q$4qN-?GzDG zoFZ(|iE$e3mxW)xw?0N-ISZU8ebN!r7L4_Hsz$$T^x~**)u@0T!#1HFs7g6`4wi$Cyyj*a>3Z#pgz)0lPlZ*vQK=XV`lF zk%^#Z>5jX}URyq0cE=JbHQZDJK}dB-s=o-{Y4b$-PeI|Zo`ks? zEu;ltr2!Ra4!Z{G)I^Vo9%p(KtI>A(g`Ev+S<(>@XRdzfbSyFGeNsWra^}|O8VkyI zP`s$poYehSe4OsmR)0%Gm)q4AbX5=oP(%pS%6vfHP1{*j?y`MuG&zJySbRUA>N-S- zoT62!u19^aBiFImEn>Z`+g*fhg9+%g&Cb%BVOLxv+OZ`g&G9wE92=X`t~mR2?-a=? zbgH51*jYHaT5r1$y?tzduOzJ!n)yc3e1m9CdJQ;yNXAo=^ZkY4xj$ zS+|gEcL9|TdmEn@dX&x`O| z+Xy<=j&Wh7AdoxL#Vai=IHPw*Q;&#FNo6veoiZ`m6hwJSk!3yyq-9Mr2jIxe2lwGS zd%IE+l4KxjEU|nW9uN%=nzzrpW)A^Xa$x)fphJ`tzZGF+a?A9Xn3Fkruc6@h8gm@! zeG^MpE}sqZv$p67!dj)n9e0R-Mmlc%RG38A4&*iVloA$5LQl74q97w6YFUAxTnxIIpn zpHnEW)Q$lMvm3Ex5oW>5O=t}lTw{*+aBz+kc%t|jWKAVVWYEP{03-ob0S=0EY2P#X z{D$-R4gM`c0)QPzhJwwc2UL+)20S$ed~IxE@WGQ#yF)~G z2$HlYr&I%!6Mn4cbYG$Uac=I19I?E|`KBwnJ%PaK?Py1i@HT*WxQeq+nUBGrG=}1~ zcjyz*9k7#})ID!@(W0E+2e(e#J>R=rvc{>FXUvzQg1-jWfHFxw+!Xv!7iOz^(kqE% zTd>W3VEl@OhMf40ntBtfc9HGE9lFhx7rKw$_JfR_JXk`kE`N~{3&nPLEy5TvP4bM9 zOEiFFn9XgMlabTfbIk$y_N>ZA3H|PWp`c-*c9^y%%v$v1KS4CAN z=$;nsv|-(1uNrOa8^tNZaDDYejof_FZ?lfnRt0tZVs|F5Ur+rQJYJiyD2+;>CV}iD zc>IG)8$uY8UKrq!rSUFmf$C_qA~?>=ch-Jf=Gqca34DUe@t+b}r}p0s37LH3He69p zG^>^E!enk=j8#kQb$~kCS9mD2J#c!==?H-w(WU&407>{1{__61LMWW4Ia$^OJQI0) zuQJULb)_949K4iAMCaFrq_`ZKgwcj!i}~ENEH-y)N3kIZDtG6-m1o|3-U>&t9_EV- zKaaz>T98Ty1=}JZwo)rbKH2XNHW+Jw9Q~!2KZdY6OQr7f_HWD_{Jg36h;HY*6CYBa zSS`KP+hPmzpVQf$8%v@|+g5EtKbv8;sC`t(LoCDv#Zo5(aEQ4ylkw*#)aHu6tzA19 zv=kuxAf##Ox{vw%Ncync(b3Nf!!-!2iBSq9kz@=Q-w9@XgddpCj_oF-tU2U6Am4oOT6Hk_Lrv0V_1Tsq zzDLnUjF9W({%Y-=k(hmt(I%P)v7-*ma}RTGL?$-|t)8QGSb~`0^sxDNEwQzOrk*!C z3gb#PYl{DSNY|*^E=~pVU%`qh$|_JI<{C3oIj9f-@xQlgpjW?(TB&Ap#$d<;#>}ki z`v)#6BeeiS+9T!=5@C$sg#TY z{q)mApb}3D*$D*ts;YC|?(3X)oSmDF+A#O%t&|$C)NfsM!?|0|VGd@P)%YAy0+JzR z*bkTa1gg*BKe;K8hn>=2I~ShJq`-}lnQ433Z}RAsQr0ucw5ilo(V8+RGpmxGlvkPH zhw%O$6FHcF;)kV#J4WSHKoo$%Wm=YZnw_kos4=!&WU{`ZwxN{zZH4Qg1XPGuh?VJA z2|DJ~d%?e(H}x7W=}LLiG-iE&#MppBwC(M}x~MTt%diM$DjBNp{8?EAjiLK46XY7H zp{m}W51(XfJ(iIDW1{qCeeV~{BB!WIs`Z#`yw03F{kIG5kdj z6&{X4-P+bTSUL!W_>Q?@eW(;~il>I;C0d8&VB+edU}C=}zj8oiaI1yKPVJCsb$xNh zNO7E*rJ`uLCp7Q?v)2f&6OjAAmm2vPWkDq#g19J)D-WLWOOaFR^(C zV=v+wr60~G1dLuAetU2dP=OpbDU�_G;qyt_Pzz3pj+|%?|TtZZ0Im6aPn=$;vw5 z@kcfbt{F*@AbvLmN`Cvhl@Tav%0WvydgYItJ}Syp@&B{yCwl^Q9UTsie~ar;9-i0K L&_R@_Sw;L0pfa*j literal 0 HcmV?d00001 diff --git a/_static/jupyterlite_badge_logo.svg b/_static/jupyterlite_badge_logo.svg new file mode 100644 index 0000000000..5de36d7fd5 --- /dev/null +++ b/_static/jupyterlite_badge_logo.svg @@ -0,0 +1,3 @@ + + +launchlaunchlitelite \ No newline at end of file diff --git a/_static/katex-math.css b/_static/katex-math.css new file mode 100644 index 0000000000..bdd1634d81 --- /dev/null +++ b/_static/katex-math.css @@ -0,0 +1,50 @@ +/* Responsives: make equations scrollable on small screens. + * See: https://github.com/Khan/KaTeX/issues/327 */ +.katex-display > .katex { + max-width: 100%; +} +.katex-display > .katex > .katex-html { + max-width: 100%; + overflow-x: auto; + overflow-y: hidden; + padding-left: 2px; + padding-right: 2px; + padding-bottom: 1px; + padding-top: 3px; +} +/* Increase margin around equations */ +.katex-display { + margin: 1.2em 0; +} +/* Equation number floats to the right and shows permalink for mouse hover + on the right side of equation number. */ +div.math { + position: relative; + padding-right: 2.5em; +} +.eqno { + height: 100%; + position: absolute; + right: 0; + padding-left: 5px; + padding-bottom: 5px; + padding-right: 1px; +} +.eqno:before { + /* Force vertical alignment of number */ + display: inline-block; + height: 100%; + vertical-align: middle; + content: ""; +} +.eqno .headerlink { + display: none; + visibility: hidden; + font-size: 14px; + padding-left: .3em; +} +.eqno:hover .headerlink { + display: inline-block; + visibility: visible; + margin-right: -1.05em; +} diff --git a/_static/katex.min.js b/_static/katex.min.js new file mode 100644 index 0000000000..a919bd4407 --- /dev/null +++ b/_static/katex.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.katex=t():e.katex=t()}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t={};e.d(t,{default:function(){return Qn}});var r=function e(t,r){this.position=void 0;var n,a="KaTeX parse error: "+t,i=r&&r.loc;if(i&&i.start<=i.end){var o=i.lexer.input;n=i.start;var s=i.end;n===o.length?a+=" at end of input: ":a+=" at position "+(n+1)+": ";var l=o.slice(n,s).replace(/[^]/g,"$&\u0332");a+=(n>15?"\u2026"+o.slice(n-15,n):o.slice(0,n))+l+(s+15":">","<":"<",'"':""","'":"'"},o=/[&><"']/g;var s=function e(t){return"ordgroup"===t.type||"color"===t.type?1===t.body.length?e(t.body[0]):t:"font"===t.type?e(t.body):t},l={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(o,(function(e){return i[e]}))},hyphenate:function(e){return e.replace(a,"-$1").toLowerCase()},getBaseElem:s,isCharacterBox:function(e){var t=s(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){var t=/^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(e);return null!=t?t[1]:"_relative"}},h={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:function(e){return"#"+e}},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:function(e,t){return t.push(e),t}},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:function(e){return Math.max(0,e)},cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:function(e){return Math.max(0,e)},cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:function(e){return Math.max(0,e)},cli:"-e, --max-expand ",cliProcessor:function(e){return"Infinity"===e?1/0:parseInt(e)}},globalGroup:{type:"boolean",cli:!1}};function m(e){if(e.default)return e.default;var t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}var c=function(){function e(e){for(var t in this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{},h)if(h.hasOwnProperty(t)){var r=h[t];this[t]=void 0!==e[t]?r.processor?r.processor(e[t]):e[t]:m(r)}}var t=e.prototype;return t.reportNonstrict=function(e,t,r){var a=this.strict;if("function"==typeof a&&(a=a(e,t,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new n("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]")}},t.useStrictBehavior=function(e,t,r){var n=this.strict;if("function"==typeof n)try{n=n(e,t,r)}catch(e){n="error"}return!(!n||"ignore"===n)&&(!0===n||"error"===n||("warn"===n?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+n+"': "+t+" ["+e+"]"),!1)))},t.isTrusted=function(e){e.url&&!e.protocol&&(e.protocol=l.protocolFromUrl(e.url));var t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)},e}(),u=function(){function e(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}var t=e.prototype;return t.sup=function(){return p[d[this.id]]},t.sub=function(){return p[f[this.id]]},t.fracNum=function(){return p[g[this.id]]},t.fracDen=function(){return p[v[this.id]]},t.cramp=function(){return p[b[this.id]]},t.text=function(){return p[y[this.id]]},t.isTight=function(){return this.size>=2},e}(),p=[new u(0,0,!1),new u(1,0,!0),new u(2,1,!1),new u(3,1,!0),new u(4,2,!1),new u(5,2,!0),new u(6,3,!1),new u(7,3,!0)],d=[4,5,4,5,6,7,6,7],f=[5,5,5,5,7,7,7,7],g=[2,3,4,5,6,7,6,7],v=[3,3,5,5,7,7,7,7],b=[1,1,3,3,5,5,7,7],y=[0,1,2,3,2,3,2,3],x={DISPLAY:p[0],TEXT:p[2],SCRIPT:p[4],SCRIPTSCRIPT:p[6]},w=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var k=[];function S(e){for(var t=0;t=k[t]&&e<=k[t+1])return!0;return!1}w.forEach((function(e){return e.blocks.forEach((function(e){return k.push.apply(k,e)}))}));var M=80,z={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"},A=function(){function e(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){for(var e=document.createDocumentFragment(),t=0;t=5?0:e>=3?1:2]){var r=N[t]={cssEmPerMu:B.quad[t]/18};for(var n in B)B.hasOwnProperty(n)&&(r[n]=B[n][t])}return N[t]}(this.size)),this._fontMetrics},t.getColor=function(){return this.phantom?"transparent":this.color},e}();H.BASESIZE=6;var E=H,L={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},D={ex:!0,em:!0,mu:!0},P=function(e){return"string"!=typeof e&&(e=e.unit),e in L||e in D||"ex"===e},F=function(e,t){var r;if(e.unit in L)r=L[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{var a;if(a=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=a.fontMetrics().xHeight;else{if("em"!==e.unit)throw new n("Invalid unit: '"+e.unit+"'");r=a.fontMetrics().quad}a!==t&&(r*=a.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},V=function(e){return+e.toFixed(4)+"em"},G=function(e){return e.filter((function(e){return e})).join(" ")},U=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");var n=t.getColor();n&&(this.style.color=n)}},Y=function(e){var t=document.createElement(e);for(var r in t.className=G(this.classes),this.style)this.style.hasOwnProperty(r)&&(t.style[r]=this.style[r]);for(var n in this.attributes)this.attributes.hasOwnProperty(n)&&t.setAttribute(n,this.attributes[n]);for(var a=0;a"},W=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,e,r,n),this.children=t||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return Y.call(this,"span")},t.toMarkup=function(){return X.call(this,"span")},e}(),_=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,t,n),this.children=r||[],this.setAttribute("href",e)}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return Y.call(this,"a")},t.toMarkup=function(){return X.call(this,"a")},e}(),j=function(){function e(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createElement("img");for(var t in e.src=this.src,e.alt=this.alt,e.className="mord",this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e},t.toMarkup=function(){var e=""+this.alt+"=a[0]&&e<=a[1])return r.name}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=$[this.text])}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createTextNode(this.text),t=null;for(var r in this.italic>0&&((t=document.createElement("span")).style.marginRight=V(this.italic)),this.classes.length>0&&((t=t||document.createElement("span")).className=G(this.classes)),this.style)this.style.hasOwnProperty(r)&&((t=t||document.createElement("span")).style[r]=this.style[r]);return t?(t.appendChild(e),t):e},t.toMarkup=function(){var e=!1,t="0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(n)&&(r+=l.hyphenate(n)+":"+this.style[n]+";");r&&(e=!0,t+=' style="'+l.escape(r)+'"');var a=l.escape(this.text);return e?(t+=">",t+=a,t+=""):a},e}(),K=function(){function e(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(var r=0;r":""},e}(),Q=function(){function e(e){this.attributes=void 0,this.attributes=e||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","line");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e},t.toMarkup=function(){var e="","\\gt",!0),ie(oe,le,be,"\u2208","\\in",!0),ie(oe,le,be,"\ue020","\\@not"),ie(oe,le,be,"\u2282","\\subset",!0),ie(oe,le,be,"\u2283","\\supset",!0),ie(oe,le,be,"\u2286","\\subseteq",!0),ie(oe,le,be,"\u2287","\\supseteq",!0),ie(oe,he,be,"\u2288","\\nsubseteq",!0),ie(oe,he,be,"\u2289","\\nsupseteq",!0),ie(oe,le,be,"\u22a8","\\models"),ie(oe,le,be,"\u2190","\\leftarrow",!0),ie(oe,le,be,"\u2264","\\le"),ie(oe,le,be,"\u2264","\\leq",!0),ie(oe,le,be,"<","\\lt",!0),ie(oe,le,be,"\u2192","\\rightarrow",!0),ie(oe,le,be,"\u2192","\\to"),ie(oe,he,be,"\u2271","\\ngeq",!0),ie(oe,he,be,"\u2270","\\nleq",!0),ie(oe,le,ye,"\xa0","\\ "),ie(oe,le,ye,"\xa0","\\space"),ie(oe,le,ye,"\xa0","\\nobreakspace"),ie(se,le,ye,"\xa0","\\ "),ie(se,le,ye,"\xa0"," "),ie(se,le,ye,"\xa0","\\space"),ie(se,le,ye,"\xa0","\\nobreakspace"),ie(oe,le,ye,null,"\\nobreak"),ie(oe,le,ye,null,"\\allowbreak"),ie(oe,le,ve,",",","),ie(oe,le,ve,";",";"),ie(oe,he,ce,"\u22bc","\\barwedge",!0),ie(oe,he,ce,"\u22bb","\\veebar",!0),ie(oe,le,ce,"\u2299","\\odot",!0),ie(oe,le,ce,"\u2295","\\oplus",!0),ie(oe,le,ce,"\u2297","\\otimes",!0),ie(oe,le,xe,"\u2202","\\partial",!0),ie(oe,le,ce,"\u2298","\\oslash",!0),ie(oe,he,ce,"\u229a","\\circledcirc",!0),ie(oe,he,ce,"\u22a1","\\boxdot",!0),ie(oe,le,ce,"\u25b3","\\bigtriangleup"),ie(oe,le,ce,"\u25bd","\\bigtriangledown"),ie(oe,le,ce,"\u2020","\\dagger"),ie(oe,le,ce,"\u22c4","\\diamond"),ie(oe,le,ce,"\u22c6","\\star"),ie(oe,le,ce,"\u25c3","\\triangleleft"),ie(oe,le,ce,"\u25b9","\\triangleright"),ie(oe,le,ge,"{","\\{"),ie(se,le,xe,"{","\\{"),ie(se,le,xe,"{","\\textbraceleft"),ie(oe,le,ue,"}","\\}"),ie(se,le,xe,"}","\\}"),ie(se,le,xe,"}","\\textbraceright"),ie(oe,le,ge,"{","\\lbrace"),ie(oe,le,ue,"}","\\rbrace"),ie(oe,le,ge,"[","\\lbrack",!0),ie(se,le,xe,"[","\\lbrack",!0),ie(oe,le,ue,"]","\\rbrack",!0),ie(se,le,xe,"]","\\rbrack",!0),ie(oe,le,ge,"(","\\lparen",!0),ie(oe,le,ue,")","\\rparen",!0),ie(se,le,xe,"<","\\textless",!0),ie(se,le,xe,">","\\textgreater",!0),ie(oe,le,ge,"\u230a","\\lfloor",!0),ie(oe,le,ue,"\u230b","\\rfloor",!0),ie(oe,le,ge,"\u2308","\\lceil",!0),ie(oe,le,ue,"\u2309","\\rceil",!0),ie(oe,le,xe,"\\","\\backslash"),ie(oe,le,xe,"\u2223","|"),ie(oe,le,xe,"\u2223","\\vert"),ie(se,le,xe,"|","\\textbar",!0),ie(oe,le,xe,"\u2225","\\|"),ie(oe,le,xe,"\u2225","\\Vert"),ie(se,le,xe,"\u2225","\\textbardbl"),ie(se,le,xe,"~","\\textasciitilde"),ie(se,le,xe,"\\","\\textbackslash"),ie(se,le,xe,"^","\\textasciicircum"),ie(oe,le,be,"\u2191","\\uparrow",!0),ie(oe,le,be,"\u21d1","\\Uparrow",!0),ie(oe,le,be,"\u2193","\\downarrow",!0),ie(oe,le,be,"\u21d3","\\Downarrow",!0),ie(oe,le,be,"\u2195","\\updownarrow",!0),ie(oe,le,be,"\u21d5","\\Updownarrow",!0),ie(oe,le,fe,"\u2210","\\coprod"),ie(oe,le,fe,"\u22c1","\\bigvee"),ie(oe,le,fe,"\u22c0","\\bigwedge"),ie(oe,le,fe,"\u2a04","\\biguplus"),ie(oe,le,fe,"\u22c2","\\bigcap"),ie(oe,le,fe,"\u22c3","\\bigcup"),ie(oe,le,fe,"\u222b","\\int"),ie(oe,le,fe,"\u222b","\\intop"),ie(oe,le,fe,"\u222c","\\iint"),ie(oe,le,fe,"\u222d","\\iiint"),ie(oe,le,fe,"\u220f","\\prod"),ie(oe,le,fe,"\u2211","\\sum"),ie(oe,le,fe,"\u2a02","\\bigotimes"),ie(oe,le,fe,"\u2a01","\\bigoplus"),ie(oe,le,fe,"\u2a00","\\bigodot"),ie(oe,le,fe,"\u222e","\\oint"),ie(oe,le,fe,"\u222f","\\oiint"),ie(oe,le,fe,"\u2230","\\oiiint"),ie(oe,le,fe,"\u2a06","\\bigsqcup"),ie(oe,le,fe,"\u222b","\\smallint"),ie(se,le,pe,"\u2026","\\textellipsis"),ie(oe,le,pe,"\u2026","\\mathellipsis"),ie(se,le,pe,"\u2026","\\ldots",!0),ie(oe,le,pe,"\u2026","\\ldots",!0),ie(oe,le,pe,"\u22ef","\\@cdots",!0),ie(oe,le,pe,"\u22f1","\\ddots",!0),ie(oe,le,xe,"\u22ee","\\varvdots"),ie(oe,le,me,"\u02ca","\\acute"),ie(oe,le,me,"\u02cb","\\grave"),ie(oe,le,me,"\xa8","\\ddot"),ie(oe,le,me,"~","\\tilde"),ie(oe,le,me,"\u02c9","\\bar"),ie(oe,le,me,"\u02d8","\\breve"),ie(oe,le,me,"\u02c7","\\check"),ie(oe,le,me,"^","\\hat"),ie(oe,le,me,"\u20d7","\\vec"),ie(oe,le,me,"\u02d9","\\dot"),ie(oe,le,me,"\u02da","\\mathring"),ie(oe,le,de,"\ue131","\\@imath"),ie(oe,le,de,"\ue237","\\@jmath"),ie(oe,le,xe,"\u0131","\u0131"),ie(oe,le,xe,"\u0237","\u0237"),ie(se,le,xe,"\u0131","\\i",!0),ie(se,le,xe,"\u0237","\\j",!0),ie(se,le,xe,"\xdf","\\ss",!0),ie(se,le,xe,"\xe6","\\ae",!0),ie(se,le,xe,"\u0153","\\oe",!0),ie(se,le,xe,"\xf8","\\o",!0),ie(se,le,xe,"\xc6","\\AE",!0),ie(se,le,xe,"\u0152","\\OE",!0),ie(se,le,xe,"\xd8","\\O",!0),ie(se,le,me,"\u02ca","\\'"),ie(se,le,me,"\u02cb","\\`"),ie(se,le,me,"\u02c6","\\^"),ie(se,le,me,"\u02dc","\\~"),ie(se,le,me,"\u02c9","\\="),ie(se,le,me,"\u02d8","\\u"),ie(se,le,me,"\u02d9","\\."),ie(se,le,me,"\xb8","\\c"),ie(se,le,me,"\u02da","\\r"),ie(se,le,me,"\u02c7","\\v"),ie(se,le,me,"\xa8",'\\"'),ie(se,le,me,"\u02dd","\\H"),ie(se,le,me,"\u25ef","\\textcircled");var we={"--":!0,"---":!0,"``":!0,"''":!0};ie(se,le,xe,"\u2013","--",!0),ie(se,le,xe,"\u2013","\\textendash"),ie(se,le,xe,"\u2014","---",!0),ie(se,le,xe,"\u2014","\\textemdash"),ie(se,le,xe,"\u2018","`",!0),ie(se,le,xe,"\u2018","\\textquoteleft"),ie(se,le,xe,"\u2019","'",!0),ie(se,le,xe,"\u2019","\\textquoteright"),ie(se,le,xe,"\u201c","``",!0),ie(se,le,xe,"\u201c","\\textquotedblleft"),ie(se,le,xe,"\u201d","''",!0),ie(se,le,xe,"\u201d","\\textquotedblright"),ie(oe,le,xe,"\xb0","\\degree",!0),ie(se,le,xe,"\xb0","\\degree"),ie(se,le,xe,"\xb0","\\textdegree",!0),ie(oe,le,xe,"\xa3","\\pounds"),ie(oe,le,xe,"\xa3","\\mathsterling",!0),ie(se,le,xe,"\xa3","\\pounds"),ie(se,le,xe,"\xa3","\\textsterling",!0),ie(oe,he,xe,"\u2720","\\maltese"),ie(se,he,xe,"\u2720","\\maltese");for(var ke='0123456789/@."',Se=0;Set&&(t=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>n&&(n=i.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=n},Xe=function(e,t,r,n){var a=new W(e,t,r,n);return Ye(a),a},We=function(e,t,r,n){return new W(e,t,r,n)},_e=function(e){var t=new A(e);return Ye(t),t},je=function(e,t,r){var n="";switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return n+"-"+("textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular")},$e={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Ze={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ke={fontMap:$e,makeSymbol:Ge,mathsym:function(e,t,r,n){return void 0===n&&(n=[]),"boldsymbol"===r.font&&Ve(e,"Main-Bold",t).metrics?Ge(e,"Main-Bold",t,r,n.concat(["mathbf"])):"\\"===e||"main"===ae[t][e].font?Ge(e,"Main-Regular",t,r,n):Ge(e,"AMS-Regular",t,r,n.concat(["amsrm"]))},makeSpan:Xe,makeSvgSpan:We,makeLineSpan:function(e,t,r){var n=Xe([e],[],t);return n.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=V(n.height),n.maxFontSize=1,n},makeAnchor:function(e,t,r,n){var a=new _(e,t,r,n);return Ye(a),a},makeFragment:_e,wrapFragment:function(e,t){return e instanceof A?Xe([],[e],t):e},makeVList:function(e,t){for(var r=function(e){if("individualShift"===e.positionType){for(var t=e.children,r=[t[0]],n=-t[0].shift-t[0].elem.depth,a=n,i=1;i0&&(o.push(kt(s,t)),s=[]),o.push(a[l]));s.length>0&&o.push(kt(s,t)),r?((i=kt(ft(r,t,!0))).classes=["tag"],o.push(i)):n&&o.push(n);var m=mt(["katex-html"],o);if(m.setAttribute("aria-hidden","true"),i){var c=i.children[0];c.style.height=V(m.height+m.depth),m.depth&&(c.style.verticalAlign=V(-m.depth))}return m}function Mt(e){return new A(e)}var zt=function(){function e(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.getAttribute=function(e){return this.attributes[e]},t.toNode=function(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=G(this.classes));for(var r=0;r0&&(e+=' class ="'+l.escape(G(this.classes))+'"'),e+=">";for(var r=0;r"},t.toText=function(){return this.children.map((function(e){return e.toText()})).join("")},e}(),At=function(){function e(e){this.text=void 0,this.text=e}var t=e.prototype;return t.toNode=function(){return document.createTextNode(this.text)},t.toMarkup=function(){return l.escape(this.toText())},t.toText=function(){return this.text},e}(),Tt={MathNode:zt,TextNode:At,SpaceNode:function(){function e(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}var t=e.prototype;return t.toNode=function(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",V(this.width)),e},t.toMarkup=function(){return this.character?""+this.character+"":''},t.toText=function(){return this.character?this.character:" "},e}(),newDocumentFragment:Mt},Bt=function(e,t,r){return!ae[t][e]||!ae[t][e].replace||55349===e.charCodeAt(0)||we.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.substr(4,2)||r.font&&"tt"===r.font.substr(4,2))||(e=ae[t][e].replace),new Tt.TextNode(e)},Ct=function(e){return 1===e.length?e[0]:new Tt.MathNode("mrow",e)},qt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";var r=t.font;if(!r||"mathnormal"===r)return null;var n=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var a=e.text;return l.contains(["\\imath","\\jmath"],a)?null:(ae[n][a]&&ae[n][a].replace&&(a=ae[n][a].replace),q(a,Ke.fontMap[r].fontName,n)?Ke.fontMap[r].variant:null)},Nt=function(e,t,r){if(1===e.length){var n=Rt(e[0],t);return r&&n instanceof zt&&"mo"===n.type&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var a,i=[],o=0;o0&&(p.text=p.text.slice(0,1)+"\u0338"+p.text.slice(1),i.pop())}}}i.push(s),a=s}return i},It=function(e,t,r){return Ct(Nt(e,t,r))},Rt=function(e,t){if(!e)return new Tt.MathNode("mrow");if(it[e.type])return it[e.type](e,t);throw new n("Got group of unknown type: '"+e.type+"'")};function Ot(e,t,r,n,a){var i,o=Nt(e,r);i=1===o.length&&o[0]instanceof zt&&l.contains(["mrow","mtable"],o[0].type)?o[0]:new Tt.MathNode("mrow",o);var s=new Tt.MathNode("annotation",[new Tt.TextNode(t)]);s.setAttribute("encoding","application/x-tex");var h=new Tt.MathNode("semantics",[i,s]),m=new Tt.MathNode("math",[h]);m.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&m.setAttribute("display","block");var c=a?"katex":"katex-mathml";return Ke.makeSpan([c],[m])}var Ht=function(e){return new E({style:e.displayMode?x.DISPLAY:x.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Et=function(e,t){if(t.displayMode){var r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=Ke.makeSpan(r,[e])}return e},Lt=function(e,t,r){var n,a=Ht(r);if("mathml"===r.output)return Ot(e,t,a,r.displayMode,!0);if("html"===r.output){var i=St(e,a);n=Ke.makeSpan(["katex"],[i])}else{var o=Ot(e,t,a,r.displayMode,!1),s=St(e,a);n=Ke.makeSpan(["katex"],[o,s])}return Et(n,r)},Dt={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Pt={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Ft=function(e,t,r,n,a){var i,o=e.height+e.depth+r+n;if(/fbox|color|angl/.test(t)){if(i=Ke.makeSpan(["stretchy",t],[],a),"fbox"===t){var s=a.color&&a.getColor();s&&(i.style.borderColor=s)}}else{var l=[];/^[bx]cancel$/.test(t)&&l.push(new Q({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&l.push(new Q({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new K(l,{width:"100%",height:V(o)});i=Ke.makeSvgSpan([],[h],a)}return i.height=o,i.style.height=V(o),i},Vt=function(e){var t=new Tt.MathNode("mo",[new Tt.TextNode(Dt[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},Gt=function(e,t){var r=function(){var r=4e5,n=e.label.substr(1);if(l.contains(["widehat","widecheck","widetilde","utilde"],n)){var a,i,o,s="ordgroup"===(d=e.base).type?d.body.length:1;if(s>5)"widehat"===n||"widecheck"===n?(a=420,r=2364,o=.42,i=n+"4"):(a=312,r=2340,o=.34,i="tilde4");else{var h=[1,1,2,2,3,3][s];"widehat"===n||"widecheck"===n?(r=[0,1062,2364,2364,2364][h],a=[0,239,300,360,420][h],o=[0,.24,.3,.3,.36,.42][h],i=n+h):(r=[0,600,1033,2339,2340][h],a=[0,260,286,306,312][h],o=[0,.26,.286,.3,.306,.34][h],i="tilde"+h)}var m=new J(i),c=new K([m],{width:"100%",height:V(o),viewBox:"0 0 "+r+" "+a,preserveAspectRatio:"none"});return{span:Ke.makeSvgSpan([],[c],t),minWidth:0,height:o}}var u,p,d,f=[],g=Pt[n],v=g[0],b=g[1],y=g[2],x=y/1e3,w=v.length;if(1===w)u=["hide-tail"],p=[g[3]];else if(2===w)u=["halfarrow-left","halfarrow-right"],p=["xMinYMin","xMaxYMin"];else{if(3!==w)throw new Error("Correct katexImagesData or update code here to support\n "+w+" children.");u=["brace-left","brace-center","brace-right"],p=["xMinYMin","xMidYMin","xMaxYMin"]}for(var k=0;k0&&(n.style.minWidth=V(a)),n};function Ut(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Yt(e){var t=Xt(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Xt(e){return e&&("atom"===e.type||re.hasOwnProperty(e.type))?e:null}var Wt=function(e,t){var r,n,a;e&&"supsub"===e.type?(r=(n=Ut(e.base,"accent")).base,e.base=r,a=function(e){if(e instanceof W)return e;throw new Error("Expected span but got "+String(e)+".")}(wt(e,t)),e.base=n):r=(n=Ut(e,"accent")).base;var i=wt(r,t.havingCrampedStyle()),o=0;if(n.isShifty&&l.isCharacterBox(r)){var s=l.getBaseElem(r);o=ee(wt(s,t.havingCrampedStyle())).skew}var h,m="\\c"===n.label,c=m?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight);if(n.isStretchy)h=Gt(n,t),h=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:h,wrapperClasses:["svg-align"],wrapperStyle:o>0?{width:"calc(100% - "+V(2*o)+")",marginLeft:V(2*o)}:void 0}]},t);else{var u,p;"\\vec"===n.label?(u=Ke.staticSvg("vec",t),p=Ke.svgData.vec[1]):((u=ee(u=Ke.makeOrd({mode:n.mode,text:n.label},t,"textord"))).italic=0,p=u.width,m&&(c+=u.depth)),h=Ke.makeSpan(["accent-body"],[u]);var d="\\textcircled"===n.label;d&&(h.classes.push("accent-full"),c=i.height);var f=o;d||(f-=p/2),h.style.left=V(f),"\\textcircled"===n.label&&(h.style.top=".2em"),h=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-c},{type:"elem",elem:h}]},t)}var g=Ke.makeSpan(["mord","accent"],[h],t);return a?(a.children[0]=g,a.height=Math.max(g.height,a.height),a.classes[0]="mord",a):g},_t=function(e,t){var r=e.isStretchy?Vt(e.label):new Tt.MathNode("mo",[Bt(e.label,e.mode)]),n=new Tt.MathNode("mover",[Rt(e.base,t),r]);return n.setAttribute("accent","true"),n},jt=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((function(e){return"\\"+e})).join("|"));ot({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:function(e,t){var r=lt(t[0]),n=!jt.test(e.funcName),a=!n||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:function(e,t){var r=t[0],n=e.parser.mode;return"math"===n&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:a}},htmlBuilder:function(e,t){var r=wt(e.base,t),n=Gt(e,t),a="\\utilde"===e.label?.12:0,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:a},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","accentunder"],[i],t)},mathmlBuilder:function(e,t){var r=Vt(e.label),n=new Tt.MathNode("munder",[Rt(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var $t=function(e){var t=new Tt.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};ot({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler:function(e,t,r){var n=e.parser,a=e.funcName;return{type:"xArrow",mode:n.mode,label:a,body:t[0],below:r[0]}},htmlBuilder:function(e,t){var r,n=t.style,a=t.havingStyle(n.sup()),i=Ke.wrapFragment(wt(e.body,a,t),t),o="\\x"===e.label.slice(0,2)?"x":"cd";i.classes.push(o+"-arrow-pad"),e.below&&(a=t.havingStyle(n.sub()),(r=Ke.wrapFragment(wt(e.below,a,t),t)).classes.push(o+"-arrow-pad"));var s,l=Gt(e,t),h=-t.fontMetrics().axisHeight+.5*l.height,m=-t.fontMetrics().axisHeight-.5*l.height-.111;if((i.depth>.25||"\\xleftequilibrium"===e.label)&&(m-=i.depth),r){var c=-t.fontMetrics().axisHeight+r.height+.5*l.height+.111;s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h},{type:"elem",elem:r,shift:c}]},t)}else s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h}]},t);return s.children[0].children[0].children[1].classes.push("svg-align"),Ke.makeSpan(["mrel","x-arrow"],[s],t)},mathmlBuilder:function(e,t){var r,n=Vt(e.label);if(n.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){var a=$t(Rt(e.body,t));if(e.below){var i=$t(Rt(e.below,t));r=new Tt.MathNode("munderover",[n,i,a])}else r=new Tt.MathNode("mover",[n,a])}else if(e.below){var o=$t(Rt(e.below,t));r=new Tt.MathNode("munder",[n,o])}else r=$t(),r=new Tt.MathNode("mover",[n,r]);return r}});var Zt={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Kt=function(e){return"textord"===e.type&&"@"===e.text};function Jt(e,t,r){var n=Zt[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":var a={type:"atom",text:n,mode:"math",family:"rel"},i={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[a],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[i],[]);case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":return r.callFunction("\\Big",[{type:"textord",text:"\\Vert",mode:"math"}],[]);default:return{type:"textord",text:" ",mode:"math"}}}ot({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder:function(e,t){var r=t.havingStyle(t.style.sup()),n=Ke.wrapFragment(wt(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=V(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mrow",[Rt(e.label,t)]);return(r=new Tt.MathNode("mpadded",[r])).setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),(r=new Tt.MathNode("mstyle",[r])).setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),ot({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler:function(e,t){return{type:"cdlabelparent",mode:e.parser.mode,fragment:t[0]}},htmlBuilder:function(e,t){var r=Ke.wrapFragment(wt(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder:function(e,t){return new Tt.MathNode("mrow",[Rt(e.fragment,t)])}}),ot({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){for(var r=e.parser,a=Ut(t[0],"ordgroup").body,i="",o=0;o=1114111)throw new n("\\@char with invalid code point "+i);return l<=65535?s=String.fromCharCode(l):(l-=65536,s=String.fromCharCode(55296+(l>>10),56320+(1023&l))),{type:"textord",mode:r.mode,text:s}}});var Qt=function(e,t){var r=ft(e.body,t.withColor(e.color),!1);return Ke.makeFragment(r)},er=function(e,t){var r=Nt(e.body,t.withColor(e.color)),n=new Tt.MathNode("mstyle",r);return n.setAttribute("mathcolor",e.color),n};ot({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler:function(e,t){var r=e.parser,n=Ut(t[0],"color-token").color,a=t[1];return{type:"color",mode:r.mode,color:n,body:ht(a)}},htmlBuilder:Qt,mathmlBuilder:er}),ot({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler:function(e,t){var r=e.parser,n=e.breakOnTokenText,a=Ut(t[0],"color-token").color;r.gullet.macros.set("\\current@color",a);var i=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:a,body:i}},htmlBuilder:Qt,mathmlBuilder:er}),ot({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:1,argTypes:["size"],allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=r[0],i=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:i,size:a&&Ut(a,"size").value}},htmlBuilder:function(e,t){var r=Ke.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=V(F(e.size,t)))),r},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",V(F(e.size,t)))),r}});var tr={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},rr=function(e){var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new n("Expected a control sequence",e);return t},nr=function(e,t,r,n){var a=e.gullet.macros.get(r.text);null==a&&(r.noexpand=!0,a={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};ot({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler:function(e){var t=e.parser,r=e.funcName;t.consumeSpaces();var a=t.fetch();if(tr[a.text])return"\\global"!==r&&"\\\\globallong"!==r||(a.text=tr[a.text]),Ut(t.parseFunction(),"internal");throw new n("Invalid token after macro prefix",a)}}),ot({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,a=t.gullet.popToken(),i=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new n("Expected a control sequence",a);for(var o,s=0,l=[[]];"{"!==t.gullet.future().text;)if("#"===(a=t.gullet.popToken()).text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[s].push("{");break}if(a=t.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new n('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new n('Argument number "'+a.text+'" out of order');s++,l.push([])}else{if("EOF"===a.text)throw new n("Expected a macro definition");l[s].push(a.text)}var h=t.gullet.consumeArg().tokens;return o&&h.unshift(o),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h)).reverse(),t.gullet.macros.set(i,{tokens:h,numArgs:s,delimiters:l},r===tr[r]),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=rr(t.gullet.popToken());t.gullet.consumeSpaces();var a=function(e){var t=e.gullet.popToken();return"="===t.text&&" "===(t=e.gullet.popToken()).text&&(t=e.gullet.popToken()),t}(t);return nr(t,n,a,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=rr(t.gullet.popToken()),a=t.gullet.popToken(),i=t.gullet.popToken();return nr(t,n,i,"\\\\globalfuture"===r),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:"internal",mode:t.mode}}});var ar=function(e,t,r){var n=q(ae.math[e]&&ae.math[e].replace||e,t,r);if(!n)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return n},ir=function(e,t,r,n){var a=r.havingBaseStyle(t),i=Ke.makeSpan(n.concat(a.sizingClasses(r)),[e],r),o=a.sizeMultiplier/r.sizeMultiplier;return i.height*=o,i.depth*=o,i.maxFontSize=a.sizeMultiplier,i},or=function(e,t,r){var n=t.havingBaseStyle(r),a=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=V(a),e.height-=a,e.depth+=a},sr=function(e,t,r,n,a,i){var o=function(e,t,r,n){return Ke.makeSymbol(e,"Size"+t+"-Regular",r,n)}(e,t,a,n),s=ir(Ke.makeSpan(["delimsizing","size"+t],[o],n),x.TEXT,n,i);return r&&or(s,n,x.TEXT),s},lr=function(e,t,r){var n;return n="Size1-Regular"===t?"delim-size1":"delim-size4",{type:"elem",elem:Ke.makeSpan(["delimsizinginner",n],[Ke.makeSpan([],[Ke.makeSymbol(e,t,r)])])}},hr=function(e,t,r){var n=T["Size4-Regular"][e.charCodeAt(0)]?T["Size4-Regular"][e.charCodeAt(0)][4]:T["Size1-Regular"][e.charCodeAt(0)][4],a=new J("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),i=new K([a],{width:V(n),height:V(t),style:"width:"+V(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),o=Ke.makeSvgSpan([],[i],r);return o.height=t,o.style.height=V(t),o.style.width=V(n),{type:"elem",elem:o}},mr={type:"kern",size:-.008},cr=["|","\\lvert","\\rvert","\\vert"],ur=["\\|","\\lVert","\\rVert","\\Vert"],pr=function(e,t,r,n,a,i){var o,s,h,m;o=h=m=e,s=null;var c="Size1-Regular";"\\uparrow"===e?h=m="\u23d0":"\\Uparrow"===e?h=m="\u2016":"\\downarrow"===e?o=h="\u23d0":"\\Downarrow"===e?o=h="\u2016":"\\updownarrow"===e?(o="\\uparrow",h="\u23d0",m="\\downarrow"):"\\Updownarrow"===e?(o="\\Uparrow",h="\u2016",m="\\Downarrow"):l.contains(cr,e)?h="\u2223":l.contains(ur,e)?h="\u2225":"["===e||"\\lbrack"===e?(o="\u23a1",h="\u23a2",m="\u23a3",c="Size4-Regular"):"]"===e||"\\rbrack"===e?(o="\u23a4",h="\u23a5",m="\u23a6",c="Size4-Regular"):"\\lfloor"===e||"\u230a"===e?(h=o="\u23a2",m="\u23a3",c="Size4-Regular"):"\\lceil"===e||"\u2308"===e?(o="\u23a1",h=m="\u23a2",c="Size4-Regular"):"\\rfloor"===e||"\u230b"===e?(h=o="\u23a5",m="\u23a6",c="Size4-Regular"):"\\rceil"===e||"\u2309"===e?(o="\u23a4",h=m="\u23a5",c="Size4-Regular"):"("===e||"\\lparen"===e?(o="\u239b",h="\u239c",m="\u239d",c="Size4-Regular"):")"===e||"\\rparen"===e?(o="\u239e",h="\u239f",m="\u23a0",c="Size4-Regular"):"\\{"===e||"\\lbrace"===e?(o="\u23a7",s="\u23a8",m="\u23a9",h="\u23aa",c="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(o="\u23ab",s="\u23ac",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(o="\u23a7",m="\u23a9",h="\u23aa",c="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(o="\u23ab",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(o="\u23a7",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(o="\u23ab",m="\u23a9",h="\u23aa",c="Size4-Regular");var u=ar(o,c,a),p=u.height+u.depth,d=ar(h,c,a),f=d.height+d.depth,g=ar(m,c,a),v=g.height+g.depth,b=0,y=1;if(null!==s){var w=ar(s,c,a);b=w.height+w.depth,y=2}var k=p+v+b,S=k+Math.max(0,Math.ceil((t-k)/(y*f)))*y*f,M=n.fontMetrics().axisHeight;r&&(M*=n.sizeMultiplier);var z=S/2-M,A=[];if(A.push(lr(m,c,a)),A.push(mr),null===s){var T=S-p-v+.016;A.push(hr(h,T,n))}else{var B=(S-p-v-b)/2+.016;A.push(hr(h,B,n)),A.push(mr),A.push(lr(s,c,a)),A.push(mr),A.push(hr(h,B,n))}A.push(mr),A.push(lr(o,c,a));var C=n.havingBaseStyle(x.TEXT),q=Ke.makeVList({positionType:"bottom",positionData:z,children:A},C);return ir(Ke.makeSpan(["delimsizing","mult"],[q],C),x.TEXT,n,i)},dr=.08,fr=function(e,t,r,n,a){var i=function(e,t,r){t*=1e3;var n="";switch(e){case"sqrtMain":n=function(e,t){return"M95,"+(622+e+t)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize1":n=function(e,t){return"M263,"+(601+e+t)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize2":n=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize3":n=function(e,t){return"M424,"+(2398+e+t)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize4":n=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,M);break;case"sqrtTall":n=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+t+"H400000v"+(40+e)+"H742z"}(t,M,r)}return n}(e,n,r),o=new J(e,i),s=new K([o],{width:"400em",height:V(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Ke.makeSvgSpan(["hide-tail"],[s],a)},gr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],vr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],br=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],yr=[0,1.2,1.8,2.4,3],xr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],wr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"stack"}],kr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],Sr=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},Mr=function(e,t,r,n){for(var a=Math.min(2,3-n.style.size);at)return r[a]}return r[r.length-1]},zr=function(e,t,r,n,a,i){var o;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),o=l.contains(br,e)?xr:l.contains(gr,e)?kr:wr;var s=Mr(e,t,o,n);return"small"===s.type?function(e,t,r,n,a,i){var o=Ke.makeSymbol(e,"Main-Regular",a,n),s=ir(o,t,n,i);return r&&or(s,n,t),s}(e,s.style,r,n,a,i):"large"===s.type?sr(e,s.size,r,n,a,i):pr(e,t,r,n,a,i)},Ar={sqrtImage:function(e,t){var r,n,a=t.havingBaseSizing(),i=Mr("\\surd",e*a.sizeMultiplier,kr,a),o=a.sizeMultiplier,s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),l=0,h=0,m=0;return"small"===i.type?(e<1?o=1:e<1.4&&(o=.7),h=(1+s)/o,(r=fr("sqrtMain",l=(1+s+dr)/o,m=1e3+1e3*s+80,s,t)).style.minWidth="0.853em",n=.833/o):"large"===i.type?(m=1080*yr[i.size],h=(yr[i.size]+s)/o,l=(yr[i.size]+s+dr)/o,(r=fr("sqrtSize"+i.size,l,m,s,t)).style.minWidth="1.02em",n=1/o):(l=e+s+dr,h=e+s,m=Math.floor(1e3*e+s)+80,(r=fr("sqrtTall",l,m,s,t)).style.minWidth="0.742em",n=1.056),r.height=h,r.style.height=V(l),{span:r,advanceWidth:n,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},sizedDelim:function(e,t,r,a,i){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),l.contains(gr,e)||l.contains(br,e))return sr(e,t,!1,r,a,i);if(l.contains(vr,e))return pr(e,yr[t],!1,r,a,i);throw new n("Illegal delimiter: '"+e+"'")},sizeToMaxHeight:yr,customSizedDelim:zr,leftRightDelim:function(e,t,r,n,a,i){var o=n.fontMetrics().axisHeight*n.sizeMultiplier,s=5/n.fontMetrics().ptPerEm,l=Math.max(t-o,r+o),h=Math.max(l/500*901,2*l-s);return zr(e,h,!0,n,a,i)}},Tr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},Br=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Cr(e,t){var r=Xt(e);if(r&&l.contains(Br,r.text))return r;throw new n(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function qr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}ot({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:function(e,t){var r=Cr(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Tr[e.funcName].size,mclass:Tr[e.funcName].mclass,delim:r.text}},htmlBuilder:function(e,t){return"."===e.delim?Ke.makeSpan([e.mclass]):Ar.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass])},mathmlBuilder:function(e){var t=[];"."!==e.delim&&t.push(Bt(e.delim,e.mode));var r=new Tt.MathNode("mo",t);"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=V(Ar.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}}),ot({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new n("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:Cr(t[0],e).text,color:r}}}),ot({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=Cr(t[0],e),n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var i=Ut(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:function(e,t){qr(e);for(var r,n,a=ft(e.body,t,!0,["mopen","mclose"]),i=0,o=0,s=!1,l=0;l-1?"mpadded":"menclose",[Rt(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){var a=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+a+"em solid "+String(e.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};ot({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ut(t[0],"color-token").color,o=t[1];return{type:"enclose",mode:n.mode,label:a,backgroundColor:i,body:o}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ut(t[0],"color-token").color,o=Ut(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:a,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\fbox",body:t[0]}}}),ot({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\angl",body:t[0]}}});var Rr={};function Or(e){for(var t=e.type,r=e.names,n=e.props,a=e.handler,i=e.htmlBuilder,o=e.mathmlBuilder,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l=0;l1||!c)&&g.pop(),b.length0&&(y+=.25),m.push({pos:y,isDashed:e[t]})}for(w(o[0]),r=0;r0&&(M<(B+=b)&&(M=B),B=0),e.addJot&&(M+=f),z.height=S,z.depth=M,y+=S,z.pos=y,y+=M+B,h[r]=z,w(o[r+1])}var C,q,N=y/2+t.fontMetrics().axisHeight,I=e.cols||[],R=[],O=[];if(e.tags&&e.tags.some((function(e){return e})))for(r=0;r=s)){var W=void 0;(a>0||e.hskipBeforeAndAfter)&&0!==(W=l.deflt(P.pregap,p))&&((C=Ke.makeSpan(["arraycolsep"],[])).style.width=V(W),R.push(C));var _=[];for(r=0;r0){for(var K=Ke.makeLineSpan("hline",t,c),J=Ke.makeLineSpan("hdashline",t,c),Q=[{type:"elem",elem:h,shift:0}];m.length>0;){var ee=m.pop(),te=ee.pos-N;ee.isDashed?Q.push({type:"elem",elem:J,shift:te}):Q.push({type:"elem",elem:K,shift:te})}h=Ke.makeVList({positionType:"individualShift",children:Q},t)}if(0===O.length)return Ke.makeSpan(["mord"],[h],t);var re=Ke.makeVList({positionType:"individualShift",children:O},t);return re=Ke.makeSpan(["tag"],[re],t),Ke.makeFragment([h,re])},Xr={c:"center ",l:"left ",r:"right "},Wr=function(e,t){for(var r=[],n=new Tt.MathNode("mtd",[],["mtr-glue"]),a=new Tt.MathNode("mtd",[],["mml-eqn-num"]),i=0;i0){var p=e.cols,d="",f=!1,g=0,v=p.length;"separator"===p[0].type&&(c+="top ",g=1),"separator"===p[p.length-1].type&&(c+="bottom ",v-=1);for(var b=g;b0?"left ":"",c+=S[S.length-1].length>0?"right ":"";for(var M=1;M-1?"alignat":"align",o="split"===e.envName,s=Gr(e.parser,{cols:a,addJot:!0,autoTag:o?void 0:Vr(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:o?2:void 0,leqno:e.parser.settings.leqno},"display"),l=0,h={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){for(var m="",c=0;c0&&u&&(f=1),a[p]={type:"align",align:d,pregap:f,postgap:0}}return s.colSeparationType=u?"align":"alignat",s};Or({type:"array",names:["array","darray"],props:{numArgs:1},handler:function(e,t){var r=(Xt(t[0])?[t[0]]:Ut(t[0],"ordgroup").body).map((function(e){var t=Yt(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new n("Unknown column alignment: "+t,e)})),a={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Gr(e.parser,a,Ur(e.envName))},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler:function(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){var i=e.parser;if(i.consumeSpaces(),"["===i.fetch().text){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,-1==="lcr".indexOf(r))throw new n("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),a.cols=[{type:"align",align:r}]}}var o=Gr(e.parser,a,Ur(e.envName)),s=Math.max.apply(Math,[0].concat(o.body.map((function(e){return e.length}))));return o.cols=new Array(s).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[o],left:t[0],right:t[1],rightColor:void 0}:o},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["smallmatrix"],props:{numArgs:0},handler:function(e){var t=Gr(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["subarray"],props:{numArgs:1},handler:function(e,t){var r=(Xt(t[0])?[t[0]]:Ut(t[0],"ordgroup").body).map((function(e){var t=Yt(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new n("Unknown column alignment: "+t,e)}));if(r.length>1)throw new n("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=Gr(e.parser,a,"script")).body.length>0&&a.body[0].length>1)throw new n("{subarray} can contain only one column");return a},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler:function(e){var t=Gr(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},Ur(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:_r,htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler:function(e){l.contains(["gather","gather*"],e.envName)&&Fr(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Vr(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Gr(e.parser,t,"display")},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:_r,htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["equation","equation*"],props:{numArgs:0},handler:function(e){Fr(e);var t={autoTag:Vr(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Gr(e.parser,t,"display")},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["CD"],props:{numArgs:0},handler:function(e){return Fr(e),function(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new n("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}for(var a,i,o=[],s=[o],l=0;l-1);else{if(!("<>AV".indexOf(u)>-1))throw new n('Expected one of "<>AV=|." after @',h[c]);for(var d=0;d<2;d++){for(var f=!0,g=c+1;g=x.SCRIPT.id?r.text():x.DISPLAY:"text"===e&&r.size===x.DISPLAY.size?r=x.TEXT:"script"===e?r=x.SCRIPT:"scriptscript"===e&&(r=x.SCRIPTSCRIPT),r},nn=function(e,t){var r,n=rn(e.size,t.style),a=n.fracNum(),i=n.fracDen();r=t.havingStyle(a);var o=wt(e.numer,r,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;o.height=o.height0?3*c:7*c,d=t.fontMetrics().denom1):(m>0?(u=t.fontMetrics().num2,p=c):(u=t.fontMetrics().num3,p=3*c),d=t.fontMetrics().denom2),h){var w=t.fontMetrics().axisHeight;u-o.depth-(w+.5*m)0&&(t="."===(t=e)?null:t),t};ot({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler:function(e,t){var r,n=e.parser,a=t[4],i=t[5],o=lt(t[0]),s="atom"===o.type&&"open"===o.family?sn(o.text):null,l=lt(t[1]),h="atom"===l.type&&"close"===l.family?sn(l.text):null,m=Ut(t[2],"size"),c=null;r=!!m.isBlank||(c=m.value).number>0;var u="auto",p=t[3];if("ordgroup"===p.type){if(p.body.length>0){var d=Ut(p.body[0],"textord");u=on[Number(d.text)]}}else p=Ut(p,"textord"),u=on[Number(p.text)];return{type:"genfrac",mode:n.mode,numer:a,denom:i,continued:!1,hasBarLine:r,barSize:c,leftDelim:s,rightDelim:h,size:u}},htmlBuilder:nn,mathmlBuilder:an}),ot({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:function(e,t){var r=e.parser,n=(e.funcName,e.token);return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Ut(t[0],"size").value,token:n}}}),ot({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:function(e,t){var r=e.parser,n=(e.funcName,t[0]),a=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Ut(t[1],"infix").size),i=t[2],o=a.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:o,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:nn,mathmlBuilder:an});var ln=function(e,t){var r,n,a=t.style;"supsub"===e.type?(r=e.sup?wt(e.sup,t.havingStyle(a.sup()),t):wt(e.sub,t.havingStyle(a.sub()),t),n=Ut(e.base,"horizBrace")):n=Ut(e,"horizBrace");var i,o=wt(n.base,t.havingBaseStyle(x.DISPLAY)),s=Gt(n,t);if(n.isOver?(i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:s}]},t)).children[0].children[0].children[1].classes.push("svg-align"):(i=Ke.makeVList({positionType:"bottom",positionData:o.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o}]},t)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t);i=n.isOver?Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},t):Ke.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},t)}return Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t)};ot({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:t[0]}},htmlBuilder:ln,mathmlBuilder:function(e,t){var r=Vt(e.label);return new Tt.MathNode(e.isOver?"mover":"munder",[Rt(e.base,t),r])}}),ot({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=t[1],a=Ut(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:a})?{type:"href",mode:r.mode,href:a,body:ht(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:function(e,t){var r=ft(e.body,t,!1);return Ke.makeAnchor(e.href,[],r,t)},mathmlBuilder:function(e,t){var r=It(e.body,t);return r instanceof zt||(r=new zt("mrow",[r])),r.setAttribute("href",e.href),r}}),ot({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=Ut(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var a=[],i=0;i0&&(n=F(e.totalheight,t)-r);var a=0;e.width.number>0&&(a=F(e.width,t));var i={height:V(r+n)};a>0&&(i.width=V(a)),n>0&&(i.verticalAlign=V(-n));var o=new j(e.src,e.alt,i);return o.height=r,o.depth=n,o},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var n=F(e.height,t),a=0;if(e.totalheight.number>0&&(a=F(e.totalheight,t)-n,r.setAttribute("valign",V(-a))),r.setAttribute("height",V(n+a)),e.width.number>0){var i=F(e.width,t);r.setAttribute("width",V(i))}return r.setAttribute("src",e.src),r}}),ot({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=Ut(t[0],"size");if(r.settings.strict){var i="m"===n[1],o="mu"===a.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, not "+a.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:a.value}},htmlBuilder:function(e,t){return Ke.makeGlue(e.dimension,t)},mathmlBuilder:function(e,t){var r=F(e.dimension,t);return new Tt.SpaceNode(r)}}),ot({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:function(e,t){var r;"clap"===e.alignment?(r=Ke.makeSpan([],[wt(e.body,t)]),r=Ke.makeSpan(["inner"],[r],t)):r=Ke.makeSpan(["inner"],[wt(e.body,t)]);var n=Ke.makeSpan(["fix"],[]),a=Ke.makeSpan([e.alignment],[r,n],t),i=Ke.makeSpan(["strut"]);return i.style.height=V(a.height+a.depth),a.depth&&(i.style.verticalAlign=V(-a.depth)),a.children.unshift(i),a=Ke.makeSpan(["thinbox"],[a],t),Ke.makeSpan(["mord","vbox"],[a],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]);if("rlap"!==e.alignment){var n="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}}),ot({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){var r=e.funcName,n=e.parser,a=n.mode;n.switchMode("math");var i="\\("===r?"\\)":"$",o=n.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:"styling",mode:n.mode,style:"text",body:o}}}),ot({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){throw new n("Mismatched "+e.funcName)}});var mn=function(e,t){switch(t.style.size){case x.DISPLAY.size:return e.display;case x.TEXT.size:return e.text;case x.SCRIPT.size:return e.script;case x.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};ot({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:function(e,t){return{type:"mathchoice",mode:e.parser.mode,display:ht(t[0]),text:ht(t[1]),script:ht(t[2]),scriptscript:ht(t[3])}},htmlBuilder:function(e,t){var r=mn(e,t),n=ft(r,t,!1);return Ke.makeFragment(n)},mathmlBuilder:function(e,t){var r=mn(e,t);return It(r,t)}});var cn=function(e,t,r,n,a,i,o){e=Ke.makeSpan([],[e]);var s,h,m,c=r&&l.isCharacterBox(r);if(t){var u=wt(t,n.havingStyle(a.sup()),n);h={elem:u,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-u.depth)}}if(r){var p=wt(r,n.havingStyle(a.sub()),n);s={elem:p,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-p.height)}}if(h&&s){var d=n.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+e.depth+o;m=Ke.makeVList({positionType:"bottom",positionData:d,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:V(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(s){var f=e.height-o;m=Ke.makeVList({positionType:"top",positionData:f,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:V(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e}]},n)}else{if(!h)return e;var g=e.depth+o;m=Ke.makeVList({positionType:"bottom",positionData:g,children:[{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}var v=[m];if(s&&0!==i&&!c){var b=Ke.makeSpan(["mspace"],[],n);b.style.marginRight=V(i),v.unshift(b)}return Ke.makeSpan(["mop","op-limits"],v,n)},un=["\\smallint"],pn=function(e,t){var r,n,a,i=!1;"supsub"===e.type?(r=e.sup,n=e.sub,a=Ut(e.base,"op"),i=!0):a=Ut(e,"op");var o,s=t.style,h=!1;if(s.size===x.DISPLAY.size&&a.symbol&&!l.contains(un,a.name)&&(h=!0),a.symbol){var m=h?"Size2-Regular":"Size1-Regular",c="";if("\\oiint"!==a.name&&"\\oiiint"!==a.name||(c=a.name.substr(1),a.name="oiint"===c?"\\iint":"\\iiint"),o=Ke.makeSymbol(a.name,m,"math",t,["mop","op-symbol",h?"large-op":"small-op"]),c.length>0){var u=o.italic,p=Ke.staticSvg(c+"Size"+(h?"2":"1"),t);o=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:0},{type:"elem",elem:p,shift:h?.08:0}]},t),a.name="\\"+c,o.classes.unshift("mop"),o.italic=u}}else if(a.body){var d=ft(a.body,t,!0);1===d.length&&d[0]instanceof Z?(o=d[0]).classes[0]="mop":o=Ke.makeSpan(["mop"],d,t)}else{for(var f=[],g=1;g0){for(var s=a.body.map((function(e){var t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),l=ft(s,t.withFont("mathrm"),!0),h=0;h=0?s.setAttribute("height",V(a)):(s.setAttribute("height",V(a)),s.setAttribute("depth",V(-a))),s.setAttribute("voffset",V(a)),s}});var yn=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];ot({type:"sizing",names:yn,props:{numArgs:0,allowedInText:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!1,r);return{type:"sizing",mode:a.mode,size:yn.indexOf(n)+1,body:i}},htmlBuilder:function(e,t){var r=t.havingSize(e.size);return bn(e.body,r,t)},mathmlBuilder:function(e,t){var r=t.havingSize(e.size),n=Nt(e.body,r),a=new Tt.MathNode("mstyle",n);return a.setAttribute("mathsize",V(r.sizeMultiplier)),a}}),ot({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=!1,i=!1,o=r[0]&&Ut(r[0],"ordgroup");if(o)for(var s="",l=0;lr.height+r.depth+i&&(i=(i+c-r.height-r.depth)/2);var u=l.height-r.height-i-h;r.style.paddingLeft=V(m);var p=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+u)},{type:"elem",elem:l},{type:"kern",size:h}]},t);if(e.index){var d=t.havingStyle(x.SCRIPTSCRIPT),f=wt(e.index,d,t),g=.6*(p.height-p.depth),v=Ke.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:f}]},t),b=Ke.makeSpan(["root"],[v]);return Ke.makeSpan(["mord","sqrt"],[b,p],t)}return Ke.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder:function(e,t){var r=e.body,n=e.index;return n?new Tt.MathNode("mroot",[Rt(r,t),Rt(n,t)]):new Tt.MathNode("msqrt",[Rt(r,t)])}});var xn={display:x.DISPLAY,text:x.TEXT,script:x.SCRIPT,scriptscript:x.SCRIPTSCRIPT};ot({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!0,r),o=n.slice(1,n.length-5);return{type:"styling",mode:a.mode,style:o,body:i}},htmlBuilder:function(e,t){var r=xn[e.style],n=t.havingStyle(r).withFont("");return bn(e.body,n,t)},mathmlBuilder:function(e,t){var r=xn[e.style],n=t.havingStyle(r),a=Nt(e.body,n),i=new Tt.MathNode("mstyle",a),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});var wn=function(e,t){var r=e.base;return r?"op"===r.type?r.limits&&(t.style.size===x.DISPLAY.size||r.alwaysHandleSupSub)?pn:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===x.DISPLAY.size||r.limits)?vn:null:"accent"===r.type?l.isCharacterBox(r.base)?Wt:null:"horizBrace"===r.type&&!e.sub===r.isOver?ln:null:null};st({type:"supsub",htmlBuilder:function(e,t){var r=wn(e,t);if(r)return r(e,t);var n,a,i,o=e.base,s=e.sup,h=e.sub,m=wt(o,t),c=t.fontMetrics(),u=0,p=0,d=o&&l.isCharacterBox(o);if(s){var f=t.havingStyle(t.style.sup());n=wt(s,f,t),d||(u=m.height-f.fontMetrics().supDrop*f.sizeMultiplier/t.sizeMultiplier)}if(h){var g=t.havingStyle(t.style.sub());a=wt(h,g,t),d||(p=m.depth+g.fontMetrics().subDrop*g.sizeMultiplier/t.sizeMultiplier)}i=t.style===x.DISPLAY?c.sup1:t.style.cramped?c.sup3:c.sup2;var v,b=t.sizeMultiplier,y=V(.5/c.ptPerEm/b),w=null;if(a){var k=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(m instanceof Z||k)&&(w=V(-m.italic))}if(n&&a){u=Math.max(u,i,n.depth+.25*c.xHeight),p=Math.max(p,c.sub2);var S=4*c.defaultRuleThickness;if(u-n.depth-(a.height-p)0&&(u+=M,p-=M)}var z=[{type:"elem",elem:a,shift:p,marginRight:y,marginLeft:w},{type:"elem",elem:n,shift:-u,marginRight:y}];v=Ke.makeVList({positionType:"individualShift",children:z},t)}else if(a){p=Math.max(p,c.sub1,a.height-.8*c.xHeight);var A=[{type:"elem",elem:a,marginLeft:w,marginRight:y}];v=Ke.makeVList({positionType:"shift",positionData:p,children:A},t)}else{if(!n)throw new Error("supsub must have either sup or sub.");u=Math.max(u,i,n.depth+.25*c.xHeight),v=Ke.makeVList({positionType:"shift",positionData:-u,children:[{type:"elem",elem:n,marginRight:y}]},t)}var T=yt(m,"right")||"mord";return Ke.makeSpan([T],[m,Ke.makeSpan(["msupsub"],[v])],t)},mathmlBuilder:function(e,t){var r,n=!1;e.base&&"horizBrace"===e.base.type&&!!e.sup===e.base.isOver&&(n=!0,r=e.base.isOver),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);var a,i=[Rt(e.base,t)];if(e.sub&&i.push(Rt(e.sub,t)),e.sup&&i.push(Rt(e.sup,t)),n)a=r?"mover":"munder";else if(e.sub)if(e.sup){var o=e.base;a=o&&"op"===o.type&&o.limits&&t.style===x.DISPLAY||o&&"operatorname"===o.type&&o.alwaysHandleSupSub&&(t.style===x.DISPLAY||o.limits)?"munderover":"msubsup"}else{var s=e.base;a=s&&"op"===s.type&&s.limits&&(t.style===x.DISPLAY||s.alwaysHandleSupSub)||s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(s.limits||t.style===x.DISPLAY)?"munder":"msub"}else{var l=e.base;a=l&&"op"===l.type&&l.limits&&(t.style===x.DISPLAY||l.alwaysHandleSupSub)||l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||t.style===x.DISPLAY)?"mover":"msup"}return new Tt.MathNode(a,i)}}),st({type:"atom",htmlBuilder:function(e,t){return Ke.mathsym(e.text,e.mode,t,["m"+e.family])},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[Bt(e.text,e.mode)]);if("bin"===e.family){var n=qt(e,t);"bold-italic"===n&&r.setAttribute("mathvariant",n)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});var kn={mi:"italic",mn:"normal",mtext:"normal"};st({type:"mathord",htmlBuilder:function(e,t){return Ke.makeOrd(e,t,"mathord")},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mi",[Bt(e.text,e.mode,t)]),n=qt(e,t)||"italic";return n!==kn[r.type]&&r.setAttribute("mathvariant",n),r}}),st({type:"textord",htmlBuilder:function(e,t){return Ke.makeOrd(e,t,"textord")},mathmlBuilder:function(e,t){var r,n=Bt(e.text,e.mode,t),a=qt(e,t)||"normal";return r="text"===e.mode?new Tt.MathNode("mtext",[n]):/[0-9]/.test(e.text)?new Tt.MathNode("mn",[n]):"\\prime"===e.text?new Tt.MathNode("mo",[n]):new Tt.MathNode("mi",[n]),a!==kn[r.type]&&r.setAttribute("mathvariant",a),r}});var Sn={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},Mn={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};st({type:"spacing",htmlBuilder:function(e,t){if(Mn.hasOwnProperty(e.text)){var r=Mn[e.text].className||"";if("text"===e.mode){var a=Ke.makeOrd(e,t,"textord");return a.classes.push(r),a}return Ke.makeSpan(["mspace",r],[Ke.mathsym(e.text,e.mode,t)],t)}if(Sn.hasOwnProperty(e.text))return Ke.makeSpan(["mspace",Sn[e.text]],[],t);throw new n('Unknown type of space "'+e.text+'"')},mathmlBuilder:function(e,t){if(!Mn.hasOwnProperty(e.text)){if(Sn.hasOwnProperty(e.text))return new Tt.MathNode("mspace");throw new n('Unknown type of space "'+e.text+'"')}return new Tt.MathNode("mtext",[new Tt.TextNode("\xa0")])}});var zn=function(){var e=new Tt.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};st({type:"tag",mathmlBuilder:function(e,t){var r=new Tt.MathNode("mtable",[new Tt.MathNode("mtr",[zn(),new Tt.MathNode("mtd",[It(e.body,t)]),zn(),new Tt.MathNode("mtd",[It(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var An={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},Tn={"\\textbf":"textbf","\\textmd":"textmd"},Bn={"\\textit":"textit","\\textup":"textup"},Cn=function(e,t){var r=e.font;return r?An[r]?t.withTextFontFamily(An[r]):Tn[r]?t.withTextFontWeight(Tn[r]):t.withTextFontShape(Bn[r]):t};ot({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"text",mode:r.mode,body:ht(a),font:n}},htmlBuilder:function(e,t){var r=Cn(e,t),n=ft(e.body,r,!0);return Ke.makeSpan(["mord","text"],n,r)},mathmlBuilder:function(e,t){var r=Cn(e,t);return It(e.body,r)}}),ot({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){return{type:"underline",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=Ke.makeLineSpan("underline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:a},{type:"elem",elem:n},{type:"kern",size:3*a},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","underline"],[i],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[new Tt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var n=new Tt.MathNode("munder",[Rt(e.body,t),r]);return n.setAttribute("accentunder","true"),n}}),ot({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler:function(e,t){return{type:"vcenter",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=t.fontMetrics().axisHeight,a=.5*(r.height-n-(r.depth+n));return Ke.makeVList({positionType:"shift",positionData:a,children:[{type:"elem",elem:r}]},t)},mathmlBuilder:function(e,t){return new Tt.MathNode("mpadded",[Rt(e.body,t)],["vcenter"])}}),ot({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler:function(e,t,r){throw new n("\\verb ended by end of line instead of matching delimiter")},htmlBuilder:function(e,t){for(var r=qn(e),n=[],a=t.havingStyle(t.style.text()),i=0;i0;)this.endGroup()},t.has=function(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)},t.get=function(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]},t.set=function(e,t,r){if(void 0===r&&(r=!1),r){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}null==t?delete this.current[e]:this.current[e]=t},e}(),Hn=Hr;Er("\\noexpand",(function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Er("\\expandafter",(function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Er("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Er("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Er("\\@ifnextchar",(function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Er("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Er("\\TextOrMath",(function(e){var t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));var En={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};Er("\\char",(function(e){var t,r=e.popToken(),a="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if("\\"===(r=e.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new n("\\char` missing argument");a=r.text.charCodeAt(0)}else t=10;if(t){if(null==(a=En[r.text])||a>=t)throw new n("Invalid base-"+t+" digit "+r.text);for(var i;null!=(i=En[e.future().text])&&i":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Er("\\dots",(function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in Dn?t=Dn[r]:("\\not"===r.substr(0,4)||r in ae.math&&l.contains(["bin","rel"],ae.math[r].group))&&(t="\\dotsb"),t}));var Pn={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Er("\\dotso",(function(e){return e.future().text in Pn?"\\ldots\\,":"\\ldots"})),Er("\\dotsc",(function(e){var t=e.future().text;return t in Pn&&","!==t?"\\ldots\\,":"\\ldots"})),Er("\\cdots",(function(e){return e.future().text in Pn?"\\@cdots\\,":"\\@cdots"})),Er("\\dotsb","\\cdots"),Er("\\dotsm","\\cdots"),Er("\\dotsi","\\!\\cdots"),Er("\\dotsx","\\ldots\\,"),Er("\\DOTSI","\\relax"),Er("\\DOTSB","\\relax"),Er("\\DOTSX","\\relax"),Er("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Er("\\,","\\tmspace+{3mu}{.1667em}"),Er("\\thinspace","\\,"),Er("\\>","\\mskip{4mu}"),Er("\\:","\\tmspace+{4mu}{.2222em}"),Er("\\medspace","\\:"),Er("\\;","\\tmspace+{5mu}{.2777em}"),Er("\\thickspace","\\;"),Er("\\!","\\tmspace-{3mu}{.1667em}"),Er("\\negthinspace","\\!"),Er("\\negmedspace","\\tmspace-{4mu}{.2222em}"),Er("\\negthickspace","\\tmspace-{5mu}{.277em}"),Er("\\enspace","\\kern.5em "),Er("\\enskip","\\hskip.5em\\relax"),Er("\\quad","\\hskip1em\\relax"),Er("\\qquad","\\hskip2em\\relax"),Er("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Er("\\tag@paren","\\tag@literal{({#1})}"),Er("\\tag@literal",(function(e){if(e.macros.get("\\df@tag"))throw new n("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Er("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),Er("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Er("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Er("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Er("\\pmb","\\html@mathml{\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}{\\mathbf{#1}}"),Er("\\newline","\\\\\\relax"),Er("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Fn=V(T["Main-Regular"]["T".charCodeAt(0)][1]-.7*T["Main-Regular"]["A".charCodeAt(0)][1]);Er("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Fn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),Er("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Fn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),Er("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Er("\\@hspace","\\hskip #1\\relax"),Er("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Er("\\ordinarycolon",":"),Er("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),Er("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),Er("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),Er("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),Er("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),Er("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),Er("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),Er("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),Er("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),Er("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),Er("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),Er("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),Er("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),Er("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),Er("\u2237","\\dblcolon"),Er("\u2239","\\eqcolon"),Er("\u2254","\\coloneqq"),Er("\u2255","\\eqqcolon"),Er("\u2a74","\\Coloneqq"),Er("\\ratio","\\vcentcolon"),Er("\\coloncolon","\\dblcolon"),Er("\\colonequals","\\coloneqq"),Er("\\coloncolonequals","\\Coloneqq"),Er("\\equalscolon","\\eqqcolon"),Er("\\equalscoloncolon","\\Eqqcolon"),Er("\\colonminus","\\coloneq"),Er("\\coloncolonminus","\\Coloneq"),Er("\\minuscolon","\\eqcolon"),Er("\\minuscoloncolon","\\Eqcolon"),Er("\\coloncolonapprox","\\Colonapprox"),Er("\\coloncolonsim","\\Colonsim"),Er("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Er("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Er("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Er("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Er("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),Er("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Er("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Er("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Er("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Er("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),Er("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),Er("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),Er("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),Er("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),Er("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),Er("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),Er("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),Er("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),Er("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),Er("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),Er("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),Er("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),Er("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),Er("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),Er("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),Er("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),Er("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),Er("\\imath","\\html@mathml{\\@imath}{\u0131}"),Er("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),Er("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),Er("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),Er("\u27e6","\\llbracket"),Er("\u27e7","\\rrbracket"),Er("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),Er("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),Er("\u2983","\\lBrace"),Er("\u2984","\\rBrace"),Er("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),Er("\u29b5","\\minuso"),Er("\\darr","\\downarrow"),Er("\\dArr","\\Downarrow"),Er("\\Darr","\\Downarrow"),Er("\\lang","\\langle"),Er("\\rang","\\rangle"),Er("\\uarr","\\uparrow"),Er("\\uArr","\\Uparrow"),Er("\\Uarr","\\Uparrow"),Er("\\N","\\mathbb{N}"),Er("\\R","\\mathbb{R}"),Er("\\Z","\\mathbb{Z}"),Er("\\alef","\\aleph"),Er("\\alefsym","\\aleph"),Er("\\Alpha","\\mathrm{A}"),Er("\\Beta","\\mathrm{B}"),Er("\\bull","\\bullet"),Er("\\Chi","\\mathrm{X}"),Er("\\clubs","\\clubsuit"),Er("\\cnums","\\mathbb{C}"),Er("\\Complex","\\mathbb{C}"),Er("\\Dagger","\\ddagger"),Er("\\diamonds","\\diamondsuit"),Er("\\empty","\\emptyset"),Er("\\Epsilon","\\mathrm{E}"),Er("\\Eta","\\mathrm{H}"),Er("\\exist","\\exists"),Er("\\harr","\\leftrightarrow"),Er("\\hArr","\\Leftrightarrow"),Er("\\Harr","\\Leftrightarrow"),Er("\\hearts","\\heartsuit"),Er("\\image","\\Im"),Er("\\infin","\\infty"),Er("\\Iota","\\mathrm{I}"),Er("\\isin","\\in"),Er("\\Kappa","\\mathrm{K}"),Er("\\larr","\\leftarrow"),Er("\\lArr","\\Leftarrow"),Er("\\Larr","\\Leftarrow"),Er("\\lrarr","\\leftrightarrow"),Er("\\lrArr","\\Leftrightarrow"),Er("\\Lrarr","\\Leftrightarrow"),Er("\\Mu","\\mathrm{M}"),Er("\\natnums","\\mathbb{N}"),Er("\\Nu","\\mathrm{N}"),Er("\\Omicron","\\mathrm{O}"),Er("\\plusmn","\\pm"),Er("\\rarr","\\rightarrow"),Er("\\rArr","\\Rightarrow"),Er("\\Rarr","\\Rightarrow"),Er("\\real","\\Re"),Er("\\reals","\\mathbb{R}"),Er("\\Reals","\\mathbb{R}"),Er("\\Rho","\\mathrm{P}"),Er("\\sdot","\\cdot"),Er("\\sect","\\S"),Er("\\spades","\\spadesuit"),Er("\\sub","\\subset"),Er("\\sube","\\subseteq"),Er("\\supe","\\supseteq"),Er("\\Tau","\\mathrm{T}"),Er("\\thetasym","\\vartheta"),Er("\\weierp","\\wp"),Er("\\Zeta","\\mathrm{Z}"),Er("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Er("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Er("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),Er("\\bra","\\mathinner{\\langle{#1}|}"),Er("\\ket","\\mathinner{|{#1}\\rangle}"),Er("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Er("\\Bra","\\left\\langle#1\\right|"),Er("\\Ket","\\left|#1\\right\\rangle");var Vn=function(e){return function(t){var r=t.consumeArg().tokens,n=t.consumeArg().tokens,a=t.consumeArg().tokens,i=t.consumeArg().tokens,o=t.macros.get("|"),s=t.macros.get("\\|");t.macros.beginGroup();var l=function(t){return function(r){e&&(r.macros.set("|",o),a.length&&r.macros.set("\\|",s));var i=t;!t&&a.length&&("|"===r.future().text&&(r.popToken(),i=!0));return{tokens:i?a:n,numArgs:0}}};t.macros.set("|",l(!1)),a.length&&t.macros.set("\\|",l(!0));var h=t.consumeArg().tokens,m=t.expandTokens([].concat(i,h,r));return t.macros.endGroup(),{tokens:m.reverse(),numArgs:0}}};Er("\\bra@ket",Vn(!1)),Er("\\bra@set",Vn(!0)),Er("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"),Er("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"),Er("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"),Er("\\angln","{\\angl n}"),Er("\\blue","\\textcolor{##6495ed}{#1}"),Er("\\orange","\\textcolor{##ffa500}{#1}"),Er("\\pink","\\textcolor{##ff00af}{#1}"),Er("\\red","\\textcolor{##df0030}{#1}"),Er("\\green","\\textcolor{##28ae7b}{#1}"),Er("\\gray","\\textcolor{gray}{#1}"),Er("\\purple","\\textcolor{##9d38bd}{#1}"),Er("\\blueA","\\textcolor{##ccfaff}{#1}"),Er("\\blueB","\\textcolor{##80f6ff}{#1}"),Er("\\blueC","\\textcolor{##63d9ea}{#1}"),Er("\\blueD","\\textcolor{##11accd}{#1}"),Er("\\blueE","\\textcolor{##0c7f99}{#1}"),Er("\\tealA","\\textcolor{##94fff5}{#1}"),Er("\\tealB","\\textcolor{##26edd5}{#1}"),Er("\\tealC","\\textcolor{##01d1c1}{#1}"),Er("\\tealD","\\textcolor{##01a995}{#1}"),Er("\\tealE","\\textcolor{##208170}{#1}"),Er("\\greenA","\\textcolor{##b6ffb0}{#1}"),Er("\\greenB","\\textcolor{##8af281}{#1}"),Er("\\greenC","\\textcolor{##74cf70}{#1}"),Er("\\greenD","\\textcolor{##1fab54}{#1}"),Er("\\greenE","\\textcolor{##0d923f}{#1}"),Er("\\goldA","\\textcolor{##ffd0a9}{#1}"),Er("\\goldB","\\textcolor{##ffbb71}{#1}"),Er("\\goldC","\\textcolor{##ff9c39}{#1}"),Er("\\goldD","\\textcolor{##e07d10}{#1}"),Er("\\goldE","\\textcolor{##a75a05}{#1}"),Er("\\redA","\\textcolor{##fca9a9}{#1}"),Er("\\redB","\\textcolor{##ff8482}{#1}"),Er("\\redC","\\textcolor{##f9685d}{#1}"),Er("\\redD","\\textcolor{##e84d39}{#1}"),Er("\\redE","\\textcolor{##bc2612}{#1}"),Er("\\maroonA","\\textcolor{##ffbde0}{#1}"),Er("\\maroonB","\\textcolor{##ff92c6}{#1}"),Er("\\maroonC","\\textcolor{##ed5fa6}{#1}"),Er("\\maroonD","\\textcolor{##ca337c}{#1}"),Er("\\maroonE","\\textcolor{##9e034e}{#1}"),Er("\\purpleA","\\textcolor{##ddd7ff}{#1}"),Er("\\purpleB","\\textcolor{##c6b9fc}{#1}"),Er("\\purpleC","\\textcolor{##aa87ff}{#1}"),Er("\\purpleD","\\textcolor{##7854ab}{#1}"),Er("\\purpleE","\\textcolor{##543b78}{#1}"),Er("\\mintA","\\textcolor{##f5f9e8}{#1}"),Er("\\mintB","\\textcolor{##edf2df}{#1}"),Er("\\mintC","\\textcolor{##e0e5cc}{#1}"),Er("\\grayA","\\textcolor{##f6f7f7}{#1}"),Er("\\grayB","\\textcolor{##f0f1f2}{#1}"),Er("\\grayC","\\textcolor{##e3e5e6}{#1}"),Er("\\grayD","\\textcolor{##d6d8da}{#1}"),Er("\\grayE","\\textcolor{##babec2}{#1}"),Er("\\grayF","\\textcolor{##888d93}{#1}"),Er("\\grayG","\\textcolor{##626569}{#1}"),Er("\\grayH","\\textcolor{##3b3e40}{#1}"),Er("\\grayI","\\textcolor{##21242c}{#1}"),Er("\\kaBlue","\\textcolor{##314453}{#1}"),Er("\\kaGreen","\\textcolor{##71B307}{#1}");var Gn={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},Un=function(){function e(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new On(Hn,t.macros),this.mode=r,this.stack=[]}var t=e.prototype;return t.feed=function(e){this.lexer=new Rn(e,this.settings)},t.switchMode=function(e){this.mode=e},t.beginGroup=function(){this.macros.beginGroup()},t.endGroup=function(){this.macros.endGroup()},t.endGroups=function(){this.macros.endGroups()},t.future=function(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]},t.popToken=function(){return this.future(),this.stack.pop()},t.pushToken=function(e){this.stack.push(e)},t.pushTokens=function(e){var t;(t=this.stack).push.apply(t,e)},t.scanArgument=function(e){var t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken();var a=this.consumeArg(["]"]);n=a.tokens,r=a.end}else{var i=this.consumeArg();n=i.tokens,t=i.start,r=i.end}return this.pushToken(new Dr("EOF",r.loc)),this.pushTokens(n),t.range(r,"")},t.consumeSpaces=function(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}},t.consumeArg=function(e){var t=[],r=e&&e.length>0;r||this.consumeSpaces();var a,i=this.future(),o=0,s=0;do{if(a=this.popToken(),t.push(a),"{"===a.text)++o;else if("}"===a.text){if(-1===--o)throw new n("Extra }",a)}else if("EOF"===a.text)throw new n("Unexpected end of input in a macro argument, expected '"+(e&&r?e[s]:"}")+"'",a);if(e&&r)if((0===o||1===o&&"{"===e[s])&&a.text===e[s]){if(++s===e.length){t.splice(-s,s);break}}else s=0}while(0!==o||r);return"{"===i.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:i,end:a}},t.consumeArgs=function(e,t){if(t){if(t.length!==e+1)throw new n("The length of delimiters doesn't match the number of args!");for(var r=t[0],a=0;athis.settings.maxExpand)throw new n("Too many expansions: infinite loop or need to increase maxExpand setting");var i=a.tokens,o=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs)for(var s=(i=i.slice()).length-1;s>=0;--s){var l=i[s];if("#"===l.text){if(0===s)throw new n("Incomplete placeholder at end of macro body",l);if("#"===(l=i[--s]).text)i.splice(s+1,1);else{if(!/^[1-9]$/.test(l.text))throw new n("Not a valid argument number",l);var h;(h=i).splice.apply(h,[s,2].concat(o[+l.text-1]))}}}return this.pushTokens(i),i},t.expandAfterFuture=function(){return this.expandOnce(),this.future()},t.expandNextToken=function(){for(;;){var e=this.expandOnce();if(e instanceof Dr)return e.treatAsRelax&&(e.text="\\relax"),this.stack.pop()}throw new Error},t.expandMacro=function(e){return this.macros.has(e)?this.expandTokens([new Dr(e)]):void 0},t.expandTokens=function(e){var t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;){var n=this.expandOnce(!0);n instanceof Dr&&(n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),t.push(this.stack.pop()))}return t},t.expandMacroAsText=function(e){var t=this.expandMacro(e);return t?t.map((function(e){return e.text})).join(""):t},t._getExpansion=function(e){var t=this.macros.get(e);if(null==t)return t;if(1===e.length){var r=this.lexer.catcodes[e];if(null!=r&&13!==r)return}var n="function"==typeof t?t(this):t;if("string"==typeof n){var a=0;if(-1!==n.indexOf("#"))for(var i=n.replace(/##/g,"");-1!==i.indexOf("#"+(a+1));)++a;for(var o=new Rn(n,this.settings),s=[],l=o.lex();"EOF"!==l.text;)s.push(l),l=o.lex();return s.reverse(),{tokens:s,numArgs:a}}return n},t.isDefined=function(e){return this.macros.has(e)||Nn.hasOwnProperty(e)||ae.math.hasOwnProperty(e)||ae.text.hasOwnProperty(e)||Gn.hasOwnProperty(e)},t.isExpandable=function(e){var t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:Nn.hasOwnProperty(e)&&!Nn[e].primitive},e}(),Yn=/^[\u208a\u208b\u208c\u208d\u208e\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2090\u2091\u2095\u1d62\u2c7c\u2096\u2097\u2098\u2099\u2092\u209a\u1d63\u209b\u209c\u1d64\u1d65\u2093\u1d66\u1d67\u1d68\u1d69\u1d6a]/,Xn=Object.freeze({"\u208a":"+","\u208b":"-","\u208c":"=","\u208d":"(","\u208e":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1d62":"i","\u2c7c":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209a":"p","\u1d63":"r","\u209b":"s","\u209c":"t","\u1d64":"u","\u1d65":"v","\u2093":"x","\u1d66":"\u03b2","\u1d67":"\u03b3","\u1d68":"\u03c1","\u1d69":"\u03d5","\u1d6a":"\u03c7","\u207a":"+","\u207b":"-","\u207c":"=","\u207d":"(","\u207e":")","\u2070":"0","\xb9":"1","\xb2":"2","\xb3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1d2c":"A","\u1d2e":"B","\u1d30":"D","\u1d31":"E","\u1d33":"G","\u1d34":"H","\u1d35":"I","\u1d36":"J","\u1d37":"K","\u1d38":"L","\u1d39":"M","\u1d3a":"N","\u1d3c":"O","\u1d3e":"P","\u1d3f":"R","\u1d40":"T","\u1d41":"U","\u2c7d":"V","\u1d42":"W","\u1d43":"a","\u1d47":"b","\u1d9c":"c","\u1d48":"d","\u1d49":"e","\u1da0":"f","\u1d4d":"g","\u02b0":"h","\u2071":"i","\u02b2":"j","\u1d4f":"k","\u02e1":"l","\u1d50":"m","\u207f":"n","\u1d52":"o","\u1d56":"p","\u02b3":"r","\u02e2":"s","\u1d57":"t","\u1d58":"u","\u1d5b":"v","\u02b7":"w","\u02e3":"x","\u02b8":"y","\u1dbb":"z","\u1d5d":"\u03b2","\u1d5e":"\u03b3","\u1d5f":"\u03b4","\u1d60":"\u03d5","\u1d61":"\u03c7","\u1dbf":"\u03b8"}),Wn={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"},"\u0327":{text:"\\c"}},_n={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u1e09":"c\u0327\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u1e1d":"e\u0327\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u0229":"e\u0327","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u0123":"g\u0327","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\u1e29":"h\u0327","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u0137":"k\u0327","\u013a":"l\u0301","\u013e":"l\u030c","\u013c":"l\u0327","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u0157":"r\u0327","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u015f":"s\u0327","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\u0163":"t\u0327","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u1e08":"C\u0327\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u1e1c":"E\u0327\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u0228":"E\u0327","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u0122":"G\u0327","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\u1e28":"H\u0327","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0136":"K\u0327","\u0139":"L\u0301","\u013d":"L\u030c","\u013b":"L\u0327","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u0156":"R\u0327","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u015e":"S\u0327","\u0164":"T\u030c","\u1e6a":"T\u0307","\u0162":"T\u0327","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"},jn=function(){function e(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new Un(e,t,this.mode),this.settings=t,this.leftrightDepth=0}var t=e.prototype;return t.expect=function(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new n("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()},t.consume=function(){this.nextToken=null},t.fetch=function(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken},t.switchMode=function(e){this.mode=e,this.gullet.switchMode(e)},t.parse=function(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}},t.subparse=function(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new Dr("}")),this.gullet.pushTokens(e);var r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r},t.parseExpression=function(t,r){for(var n=[];;){"math"===this.mode&&this.consumeSpaces();var a=this.fetch();if(-1!==e.endOfExpression.indexOf(a.text))break;if(r&&a.text===r)break;if(t&&Nn[a.text]&&Nn[a.text].infix)break;var i=this.parseAtom(r);if(!i)break;"internal"!==i.type&&n.push(i)}return"text"===this.mode&&this.formLigatures(n),this.handleInfixNodes(n)},t.handleInfixNodes=function(e){for(var t,r=-1,a=0;a=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var s,l=ae[this.mode][t].group,h=Lr.range(e);if(te.hasOwnProperty(l)){var m=l;s={type:"atom",mode:this.mode,family:m,loc:h,text:t}}else s={type:l,mode:this.mode,loc:h,text:t};i=s}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(S(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),i={type:"textord",mode:"text",loc:Lr.range(e),text:t}}if(this.consume(),o)for(var c=0;c0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/logo-simple.svg b/_static/logo-simple.svg new file mode 100644 index 0000000000..b2f644b0c9 --- /dev/null +++ b/_static/logo-simple.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/_static/nbsphinx-broken-thumbnail.svg b/_static/nbsphinx-broken-thumbnail.svg new file mode 100644 index 0000000000..4919ca8829 --- /dev/null +++ b/_static/nbsphinx-broken-thumbnail.svg @@ -0,0 +1,9 @@ + + + + diff --git a/_static/nbsphinx-code-cells.css b/_static/nbsphinx-code-cells.css new file mode 100644 index 0000000000..a3fb27c30f --- /dev/null +++ b/_static/nbsphinx-code-cells.css @@ -0,0 +1,259 @@ +/* remove conflicting styling from Sphinx themes */ +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt *, +div.nbinput.container div.input_area pre, +div.nboutput.container div.output_area pre, +div.nbinput.container div.input_area .highlight, +div.nboutput.container div.output_area .highlight { + border: none; + padding: 0; + margin: 0; + box-shadow: none; +} + +div.nbinput.container > div[class*=highlight], +div.nboutput.container > div[class*=highlight] { + margin: 0; +} + +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt * { + background: none; +} + +div.nboutput.container div.output_area .highlight, +div.nboutput.container div.output_area pre { + background: unset; +} + +div.nboutput.container div.output_area div.highlight { + color: unset; /* override Pygments text color */ +} + +/* avoid gaps between output lines */ +div.nboutput.container div[class*=highlight] pre { + line-height: normal; +} + +/* input/output containers */ +div.nbinput.container, +div.nboutput.container { + display: -webkit-flex; + display: flex; + align-items: flex-start; + margin: 0; + width: 100%; +} +@media (max-width: 540px) { + div.nbinput.container, + div.nboutput.container { + flex-direction: column; + } +} + +/* input container */ +div.nbinput.container { + padding-top: 5px; +} + +/* last container */ +div.nblast.container { + padding-bottom: 5px; +} + +/* input prompt */ +div.nbinput.container div.prompt pre, +/* for sphinx_immaterial theme: */ +div.nbinput.container div.prompt pre > code { + color: #307FC1; +} + +/* output prompt */ +div.nboutput.container div.prompt pre, +/* for sphinx_immaterial theme: */ +div.nboutput.container div.prompt pre > code { + color: #BF5B3D; +} + +/* all prompts */ +div.nbinput.container div.prompt, +div.nboutput.container div.prompt { + width: 4.5ex; + padding-top: 5px; + position: relative; + user-select: none; +} + +div.nbinput.container div.prompt > div, +div.nboutput.container div.prompt > div { + position: absolute; + right: 0; + margin-right: 0.3ex; +} + +@media (max-width: 540px) { + div.nbinput.container div.prompt, + div.nboutput.container div.prompt { + width: unset; + text-align: left; + padding: 0.4em; + } + div.nboutput.container div.prompt.empty { + padding: 0; + } + + div.nbinput.container div.prompt > div, + div.nboutput.container div.prompt > div { + position: unset; + } +} + +/* disable scrollbars and line breaks on prompts */ +div.nbinput.container div.prompt pre, +div.nboutput.container div.prompt pre { + overflow: hidden; + white-space: pre; +} + +/* input/output area */ +div.nbinput.container div.input_area, +div.nboutput.container div.output_area { + -webkit-flex: 1; + flex: 1; + overflow: auto; +} +@media (max-width: 540px) { + div.nbinput.container div.input_area, + div.nboutput.container div.output_area { + width: 100%; + } +} + +/* input area */ +div.nbinput.container div.input_area { + border: 1px solid #e0e0e0; + border-radius: 2px; + /*background: #f5f5f5;*/ +} + +/* override MathJax center alignment in output cells */ +div.nboutput.container div[class*=MathJax] { + text-align: left !important; +} + +/* override sphinx.ext.imgmath center alignment in output cells */ +div.nboutput.container div.math p { + text-align: left; +} + +/* standard error */ +div.nboutput.container div.output_area.stderr { + background: #fdd; +} + +/* ANSI colors */ +.ansi-black-fg { color: #3E424D; } +.ansi-black-bg { background-color: #3E424D; } +.ansi-black-intense-fg { color: #282C36; } +.ansi-black-intense-bg { background-color: #282C36; } +.ansi-red-fg { color: #E75C58; } +.ansi-red-bg { background-color: #E75C58; } +.ansi-red-intense-fg { color: #B22B31; } +.ansi-red-intense-bg { background-color: #B22B31; } +.ansi-green-fg { color: #00A250; } +.ansi-green-bg { background-color: #00A250; } +.ansi-green-intense-fg { color: #007427; } +.ansi-green-intense-bg { background-color: #007427; } +.ansi-yellow-fg { color: #DDB62B; } +.ansi-yellow-bg { background-color: #DDB62B; } +.ansi-yellow-intense-fg { color: #B27D12; } +.ansi-yellow-intense-bg { background-color: #B27D12; } +.ansi-blue-fg { color: #208FFB; } +.ansi-blue-bg { background-color: #208FFB; } +.ansi-blue-intense-fg { color: #0065CA; } +.ansi-blue-intense-bg { background-color: #0065CA; } +.ansi-magenta-fg { color: #D160C4; } +.ansi-magenta-bg { background-color: #D160C4; } +.ansi-magenta-intense-fg { color: #A03196; } +.ansi-magenta-intense-bg { background-color: #A03196; } +.ansi-cyan-fg { color: #60C6C8; } +.ansi-cyan-bg { background-color: #60C6C8; } +.ansi-cyan-intense-fg { color: #258F8F; } +.ansi-cyan-intense-bg { background-color: #258F8F; } +.ansi-white-fg { color: #C5C1B4; } +.ansi-white-bg { background-color: #C5C1B4; } +.ansi-white-intense-fg { color: #A1A6B2; } +.ansi-white-intense-bg { background-color: #A1A6B2; } + +.ansi-default-inverse-fg { color: #FFFFFF; } +.ansi-default-inverse-bg { background-color: #000000; } + +.ansi-bold { font-weight: bold; } +.ansi-underline { text-decoration: underline; } + + +div.nbinput.container div.input_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight].math, +div.nboutput.container div.output_area.rendered_html, +div.nboutput.container div.output_area > div.output_javascript, +div.nboutput.container div.output_area:not(.rendered_html) > img{ + padding: 5px; + margin: 0; +} + +/* fix copybtn overflow problem in chromium (needed for 'sphinx_copybutton') */ +div.nbinput.container div.input_area > div[class^='highlight'], +div.nboutput.container div.output_area > div[class^='highlight']{ + overflow-y: hidden; +} + +/* hide copy button on prompts for 'sphinx_copybutton' extension ... */ +.prompt .copybtn, +/* ... and 'sphinx_immaterial' theme */ +.prompt .md-clipboard.md-icon { + display: none; +} + +/* Some additional styling taken form the Jupyter notebook CSS */ +.jp-RenderedHTMLCommon table, +div.rendered_html table { + border: none; + border-collapse: collapse; + border-spacing: 0; + color: black; + font-size: 12px; + table-layout: fixed; +} +.jp-RenderedHTMLCommon thead, +div.rendered_html thead { + border-bottom: 1px solid black; + vertical-align: bottom; +} +.jp-RenderedHTMLCommon tr, +.jp-RenderedHTMLCommon th, +.jp-RenderedHTMLCommon td, +div.rendered_html tr, +div.rendered_html th, +div.rendered_html td { + text-align: right; + vertical-align: middle; + padding: 0.5em 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} +.jp-RenderedHTMLCommon th, +div.rendered_html th { + font-weight: bold; +} +.jp-RenderedHTMLCommon tbody tr:nth-child(odd), +div.rendered_html tbody tr:nth-child(odd) { + background: #f5f5f5; +} +.jp-RenderedHTMLCommon tbody tr:hover, +div.rendered_html tbody tr:hover { + background: rgba(66, 165, 245, 0.2); +} + diff --git a/_static/nbsphinx-gallery.css b/_static/nbsphinx-gallery.css new file mode 100644 index 0000000000..365c27a96b --- /dev/null +++ b/_static/nbsphinx-gallery.css @@ -0,0 +1,31 @@ +.nbsphinx-gallery { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); + gap: 5px; + margin-top: 1em; + margin-bottom: 1em; +} + +.nbsphinx-gallery > a { + padding: 5px; + border: 1px dotted currentColor; + border-radius: 2px; + text-align: center; +} + +.nbsphinx-gallery > a:hover { + border-style: solid; +} + +.nbsphinx-gallery img { + max-width: 100%; + max-height: 100%; +} + +.nbsphinx-gallery > a > div:first-child { + display: flex; + align-items: start; + justify-content: center; + height: 120px; + margin-bottom: 5px; +} diff --git a/_static/nbsphinx-no-thumbnail.svg b/_static/nbsphinx-no-thumbnail.svg new file mode 100644 index 0000000000..9dca7588fa --- /dev/null +++ b/_static/nbsphinx-no-thumbnail.svg @@ -0,0 +1,9 @@ + + + + diff --git a/_static/no_image.png b/_static/no_image.png new file mode 100644 index 0000000000000000000000000000000000000000..8c2d48d5d3f0044cf0399b3608d8eb5db6f9d12d GIT binary patch literal 4315 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 HW8D7$6^1w` literal 0 HcmV?d00001 diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 0000000000..997797f270 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,152 @@ +html[data-theme="light"] .highlight pre { line-height: 125%; } +html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight .hll { background-color: #7971292e } +html[data-theme="light"] .highlight { background: #fefefe; color: #545454 } +html[data-theme="light"] .highlight .c { color: #797129 } /* Comment */ +html[data-theme="light"] .highlight .err { color: #d91e18 } /* Error */ +html[data-theme="light"] .highlight .k { color: #7928a1 } /* Keyword */ +html[data-theme="light"] .highlight .l { color: #797129 } /* Literal */ +html[data-theme="light"] .highlight .n { color: #545454 } /* Name */ +html[data-theme="light"] .highlight .o { color: #008000 } /* Operator */ +html[data-theme="light"] .highlight .p { color: #545454 } /* Punctuation */ +html[data-theme="light"] .highlight .ch { color: #797129 } /* Comment.Hashbang */ +html[data-theme="light"] .highlight .cm { color: #797129 } /* Comment.Multiline */ +html[data-theme="light"] .highlight .cp { color: #797129 } /* Comment.Preproc */ +html[data-theme="light"] .highlight .cpf { color: #797129 } /* Comment.PreprocFile */ +html[data-theme="light"] .highlight .c1 { color: #797129 } /* Comment.Single */ +html[data-theme="light"] .highlight .cs { color: #797129 } /* Comment.Special */ +html[data-theme="light"] .highlight .gd { color: #007faa } /* Generic.Deleted */ +html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="light"] .highlight .gh { color: #007faa } /* Generic.Heading */ +html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="light"] .highlight .gu { color: #007faa } /* Generic.Subheading */ +html[data-theme="light"] .highlight .kc { color: #7928a1 } /* Keyword.Constant */ +html[data-theme="light"] .highlight .kd { color: #7928a1 } /* Keyword.Declaration */ +html[data-theme="light"] .highlight .kn { color: #7928a1 } /* Keyword.Namespace */ +html[data-theme="light"] .highlight .kp { color: #7928a1 } /* Keyword.Pseudo */ +html[data-theme="light"] .highlight .kr { color: #7928a1 } /* Keyword.Reserved */ +html[data-theme="light"] .highlight .kt { color: #797129 } /* Keyword.Type */ +html[data-theme="light"] .highlight .ld { color: #797129 } /* Literal.Date */ +html[data-theme="light"] .highlight .m { color: #797129 } /* Literal.Number */ +html[data-theme="light"] .highlight .s { color: #008000 } /* Literal.String */ +html[data-theme="light"] .highlight .na { color: #797129 } /* Name.Attribute */ +html[data-theme="light"] .highlight .nb { color: #797129 } /* Name.Builtin */ +html[data-theme="light"] .highlight .nc { color: #007faa } /* Name.Class */ +html[data-theme="light"] .highlight .no { color: #007faa } /* Name.Constant */ +html[data-theme="light"] .highlight .nd { color: #797129 } /* Name.Decorator */ +html[data-theme="light"] .highlight .ni { color: #008000 } /* Name.Entity */ +html[data-theme="light"] .highlight .ne { color: #7928a1 } /* Name.Exception */ +html[data-theme="light"] .highlight .nf { color: #007faa } /* Name.Function */ +html[data-theme="light"] .highlight .nl { color: #797129 } /* Name.Label */ +html[data-theme="light"] .highlight .nn { color: #545454 } /* Name.Namespace */ +html[data-theme="light"] .highlight .nx { color: #545454 } /* Name.Other */ +html[data-theme="light"] .highlight .py { color: #007faa } /* Name.Property */ +html[data-theme="light"] .highlight .nt { color: #007faa } /* Name.Tag */ +html[data-theme="light"] .highlight .nv { color: #d91e18 } /* Name.Variable */ +html[data-theme="light"] .highlight .ow { color: #7928a1 } /* Operator.Word */ +html[data-theme="light"] .highlight .pm { color: #545454 } /* Punctuation.Marker */ +html[data-theme="light"] .highlight .w { color: #545454 } /* Text.Whitespace */ +html[data-theme="light"] .highlight .mb { color: #797129 } /* Literal.Number.Bin */ +html[data-theme="light"] .highlight .mf { color: #797129 } /* Literal.Number.Float */ +html[data-theme="light"] .highlight .mh { color: #797129 } /* Literal.Number.Hex */ +html[data-theme="light"] .highlight .mi { color: #797129 } /* Literal.Number.Integer */ +html[data-theme="light"] .highlight .mo { color: #797129 } /* Literal.Number.Oct */ +html[data-theme="light"] .highlight .sa { color: #008000 } /* Literal.String.Affix */ +html[data-theme="light"] .highlight .sb { color: #008000 } /* Literal.String.Backtick */ +html[data-theme="light"] .highlight .sc { color: #008000 } /* Literal.String.Char */ +html[data-theme="light"] .highlight .dl { color: #008000 } /* Literal.String.Delimiter */ +html[data-theme="light"] .highlight .sd { color: #008000 } /* Literal.String.Doc */ +html[data-theme="light"] .highlight .s2 { color: #008000 } /* Literal.String.Double */ +html[data-theme="light"] .highlight .se { color: #008000 } /* Literal.String.Escape */ +html[data-theme="light"] .highlight .sh { color: #008000 } /* Literal.String.Heredoc */ +html[data-theme="light"] .highlight .si { color: #008000 } /* Literal.String.Interpol */ +html[data-theme="light"] .highlight .sx { color: #008000 } /* Literal.String.Other */ +html[data-theme="light"] .highlight .sr { color: #d91e18 } /* Literal.String.Regex */ +html[data-theme="light"] .highlight .s1 { color: #008000 } /* Literal.String.Single */ +html[data-theme="light"] .highlight .ss { color: #007faa } /* Literal.String.Symbol */ +html[data-theme="light"] .highlight .bp { color: #797129 } /* Name.Builtin.Pseudo */ +html[data-theme="light"] .highlight .fm { color: #007faa } /* Name.Function.Magic */ +html[data-theme="light"] .highlight .vc { color: #d91e18 } /* Name.Variable.Class */ +html[data-theme="light"] .highlight .vg { color: #d91e18 } /* Name.Variable.Global */ +html[data-theme="light"] .highlight .vi { color: #d91e18 } /* Name.Variable.Instance */ +html[data-theme="light"] .highlight .vm { color: #797129 } /* Name.Variable.Magic */ +html[data-theme="light"] .highlight .il { color: #797129 } /* Literal.Number.Integer.Long */ +html[data-theme="dark"] .highlight pre { line-height: 125%; } +html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e } +html[data-theme="dark"] .highlight { background: #2b2b2b; color: #f8f8f2 } +html[data-theme="dark"] .highlight .c { color: #ffd900 } /* Comment */ +html[data-theme="dark"] .highlight .err { color: #ffa07a } /* Error */ +html[data-theme="dark"] .highlight .k { color: #dcc6e0 } /* Keyword */ +html[data-theme="dark"] .highlight .l { color: #ffd900 } /* Literal */ +html[data-theme="dark"] .highlight .n { color: #f8f8f2 } /* Name */ +html[data-theme="dark"] .highlight .o { color: #abe338 } /* Operator */ +html[data-theme="dark"] .highlight .p { color: #f8f8f2 } /* Punctuation */ +html[data-theme="dark"] .highlight .ch { color: #ffd900 } /* Comment.Hashbang */ +html[data-theme="dark"] .highlight .cm { color: #ffd900 } /* Comment.Multiline */ +html[data-theme="dark"] .highlight .cp { color: #ffd900 } /* Comment.Preproc */ +html[data-theme="dark"] .highlight .cpf { color: #ffd900 } /* Comment.PreprocFile */ +html[data-theme="dark"] .highlight .c1 { color: #ffd900 } /* Comment.Single */ +html[data-theme="dark"] .highlight .cs { color: #ffd900 } /* Comment.Special */ +html[data-theme="dark"] .highlight .gd { color: #00e0e0 } /* Generic.Deleted */ +html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="dark"] .highlight .gh { color: #00e0e0 } /* Generic.Heading */ +html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="dark"] .highlight .gu { color: #00e0e0 } /* Generic.Subheading */ +html[data-theme="dark"] .highlight .kc { color: #dcc6e0 } /* Keyword.Constant */ +html[data-theme="dark"] .highlight .kd { color: #dcc6e0 } /* Keyword.Declaration */ +html[data-theme="dark"] .highlight .kn { color: #dcc6e0 } /* Keyword.Namespace */ +html[data-theme="dark"] .highlight .kp { color: #dcc6e0 } /* Keyword.Pseudo */ +html[data-theme="dark"] .highlight .kr { color: #dcc6e0 } /* Keyword.Reserved */ +html[data-theme="dark"] .highlight .kt { color: #ffd900 } /* Keyword.Type */ +html[data-theme="dark"] .highlight .ld { color: #ffd900 } /* Literal.Date */ +html[data-theme="dark"] .highlight .m { color: #ffd900 } /* Literal.Number */ +html[data-theme="dark"] .highlight .s { color: #abe338 } /* Literal.String */ +html[data-theme="dark"] .highlight .na { color: #ffd900 } /* Name.Attribute */ +html[data-theme="dark"] .highlight .nb { color: #ffd900 } /* Name.Builtin */ +html[data-theme="dark"] .highlight .nc { color: #00e0e0 } /* Name.Class */ +html[data-theme="dark"] .highlight .no { color: #00e0e0 } /* Name.Constant */ +html[data-theme="dark"] .highlight .nd { color: #ffd900 } /* Name.Decorator */ +html[data-theme="dark"] .highlight .ni { color: #abe338 } /* Name.Entity */ +html[data-theme="dark"] .highlight .ne { color: #dcc6e0 } /* Name.Exception */ +html[data-theme="dark"] .highlight .nf { color: #00e0e0 } /* Name.Function */ +html[data-theme="dark"] .highlight .nl { color: #ffd900 } /* Name.Label */ +html[data-theme="dark"] .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ +html[data-theme="dark"] .highlight .nx { color: #f8f8f2 } /* Name.Other */ +html[data-theme="dark"] .highlight .py { color: #00e0e0 } /* Name.Property */ +html[data-theme="dark"] .highlight .nt { color: #00e0e0 } /* Name.Tag */ +html[data-theme="dark"] .highlight .nv { color: #ffa07a } /* Name.Variable */ +html[data-theme="dark"] .highlight .ow { color: #dcc6e0 } /* Operator.Word */ +html[data-theme="dark"] .highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */ +html[data-theme="dark"] .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ +html[data-theme="dark"] .highlight .mb { color: #ffd900 } /* Literal.Number.Bin */ +html[data-theme="dark"] .highlight .mf { color: #ffd900 } /* Literal.Number.Float */ +html[data-theme="dark"] .highlight .mh { color: #ffd900 } /* Literal.Number.Hex */ +html[data-theme="dark"] .highlight .mi { color: #ffd900 } /* Literal.Number.Integer */ +html[data-theme="dark"] .highlight .mo { color: #ffd900 } /* Literal.Number.Oct */ +html[data-theme="dark"] .highlight .sa { color: #abe338 } /* Literal.String.Affix */ +html[data-theme="dark"] .highlight .sb { color: #abe338 } /* Literal.String.Backtick */ +html[data-theme="dark"] .highlight .sc { color: #abe338 } /* Literal.String.Char */ +html[data-theme="dark"] .highlight .dl { color: #abe338 } /* Literal.String.Delimiter */ +html[data-theme="dark"] .highlight .sd { color: #abe338 } /* Literal.String.Doc */ +html[data-theme="dark"] .highlight .s2 { color: #abe338 } /* Literal.String.Double */ +html[data-theme="dark"] .highlight .se { color: #abe338 } /* Literal.String.Escape */ +html[data-theme="dark"] .highlight .sh { color: #abe338 } /* Literal.String.Heredoc */ +html[data-theme="dark"] .highlight .si { color: #abe338 } /* Literal.String.Interpol */ +html[data-theme="dark"] .highlight .sx { color: #abe338 } /* Literal.String.Other */ +html[data-theme="dark"] .highlight .sr { color: #ffa07a } /* Literal.String.Regex */ +html[data-theme="dark"] .highlight .s1 { color: #abe338 } /* Literal.String.Single */ +html[data-theme="dark"] .highlight .ss { color: #00e0e0 } /* Literal.String.Symbol */ +html[data-theme="dark"] .highlight .bp { color: #ffd900 } /* Name.Builtin.Pseudo */ +html[data-theme="dark"] .highlight .fm { color: #00e0e0 } /* Name.Function.Magic */ +html[data-theme="dark"] .highlight .vc { color: #ffa07a } /* Name.Variable.Class */ +html[data-theme="dark"] .highlight .vg { color: #ffa07a } /* Name.Variable.Global */ +html[data-theme="dark"] .highlight .vi { color: #ffa07a } /* Name.Variable.Instance */ +html[data-theme="dark"] .highlight .vm { color: #ffd900 } /* Name.Variable.Magic */ +html[data-theme="dark"] .highlight .il { color: #ffd900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/scripts/bootstrap.js b/_static/scripts/bootstrap.js new file mode 100644 index 0000000000..ef07e0bca0 --- /dev/null +++ b/_static/scripts/bootstrap.js @@ -0,0 +1,3 @@ +/*! For license information please see bootstrap.js.LICENSE.txt */ +(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{afterMain:()=>w,afterRead:()=>b,afterWrite:()=>C,applyStyles:()=>$,arrow:()=>G,auto:()=>r,basePlacements:()=>a,beforeMain:()=>v,beforeRead:()=>m,beforeWrite:()=>A,bottom:()=>n,clippingParents:()=>h,computeStyles:()=>et,createPopper:()=>Dt,createPopperBase:()=>Lt,createPopperLite:()=>$t,detectOverflow:()=>mt,end:()=>c,eventListeners:()=>nt,flip:()=>_t,hide:()=>yt,left:()=>o,main:()=>y,modifierPhases:()=>T,offset:()=>wt,placements:()=>g,popper:()=>u,popperGenerator:()=>kt,popperOffsets:()=>At,preventOverflow:()=>Et,read:()=>_,reference:()=>f,right:()=>s,start:()=>l,top:()=>i,variationPlacements:()=>p,viewport:()=>d,write:()=>E});var i="top",n="bottom",s="right",o="left",r="auto",a=[i,n,s,o],l="start",c="end",h="clippingParents",d="viewport",u="popper",f="reference",p=a.reduce((function(t,e){return t.concat([e+"-"+l,e+"-"+c])}),[]),g=[].concat(a,[r]).reduce((function(t,e){return t.concat([e,e+"-"+l,e+"-"+c])}),[]),m="beforeRead",_="read",b="afterRead",v="beforeMain",y="main",w="afterMain",A="beforeWrite",E="write",C="afterWrite",T=[m,_,b,v,y,w,A,E,C];function O(t){return t?(t.nodeName||"").toLowerCase():null}function x(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function k(t){return t instanceof x(t).Element||t instanceof Element}function L(t){return t instanceof x(t).HTMLElement||t instanceof HTMLElement}function D(t){return"undefined"!=typeof ShadowRoot&&(t instanceof x(t).ShadowRoot||t instanceof ShadowRoot)}const $={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];L(s)&&O(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});L(n)&&O(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function S(t){return t.split("-")[0]}var I=Math.max,N=Math.min,P=Math.round;function j(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function M(){return!/^((?!chrome|android).)*safari/i.test(j())}function H(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&L(t)&&(s=t.offsetWidth>0&&P(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&P(n.height)/t.offsetHeight||1);var r=(k(t)?x(t):window).visualViewport,a=!M()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function B(t){var e=H(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function W(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&D(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function F(t){return x(t).getComputedStyle(t)}function z(t){return["table","td","th"].indexOf(O(t))>=0}function q(t){return((k(t)?t.ownerDocument:t.document)||window.document).documentElement}function R(t){return"html"===O(t)?t:t.assignedSlot||t.parentNode||(D(t)?t.host:null)||q(t)}function V(t){return L(t)&&"fixed"!==F(t).position?t.offsetParent:null}function Y(t){for(var e=x(t),i=V(t);i&&z(i)&&"static"===F(i).position;)i=V(i);return i&&("html"===O(i)||"body"===O(i)&&"static"===F(i).position)?e:i||function(t){var e=/firefox/i.test(j());if(/Trident/i.test(j())&&L(t)&&"fixed"===F(t).position)return null;var i=R(t);for(D(i)&&(i=i.host);L(i)&&["html","body"].indexOf(O(i))<0;){var n=F(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function K(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Q(t,e,i){return I(t,N(e,i))}function X(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function U(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const G={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,r=t.state,l=t.name,c=t.options,h=r.elements.arrow,d=r.modifiersData.popperOffsets,u=S(r.placement),f=K(u),p=[o,s].indexOf(u)>=0?"height":"width";if(h&&d){var g=function(t,e){return X("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:U(t,a))}(c.padding,r),m=B(h),_="y"===f?i:o,b="y"===f?n:s,v=r.rects.reference[p]+r.rects.reference[f]-d[f]-r.rects.popper[p],y=d[f]-r.rects.reference[f],w=Y(h),A=w?"y"===f?w.clientHeight||0:w.clientWidth||0:0,E=v/2-y/2,C=g[_],T=A-m[p]-g[b],O=A/2-m[p]/2+E,x=Q(C,O,T),k=f;r.modifiersData[l]=((e={})[k]=x,e.centerOffset=x-O,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&W(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function J(t){return t.split("-")[1]}var Z={top:"auto",right:"auto",bottom:"auto",left:"auto"};function tt(t){var e,r=t.popper,a=t.popperRect,l=t.placement,h=t.variation,d=t.offsets,u=t.position,f=t.gpuAcceleration,p=t.adaptive,g=t.roundOffsets,m=t.isFixed,_=d.x,b=void 0===_?0:_,v=d.y,y=void 0===v?0:v,w="function"==typeof g?g({x:b,y}):{x:b,y};b=w.x,y=w.y;var A=d.hasOwnProperty("x"),E=d.hasOwnProperty("y"),C=o,T=i,O=window;if(p){var k=Y(r),L="clientHeight",D="clientWidth";k===x(r)&&"static"!==F(k=q(r)).position&&"absolute"===u&&(L="scrollHeight",D="scrollWidth"),(l===i||(l===o||l===s)&&h===c)&&(T=n,y-=(m&&k===O&&O.visualViewport?O.visualViewport.height:k[L])-a.height,y*=f?1:-1),l!==o&&(l!==i&&l!==n||h!==c)||(C=s,b-=(m&&k===O&&O.visualViewport?O.visualViewport.width:k[D])-a.width,b*=f?1:-1)}var $,S=Object.assign({position:u},p&&Z),I=!0===g?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:P(i*s)/s||0,y:P(n*s)/s||0}}({x:b,y},x(r)):{x:b,y};return b=I.x,y=I.y,f?Object.assign({},S,(($={})[T]=E?"0":"",$[C]=A?"0":"",$.transform=(O.devicePixelRatio||1)<=1?"translate("+b+"px, "+y+"px)":"translate3d("+b+"px, "+y+"px, 0)",$)):Object.assign({},S,((e={})[T]=E?y+"px":"",e[C]=A?b+"px":"",e.transform="",e))}const et={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:S(e.placement),variation:J(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,tt(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,tt(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var it={passive:!0};const nt={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=x(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,it)})),a&&l.addEventListener("resize",i.update,it),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,it)})),a&&l.removeEventListener("resize",i.update,it)}},data:{}};var st={left:"right",right:"left",bottom:"top",top:"bottom"};function ot(t){return t.replace(/left|right|bottom|top/g,(function(t){return st[t]}))}var rt={start:"end",end:"start"};function at(t){return t.replace(/start|end/g,(function(t){return rt[t]}))}function lt(t){var e=x(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ct(t){return H(q(t)).left+lt(t).scrollLeft}function ht(t){var e=F(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function dt(t){return["html","body","#document"].indexOf(O(t))>=0?t.ownerDocument.body:L(t)&&ht(t)?t:dt(R(t))}function ut(t,e){var i;void 0===e&&(e=[]);var n=dt(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=x(n),r=s?[o].concat(o.visualViewport||[],ht(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(ut(R(r)))}function ft(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function pt(t,e,i){return e===d?ft(function(t,e){var i=x(t),n=q(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=M();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+ct(t),y:l}}(t,i)):k(e)?function(t,e){var i=H(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):ft(function(t){var e,i=q(t),n=lt(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=I(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=I(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ct(t),l=-n.scrollTop;return"rtl"===F(s||i).direction&&(a+=I(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(q(t)))}function gt(t){var e,r=t.reference,a=t.element,h=t.placement,d=h?S(h):null,u=h?J(h):null,f=r.x+r.width/2-a.width/2,p=r.y+r.height/2-a.height/2;switch(d){case i:e={x:f,y:r.y-a.height};break;case n:e={x:f,y:r.y+r.height};break;case s:e={x:r.x+r.width,y:p};break;case o:e={x:r.x-a.width,y:p};break;default:e={x:r.x,y:r.y}}var g=d?K(d):null;if(null!=g){var m="y"===g?"height":"width";switch(u){case l:e[g]=e[g]-(r[m]/2-a[m]/2);break;case c:e[g]=e[g]+(r[m]/2-a[m]/2)}}return e}function mt(t,e){void 0===e&&(e={});var o=e,r=o.placement,l=void 0===r?t.placement:r,c=o.strategy,p=void 0===c?t.strategy:c,g=o.boundary,m=void 0===g?h:g,_=o.rootBoundary,b=void 0===_?d:_,v=o.elementContext,y=void 0===v?u:v,w=o.altBoundary,A=void 0!==w&&w,E=o.padding,C=void 0===E?0:E,T=X("number"!=typeof C?C:U(C,a)),x=y===u?f:u,D=t.rects.popper,$=t.elements[A?x:y],S=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=ut(R(t)),i=["absolute","fixed"].indexOf(F(t).position)>=0&&L(t)?Y(t):t;return k(i)?e.filter((function(t){return k(t)&&W(t,i)&&"body"!==O(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=pt(t,i,n);return e.top=I(s.top,e.top),e.right=N(s.right,e.right),e.bottom=N(s.bottom,e.bottom),e.left=I(s.left,e.left),e}),pt(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(k($)?$:$.contextElement||q(t.elements.popper),m,b,p),P=H(t.elements.reference),j=gt({reference:P,element:D,strategy:"absolute",placement:l}),M=ft(Object.assign({},D,j)),B=y===u?M:P,z={top:S.top-B.top+T.top,bottom:B.bottom-S.bottom+T.bottom,left:S.left-B.left+T.left,right:B.right-S.right+T.right},V=t.modifiersData.offset;if(y===u&&V){var K=V[l];Object.keys(z).forEach((function(t){var e=[s,n].indexOf(t)>=0?1:-1,o=[i,n].indexOf(t)>=0?"y":"x";z[t]+=K[o]*e}))}return z}const _t={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,c=t.options,h=t.name;if(!e.modifiersData[h]._skip){for(var d=c.mainAxis,u=void 0===d||d,f=c.altAxis,m=void 0===f||f,_=c.fallbackPlacements,b=c.padding,v=c.boundary,y=c.rootBoundary,w=c.altBoundary,A=c.flipVariations,E=void 0===A||A,C=c.allowedAutoPlacements,T=e.options.placement,O=S(T),x=_||(O!==T&&E?function(t){if(S(t)===r)return[];var e=ot(t);return[at(t),e,at(e)]}(T):[ot(T)]),k=[T].concat(x).reduce((function(t,i){return t.concat(S(i)===r?function(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,l=i.flipVariations,c=i.allowedAutoPlacements,h=void 0===c?g:c,d=J(n),u=d?l?p:p.filter((function(t){return J(t)===d})):a,f=u.filter((function(t){return h.indexOf(t)>=0}));0===f.length&&(f=u);var m=f.reduce((function(e,i){return e[i]=mt(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[S(i)],e}),{});return Object.keys(m).sort((function(t,e){return m[t]-m[e]}))}(e,{placement:i,boundary:v,rootBoundary:y,padding:b,flipVariations:E,allowedAutoPlacements:C}):i)}),[]),L=e.rects.reference,D=e.rects.popper,$=new Map,I=!0,N=k[0],P=0;P=0,W=B?"width":"height",F=mt(e,{placement:j,boundary:v,rootBoundary:y,altBoundary:w,padding:b}),z=B?H?s:o:H?n:i;L[W]>D[W]&&(z=ot(z));var q=ot(z),R=[];if(u&&R.push(F[M]<=0),m&&R.push(F[z]<=0,F[q]<=0),R.every((function(t){return t}))){N=j,I=!1;break}$.set(j,R)}if(I)for(var V=function(t){var e=k.find((function(e){var i=$.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return N=e,"break"},Y=E?3:1;Y>0&&"break"!==V(Y);Y--);e.placement!==N&&(e.modifiersData[h]._skip=!0,e.placement=N,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function bt(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function vt(t){return[i,s,n,o].some((function(e){return t[e]>=0}))}const yt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=mt(e,{elementContext:"reference"}),a=mt(e,{altBoundary:!0}),l=bt(r,n),c=bt(a,s,o),h=vt(l),d=vt(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},wt={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,n=t.options,r=t.name,a=n.offset,l=void 0===a?[0,0]:a,c=g.reduce((function(t,n){return t[n]=function(t,e,n){var r=S(t),a=[o,i].indexOf(r)>=0?-1:1,l="function"==typeof n?n(Object.assign({},e,{placement:t})):n,c=l[0],h=l[1];return c=c||0,h=(h||0)*a,[o,s].indexOf(r)>=0?{x:h,y:c}:{x:c,y:h}}(n,e.rects,l),t}),{}),h=c[e.placement],d=h.x,u=h.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=d,e.modifiersData.popperOffsets.y+=u),e.modifiersData[r]=c}},At={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=gt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},Et={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,r=t.options,a=t.name,c=r.mainAxis,h=void 0===c||c,d=r.altAxis,u=void 0!==d&&d,f=r.boundary,p=r.rootBoundary,g=r.altBoundary,m=r.padding,_=r.tether,b=void 0===_||_,v=r.tetherOffset,y=void 0===v?0:v,w=mt(e,{boundary:f,rootBoundary:p,padding:m,altBoundary:g}),A=S(e.placement),E=J(e.placement),C=!E,T=K(A),O="x"===T?"y":"x",x=e.modifiersData.popperOffsets,k=e.rects.reference,L=e.rects.popper,D="function"==typeof y?y(Object.assign({},e.rects,{placement:e.placement})):y,$="number"==typeof D?{mainAxis:D,altAxis:D}:Object.assign({mainAxis:0,altAxis:0},D),P=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,j={x:0,y:0};if(x){if(h){var M,H="y"===T?i:o,W="y"===T?n:s,F="y"===T?"height":"width",z=x[T],q=z+w[H],R=z-w[W],V=b?-L[F]/2:0,X=E===l?k[F]:L[F],U=E===l?-L[F]:-k[F],G=e.elements.arrow,Z=b&&G?B(G):{width:0,height:0},tt=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},et=tt[H],it=tt[W],nt=Q(0,k[F],Z[F]),st=C?k[F]/2-V-nt-et-$.mainAxis:X-nt-et-$.mainAxis,ot=C?-k[F]/2+V+nt+it+$.mainAxis:U+nt+it+$.mainAxis,rt=e.elements.arrow&&Y(e.elements.arrow),at=rt?"y"===T?rt.clientTop||0:rt.clientLeft||0:0,lt=null!=(M=null==P?void 0:P[T])?M:0,ct=z+ot-lt,ht=Q(b?N(q,z+st-lt-at):q,z,b?I(R,ct):R);x[T]=ht,j[T]=ht-z}if(u){var dt,ut="x"===T?i:o,ft="x"===T?n:s,pt=x[O],gt="y"===O?"height":"width",_t=pt+w[ut],bt=pt-w[ft],vt=-1!==[i,o].indexOf(A),yt=null!=(dt=null==P?void 0:P[O])?dt:0,wt=vt?_t:pt-k[gt]-L[gt]-yt+$.altAxis,At=vt?pt+k[gt]+L[gt]-yt-$.altAxis:bt,Et=b&&vt?function(t,e,i){var n=Q(t,e,i);return n>i?i:n}(wt,pt,At):Q(b?wt:_t,pt,b?At:bt);x[O]=Et,j[O]=Et-pt}e.modifiersData[a]=j}},requiresIfExists:["offset"]};function Ct(t,e,i){void 0===i&&(i=!1);var n,s,o=L(e),r=L(e)&&function(t){var e=t.getBoundingClientRect(),i=P(e.width)/t.offsetWidth||1,n=P(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=q(e),l=H(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==O(e)||ht(a))&&(c=(n=e)!==x(n)&&L(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:lt(n)),L(e)?((h=H(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=ct(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function Tt(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Ot={placement:"bottom",modifiers:[],strategy:"absolute"};function xt(){for(var t=arguments.length,e=new Array(t),i=0;i{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},Nt=t=>{const e=It(t);return e&&document.querySelector(e)?e:null},Pt=t=>{const e=It(t);return e?document.querySelector(e):null},jt=t=>{t.dispatchEvent(new Event(St))},Mt=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),Ht=t=>Mt(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,Bt=t=>{if(!Mt(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},Wt=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),Ft=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?Ft(t.parentNode):null},zt=()=>{},qt=t=>{t.offsetHeight},Rt=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Vt=[],Yt=()=>"rtl"===document.documentElement.dir,Kt=t=>{var e;e=()=>{const e=Rt();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(Vt.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of Vt)t()})),Vt.push(e)):e()},Qt=t=>{"function"==typeof t&&t()},Xt=(t,e,i=!0)=>{if(!i)return void Qt(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let s=!1;const o=({target:i})=>{i===e&&(s=!0,e.removeEventListener(St,o),Qt(t))};e.addEventListener(St,o),setTimeout((()=>{s||jt(e)}),n)},Ut=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},Gt=/[^.]*(?=\..*)\.|.*/,Jt=/\..*/,Zt=/::\d+$/,te={};let ee=1;const ie={mouseenter:"mouseover",mouseleave:"mouseout"},ne=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function se(t,e){return e&&`${e}::${ee++}`||t.uidEvent||ee++}function oe(t){const e=se(t);return t.uidEvent=e,te[e]=te[e]||{},te[e]}function re(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function ae(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=de(t);return ne.has(o)||(o=t),[n,s,o]}function le(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=ae(e,i,n);if(e in ie){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=oe(t),c=l[a]||(l[a]={}),h=re(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=se(r,e.replace(Gt,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return fe(s,{delegateTarget:r}),n.oneOff&&ue.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return fe(n,{delegateTarget:t}),i.oneOff&&ue.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function ce(t,e,i,n,s){const o=re(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function he(t,e,i,n){const s=e[i]||{};for(const o of Object.keys(s))if(o.includes(n)){const n=s[o];ce(t,e,i,n.callable,n.delegationSelector)}}function de(t){return t=t.replace(Jt,""),ie[t]||t}const ue={on(t,e,i,n){le(t,e,i,n,!1)},one(t,e,i,n){le(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=ae(e,i,n),a=r!==e,l=oe(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))he(t,l,i,e.slice(1));for(const i of Object.keys(c)){const n=i.replace(Zt,"");if(!a||e.includes(n)){const e=c[i];ce(t,l,r,e.callable,e.delegationSelector)}}}else{if(!Object.keys(c).length)return;ce(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=Rt();let s=null,o=!0,r=!0,a=!1;e!==de(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());let l=new Event(e,{bubbles:o,cancelable:!0});return l=fe(l,i),a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function fe(t,e){for(const[i,n]of Object.entries(e||{}))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}const pe=new Map,ge={set(t,e,i){pe.has(t)||pe.set(t,new Map);const n=pe.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>pe.has(t)&&pe.get(t).get(e)||null,remove(t,e){if(!pe.has(t))return;const i=pe.get(t);i.delete(e),0===i.size&&pe.delete(t)}};function me(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function _e(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const be={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${_e(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${_e(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=me(t.dataset[n])}return e},getDataAttribute:(t,e)=>me(t.getAttribute(`data-bs-${_e(e)}`))};class ve{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=Mt(e)?be.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...Mt(e)?be.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const n of Object.keys(e)){const s=e[n],o=t[n],r=Mt(o)?"element":null==(i=o)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class ye extends ve{constructor(t,e){super(),(t=Ht(t))&&(this._element=t,this._config=this._getConfig(e),ge.set(this._element,this.constructor.DATA_KEY,this))}dispose(){ge.remove(this._element,this.constructor.DATA_KEY),ue.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){Xt(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return ge.get(Ht(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.2.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const we=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;ue.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),Wt(this))return;const s=Pt(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},Ae=".bs.alert",Ee=`close${Ae}`,Ce=`closed${Ae}`;class Te extends ye{static get NAME(){return"alert"}close(){if(ue.trigger(this._element,Ee).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),ue.trigger(this._element,Ce),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Te.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}we(Te,"close"),Kt(Te);const Oe='[data-bs-toggle="button"]';class xe extends ye{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=xe.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}ue.on(document,"click.bs.button.data-api",Oe,(t=>{t.preventDefault();const e=t.target.closest(Oe);xe.getOrCreateInstance(e).toggle()})),Kt(xe);const ke={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!Wt(t)&&Bt(t)))}},Le=".bs.swipe",De=`touchstart${Le}`,$e=`touchmove${Le}`,Se=`touchend${Le}`,Ie=`pointerdown${Le}`,Ne=`pointerup${Le}`,Pe={endCallback:null,leftCallback:null,rightCallback:null},je={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class Me extends ve{constructor(t,e){super(),this._element=t,t&&Me.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Pe}static get DefaultType(){return je}static get NAME(){return"swipe"}dispose(){ue.off(this._element,Le)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),Qt(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&Qt(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(ue.on(this._element,Ie,(t=>this._start(t))),ue.on(this._element,Ne,(t=>this._end(t))),this._element.classList.add("pointer-event")):(ue.on(this._element,De,(t=>this._start(t))),ue.on(this._element,$e,(t=>this._move(t))),ue.on(this._element,Se,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const He=".bs.carousel",Be=".data-api",We="next",Fe="prev",ze="left",qe="right",Re=`slide${He}`,Ve=`slid${He}`,Ye=`keydown${He}`,Ke=`mouseenter${He}`,Qe=`mouseleave${He}`,Xe=`dragstart${He}`,Ue=`load${He}${Be}`,Ge=`click${He}${Be}`,Je="carousel",Ze="active",ti=".active",ei=".carousel-item",ii=ti+ei,ni={ArrowLeft:qe,ArrowRight:ze},si={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},oi={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class ri extends ye{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=ke.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===Je&&this.cycle()}static get Default(){return si}static get DefaultType(){return oi}static get NAME(){return"carousel"}next(){this._slide(We)}nextWhenVisible(){!document.hidden&&Bt(this._element)&&this.next()}prev(){this._slide(Fe)}pause(){this._isSliding&&jt(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?ue.one(this._element,Ve,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void ue.one(this._element,Ve,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?We:Fe;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&ue.on(this._element,Ye,(t=>this._keydown(t))),"hover"===this._config.pause&&(ue.on(this._element,Ke,(()=>this.pause())),ue.on(this._element,Qe,(()=>this._maybeEnableCycle()))),this._config.touch&&Me.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of ke.find(".carousel-item img",this._element))ue.on(t,Xe,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ze)),rightCallback:()=>this._slide(this._directionToOrder(qe)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new Me(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=ni[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=ke.findOne(ti,this._indicatorsElement);e.classList.remove(Ze),e.removeAttribute("aria-current");const i=ke.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(Ze),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===We,s=e||Ut(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>ue.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(Re).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),qt(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(Ze),i.classList.remove(Ze,c,l),this._isSliding=!1,r(Ve)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return ke.findOne(ii,this._element)}_getItems(){return ke.find(ei,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return Yt()?t===ze?Fe:We:t===ze?We:Fe}_orderToDirection(t){return Yt()?t===Fe?ze:qe:t===Fe?qe:ze}static jQueryInterface(t){return this.each((function(){const e=ri.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}ue.on(document,Ge,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=Pt(this);if(!e||!e.classList.contains(Je))return;t.preventDefault();const i=ri.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===be.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),ue.on(window,Ue,(()=>{const t=ke.find('[data-bs-ride="carousel"]');for(const e of t)ri.getOrCreateInstance(e)})),Kt(ri);const ai=".bs.collapse",li=`show${ai}`,ci=`shown${ai}`,hi=`hide${ai}`,di=`hidden${ai}`,ui=`click${ai}.data-api`,fi="show",pi="collapse",gi="collapsing",mi=`:scope .${pi} .${pi}`,_i='[data-bs-toggle="collapse"]',bi={parent:null,toggle:!0},vi={parent:"(null|element)",toggle:"boolean"};class yi extends ye{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=ke.find(_i);for(const t of i){const e=Nt(t),i=ke.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return bi}static get DefaultType(){return vi}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>yi.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(ue.trigger(this._element,li).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(pi),this._element.classList.add(gi),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(gi),this._element.classList.add(pi,fi),this._element.style[e]="",ue.trigger(this._element,ci)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(ue.trigger(this._element,hi).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,qt(this._element),this._element.classList.add(gi),this._element.classList.remove(pi,fi);for(const t of this._triggerArray){const e=Pt(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(gi),this._element.classList.add(pi),ue.trigger(this._element,di)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(fi)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=Ht(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(_i);for(const e of t){const t=Pt(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=ke.find(mi,this._config.parent);return ke.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=yi.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}ue.on(document,ui,_i,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=Nt(this),i=ke.find(e);for(const t of i)yi.getOrCreateInstance(t,{toggle:!1}).toggle()})),Kt(yi);const wi="dropdown",Ai=".bs.dropdown",Ei=".data-api",Ci="ArrowUp",Ti="ArrowDown",Oi=`hide${Ai}`,xi=`hidden${Ai}`,ki=`show${Ai}`,Li=`shown${Ai}`,Di=`click${Ai}${Ei}`,$i=`keydown${Ai}${Ei}`,Si=`keyup${Ai}${Ei}`,Ii="show",Ni='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Pi=`${Ni}.${Ii}`,ji=".dropdown-menu",Mi=Yt()?"top-end":"top-start",Hi=Yt()?"top-start":"top-end",Bi=Yt()?"bottom-end":"bottom-start",Wi=Yt()?"bottom-start":"bottom-end",Fi=Yt()?"left-start":"right-start",zi=Yt()?"right-start":"left-start",qi={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Ri={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Vi extends ye{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=ke.next(this._element,ji)[0]||ke.prev(this._element,ji)[0]||ke.findOne(ji,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return qi}static get DefaultType(){return Ri}static get NAME(){return wi}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Wt(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!ue.trigger(this._element,ki,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))ue.on(t,"mouseover",zt);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Ii),this._element.classList.add(Ii),ue.trigger(this._element,Li,t)}}hide(){if(Wt(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!ue.trigger(this._element,Oi,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))ue.off(t,"mouseover",zt);this._popper&&this._popper.destroy(),this._menu.classList.remove(Ii),this._element.classList.remove(Ii),this._element.setAttribute("aria-expanded","false"),be.removeDataAttribute(this._menu,"popper"),ue.trigger(this._element,xi,t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!Mt(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${wi.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===e)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=this._parent:Mt(this._config.reference)?t=Ht(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const i=this._getPopperConfig();this._popper=Dt(t,this._menu,i)}_isShown(){return this._menu.classList.contains(Ii)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return Fi;if(t.classList.contains("dropstart"))return zi;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?Hi:Mi:e?Wi:Bi}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(be.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=ke.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>Bt(t)));i.length&&Ut(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=Vi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=ke.find(Pi);for(const i of e){const e=Vi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ci,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ni)?this:ke.prev(this,Ni)[0]||ke.next(this,Ni)[0]||ke.findOne(Ni,t.delegateTarget.parentNode),o=Vi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}ue.on(document,$i,Ni,Vi.dataApiKeydownHandler),ue.on(document,$i,ji,Vi.dataApiKeydownHandler),ue.on(document,Di,Vi.clearMenus),ue.on(document,Si,Vi.clearMenus),ue.on(document,Di,Ni,(function(t){t.preventDefault(),Vi.getOrCreateInstance(this).toggle()})),Kt(Vi);const Yi=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Ki=".sticky-top",Qi="padding-right",Xi="margin-right";class Ui{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Qi,(e=>e+t)),this._setElementAttributes(Yi,Qi,(e=>e+t)),this._setElementAttributes(Ki,Xi,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Qi),this._resetElementAttributes(Yi,Qi),this._resetElementAttributes(Ki,Xi)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&be.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=be.getDataAttribute(t,e);null!==i?(be.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(Mt(t))e(t);else for(const i of ke.find(t,this._element))e(i)}}const Gi="backdrop",Ji="show",Zi=`mousedown.bs.${Gi}`,tn={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},en={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class nn extends ve{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return tn}static get DefaultType(){return en}static get NAME(){return Gi}show(t){if(!this._config.isVisible)return void Qt(t);this._append();const e=this._getElement();this._config.isAnimated&&qt(e),e.classList.add(Ji),this._emulateAnimation((()=>{Qt(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ji),this._emulateAnimation((()=>{this.dispose(),Qt(t)}))):Qt(t)}dispose(){this._isAppended&&(ue.off(this._element,Zi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=Ht(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),ue.on(t,Zi,(()=>{Qt(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){Xt(t,this._getElement(),this._config.isAnimated)}}const sn=".bs.focustrap",on=`focusin${sn}`,rn=`keydown.tab${sn}`,an="backward",ln={autofocus:!0,trapElement:null},cn={autofocus:"boolean",trapElement:"element"};class hn extends ve{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return ln}static get DefaultType(){return cn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),ue.off(document,sn),ue.on(document,on,(t=>this._handleFocusin(t))),ue.on(document,rn,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,ue.off(document,sn))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=ke.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===an?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?an:"forward")}}const dn=".bs.modal",un=`hide${dn}`,fn=`hidePrevented${dn}`,pn=`hidden${dn}`,gn=`show${dn}`,mn=`shown${dn}`,_n=`resize${dn}`,bn=`click.dismiss${dn}`,vn=`mousedown.dismiss${dn}`,yn=`keydown.dismiss${dn}`,wn=`click${dn}.data-api`,An="modal-open",En="show",Cn="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},On={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class xn extends ye{constructor(t,e){super(t,e),this._dialog=ke.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new Ui,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return On}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||ue.trigger(this._element,gn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(An),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(ue.trigger(this._element,un).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(En),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){for(const t of[window,this._dialog])ue.off(t,dn);this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new nn({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new hn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=ke.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),qt(this._element),this._element.classList.add(En),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,ue.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){ue.on(this._element,yn,(t=>{if("Escape"===t.key)return this._config.keyboard?(t.preventDefault(),void this.hide()):void this._triggerBackdropTransition()})),ue.on(window,_n,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),ue.on(this._element,vn,(t=>{ue.one(this._element,bn,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(An),this._resetAdjustments(),this._scrollBar.reset(),ue.trigger(this._element,pn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(ue.trigger(this._element,fn).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(Cn)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(Cn),this._queueCallback((()=>{this._element.classList.remove(Cn),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=Yt()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=Yt()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=xn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}ue.on(document,wn,'[data-bs-toggle="modal"]',(function(t){const e=Pt(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),ue.one(e,gn,(t=>{t.defaultPrevented||ue.one(e,pn,(()=>{Bt(this)&&this.focus()}))}));const i=ke.findOne(".modal.show");i&&xn.getInstance(i).hide(),xn.getOrCreateInstance(e).toggle(this)})),we(xn),Kt(xn);const kn=".bs.offcanvas",Ln=".data-api",Dn=`load${kn}${Ln}`,$n="show",Sn="showing",In="hiding",Nn=".offcanvas.show",Pn=`show${kn}`,jn=`shown${kn}`,Mn=`hide${kn}`,Hn=`hidePrevented${kn}`,Bn=`hidden${kn}`,Wn=`resize${kn}`,Fn=`click${kn}${Ln}`,zn=`keydown.dismiss${kn}`,qn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Vn extends ye{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return qn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||ue.trigger(this._element,Pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new Ui).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Sn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add($n),this._element.classList.remove(Sn),ue.trigger(this._element,jn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(ue.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(In),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove($n,In),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new Ui).reset(),ue.trigger(this._element,Bn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new nn({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():ue.trigger(this._element,Hn)}:null})}_initializeFocusTrap(){return new hn({trapElement:this._element})}_addEventListeners(){ue.on(this._element,zn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():ue.trigger(this._element,Hn))}))}static jQueryInterface(t){return this.each((function(){const e=Vn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}ue.on(document,Fn,'[data-bs-toggle="offcanvas"]',(function(t){const e=Pt(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this))return;ue.one(e,Bn,(()=>{Bt(this)&&this.focus()}));const i=ke.findOne(Nn);i&&i!==e&&Vn.getInstance(i).hide(),Vn.getOrCreateInstance(e).toggle(this)})),ue.on(window,Dn,(()=>{for(const t of ke.find(Nn))Vn.getOrCreateInstance(t).show()})),ue.on(window,Wn,(()=>{for(const t of ke.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Vn.getOrCreateInstance(t).hide()})),we(Vn),Kt(Vn);const Yn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Kn=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Qn=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Yn.has(i)||Boolean(Kn.test(t.nodeValue)||Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Un={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Gn={allowList:Un,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"

  • 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 beI}57?ti7Ly<=xg6vYF1HMyL-Pu~0w&79?9 literal 0 HcmV?d00001 diff --git a/_images/service_stats.png b/_images/service_stats.png new file mode 100644 index 0000000000000000000000000000000000000000..7ce72428634e1da53091275d102def239b3f7a59 GIT binary patch literal 26817 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�_G;qyt_Pzz3pj+|%?|TtZZ0Im6aPn=$;vw5 z@kcfbt{F*@AbvLmN`Cvhl@Tav%0WvydgYItJ}Syp@&B{yCwl^Q9UTsie~ar;9-i0K L&_R@_Sw;L0pfa*j literal 0 HcmV?d00001 diff --git a/_images/user_actor.png b/_images/user_actor.png new file mode 100644 index 0000000000000000000000000000000000000000..220270aafb393899bdee784e107ebbad4d78b4b7 GIT binary patch literal 72168 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 0: + new_uploaded_file_dir = UPLOAD_FILES_DIR / str(uuid4()) + new_uploaded_file_dir.mkdir() + + for file in uploaded_files: + file_path = new_uploaded_file_dir / file.name + with open(file_path, "wb") as uploaded_file_descriptor: + uploaded_file_descriptor.write(file.read()) + + _add_benchmark(file_path, upload_container) + + with upload_container.form("upload_form", clear_on_submit=True): + st.file_uploader( + "Upload benchmark results", accept_multiple_files=True, type="json", key="benchmark_file_uploader" + ) + st.form_submit_button("Submit", on_click=process_uploaded_files) + + +############################################################################### +# View tab +# Allows viewing existing benchmarks +############################################################################### + +with view_tab: + set_choice, benchmark_choice, compare = st.columns([3, 3, 1]) + + sets = { + f"{benchmark['name']} ({benchmark['uuid']})": benchmark for benchmark in st.session_state["benchmarks"].values() + } + benchmark_set = set_choice.selectbox("Benchmark set", sets.keys()) + + if benchmark_set is None: + set_choice.warning("No benchmark sets available") + st.stop() + + selected_set = sets[benchmark_set] + + set_choice.text("Set description:") + set_choice.markdown(selected_set["description"]) + + benchmarks = {f"{benchmark['name']} ({benchmark['uuid']})": benchmark for benchmark in selected_set["benchmarks"]} + + benchmark = benchmark_choice.selectbox("Benchmark", benchmarks.keys()) + + if benchmark is None: + benchmark_choice.warning("No benchmarks in the set") + st.stop() + + selected_benchmark = benchmarks[benchmark] + + benchmark_choice.text("Benchmark description:") + benchmark_choice.markdown(selected_benchmark["description"]) + + with st.expander("Benchmark stats"): + benchmark_stats = { + stat: selected_benchmark[stat] + for stat in ( + "db_factory", + "benchmark_config", + ) + } + + st.json(benchmark_stats) + + if not selected_benchmark["success"]: + exc_info = selected_benchmark["result"] + + st.warning(f"**{exc_info['type']}**: {exc_info['msg']}\n\nTraceback:\n\n```\n{exc_info['traceback']}\n```") + else: + add_metrics(st.container(), selected_benchmark) + + compare_item = { + "benchmark_set": benchmark_set, + "benchmark": benchmark, + "write": selected_benchmark["average_results"]["pretty_write"], + "read": selected_benchmark["average_results"]["pretty_read"], + "update": selected_benchmark["average_results"]["pretty_update"], + "read+update": selected_benchmark["average_results"]["pretty_read+update"], + } + + def add_results_to_compare_tab(): + if compare_item not in st.session_state["compare"]: + st.session_state["compare"].append(compare_item) + else: + st.session_state["compare"].remove(compare_item) + + item_in_compare = compare_item not in st.session_state["compare"] + + compare.button( + "Add to Compare" if item_in_compare else "Remove from Compare", + on_click=add_results_to_compare_tab, + help="Add current benchmark to the 'Compare' tab." + if item_in_compare + else "Remove current benchmark from the 'Compare' tab.", + ) + + select_graph, graph = st.columns([1, 3]) + + average_results = selected_benchmark["average_results"] + + graphs = { + "Write": selected_benchmark["result"]["write_times"], + "Read (grouped by contex_num)": average_results["read_times_grouped_by_context_num"], + "Read (grouped by dialog_len)": average_results["read_times_grouped_by_dialog_len"], + "Update (grouped by contex_num)": average_results["update_times_grouped_by_context_num"], + "Update (grouped by dialog_len)": average_results["update_times_grouped_by_dialog_len"], + } + + selected_graph = select_graph.selectbox("Select graph to display", graphs.keys()) + + graph_data = graphs[selected_graph] + + if isinstance(graph_data, dict): + data = pd.DataFrame({"dialog_len": graph_data.keys(), "time": graph_data.values()}) + else: + data = pd.DataFrame({"context_num": range(len(graph_data)), "time": graph_data}) + + chart = ( + alt.Chart(data) + .mark_circle() + .encode( + x=alt.X( + "dialog_len:Q" if isinstance(graph_data, dict) else "context_num:Q", scale=alt.Scale(zero=False) + ), + y="time:Q", + ) + .interactive() + ) + + graph.altair_chart(chart, use_container_width=True) + + +############################################################################### +# Compare tab +# Allows viewing existing benchmarks +############################################################################### + +with compare_tab: + df = pd.DataFrame(st.session_state["compare"]) + + st.info("Here you can compare metrics of different benchmarks. Add them here via the 'View' tab.") + + if not df.empty: + st.dataframe( + df.style.highlight_min( + axis=0, subset=["write", "read", "update", "read+update"], props="background-color:green;" + ).highlight_max(axis=0, subset=["write", "read", "update", "read+update"], props="background-color:red;") + ) + else: + st.warning("Currently, there are no benchmarks to compare.") + +############################################################################### +# Mass compare tab +# Allows comparing all benchmarks inside a single set +############################################################################### + +with mass_compare_tab: + st.info("Here you can compare benchmarks inside of a specific set.") + + sets = { + f"{benchmark_set['name']} ({benchmark_set['uuid']})": benchmark_set + for benchmark_set in st.session_state["benchmarks"].values() + } + benchmark_set = st.selectbox("Benchmark set", sets.keys(), key="mass_compare_selectbox") + + if benchmark_set is None: + st.warning("No benchmark sets available") + st.stop() + + selected_set = sets[benchmark_set] + + compare_items = [] + + for selected_benchmark in selected_set["benchmarks"]: + if selected_benchmark["success"]: + compare_items.append( + { + "benchmark": f"{selected_benchmark['name']} ({selected_benchmark['uuid']})", + "write": selected_benchmark["average_results"]["pretty_write"], + "read": selected_benchmark["average_results"]["pretty_read"], + "update": selected_benchmark["average_results"]["pretty_update"], + "read+update": selected_benchmark["average_results"]["pretty_read+update"], + } + ) + + df = pd.DataFrame(compare_items) + + if not df.empty: + st.dataframe( + df.style.highlight_min( + axis=0, subset=["write", "read", "update", "read+update"], props="background-color:green;" + ).highlight_max(axis=0, subset=["write", "read", "update", "read+update"], props="background-color:red;") + ) diff --git a/_modules/dff/context_storages/database.html b/_modules/dff/context_storages/database.html new file mode 100644 index 0000000000..6692eb5498 --- /dev/null +++ b/_modules/dff/context_storages/database.html @@ -0,0 +1,843 @@ + + + + + + + + + + dff.context_storages.database — DFF 0.6.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +